Repository navigation
v0.6.0
·
1167 commits
to main
since this release
Immutable
release. Only release title and notes can be modified.
Fugaro v0.6.0
Install:
- Homebrew:
brew install dimipaun/tap/fugaro - Go:
go install github.com/dimipaun/fugaro/cmd/fugaro@v0.6.0 - Or download an archive below and verify it against
checksums.txt(see docs/release.md).
Highlights
fugaro image refresh --yesconfirms every step unattended, including each billable build, so the cloud step can run from CI or a script instead of needing a real terminal.fugaro upgrade [PATH...]and the/fugaro:upgradeskill move a checkout to this release in one command: it pins the plugin, updates it through theclaudeCLI, and refreshes the job images.--localruns only the parts a coding agent's own session can do,--checkreports drift without changing anything,--yesconfirms the cloud step unattended, and--allow-forkmoves a hosted fork's marketplace pin instead ofdimipaun/fugaro's.- A project can now publish a project layer (
fugaro config show,layer,initandpublish) holding project-wide defaults and named workflow profiles, so a repository'sfugaro.yamlcan shrink to a few lines naming the project and, when needed, a profile;fugaro ls,diagnoseanddoctorall show the layer a run used, andfugaro runonly embeds a layer on a job image built from this release's base, refusing older ones by name. Until the 0.7.0 bucket IAM hardening ships,config publish's--executable-changesgate is a CLI check, not a permission: any launcher can still write the project layer object directly. The daily image check and the rebuilds it starts now resolve each repository'sfugaro.yamlover the same layer, so a layered project's job image is built and checked against the layer it runs with. - A run whose container was killed or crashed no longer blocks
fugaro run --pr Nfor the rest of its branch lock's lifetime: the CLI now clears a lock once the backend reports its execution over, instead of waiting out the full expiry, andfugaro cancelsays when a lock is still held on an already-finished run. fugaro watchshows finished runs with a cursor and a run detail view, filters them witha(toggle showing every finished run) andx(acknowledge) in the interactive screen or--alland--keep/--keep-counton the command line, and lists the ones ready for review separately;fugaro logs --urlprints a run's Cloud console link instead of its logs.SECURITY.mdnow states Fugaro's trust model and its known limits in one place, including that every launcher still holds broad write access to the runs bucket until the 0.7.0 IAM hardening ships.
For operators
- Upgrade the CLI (
brew upgrade dimipaun/tap/fugaro). - Run
fugaro upgradein each checkout (it pins the plugin and refreshes the job images). This is required before any run can carry a project layer: a layeredfugaro runis refused on a job image older than 0.6.0. - For projects adopting layered configuration, run
fugaro config publishfrom an operator's own terminal; add--executable-changeswhen a profile carriescommands,image.apt,image.setuporimage.skip_build_scripts. - Then merge each repository's minimal
fugaro.yaml. Do this only after every CLI and CI pin that touches the repository is on 0.6.0 or later: the strict parser refuses a file with new keys likeprofile:on an older release.
Changelog
- layered config task 15: the daily check resolves over its copy; one sum for every consumer (#258)
- layered config task 14: Cloud Build submissions carry the project layer, pinned by its sum (#254)
- layered config task 19: the setup skill writes the minimal fugaro.yaml when the project has a layer (#257)
- layered config task 18: docs/project-layer.md, cross-references, the scope table pinned by a test (#256)
- layered config: gate skip_build_scripts, fix the copy-write race, and the empty-profile banner (#255)
- layered config task 12: fugaro config show, layer and init (#243)
- layered config task 16: doctor shows the project layer and flags drift, stale copies and stale images (#253)
- Implement Task 6 of docs/plans/2026-10-08-generic-tool.md (the design i… (#252)
- layered config task 11: fugaro run embeds the project layer behind a 0.6.0 image gate (#230)
- layered config task 13: fugaro config publish, guarded, conditional, with per-repository copies (#244)
- layered config task 10: validate, doctor, init, secrets and image resolve over the project layer (#231)
- base image: strip ssh-agent's setgid bit; add Task 7's Docker hardening tests (#251)
- bucket iam task 6: one operator-role refusal for publishes a launcher can no longer make (#245)
- generic tool task 5: watch selects runs, keeps blocks in place and expands a run's detail (#249)
- base image task 4: the base's smoke checks every pin and tool; a size budget (#247)
- base image: put the harness Node's $prefix/bin on PATH inside install-node.sh (#250)
- layered config task 17: ls and diagnose show the project layer a run used (#242)
- base image: add gpgv, the package install-node's gpgv call actually needs (#248)
- lock: take over a stale branch lock instead of waiting out its expiry (#222)
- base image task 2: the Debian 13 base with the kit, mise and the harnesses (#235)
- generic tool task 4: watch reads finished runs from the runs bucket (#229)
- generic tool task 2: the registry carries the verify summary and the PR link (#228)
- generic tool task 21: SECURITY.md states the trust model and its known limits (#226)
- config: three small hardening fixes in internal/config (merged node path) (#217)
- bucket iam task 3: the install guard checks every bucket grant's condition (#232)
- bucket iam task 5: a refused write is blobx.ErrForbidden; launchers' writes all land under runs/ (#225)
- base image task 1: the presence table and the selftest's presence checks (#224)
- generic tool task 1: fugaro logs --url and the link in the empty hint (#227)
- bucket iam task 1: the launchers' runs/ condition, one definition (#223)
- layered config task 9: findLayer and resolveFugaroYAML, the CLI's one resolution seam (#221)
- layered config task 7: the runner resolves over the task's project layer and records both sums (#220)
- layered config task 5: the project layer schema and the layered corpora (#219)
- layered config task 4: Resolve merges the project layer, a profile and the repository (#213)
- upgrade task 9: the /fugaro:upgrade skill (#209)
- upgrade task 10: the docs give one upgrade command (#208)
- design: runs-bucket IAM hardening (only operators write fugaro/) and its 0.7.0 plan (#215)
- design: generic-tool hardening (0.7.0) and its plan; Docker backend measured first for 0.8.0 (#214)
- layered config task 6: task.json carries the project layer's exact text (#212)
- layered config task 8: the project layer's offline-only cache (#211)
- recipes: escape untrusted key text in Problem.Path (#210)
- layered config task 2: the project layer and its strict, scope-checked parser (#207)
- base image task 3: fugaro-services moves to common and finds what the project installed (#206)
- layered config tests: golden scope table and executable-keys pins, workflow profile schema case (#205)
- base image task 5: scan.sh --secrets, Trivy over every layer and the image config (#204)
- upgrade task 6: the plugin step through the claude CLI (#203)
- upgrade task 7: the cloud step, never attempted in an agent's session (#200)
- layered config task 3: profile and workflows..profile in fugaro.yaml (#202)
- layered config task 1: the scope table of every fugaro.yaml key (#201)
- upgrade task 8: plugin hints name fugaro upgrade --local where the pin step backs it (#198)
- upgrade task 2: which claude plugin calls a checkout needs (#197)
- design: layered project configuration (project layer, profiles, scopes) and its 0.6.0 plan (#199)
- upgrade task 3: image refresh takes a checkout, a rerun line and a plan hook (#193)
- upgrade task 1: the claude plugin runner, its allowlist and a fake claude (#192)
- upgrade task 5: fugaro upgrade with the pin step, the summary and the exit code (#195)
- upgrade task 4: the cloud step's state from local files only (#194)
- base image: the design and the implementation plan (#196)
- image refresh --yes: confirm every step unattended, reversing D2 (#190)
Base images
Published by the images workflow for this tag:
ghcr.io/dimipaun/fugaro-web-node:0.6.0ghcr.io/dimipaun/fugaro-web-node:0(moves to the highest release of the major)ghcr.io/dimipaun/fugaro-go:0.6.0andghcr.io/dimipaun/fugaro-go:0ghcr.io/dimipaun/fugaro-java-services:0.6.0andghcr.io/dimipaun/fugaro-java-services:0ghcr.io/dimipaun/fugaro-history:0.6.0andghcr.io/dimipaun/fugaro-history:0(the sweeper and history job's image)
The images workflow then pulls each one with no login and fails if it is not public or lacks linux/amd64; each image's digest is in that run's summary.
The Terraform modules, the schemas and the plugin are versioned by this same tag.