Conversation
Replaces hardcoded versions for Go, nvm, Node, Java (openjdk-25-jdk), and .NET (dotnet-sdk-8.0) with discovery steps so each build pulls the latest available release: - Go: queries https://go.dev/VERSION?m=text - nvm: queries the GitHub releases API for the latest tag - Node: nvm install --lts + nvm alias default 'lts/*' - Java: highest openjdk-N-jdk found via apt-cache pkgnames - .NET: highest dotnet-sdk-X.Y found via apt-cache pkgnames Also replaces the brittle hardcoded /root/.nvm/versions/node/v22.16.0/bin PATH entry with a stable /root/.nvm/current symlink that gets repointed to the freshly installed Node version, and enables pipefail in the bash SHELL so curl|bash failures fail the build. Adds a weekly cron schedule and workflow_dispatch trigger to the Docker workflow so the image actually gets rebuilt periodically with the latest tool versions, not just on push. README.md tool version table is auto-updated by make build (Node 24.16.0, Java 25.0.2, Dotnet 10.0.107, Go 1.26.3, Rust 1.95.0, Docker 29.5.2). Co-authored-by: Cursor <cursoragent@cursor.com>
Adds a new ai-tools build stage that installs the latest releases of Claude Code (`claude`), Antigravity CLI (`agy`), and Opencode (`opencode`) from their official curl|bash installers. Mirrors /root/.local/bin and /root/.opencode/bin into the image PATH so all three are usable from any shell. Updates README.md to make explicit that no tool versions are pinned in the Dockerfile, document how "latest" is resolved per tool (including the new AI CLIs), and clarify that the auto-generated version table reflects the most recent build. Co-authored-by: Cursor <cursoragent@cursor.com>
Measured: 4.81GB -> 3.49GB (-27%); cached rebuild 95s -> 1.4s. - BuildKit cache mounts on /var/cache/apt, /var/lib/apt, and pip cache - Rust --profile minimal + clippy + rustfmt (drops rust-docs, ~700MB) - Docker CLI + buildx + compose only via Docker's apt repo (~600MB) - openjdk-N-jdk-headless instead of full JDK (~200MB) - Strip Go doc/test/api dirs (~100MB) - .NET SDK only (drops redundant dotnet-runtime package) - nvm cache clear after Node install - Combine ai-tools and final-stage RUN steps to reduce layer overhead Co-authored-by: Cursor <cursoragent@cursor.com>
Replaces raw `docker build` and `make build` calls in the workflow with docker/build-push-action@v5 and enables type=gha cache-from/cache-to so BuildKit layer caches persist across CI runs. This brings CI rebuild times in line with the local cache-mount speedup (~95s -> ~seconds when the cache is warm). Other workflow improvements: - Bumps actions/checkout to v4 - Adds explicit docker/setup-buildx-action@v3 and docker/login-action@v3 - Tightens the publish job to packages:write only and removes the test job's reliance on `make build` (the README auto-update step inside make build is a no-op on CI since CI never commits) - test job now also runs on pull_request events so PRs to main get a full build verification before merge Co-authored-by: Cursor <cursoragent@cursor.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
This PR rolls up four commits on
developthat together (a) make the image self-updating, (b) add agentic AI coding CLIs, (c) cut the image size by 27%, and (d) make CI rebuilds fast.1. Dynamic tool versions (
264a064)No tool versions are pinned in the Dockerfile anymore. Each build resolves the latest available release at build time:
https://go.dev/VERSION?m=textnvm-sh/nvmnvm install --ltsopenjdk-N-jdk[-headless]from aptdotnet-sdk-X.Yfrom aptrustupstableThe hardcoded
…/node/v22.16.0/binPATH entry is replaced with a stable$NVM_DIR/currentsymlink so version updates don't break PATH. Adds a weeklycronschedule andworkflow_dispatchto the workflow so the image gets rebuilt periodically even without commits.2. Agentic AI coding tools (
ef5a534)Adds a new
ai-toolsbuild stage that installs the latest releases of:claude) —https://claude.ai/install.shagy) —https://antigravity.google/cli/install.shopencode) —https://opencode.ai/installPATH updated to include
/root/.local/binand/root/.opencode/binso all three are usable from any shell.3. Image size and build speed (
88050a5)Measured: 4.81GB → 3.49GB (−27%). Cached local rebuilds: ~95s → ~1.4s.
/var/cache/apt,/var/lib/apt, and/root/.cache/pip--profile minimal+clippy+rustfmt(dropsrust-docs, ~700MB)openjdk-N-jdk-headlessinstead of full JDK (~200MB)doc/,test/,api/after install (~100MB)nvm cache clearafter Node install4. CI build caching (
5eff249)Workflow now uses
docker/build-push-action@v5withcache-from: type=ghaandcache-to: type=gha,mode=maxso BuildKit layer caches persist across CI runs (free, repo-scoped, no extra registry auth needed). Also:actions/checkoutto v4docker/setup-buildx-action@v3anddocker/login-action@v3testjob now runs onpull_requestevents as well asdeveloppushes, so PRs to main get a full build verificationTest plan
make build(6m31s on Mac under emulation, 3.49GB)claude,opencode,agy)develop(run 26341183134)main(will republish:latest)Made with Cursor