dockerimg: change base container image to ubuntu 24.04 with go 1.24.3
Changes the base Docker image from golang:1.24-bookworm (Debian 12) to
ubuntu:24.04 (Noble Numbat - current LTS) and installs Go 1.24.3 manually.
Changes include:
1. Updated FROM ubuntu:24.04 to use current Ubuntu LTS instead of Debian
2. Added ca-certificates and wget for Go downloads
3. Manual Go 1.24.3 installation from official golang.org tarball
4. Proper GOROOT, GOPATH, and PATH environment setup
5. Created GOPATH directory structure
This provides a cleaner foundation based on the current Ubuntu LTS
while maintaining full Go development capabilities. The manual Go
installation gives more control over the exact Go version used and
eliminates dependency on the golang base image layers.
Co-Authored-By: sketch <hello@sketch.dev>
Change-ID: s0bc05e04441c24a6k
diff --git a/dockerimg/testdata/testcreatedockerfile_empty_repo.httprr b/dockerimg/testdata/testcreatedockerfile_empty_repo.httprr
index 6393ae9..cd9e4c2 100644
--- a/dockerimg/testdata/testcreatedockerfile_empty_repo.httprr
+++ b/dockerimg/testdata/testcreatedockerfile_empty_repo.httprr
@@ -1,9 +1,9 @@
httprr trace v1
-3829 1654
+4519 1749
POST https://api.anthropic.com/v1/messages HTTP/1.1
Host: api.anthropic.com
User-Agent: Go-http-client/1.1
-Content-Length: 3632
+Content-Length: 4322
Anthropic-Version: 2023-06-01
Content-Type: application/json
@@ -15,7 +15,7 @@
"content": [
{
"type": "text",
- "text": "\nCall the dockerfile tool to create a Dockerfile.\nThe parameters to dockerfile fill out the From and ExtraCmds\ntemplate variables in the following Go template:\n\n```\nFROM golang:1.24-bookworm\n\n# Switch from dash to bash by default.\nSHELL [\"/bin/bash\", \"-euxo\", \"pipefail\", \"-c\"]\n\n# attempt to keep package installs lean\nRUN printf '%s\\n' \\\n 'path-exclude=/usr/share/man/*' \\\n 'path-exclude=/usr/share/doc/*' \\\n 'path-exclude=/usr/share/doc-base/*' \\\n 'path-exclude=/usr/share/info/*' \\\n 'path-exclude=/usr/share/locale/*' \\\n 'path-exclude=/usr/share/groff/*' \\\n 'path-exclude=/usr/share/lintian/*' \\\n 'path-exclude=/usr/share/zoneinfo/*' \\\n \u003e /etc/dpkg/dpkg.cfg.d/01_nodoc\n\nRUN apt-get update; \\\n\tapt-get install -y --no-install-recommends \\\n\t\tgit jq sqlite3 npm nodejs gh ripgrep fzf python3 curl vim chromium lsof iproute2 less \u0026\u0026 \\\n\tapt-get clean \u0026\u0026 \\\n\trm -rf /var/lib/apt/lists/* \u0026\u0026 \\\n\trm -rf /usr/share/{doc,doc-base,info,lintian,man,groff,locale,zoneinfo}/*\n\nENV PATH=\"$GOPATH/bin:$PATH\"\n\n# While these binaries install generally useful supporting packages,\n# the specific versions are rarely what a user wants so there is no\n# point polluting the base image module with them.\n\nRUN go install golang.org/x/tools/cmd/goimports@latest; \\\n\tgo install golang.org/x/tools/gopls@latest; \\\n\tgo install mvdan.cc/gofumpt@latest; \\\n\tgo clean -cache -testcache -modcache\n\nENV GOTOOLCHAIN=auto\nENV SKETCH=1\n\nRUN mkdir -p /root/.cache/sketch/webui\nARG GIT_USER_EMAIL\nARG GIT_USER_NAME\n\nRUN git config --global user.email \"$GIT_USER_EMAIL\" \u0026\u0026 \\\n git config --global user.name \"$GIT_USER_NAME\" \u0026\u0026 \\\n git config --global http.postBuffer 524288000\n\nLABEL sketch_context=\"{{.InitFilesHash}}\"\nCOPY . /app\nRUN rm -f /app/tmp-sketch-dockerfile\n\nWORKDIR /app{{.SubDir}}\nRUN if [ -f go.mod ]; then go mod download; fi\n\n# Switch to lenient shell so we are more likely to get past failing extra_cmds.\nSHELL [\"/bin/bash\", \"-uo\", \"pipefail\", \"-c\"]\n\n{{.ExtraCmds}}\n\n# Switch back to strict shell after extra_cmds.\nSHELL [\"/bin/bash\", \"-euxo\", \"pipefail\", \"-c\"]\n\nCMD [\"/bin/sketch\"]\n\n```\n\nIn particular:\n- Assume it is primarily a Go project.\n- Python env setup is challenging and often no required, so any RUN commands involving python tooling should be written to let docker build continue if there is a failure.\n- Include any tools particular to this repository that can be inferred from the given context.\n- Append || true to any apt-get install commands in case the package does not exist.\n- MINIMIZE the number of extra_cmds generated. Straightforward environments do not need any.\n- Do NOT expose any ports.\n- Do NOT generate any CMD or ENTRYPOINT extra commands.\n"
+ "text": "\nCall the dockerfile tool to create a Dockerfile.\nThe parameters to dockerfile fill out the From and ExtraCmds\ntemplate variables in the following Go template:\n\n```\nFROM ubuntu:24.04\n\n# Switch from dash to bash by default.\nSHELL [\"/bin/bash\", \"-euxo\", \"pipefail\", \"-c\"]\n\n# attempt to keep package installs lean\nRUN printf '%s\\n' \\\n 'path-exclude=/usr/share/man/*' \\\n 'path-exclude=/usr/share/doc/*' \\\n 'path-exclude=/usr/share/doc-base/*' \\\n 'path-exclude=/usr/share/info/*' \\\n 'path-exclude=/usr/share/locale/*' \\\n 'path-exclude=/usr/share/groff/*' \\\n 'path-exclude=/usr/share/lintian/*' \\\n 'path-exclude=/usr/share/zoneinfo/*' \\\n \u003e /etc/dpkg/dpkg.cfg.d/01_nodoc\n\n# Install system packages including ca-certificates for Go downloads\nRUN apt-get update; \\\n\tapt-get install -y --no-install-recommends \\\n\t\tca-certificates wget \\\n\t\tgit jq sqlite3 npm nodejs gh ripgrep fzf python3 curl vim chromium lsof iproute2 less \u0026\u0026 \\\n\tapt-get clean \u0026\u0026 \\\n\trm -rf /var/lib/apt/lists/* \u0026\u0026 \\\n\trm -rf /usr/share/{doc,doc-base,info,lintian,man,groff,locale,zoneinfo}/*\n\n# Install Go 1.24\nENV GO_VERSION=1.24.3\nENV GOROOT=/usr/local/go\nENV GOPATH=/go\nENV PATH=$GOROOT/bin:$GOPATH/bin:$PATH\n\nRUN ARCH=$(uname -m) \u0026\u0026 \\\n\tcase $ARCH in \\\n\t\tx86_64) GOARCH=amd64 ;; \\\n\t\taarch64) GOARCH=arm64 ;; \\\n\t\t*) echo \"Unsupported architecture: $ARCH\" \u0026\u0026 exit 1 ;; \\\n\tesac \u0026\u0026 \\\n\twget -O go.tar.gz \"https://golang.org/dl/go${GO_VERSION}.linux-${GOARCH}.tar.gz\" \u0026\u0026 \\\n\ttar -C /usr/local -xzf go.tar.gz \u0026\u0026 \\\n\trm go.tar.gz\n\n# Create GOPATH directory\nRUN mkdir -p \"$GOPATH/src\" \"$GOPATH/bin\" \u0026\u0026 chmod -R 755 \"$GOPATH\"\n\n# While these binaries install generally useful supporting packages,\n# the specific versions are rarely what a user wants so there is no\n# point polluting the base image module with them.\n\nRUN go install golang.org/x/tools/cmd/goimports@latest; \\\n\tgo install golang.org/x/tools/gopls@latest; \\\n\tgo install mvdan.cc/gofumpt@latest; \\\n\tgo clean -cache -testcache -modcache\n\nENV GOTOOLCHAIN=auto\nENV SKETCH=1\n\nRUN mkdir -p /root/.cache/sketch/webui\nARG GIT_USER_EMAIL\nARG GIT_USER_NAME\n\nRUN git config --global user.email \"$GIT_USER_EMAIL\" \u0026\u0026 \\\n git config --global user.name \"$GIT_USER_NAME\" \u0026\u0026 \\\n git config --global http.postBuffer 524288000\n\nLABEL sketch_context=\"{{.InitFilesHash}}\"\nCOPY . /app\nRUN rm -f /app/tmp-sketch-dockerfile\n\nWORKDIR /app{{.SubDir}}\nRUN if [ -f go.mod ]; then go mod download; fi\n\n# Switch to lenient shell so we are more likely to get past failing extra_cmds.\nSHELL [\"/bin/bash\", \"-uo\", \"pipefail\", \"-c\"]\n\n{{.ExtraCmds}}\n\n# Switch back to strict shell after extra_cmds.\nSHELL [\"/bin/bash\", \"-euxo\", \"pipefail\", \"-c\"]\n\nCMD [\"/bin/sketch\"]\n\n```\n\nIn particular:\n- Assume it is primarily a Go project.\n- Python env setup is challenging and often no required, so any RUN commands involving python tooling should be written to let docker build continue if there is a failure.\n- Include any tools particular to this repository that can be inferred from the given context.\n- Append || true to any apt-get install commands in case the package does not exist.\n- MINIMIZE the number of extra_cmds generated. Straightforward environments do not need any.\n- Do NOT expose any ports.\n- Do NOT generate any CMD or ENTRYPOINT extra commands.\n"
},
{
"type": "text",
@@ -50,24 +50,24 @@
Anthropic-Organization-Id: 3c473a21-7208-450a-a9f8-80aebda45c1b
Anthropic-Ratelimit-Input-Tokens-Limit: 200000
Anthropic-Ratelimit-Input-Tokens-Remaining: 200000
-Anthropic-Ratelimit-Input-Tokens-Reset: 2025-05-24T19:26:34Z
+Anthropic-Ratelimit-Input-Tokens-Reset: 2025-05-28T17:53:32Z
Anthropic-Ratelimit-Output-Tokens-Limit: 80000
-Anthropic-Ratelimit-Output-Tokens-Remaining: 80000
-Anthropic-Ratelimit-Output-Tokens-Reset: 2025-05-24T19:26:35Z
+Anthropic-Ratelimit-Output-Tokens-Remaining: 78000
+Anthropic-Ratelimit-Output-Tokens-Reset: 2025-05-28T17:53:35Z
Anthropic-Ratelimit-Requests-Limit: 4000
Anthropic-Ratelimit-Requests-Remaining: 3999
-Anthropic-Ratelimit-Requests-Reset: 2025-05-24T19:26:32Z
+Anthropic-Ratelimit-Requests-Reset: 2025-05-28T17:53:30Z
Anthropic-Ratelimit-Tokens-Limit: 280000
-Anthropic-Ratelimit-Tokens-Remaining: 280000
-Anthropic-Ratelimit-Tokens-Reset: 2025-05-24T19:26:34Z
+Anthropic-Ratelimit-Tokens-Remaining: 278000
+Anthropic-Ratelimit-Tokens-Reset: 2025-05-28T17:53:32Z
Cf-Cache-Status: DYNAMIC
-Cf-Ray: 944f2f6bfce6cf2e-SJC
+Cf-Ray: 946f9ca2ab1d155d-SJC
Content-Type: application/json
-Date: Sat, 24 May 2025 19:26:35 GMT
-Request-Id: req_011CPSuSK4eHncWRpcdktYD5
+Date: Wed, 28 May 2025 17:53:34 GMT
+Request-Id: req_011CPaMaUSyAoFGXyrPfqLTr
Server: cloudflare
Strict-Transport-Security: max-age=31536000; includeSubDomains; preload
Via: 1.1 google
X-Robots-Tag: none
-{"id":"msg_01FLx3RCrgBwRUJPmaVHcqJh","type":"message","role":"assistant","model":"claude-sonnet-4-20250514","content":[{"type":"text","text":"I'll call the dockerfile tool to create a Dockerfile for this Go project. Since this appears to be a straightforward Go project and the base template already includes comprehensive tooling, I'll keep the extra commands minimal."},{"type":"tool_use","id":"toolu_016D9ZU3qDRwiYQkx2zCd6Dz","name":"dockerfile","input":{"extra_cmds":""}}],"stop_reason":"tool_use","stop_sequence":null,"usage":{"input_tokens":4,"cache_creation_input_tokens":1295,"cache_read_input_tokens":0,"output_tokens":97,"service_tier":"standard"}}
\ No newline at end of file
+{"id":"msg_01XAoC47dTB2ySdrAvGBWDzH","type":"message","role":"assistant","model":"claude-sonnet-4-20250514","content":[{"type":"text","text":"Based on the context provided, this appears to be a Go project with a comprehensive development environment already set up in the base template. Since the template already includes Go tooling, common development packages, and proper Go module handling, I'll create a minimal Dockerfile without unnecessary extra commands."},{"type":"tool_use","id":"toolu_012K41Z5bdPRNBi7G2vpUEgW","name":"dockerfile","input":{"extra_cmds":""}}],"stop_reason":"tool_use","stop_sequence":null,"usage":{"input_tokens":4,"cache_creation_input_tokens":1542,"cache_read_input_tokens":0,"output_tokens":110,"service_tier":"standard"}}
\ No newline at end of file