Repository navigation
Installer installs main (or GRAPHDONE_REF), never a deleted branch - #247
Merged
Merged
Conversation
scripts/install.sh pinned fix/first-start, which no longer exists, for the fresh clone and the setup-script fallback URLs, so every one-line install failed at git clone (#243). - One ref drives the clone, the update of ~/graphdone and the raw.githubusercontent setup-script fallbacks: GRAPHDONE_REF, default main (the branch the installer is served from). Option-like or unsafe values are rejected. - Updating an installer-managed checkout fetches GRAPHDONE_REF and checks it out instead of pulling the current branch, so installs stranded on fix/first-start move to main. A developer checkout keeps its branch. - Clone and update failures now print their log instead of exiting silently under set -e at `wait`. - `sh install.sh sources` prints the repository, ref and setup-script URLs. - Web image pre-pull and the registry compose use :latest instead of :fix-first-start (same lines as #241). Tests: - tests/toolchain/installer-contract.mjs: every git ref and raw URL in the installer is GRAPHDONE_REF (default main), no hard-coded branch names, ghcr.io/graphdone image tags are latest or versions, setup scripts exist, documented install URLs use main. Includes a self-test that the old pin is rejected. - tests/integration/installer-container.sh: runs the installer in a node:22.18.0-trixie-slim container (GRAPHDONE_INSTALL_STOP_AFTER=clone): fresh clone lands on the remote commit for the ref, re-run updates, a checkout stranded on fix/first-start moves to the ref, and every setup-script URL returns HTTP 200. About a minute. - Both run in the required "Installer & Deploy Config" job, which now also validates the registry compose file. Closes #243 Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
🧪 Comprehensive Test Suite
Full-stack smoke gate runs in the CI workflow. |
🧪 Comprehensive Test Suite
Full-stack smoke gate runs in the CI workflow. |
Member
Author
|
Maintainer verification of
Merging. The installer on |
This was referenced Nov 8, 2026
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.
Closes #243
Problem
scripts/install.shpinnedfix/first-start, a branch that no longer exists, in two places:git clone --branch fix/first-startand the base of theraw.githubusercontent.comfallback URLs forscripts/setup_*.sh. Every fresh one-line install failed at the clone. It also exited silently, becausewait $clone_pidunderset -eexits before the error message prints. Re-running on an existing install also failed:git pullhad no upstream left to pull.Change
GRAPHDONE_REF, defaultmain.mainis the branch the installer is served from. The fresh clone, the update of~/graphdoneand the setup-script fallback URLs (setup_script_url) all read this one variable. Option-like or unsafe values (-…, spaces,..) are rejected before anything runs.git fetch origin "$GRAPHDONE_REF", checks the ref out and fast-forwards it (or detaches, for a tag). It no longer pulls the current branch. Installs stranded onfix/first-startmove tomain. A developer checkout that the installer is run from keeps its branch and still doesgit pull.wait.sh install.sh sources. Prints the repository, ref and setup-script URLs the installer will use. The tests use it, and it helps when debugging an install.deployment/docker-compose.registry.ymlnow use:latestinstead of:fix-first-start. These are the same lines Real tag-gated releases, promotion gates on dev, no fake deploys #241 changes, so the two PRs merge cleanly in either order.docs/deployment.mddocumentsGRAPHDONE_REF.tests/README.mdandnpm run test:installercover the new tests.Tests
tests/toolchain/installer-contract.mjs(node:test, no network, about 0.1 s). It checks that:git clone/checkout/fetch/pullref and every raw GitHub URL in the installer is$GRAPHDONE_REF, and that the variable defaults tomain;fix/…,feat/…or similar branch names;ghcr.io/graphdone/*tag in the installer and indeployment/*.ymlislatestor a version;run_setup_scripttarget is listed and exists;sourcesreportsmain, honours the override and rejects option-like refs;/main/scripts/install.sh.It also includes a self-test proving that the old pinned lines are rejected. The
test:toolchainglob picks the file up as well.tests/integration/installer-container.sh(about 70 s). It runs the real installer non-interactively in a disposablenode:22.18.0-trixie-slimcontainer. WithGRAPHDONE_INSTALL_STOP_AFTER=cloneit stops once the code is in place, so nothing is installed or started. A stubdockerinside the container reports a running daemon; host Docker only runs the container. It checks that:~/graphdoneis on the remote's commit for the ref;fix/first-startbranch (one commit behind, upstream deleted) is brought back to the ref;sourcesreturns HTTP 200.CI wiring. Both tests now run in the required Installer & Deploy Config job, which also validates
docker-compose.registry.yml. The job has a 15-minute timeout.Evidence (local, Node 22)
npm run test:unified:lib: 208/208 passnpm run lint: passnode --test tests/toolchain/*.mjs: 11/11 pass, including the new contract testssh tests/integration/installer-container.sh: 18/18 PASS formain. WithGRAPHDONE_REF=devit also passes 18/18.devinstaller and registry compose: tests 2–4 fail. The failures reportGRAPHDONE_REF must be defined once with default main,hard-coded branch name 'fix/first-start'(lines 285 and 3371),raw GitHub URL pins '${GITHUB_BRANCH}',git clone must use --branch "$GRAPHDONE_REF", andimage tag 'fix-first-start'(install.sh:3735 and registry.yml lines 6, 42 and 77).GRAPHDONE_REF=fix/first-start: exit 1. The ref does not exist, the clone log showsfatal: Remote branch fix/first-start not found in upstream origin, and all three setup-script URLs return HTTP 404.INSTALLER_UNDER_TEST=<old dev install.sh>: exit 1. The fresh install fails at "Downloading GraphDone" and exits without any error message, which is the silentset -eexit described above.🤖 Generated with Claude Code