blob: 73fecdab65cb86bd157c880b8b3b08c54aa14350 [file] [log] [blame]
Philip Zeyliger95006172025-05-28 20:05:46 -07001# Stage 1: Get Chrome/Chromium from chromedp/headless-shell
2FROM docker.io/chromedp/headless-shell:stable AS chrome
3
4# Stage 2: Main application image
Philip Zeyligera442ce32025-05-28 02:48:26 +00005FROM ubuntu:24.04
Philip Zeyliger9df94b52025-05-18 03:43:14 +00006
7# Switch from dash to bash by default.
8SHELL ["/bin/bash", "-euxo", "pipefail", "-c"]
9
10# attempt to keep package installs lean
11RUN printf '%s\n' \
12 'path-exclude=/usr/share/man/*' \
13 'path-exclude=/usr/share/doc/*' \
14 'path-exclude=/usr/share/doc-base/*' \
15 'path-exclude=/usr/share/info/*' \
16 'path-exclude=/usr/share/locale/*' \
17 'path-exclude=/usr/share/groff/*' \
18 'path-exclude=/usr/share/lintian/*' \
19 'path-exclude=/usr/share/zoneinfo/*' \
20 > /etc/dpkg/dpkg.cfg.d/01_nodoc
21
Philip Zeyliger95006172025-05-28 20:05:46 -070022# Install system packages (removed chromium, will use headless-shell instead)
Philip Zeyliger9df94b52025-05-18 03:43:14 +000023RUN apt-get update; \
24 apt-get install -y --no-install-recommends \
Philip Zeyligera442ce32025-05-28 02:48:26 +000025 ca-certificates wget \
Philip Zeyliger95006172025-05-28 20:05:46 -070026 git jq sqlite3 npm nodejs gh ripgrep fzf python3 curl vim lsof iproute2 less \
27 libglib2.0-0 libnss3 libx11-6 libxcomposite1 libxdamage1 \
28 libxext6 libxi6 libxrandr2 libgbm1 libgtk-3-0 && \
Philip Zeyliger9df94b52025-05-18 03:43:14 +000029 apt-get clean && \
30 rm -rf /var/lib/apt/lists/* && \
31 rm -rf /usr/share/{doc,doc-base,info,lintian,man,groff,locale,zoneinfo}/*
32
Philip Zeyligera442ce32025-05-28 02:48:26 +000033# Install Go 1.24
34ENV GO_VERSION=1.24.3
35ENV GOROOT=/usr/local/go
36ENV GOPATH=/go
37ENV PATH=$GOROOT/bin:$GOPATH/bin:$PATH
38
39RUN ARCH=$(uname -m) && \
40 case $ARCH in \
41 x86_64) GOARCH=amd64 ;; \
42 aarch64) GOARCH=arm64 ;; \
43 *) echo "Unsupported architecture: $ARCH" && exit 1 ;; \
44 esac && \
45 wget -O go.tar.gz "https://golang.org/dl/go${GO_VERSION}.linux-${GOARCH}.tar.gz" && \
46 tar -C /usr/local -xzf go.tar.gz && \
47 rm go.tar.gz
48
49# Create GOPATH directory
50RUN mkdir -p "$GOPATH/src" "$GOPATH/bin" && chmod -R 755 "$GOPATH"
Philip Zeyliger9df94b52025-05-18 03:43:14 +000051
52# While these binaries install generally useful supporting packages,
53# the specific versions are rarely what a user wants so there is no
54# point polluting the base image module with them.
55
56RUN go install golang.org/x/tools/cmd/goimports@latest; \
57 go install golang.org/x/tools/gopls@latest; \
58 go install mvdan.cc/gofumpt@latest; \
59 go clean -cache -testcache -modcache
60
Philip Zeyliger95006172025-05-28 20:05:46 -070061# Copy the self-contained Chrome bundle from chromedp/headless-shell
62COPY --from=chrome /headless-shell /headless-shell
63ENV PATH="/headless-shell:${PATH}"
64
Philip Zeyliger9df94b52025-05-18 03:43:14 +000065ENV GOTOOLCHAIN=auto
66ENV SKETCH=1
67
68RUN mkdir -p /root/.cache/sketch/webui