This playbook provides a step-by-step procedure for releasing new versions of OKF Agent Memory (okf).
When a new version tag (e.g. v0.1.0) is published:
- GitHub Actions CI/CD (
.github/workflows/release.yml) automatically builds cross-platform binaries for macOS (ARM64 & x86_64), Linux (ARM64 & x86_64), and Windows (ARM64 & x86_64). - Binaries are compiled with injected build metadata (
Version,Commit,Date). - Standalone starter pack archives (
.tar.gzand.zip) are packaged. - SHA256 checksums and a generated Homebrew Formula (
Formula/okf.rb) are attached to the GitHub Release.
Before tagging a release, run through the following verification gates:
Run the full test and validation suite:
# 1. Format code according to Go best practices
make fmt
# 2. Synchronize active skills to embedded bootstrap assets (dogfooding)
make sync-assets
# 3. Run static analysis, unit tests (including drift checks), and strict OKF v0.2 bundle validation
make check
# 4. Run vulnerability scanner
make vulnEnsure:
- ✅ All Go tests pass (
pkg/okf/...), includingTestDogfoodingAssetDrift - ✅ Zero lint or vet errors
- ✅ 0 bundle validation errors, 0 broken links, 0 orphaned concepts across
knowledge/andexamples/
Run automated security analysis and perform an adversarial review before every release:
# Run automated security linters and vulnerability checks
make audit-security- Conduct Security Specialist Agent Review:
- Extract the diff for the upcoming release against the previous tag:
git diff <previous-tag>..HEAD(e.g.git diff v0.1.2..HEAD) - Instruct a Security Specialist Agent using
docs/SECURITY_AUDIT.mdto audit the diff against all 4 audit areas. - Require a report status of "Passed (0 High/Critical)" before proceeding to Step 3.
- Extract the diff for the upcoming release against the previous tag:
git statusEnsure no uncommitted files or untracked scratch files remain.
Tip
Automatic Versioning in GitHub Actions: When you push a Git tag (e.g. git push origin v0.1.0), GitHub Actions automatically extracts the version from the tag name and injects it into all release binaries, checksums, and the Homebrew formula. You do not need to configure or pass VERSION= to GitHub!
VERSION=... is only needed if you want to test building release binaries locally on your machine before pushing the tag.
# 1. Author release notes and update changelog on develop and commit
git checkout develop
git pull origin develop
git add docs/releases/v0.2.0.md knowledge/log.md
git commit -m "chore(release): prepare release notes and changelog for v0.2.0"
git push origin develop
# 2. Merge develop into main
git checkout main
git pull origin main
git merge --ff-only develop
git push origin main
# 3. Tag and push on main (triggers automated build & GitHub release)
git tag -a v0.2.0 -m "Release v0.2.0"
git push origin v0.2.0Follow Semantic Versioning:
- Patch (
v0.2.1): Bug fixes, minor documentation updates, non-breaking improvements. - Minor (
v0.3.0): New CLI commands, convention updates, new tool integrations. - Major (
v1.0.0): Specification stabilization, breaking CLI/convention changes.
Export your target version (for changelog and optional local testing):
export RELEASE_VER="v0.2.0"
export CLEAN_VER="0.2.0"-
Author Release Notes in
docs/releases/${RELEASE_VER}.md:- Create
docs/releases/${RELEASE_VER}.mdcontaining the release highlights, detailed feature breakdown, security improvements, community acknowledgements, and upgrade instructions. - Automated CI Fail-Fast Gate: The GitHub Actions release workflow (
.github/workflows/release.yml) strictly requires this file. If a release tag is pushed withoutdocs/releases/${RELEASE_VER}.md, CI immediately fails at the start. When present, CI automatically injects its full markdown content into the GitHub Release body—no manual copy-pasting required!
- Create
-
Add a dated entry in
knowledge/log.md:## YYYY-MM-DD * **Release**: Published version v0.2.0 with [Key Highlights].
-
Validate knowledge bundle:
make validate
-
Commit release notes and changelog:
git add docs/releases/${RELEASE_VER}.md knowledge/log.md git commit -m "chore(release): prepare release notes and changelog for ${RELEASE_VER}"
If you want to verify that release artifacts build locally before tagging:
# Build cross-platform binaries locally
VERSION=${CLEAN_VER} make release
# Build starter pack archives locally
VERSION=${CLEAN_VER} make dist-bundle
# Verify local binary reports exact version
./bin/okf versionMerge develop into main, then create an annotated tag and push it to GitHub. This triggers the GitHub Actions workflow, which automatically compiles all release binaries with the tag version:
# 1. Switch to main and merge develop
git checkout main
git pull origin main
git merge --ff-only develop
git push origin main
# 2. Create annotated tag on main
git tag -a "${RELEASE_VER}" -m "Release ${RELEASE_VER}"
# 3. Push tag to GitHub
git push origin "${RELEASE_VER}"- Navigate to
https://github.com/okf-memory/okf-agent-memory/actions. - Verify that the Release workflow completes with green checkmarks.
- Verify the published assets on
https://github.com/okf-memory/okf-agent-memory/releases/tag/${RELEASE_VER}:okf-darwin-arm64,okf-darwin-amd64okf-linux-amd64,okf-linux-arm64okf-windows-amd64.exe,okf-windows-arm64.exeokf-starter-pack-${RELEASE_VER}.tar.gz&.zipchecksums.txtFormula/okf.rb
The release workflow automatically updates okf-memory/homebrew-tap if HOMEBREW_TAP_TOKEN is configured:
- Verify the automated commit in
https://github.com/okf-memory/homebrew-tap/commits/main. - Test installation:
brew update brew upgrade okf okf version
(Fallback if token is absent: Manually copy the generated Formula/okf.rb from the release assets into okf-memory/homebrew-tap).
The release workflow automatically updates okf-memory/okf-memory.github.io if WEBSITE_UPDATE_TOKEN is configured:
- Verify the automated commit in
https://github.com/okf-memory/okf-memory.github.io/commits/main. - Verify that
version.json, install scripts, and OpenGraph assets reflect the new version. (Fallback if token is absent: Inokf-memory.github.io, run./scripts/bump-version.sh ${RELEASE_VER} --push).
Test direct global installation via Go toolchain:
go install github.com/okf-memory/okf-agent-memory/cmd/okf@${RELEASE_VER}
okf versionIf an urgent bug is discovered after release:
- Create a hotfix branch from
main:git checkout -b hotfix/v0.2.1 main
- Apply the fix and add a regression test in
pkg/okf/. - Run
make check. - Merge into
mainand releasev0.2.1following this playbook. - Backport hotfix into
developto ensure changes are not lost:git checkout develop git merge main git push origin develop