blob: f9e1ae879ebcd577fa8cd747b6512907a166e410 [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 \
Josh Bleecher Snyderc7cdd772025-05-29 19:43:10 +000028 libxext6 libxi6 libxrandr2 libgbm1 libgtk-3-0 \
29 fonts-noto-color-emoji fonts-symbola && \
30 fc-cache -f -v && \
Philip Zeyliger9df94b52025-05-18 03:43:14 +000031 apt-get clean && \
32 rm -rf /var/lib/apt/lists/* && \
33 rm -rf /usr/share/{doc,doc-base,info,lintian,man,groff,locale,zoneinfo}/*
34
Philip Zeyligera442ce32025-05-28 02:48:26 +000035# Install Go 1.24
36ENV GO_VERSION=1.24.3
37ENV GOROOT=/usr/local/go
38ENV GOPATH=/go
39ENV PATH=$GOROOT/bin:$GOPATH/bin:$PATH
40
41RUN ARCH=$(uname -m) && \
42 case $ARCH in \
43 x86_64) GOARCH=amd64 ;; \
44 aarch64) GOARCH=arm64 ;; \
45 *) echo "Unsupported architecture: $ARCH" && exit 1 ;; \
46 esac && \
47 wget -O go.tar.gz "https://golang.org/dl/go${GO_VERSION}.linux-${GOARCH}.tar.gz" && \
48 tar -C /usr/local -xzf go.tar.gz && \
49 rm go.tar.gz
50
51# Create GOPATH directory
52RUN mkdir -p "$GOPATH/src" "$GOPATH/bin" && chmod -R 755 "$GOPATH"
Philip Zeyliger9df94b52025-05-18 03:43:14 +000053
54# While these binaries install generally useful supporting packages,
55# the specific versions are rarely what a user wants so there is no
56# point polluting the base image module with them.
57
58RUN go install golang.org/x/tools/cmd/goimports@latest; \
59 go install golang.org/x/tools/gopls@latest; \
60 go install mvdan.cc/gofumpt@latest; \
61 go clean -cache -testcache -modcache
62
Philip Zeyliger95006172025-05-28 20:05:46 -070063# Copy the self-contained Chrome bundle from chromedp/headless-shell
64COPY --from=chrome /headless-shell /headless-shell
65ENV PATH="/headless-shell:${PATH}"
66
Philip Zeyliger9df94b52025-05-18 03:43:14 +000067ENV GOTOOLCHAIN=auto
68ENV SKETCH=1
69
70RUN mkdir -p /root/.cache/sketch/webui