Use this before publishing a new open-source release or updating website download links.
For the exact order of operations, commands, signing secrets, tag checks, GitHub asset verification, and website promotion gate, follow docs/RELEASE_RUNBOOK.md.
- Confirm
.github/workflows/ci.ymlis green for backend tests, desktop parity, macOS packaging, and Windows packaging. python -m pip install -e ".[browser,pdf,ocr,office,test]"python3 script/verify_release_readiness.py --require-websitepython3 script/verify_desktop_parity.pypython3 script/verify_desktop_runtime_smoke.pypython -m unittest discover -v- Before pushing/tagging, run
python3 script/verify_publication_state.py --require-websiteand require tracked runtime and website release files plus clean working trees. python scripts/smoke_agent.py --workspace .python scripts/smoke_real_world_tasks.py --workspace .- When Playwright is installed and local browser launch is allowed, also run
python scripts/smoke_real_world_tasks.py --workspace . --live-browser. - Confirm
.env.exampledocuments every supported provider key without real values. - Confirm high-risk tools still require approval and write audit events.
- Build the Windows app from
apps/windows/Stram.App. - Build and verify the Windows app on Windows or the GitHub Actions
windows-latestrunner; the WinUI project targetsnet8.0-windowsand is not expected to package from macOS/Linux. - Build the macOS app from
apps/macoswithswift build. - Generate local macOS release asset with
./script/package_macos.sh. - Generate local Windows release asset on Windows with
./script/package_windows.ps1. - Verify local macOS package structure and checksum with
./script/verify_macos_package.sh. - Verify local Windows package structure and checksum on Windows with
./script/verify_windows_package.ps1. - To pull desktop installers and legacy bundles from GitHub Actions into the local release directory, run
python3 script/collect_release_artifacts.py --run-id <actions-run-id> --release-tag v<project.version> --require-website. - After generating both local assets, run
python3 script/verify_release_readiness.py --require-website --require-assets. - Generate a local evidence report with
python3 script/generate_release_report.py --require-website --require-assets. - Confirm each desktop release asset includes first-run setup instructions for workspace path, Python path, daemon port, provider/model, and required keys.
- Confirm installer assets include the bundled runtime source,
script/bootstrap_runtime.py, and platform setup entrypoints. - For signed macOS public releases, configure GitHub secrets
MACOS_CERTIFICATE_P12_BASE64,MACOS_CERTIFICATE_PASSWORD,MACOS_KEYCHAIN_PASSWORD,MACOS_CODESIGN_IDENTITY,MACOS_INSTALLER_IDENTITY,MACOS_NOTARIZE=1,APPLE_ID,APPLE_TEAM_ID, andAPPLE_APP_SPECIFIC_PASSWORD. - For signed Windows public releases, configure GitHub secrets
WINDOWS_CERTIFICATE_PFX_BASE64,WINDOWS_CERTIFICATE_PASSWORD,WINDOWS_SIGN=1, and optionallyWINDOWS_TIMESTAMP_URL. - Public tag releases ship an unsigned
Stram-macOS.pkgwhen no macOS Developer ID signing secrets are configured at all; a partial configuration (some secrets set, others missing) fails before packaging instead, since that is almost always a mistake. - Confirm the macOS release job signs with hardened runtime, notarizes, staples the app, and then regenerates
Stram-macOS.zipplus the installableStram-macOS.pkg. - Confirm the Windows release job signs every packaged
.exeand Stram-owned.dllwith timestamped Authenticode before generatingStram-Windows.zipplusStram-Windows-Setup.exe. - For tag releases, CI runs
./script/verify_macos_package.sh --require-signature --require-notarizationand./script/verify_windows_package.ps1 -RequireSignaturebefore upload. - Start each app against
python -m stram serve --workspace . --port 8765. - Verify chat, tools, channels, voice status, autonomy controls, runs, approvals, and local process start/stop.
- Verify channel setup secrets are stored through OS-provided user secret storage, not plaintext repo files.
- Confirm
Stram-Website/AGENTS.mdcovers website source layout, content boundaries, design direction, security, and release gates. npm cinpm run check:downloadsnpm run check:assetsnpm run check:publicationnpm run buildnpm audit --audit-level=moderate- Confirm GitHub links point at
https://github.com/CodeInfinity1/Stram. - Confirm Windows and macOS download links point at the latest signed/notarized release assets.
- Before promoting website changes, require
npm run check:publicationto pass with tracked website publication files and a clean website working tree. - After publishing the tagged release, run
npm run check:release-assetsfrom the website repo. - Publish release assets with the website-targeted names:
Stram-Windows-Setup.exeStram-macOS.pkgStram-Windows.zipStram-macOS.zipchecksums.txt
- Tag the agent repo.
- Confirm the tag matches
v<project.version>frompyproject.toml. - Use
.github/workflows/release.ymlfor tagged GitHub releases when publishing from CI. - For manual release repair from GitHub Actions, set
publish_release=trueandrelease_tag=v<project.version>; the workflow must check out that exact tag before packaging. - Attach Windows installer/package artifacts as
Stram-Windows-Setup.exeandStram-Windows.zip. - Attach macOS installer/package artifacts as
Stram-macOS.pkgandStram-macOS.zipafter signing/notarization checks. - Publish checksums.
- Attach
release-readiness.mdfromscript/generate_release_report.pyto the release. - Update website download links and docs.
- Confirm the release workflow ran
python3 script/verify_release_readiness.py --skip-website --require-github-release --github-release-tag <tag>. - After the tagged GitHub release is published, run
python3 script/verify_release_readiness.py --require-website --require-github-release.