- Go 1.25 (
go.modpins the toolchain) git;mercurialandsubversionfor the full test suite
git clone https://github.com/Open-MBEE/SysPI.git
cd SysPI
go build ./...
go test ./...The repository follows git-flow:
developis the integration branch and the default branch. Everyfeat/,fix/,docs/,ci/andtest/branch is cut fromdevelop, and its pull request targetsdevelop.mainis the release branch; release tags (v*) are created there.
- Create a branch from
develop:git checkout -b feat/my-change origin/develop. - Make focused changes with Conventional Commit messages (
<type>(<scope>): <description>; typesfeat,fix,docs,test,refactor,chore). - Add a changelog fragment:
changes/unreleased/<slug>.<section>.mdwith the list item(s) only (seechanges/README.md). Do not editCHANGELOG.md. - Run the gate:
go build ./... && go vet ./... && test -z "$(gofmt -l .)" && SYSPI_REQUIRE_VCS=1 go test ./.... - Open a draft pull request against
develop; mark it ready for review once CI is green. - Respond to review; a maintainer merges.
- Include tests for new behaviour; the end-to-end suite in
tests/e2eis the acceptance gate. - Update
README.md/docs/when a format, command or contract changes. - Keep pull requests to one feature or fix.
- Never rebase or force-push a branch that has a pull request; merge
developinto it instead.
- On a
release/x.y.zbranch fromdevelop, runpython3 scripts/changelog.py release x.y.z: it foldschanges/unreleased/into a dated## x.y.zsection ofCHANGELOG.mdand deletes the fragments. Open the pull request againstdevelopand merge it. - Merge
developintomainand tagvx.y.zonmain; the tag equals the version, as the.project.jsonconvention requires of the packages SysPI installs. - The release workflow (
.github/workflows/release.yml) runs the gate on Linux, macOS and Windows, buildssyspi-<os>-<arch>.tar.gz(.zipon Windows) for amd64 and arm64 withscripts/build-release-artifacts.sh, signsSHA256SUMS.txtwith cosign (keyless; the identity is the workflow on the tag), creates the GitHub release with the changelog section as its notes, then installs it on all three systems withinstall.sh/install.ps1. A tag without aCHANGELOG.mdsection publishes nothing.
scripts/install-test.sh runs the installers against a fake release served locally; CI runs it
on every pull request. To rehearse a release locally: scripts/build-release-artifacts.sh v0.0.0-rc dist.
By contributing you agree that your contributions are licensed under the Apache License 2.0.