Repository navigation
Document deploying from CI with GitHub Actions - #104
Merged
Merged
Conversation
Every guide ran Cloudfall from an operator's machine. The new CI deploy guide gives one workflow that renders secrets, builds the artifact with cloudfall-engine, deploys with --yes and uploads the receipts; it covers per-environment SSH and age keys, passing the release id between steps, and why required reviewers stand in for approval: manual, which deploy does not enforce. It says plainly that it has not had a live run yet. Fixes #89 Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This was referenced Oct 20, 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.
Summary
Adds
docs/ci-deploy-guide.md: one GitHub Actions workflow that deploys a component from CI (push tomain,workflow_dispatchwithenvironment/component/refinputs, andrepository_dispatchfrom an app repo). It installs the toolchain, loadsCLOUDFALL_SSH_KEY,CLOUDFALL_KNOWN_HOSTSandSOPS_AGE_KEYfrom a GitHub environment named after the Cloudfall environment, runscloudfall doctor,config validate,secrets render,cloudfall-engine artifact build --ref,cloudfall deploy(plan, then--yes --env-file), and uploads the receipts. Linked fromdocs/getting-started.mdand the README's guide table. A changelog fragment is included.The guide follows the code where it differs from the issue's assumptions:
cloudfall deploywrites its receipt totmp/releases/<component>.json, nottmp/deployments(that directory holds converge/domain receipts). The upload coverstmp/artifacts/**/*.json,tmp/releases/andtmp/env-receipts/, and nevertmp/env/Application.spec.approvalis validated and written into the inventory, but no command reads it.deploy --yestreatsmanualandautomaticthe same. The guide says so, and makes GitHub required reviewers with "Prevent self-review" the gatecloudfall initwrites one.sops.yamlrule for all ofsecrets/, so per-environment keys need the project to split the rule bysecrets/<environment>/. The guide shows the split andsops updatekeys. Cloudfall decrypts only the files a component's references name, so a staging runner fails withsecrets_decrypt_failedon a production fragment. Cloudfall doesn't check that references match the servers' environment, and the guide says that too--environment stagingreaches staging servers only--refis a ref of the component's repository, not the project repo. The release id is atdata.releaseof the build's JSON answerThe guide says near the top that the workflow has not had a live run yet.
What was checked
uv run cloudfall ... --help/uv run cloudfall-engine ... --help(0.7.0) and the source:deploy,secrets render,artifact build(--output-schemaforrelease),add ssh-key --environment,playbook run,playbook list,doctorrequired_tools:ansible-playbook2.21.0,git2.24.0 (sdk/src/cloudfall/app.py,engine/src/cloudfall_engine/{playbook,artifact}.py),sops3.8.0 (secrets render).cloudfall doctorwas run locally and reports all threeuv run ruff check .,uv run mypy,uv run pytest(526 passed)Not verified: a live run on GitHub against a real server. That covers the ssh-agent across steps, the sops checksum file's entry name for
linux.amd64, and the receipts upload.Fixes #89
🤖 Generated with Claude Code