ARG TAG=1.23

FROM golang:$TAG

WORKDIR /app

# Install packages
RUN apt update && sudo apt upgrade \
    && \
    set -eux; \
    # Packages to install
    apt install -y \
    git \
    jq \
    rsync \
    nodejs \
    npm \
    # Needed for headless chrome/tests
    libglib2.0-dev \
    libnss3-dev \
    libdbus-1-dev \
    libatk1.0-0 \
    libatk-bridge2.0-0 \
    libcups2 \
    libxcomposite-dev \
    libxdamage1 \
    libxrandr2 \
    libgbm-dev \
    libxkbcommon-x11-0 \
    libpangocairo-1.0-0 \
    libasound2 \
    && \
    # Clean out directories that don't need to be part of the image
    rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/* \
    && \
    # Install node packages \
    npm install -g npm@^10.0.0 \
    npm install -g pnpm \
    && \
    # Install needed Go tooling \
    go install github.com/go-task/task/v3/cmd/task@latest \
    && \
    go install github.com/a-h/templ/cmd/templ@latest \
    && \
    go install github.com/valyala/quicktemplate/qtc@latest \
    && \
    # Install flyctl cli \
    curl -L https://fly.io/install.sh | sh \
    && \
    ln -s /root/.fly/bin/flyctl /usr/local/bin/fly \
    && \
    # Make this a safe .git directory
    git config --global --add safe.directory /app

ENTRYPOINT ["/bin/sh"]