dockerimg: switch to a debian base image
Developing on a musl-based alpine image seems to suck.
A lot of python stuff doesn't work.
Even when told it's alpine, LLMs still want to apt-get install things.
Along with switching to debian, simplify everything.
We *always* use debian bookwork now. If there are python
things, the LLM needs to install them on top of the model.
This will make fallback mode easier: if a build fails, then we
drop ExtraCmds and try again. (Future work.)
While here: avoid using docker buildx in tests because
it seems to vary a lot version-to-version.
diff --git a/dockerimg/testdata/testcreatedockerfile_python_misery.httprr b/dockerimg/testdata/testcreatedockerfile_python_misery.httprr
index f5d3e15..be45494 100644
--- a/dockerimg/testdata/testcreatedockerfile_python_misery.httprr
+++ b/dockerimg/testdata/testcreatedockerfile_python_misery.httprr
@@ -1,9 +1,9 @@
httprr trace v1
-3205 1950
+2675 1873
POST https://api.anthropic.com/v1/messages HTTP/1.1
Host: api.anthropic.com
User-Agent: Go-http-client/1.1
-Content-Length: 3008
+Content-Length: 2478
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 {{.From}}\n\nRUN apk add bash git make jq sqlite gcc musl-dev linux-headers npm nodejs go github-cli ripgrep fzf python3 curl vim grep\n\nENV GOTOOLCHAIN=auto\nENV GOPATH=/go\nENV PATH=\"$GOPATH/bin:$PATH\"\n\nRUN go install golang.org/x/tools/cmd/goimports@latest\nRUN go install golang.org/x/tools/gopls@latest\nRUN go install mvdan.cc/gofumpt@latest\n\nRUN mkdir -p /root/.cache/sketch/webui\n\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\"\n\nLABEL sketch_context=\"{{.InitFilesHash}}\"\nCOPY . /app\n\nWORKDIR /app{{.SubDir}}\nRUN if [ -f go.mod ]; then go mod download; fi\n\n{{.ExtraCmds}}\n\nCMD [\"/bin/sketch\"]\n\n```\n\nIn particular:\n- Assume it is primarily a Go project. For a minimal env, prefer golang:1.24.2-alpine3.21 as a base image.\n- If any python is needed at all, switch to using a python alpine image as a the base and apk add go.\n Favor using uv, and use one of these base images, depending on the preferred python version:\n ghcr.io/astral-sh/uv:python3.13-alpine\n ghcr.io/astral-sh/uv:python3.12-alpine\n ghcr.io/astral-sh/uv:python3.11-alpine\n- When using pip to install packages, use: uv pip install --system.\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 apk add commands in case the package does not exist.\n- Do NOT expose any ports.\n- Do NOT generate any CMD or ENTRYPOINT extra commands.\nHere is the content of several files from the repository that may be relevant:\n\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 golang:1.24-bookworm\n\nRUN set -eux; \\\n\tapt-get update; \\\n\tapt-get install -y --no-install-recommends \\\n\t\tgit jq sqlite3 npm nodejs gh ripgrep fzf python3 curl vim\n\nENV PATH=\"$GOPATH/bin:$PATH\"\n\nRUN go install golang.org/x/tools/cmd/goimports@latest\nRUN go install golang.org/x/tools/gopls@latest\nRUN go install mvdan.cc/gofumpt@latest\n\nENV GOTOOLCHAIN=auto\n\nRUN mkdir -p /root/.cache/sketch/webui\n\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\"\n\nCOPY . /app\n\nWORKDIR /app{{.SubDir}}\nRUN if [ -f go.mod ]; then go mod download; fi\n\n{{.ExtraCmds}}\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.\nHere is the content of several files from the repository that may be relevant:\n\n"
},
{
"type": "text",
@@ -39,14 +39,9 @@
"input_schema": {
"type": "object",
"required": [
- "from",
"extra_cmds"
],
"properties": {
- "from": {
- "type": "string",
- "description": "The alpine base image provided to the dockerfile FROM command"
- },
"extra_cmds": {
"type": "string",
"description": "Extra commands to add to the dockerfile."
@@ -58,24 +53,24 @@
}HTTP/2.0 200 OK
Anthropic-Organization-Id: 3c473a21-7208-450a-a9f8-80aebda45c1b
Anthropic-Ratelimit-Input-Tokens-Limit: 200000
-Anthropic-Ratelimit-Input-Tokens-Remaining: 194000
-Anthropic-Ratelimit-Input-Tokens-Reset: 2025-04-30T00:05:28Z
+Anthropic-Ratelimit-Input-Tokens-Remaining: 200000
+Anthropic-Ratelimit-Input-Tokens-Reset: 2025-04-30T22:04:18Z
Anthropic-Ratelimit-Output-Tokens-Limit: 80000
Anthropic-Ratelimit-Output-Tokens-Remaining: 80000
-Anthropic-Ratelimit-Output-Tokens-Reset: 2025-04-30T00:05:30Z
+Anthropic-Ratelimit-Output-Tokens-Reset: 2025-04-30T22:04:21Z
Anthropic-Ratelimit-Requests-Limit: 4000
Anthropic-Ratelimit-Requests-Remaining: 3999
-Anthropic-Ratelimit-Requests-Reset: 2025-04-30T00:05:25Z
+Anthropic-Ratelimit-Requests-Reset: 2025-04-30T22:04:18Z
Anthropic-Ratelimit-Tokens-Limit: 280000
-Anthropic-Ratelimit-Tokens-Remaining: 274000
-Anthropic-Ratelimit-Tokens-Reset: 2025-04-30T00:05:28Z
+Anthropic-Ratelimit-Tokens-Remaining: 280000
+Anthropic-Ratelimit-Tokens-Reset: 2025-04-30T22:04:18Z
Cf-Cache-Status: DYNAMIC
-Cf-Ray: 9382c994798ecf26-SJC
+Cf-Ray: 938a55847cf9cf05-SJC
Content-Type: application/json
-Date: Wed, 30 Apr 2025 00:05:30 GMT
-Request-Id: req_011CNdwUuvVDt9MAfQMAuJi1
+Date: Wed, 30 Apr 2025 22:04:21 GMT
+Request-Id: req_011CNfg45vZqeRUpncm8aMJG
Server: cloudflare
Via: 1.1 google
X-Robots-Tag: none
-{"id":"msg_01H1qyjFCPGPeswpXpa2BtBw","type":"message","role":"assistant","model":"claude-3-7-sonnet-20250219","content":[{"type":"text","text":"Based on the README.md contents, I can see that this project requires Python 3.11 and the DVC tool. Since Python is needed, I'll use the appropriate Python Alpine base image with UV and add Go to it, as per your instructions."},{"type":"tool_use","id":"toolu_014zi2SZWnbZdFDUhu3VXoMg","name":"dockerfile","input":{"from":"ghcr.io/astral-sh/uv:python3.11-alpine","extra_cmds":"RUN apk add go || true\n\n# Install DVC as mentioned in the README\nRUN uv pip install --system dvc || true\n\n# Make sure Go tools are still installed in this Python-based image\nRUN go install golang.org/x/tools/cmd/goimports@latest || true\nRUN go install golang.org/x/tools/gopls@latest || true\nRUN go install mvdan.cc/gofumpt@latest || true"}}],"stop_reason":"tool_use","stop_sequence":null,"usage":{"input_tokens":4,"cache_creation_input_tokens":1059,"cache_read_input_tokens":0,"output_tokens":249}}
\ No newline at end of file
+{"id":"msg_01VzFn44Swuuo4pHL5q2HXNi","type":"message","role":"assistant","model":"claude-3-7-sonnet-20250219","content":[{"type":"text","text":"Based on the information provided, I see that this is primarily a Go project, but also requires Python 3.11 and the DVC tool according to the README.md. I'll create a Dockerfile with appropriate extra commands to set up these requirements."},{"type":"tool_use","id":"toolu_01UhMAHuapY5DwfyQB1iNAez","name":"dockerfile","input":{"extra_cmds":"# Install Python 3.11 and ensure it's the default python3\nRUN apt-get update && apt-get install -y --no-install-recommends python3.11 python3.11-venv python3-pip || true\nRUN update-alternatives --install /usr/bin/python3 python3 /usr/bin/python3.11 1\n\n# Install DVC tool\nRUN pip3 install dvc || true"}}],"stop_reason":"tool_use","stop_sequence":null,"usage":{"input_tokens":900,"cache_creation_input_tokens":0,"cache_read_input_tokens":0,"output_tokens":211}}
\ No newline at end of file