ci(branching): adopt develop as the integration branch - #151
Merged
Conversation
Development merges into `develop`; `main` carries releases only and receives `release/x.y.z` and `hotfix/` pull requests. CircleCI's build-test workflow now runs on merges to both branches (the release workflow stays on tags), `make proto-breaking` compares against `origin/develop` by default, and CONTRIBUTING.md, AGENTS.md and docs/project/releasing.md describe the branch model and the release branch flow. Co-Authored-By: jason.han <[email protected]>
Contributor
Author
🤖 Devin AI EngineerI'll be helping with this pull request! Here's what you should know: ✅ I will automatically:
Note: I can only respond to comments from users who have write access to this repository. ⚙️ Control Options:
|
Co-Authored-By: jason.han <[email protected]>
6 tasks
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.
What and why
The repository moves to git-flow with two long-lived branches:
developis the integration branch everyfeature/,fix/,docs/,ci/andtest/branch is cut from and targets;maincarries releases only and receivesrelease/x.y.zandhotfix/pull requests. Tags (v*and the client package tags) are created onmain, and after a releasemainis merged back intodevelop. This PR wires CI for that model and documents it. No Go code changes..circleci/config.yml: thebuild-testworkflow now runs on merges to both branches, so the race suite and the SonarCloud scan cover every integration merge. The&main-onlyanchor becomes&integration-brancheswithbranches: only: [main, develop]; thereleaseworkflow stays on tags only. Workflow and proto-baseline comments name both branches — the baseline logic itself (first parent on a branch build, previousv*tag on a tag build) already works for either branch.Makefile:BUF_BREAKING_REF ?= origin/develop, since that is the branch an ordinary change merges into; comment andproto-breakinghelp text follow. Arelease/orhotfix/branch must compare against the released schema instead, sodocs/project/releasing.mdand the CONTRIBUTING.md versioning rule spell outmake proto-breaking BUF_BREAKING_REF=origin/mainfor those branches; in CI the pull-request workflow already compares againstgithub.base_ref, so a PR tomainis checked againstmain.CONTRIBUTING.md: new Branches section stating the model; branch from / targetdevelop; CircleCI runs "on every push tomainordevelop"; Creating a Release now goes through therelease/x.y.zPR and the back-merge. The Release Checklist item on § Versioning is unchanged.docs/project/releasing.md: new The release branch section before Tagging (cutrelease/x.y.zfromdevelop, fold fragments there withscripts/changelog.py release, PR tomain, tag onmain, mergemainback intodevelop;hotfix/follows the same path). Thegit checkout main && git pull && git tag …block is unchanged. The paragraph saying development happens onJPL-Devin/OpenSysMLwas no longer true — v0.5.0, v0.5.1 and v0.6.0 are tagged onOpen-MBEE/OpenSysMLmain, and the recent history (release/0.7.0, docs(roadmap): add the bindings track, kernel conformance and the API element form #140–docs(roadmap): sweep the roadmap to main after v0.6.0 #149) is Open-MBEE branches — so it is rewritten: releases are tagged onOpen-MBEE/OpenSysML, which is also where development happens, and the clients resolve releases from that repository.AGENTS.md: Golden Rule 3 and §6 step 1 diff againstdevelop. Nothing else changed.README.md: the CI/CD line names both branches. The CircleCI badge stays onmain..github/workflows/pr.yml: header comment only; the workflow is keyed ongithub.base_refand needs no filter change.changes/unreleased/git-flow-branches.changed.md: one user-facing entry.SonarCloud. No
sonar.branch.nameor new-code setting was added. Thesonarsource/[email protected]orb only downloads and runssonar-scanner; SonarCloud lists CircleCI among its integrated CIs, for which the scanner setssonar.branch.nameandsonar.branch.targetitself from the CI environment.sonar.projectVersionis still derived from the nearestv*tag, whichdevelopinherits frommain. Whetherdevelopis analysed as a long-lived or a short-lived branch is decided by the project's long-lived-branch pattern in SonarCloud's project settings, which is a maintainer-side setting rather than something this config can express; the quality gate itself is unchanged.Left on
mainon purpose — the published docs describe the released code:.github/workflows/pages.yml(branches: [main]),mkdocs.ymledit_uri: edit/main/docs/, andREADME.md"rendered frommain".README.mdCircleCI badge (tree/main) and theblob/main/tree/mainlinks inscripts/mkdocs_repo_links.py,scripts/mkdocs_landing.py,docs/guide/,docs/reference/andclients/python/README.md..github/workflows/pr.ymlcomment "publishing a 404 from main" (it is about the Pages deployment).branch = "main"in the Rustgitdependency examples (docs/guide/09-clients.md,docs/reference/rust-api.md,clients/rust/README.md): pinning the release branch is what a user wants.mainrevision they were taken at (docs/project/performance-*.md,pilot-differential.md,pilot-xpect.md,grammar-coverage.md,validation-constraints.md,lossless-library-records.md,element-scoped-tier-gating.md,rdf-corpus-roundtrip.md,training-examples.md), and the staged plan indocs/internals/design/bounded-model-checking.md("leavesmaingreen"), which is a record rather than a policy statement.mainpackages and-X main.Versionldflags, Javasrc/main, Scoop'smainbucket, "main entrypoints", an examplebranch = "main"inelement-identity-annotations.md.docs/project/roadmap.mdanddocs/project/spec-compliance.mdwere not edited.How it was verified
Loading the config with PyYAML also confirms the resolved filters: every
build-testjob carries{'branches': {'only': ['main', 'develop']}, 'tags': {'ignore': '/.*/'}}and thereleasejobs keep{'branches': {'ignore': '/.*/'}, 'tags': {'only': '/^v.*/'}}.go test ./...was not run: no Go file changes.Checklist
make testandmake lintpass locally — not run; no Go file changes (gofmt,go build,go vetpass)changes/unreleased/<slug>.<section>.md, not as an edit toCHANGELOG.mdmake docs-countsrun if a gate count moved — n/aF4,K5) in the body, docs, or changelog