This document defines the maintainer release flow for Argos.
- Keep
masteras the only long-lived integration branch. - Keep releases tag-driven through
.github/workflows/release.yml. - Avoid creating unnecessary merge commits on
master.
Every release that changes the daemon or desktop connection surface should include two clearly separated asset groups:
- Argos Desktop (recommended): the normal platform installer for local use.
- Argos Server (advanced/headless): the matching
argos-daemon-<os>-<arch>binary for a remote host, including its SHA-256 checksum.
Release notes should link to the remote-machine guide and state the supported pairing/protocol version. Do not tell local users to download the standalone daemon.
master: active development and integration branch.release/<version>: short-lived review branch cut from an existing commit onmaster.
release/<version> must not carry release-only commits. If a release fix is required, land it on master first and then move the release branch forward to the updated master commit.
-
Prepare release metadata on
master.- Update the version,
CHANGELOG.md, and any release notes onmaster. - Run the required local checks before cutting a release branch.
- Update the version,
-
Cut the review branch from the release-ready commit on
master.git switch master git pull --ff-only origin master git switch -c release/v0.1.0 git push -u origin release/v0.1.0
-
Open a PR from
release/<version>tomaster.- The PR exists for review and CI only.
- Do not click "Update branch" on the PR, because it creates new merge commits.
-
If review finds a release issue, fix it on
masterfirst.git switch master git pull --ff-only origin master # land the release fix on master git branch -f release/v0.1.0 origin/master git switch release/v0.1.0 git push --force-with-lease origin release/v0.1.0Use
--force-with-leaseonly because the release branch is a disposable review branch that must stay identical to a commit already onmaster. -
After the PR is approved, merge to
master.git switch master git merge --ff-only release/v0.1.0 git push origin master
-
Create and push the release tag on the same commit.
git tag v0.1.0 release/v0.1.0 git push origin v0.1.0
-
Delete the temporary release branch after the release is published.
git push origin --delete release/v0.1.0 git branch -d release/v0.1.0
Use this sequence when the automatic helper is unavailable, especially on Windows. It merges the reviewed release commit to master directly.
-
Fetch the latest release refs.
git fetch origin master --prune
-
Resolve the reviewed release commit and record it as
TARGET_SHA.git rev-parse origin/release/v0.1.0^{commit} # or git rev-parse release/v0.1.0^{commit} # or git rev-parse <target-ref>^{commit} -
Confirm the release commit already exists on
origin/master.git merge-base --is-ancestor <TARGET_SHA> origin/master
-
The release branch merge target is
master. -
Confirm the release tag does not already exist locally or on
origin.git rev-parse --verify --quiet refs/tags/v0.1.0 git ls-remote --exit-code --tags origin refs/tags/v0.1.0
Both commands should report that the tag is missing before you continue.
-
Merge to
masterlocally.git switch master git merge --ff-only <TARGET_SHA> git push origin master
-
Create and push the release tag on the same commit.
git tag v0.1.0 <TARGET_SHA> git push origin refs/tags/v0.1.0
-
Delete the temporary release branch after the release is published.
git push origin --delete release/v0.1.0 git branch -d release/v0.1.0
These settings are not stored in the repository and must be configured manually on GitHub:
- Enable Require linear history on
master. - Keep PR checks required for PRs targeting
master.
- Routine feature, bugfix, docs, and test PRs target
masterand run the PR checks in.github/workflows/prcheck.yml(lint, format, typecheck/build of affected packages, daemon unit tests). - Release review PRs (
release/<version>→master) exist for review and CI only; do not click "Update branch" on them. - Release tags must point to commits that are already reachable from
origin/master. This is enforced by thevalidate-main-ancestorjob in.github/workflows/release.yml.
These rules keep the documented flow and the automation aligned.
Use first-parent history for day-to-day inspection:
git log --oneline --decorate --first-parent master -n 30Avoid using git log --all --decorate --graph as the default project view because old release merges and stale branch refs make it noisier than the actual mainline history.
Clean up short-lived branches after they are merged:
git fetch --prune origin
git branch --merged master