Repository navigation
Wave 4: deployment safety and CI (S4, B10, S7, A7, B11) - #91
Merged
Merged
Conversation
Dockify now exits at start when DOCKIFY_ADMIN_PASSWORD is empty and DOCKIFY_HOST is not loopback, unless DOCKIFY_ALLOW_NO_AUTH=true. install.sh requires the admin password in every mode; the Air and go-run dev commands bind 127.0.0.1. Co-Authored-By: Claude Opus 5.5 <[email protected]>
The compose file mounted ${HOME}/.ssh read-only and pointed
DOCKIFY_SSH_KEY_DIR at it, so adding a server failed to save its key.
Keys now go to /var/lib/dockify/keys in the dockify_data volume.
Co-Authored-By: Claude Opus 5.5 <[email protected]>
Co-Authored-By: Claude Opus 5.5 <[email protected]>
RunUpdate no longer writes /tmp/dockify-upgrade.sh: it runs systemd-run ... /bin/bash -c with update.sh fetched from the tag that CheckUpdate found, and refuses when no tag is known. CI publishes dockify-linux-amd64.sha256; update.sh and update-latest.sh verify the binary with sha256sum -c and abort when the file is missing or wrong. Co-Authored-By: Claude Opus 5.5 <[email protected]>
Co-Authored-By: Claude Opus 5.5 <[email protected]>
Co-Authored-By: Claude Opus 5.5 <[email protected]>
InitWorker inspects an existing caddy container and treats it as Dockify's only when it mounts /opt/dockify/caddy (current layout) or /opt/dockify/caddy/config.json (old layout), or carries dockify.managed=true; any other caddy container sets the server to error. New containers get the label and caddy:2 instead of caddy:latest. Co-Authored-By: Claude Opus 5.5 <[email protected]>
The runner's cached go1.26.8 has 12 stdlib vulnerabilities fixed in go1.26.9, so govulncheck failed; check-latest also puts the fix into released binaries. Co-Authored-By: Claude Opus 5.5 <[email protected]>
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.
Wave 4 of the Fable 5.1 audit (
audits/DOCKIFY-AUDIT-FABLE-5.1.md§7): deployment safety and CI.Changes
config.CheckAuth(pure, tested): whenDOCKIFY_ADMIN_PASSWORDis empty, the bind host is not loopback (127.0.0.1,::1,localhost) andDOCKIFY_ALLOW_NO_AUTHis nottrue,serveexits with a message naming the three ways out. NewConfig.AllowNoAuth.install.shrequires the admin password in every mode; the.envit writes is unchanged otherwise. README (env table, "No password set", Docker Compose note: the image binds0.0.0.0and so needs the password or the override, build-from-source command) and SPEC updated. Extra:.air.tomldefaultsDOCKIFY_HOSTto127.0.0.1and the AGENTS.mdgo run/docker runexamples bind loopback, so the dev workflow keeps starting without a password (separatedocs:commit).${HOME}/.ssh:/home/dockify/.ssh:romount and theDOCKIFY_SSH_KEY_DIRoverride; keys go to/var/lib/dockify/keysindockify_data(created byconfig.Loadand by the Dockerfile). README Option C explains it and how to fix an older compose file.RunUpdatewrites no file:upgradeArgv(tested) buildssystemd-run --no-block --unit=dockify-upgrade --collect --setenv=DOCKIFY_FORCE=y --setenv=DOCKIFY_VERSION=<tag> /bin/bash -c "set -o pipefail; sleep 3; curl -fsSL .../<tag>/scripts/update.sh | bash", where<tag>is the latest release fromCheckUpdate(must matchvX.Y.Z, otherwise refused). Output goes tojournalctl -u dockify-upgradeinstead of/tmp/dockify-update.log. The release workflow publishesdockify-linux-amd64.sha256;update.shandupdate-latest.shdownload it and runsha256sum -cbefore installing, aborting when it is missing (message says older releases have none) or does not match.update.shhonoursDOCKIFY_VERSIONso the binary matches the pinned script. Rollback logic unchanged.build.ymlnow also runs onpull_requestandpushtomain:go vet,gofmt -l(fails on output),go test -race,govulncheck, smoke test. Binary build, Docker push and release stay gated onrefs/tags/v*.style: gofmtis a separate commit (2 files, whitespace only).InitWorkerinspects an existingcaddycontainer (running or stopped) and only touches it when a mount source is/opt/dockify/caddy(current layout, prod-heavy-1) or/opt/dockify/caddy/config.json(old layout, staging), or it hasdockify.managed=true; otherwise the server goes toerrorwith "remove or rename it first". Decision incaddyManaged(tested with both production layouts, the label, foreign containers). New containers get--label dockify.managed=trueandcaddy:2instead ofcaddy:latest(pull and run, both branches). Dev mock answers the new inspect. SPEC worker init flow updated.CI now runs on this PR itself. The first run failed in
govulncheck:setup-gopicked the runner's cached go1.26.8, which has 12 stdlib vulnerabilities fixed in go1.26.9.check-latest: truefixes it (and puts the patched stdlib into released binaries); the second run (go1.26.9) passed every step: vet, gofmt, race tests, govulncheck (0 vulnerabilities), smoke test. The release job was skipped.Verification
go build ./... && go vet ./... && go test -race -timeout 300s ./...: passgofmt -l .: empty;govulncheck ./...: no reachable vulnerabilities (Go 1.27.2 locally)bash -non install.sh, update.sh, update-latest.sh, smoke-test.sh: passbash scripts/smoke-test.sh: pass0.0.0.0exits 1 with the message;DOCKIFY_HOST=127.0.0.1starts and/healthis 200sha256sum -cagainst a file produced bysha256sum <file> > <file>.sha256: OK, and FAILED after changing the fileNot verified
systemd-runself-update andupdate.shchecksum path on a real Linux host (no release with a.sha256exists yet; the first one is the next tag). Until thenupdate.shfrommainaborts on binary installs with the "no checksum" message.install.shinteractive runs, the Docker Compose stack, and InitWorker against real workers (both production layouts are covered only by the unit test with inspect JSON).docker-compose.ymlfor B10.🤖 Generated with Claude Code