Skip to content

ci(branching): adopt develop as the integration branch - #151

Merged
HuiJun merged 2 commits into
developfrom
ci/git-flow-develop-main
Sep 9, 2026
Merged

ci(branching): adopt develop as the integration branch#151
HuiJun merged 2 commits into
developfrom
ci/git-flow-develop-main

Conversation

@devin-ai-integration

@devin-ai-integration devin-ai-integration Bot commented Sep 9, 2026

Copy link
Copy Markdown
Contributor

What and why

The repository moves to git-flow with two long-lived branches: develop is the integration branch every feature/, fix/, docs/, ci/ and test/ branch is cut from and targets; main carries releases only and receives release/x.y.z and hotfix/ pull requests. Tags (v* and the client package tags) are created on main, and after a release main is merged back into develop. This PR wires CI for that model and documents it. No Go code changes.

  • .circleci/config.yml: the build-test workflow now runs on merges to both branches, so the race suite and the SonarCloud scan cover every integration merge. The &main-only anchor becomes &integration-branches with branches: only: [main, develop]; the release workflow stays on tags only. Workflow and proto-baseline comments name both branches — the baseline logic itself (first parent on a branch build, previous v* 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 and proto-breaking help text follow. A release/ or hotfix/ branch must compare against the released schema instead, so docs/project/releasing.md and the CONTRIBUTING.md versioning rule spell out make proto-breaking BUF_BREAKING_REF=origin/main for those branches; in CI the pull-request workflow already compares against github.base_ref, so a PR to main is checked against main.
  • CONTRIBUTING.md: new Branches section stating the model; branch from / target develop; CircleCI runs "on every push to main or develop"; Creating a Release now goes through the release/x.y.z PR and the back-merge. The Release Checklist item on § Versioning is unchanged.
  • docs/project/releasing.md: new The release branch section before Tagging (cut release/x.y.z from develop, fold fragments there with scripts/changelog.py release, PR to main, tag on main, merge main back into develop; hotfix/ follows the same path). The git checkout main && git pull && git tag … block is unchanged. The paragraph saying development happens on JPL-Devin/OpenSysML was no longer true — v0.5.0, v0.5.1 and v0.6.0 are tagged on Open-MBEE/OpenSysML main, and the recent history (release/0.7.0, docs(roadmap): add the bindings track, kernel conformance and the API element form #140docs(roadmap): sweep the roadmap to main after v0.6.0 #149) is Open-MBEE branches — so it is rewritten: releases are tagged on Open-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 against develop. Nothing else changed.
  • README.md: the CI/CD line names both branches. The CircleCI badge stays on main.
  • .github/workflows/pr.yml: header comment only; the workflow is keyed on github.base_ref and needs no filter change.
  • changes/unreleased/git-flow-branches.changed.md: one user-facing entry.

SonarCloud. No sonar.branch.name or new-code setting was added. The sonarsource/[email protected] orb only downloads and runs sonar-scanner; SonarCloud lists CircleCI among its integrated CIs, for which the scanner sets sonar.branch.name and sonar.branch.target itself from the CI environment. sonar.projectVersion is still derived from the nearest v* tag, which develop inherits from main. Whether develop is 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 main on purpose — the published docs describe the released code:

  • .github/workflows/pages.yml (branches: [main]), mkdocs.yml edit_uri: edit/main/docs/, and README.md "rendered from main".
  • The README.md CircleCI badge (tree/main) and the blob/main / tree/main links in scripts/mkdocs_repo_links.py, scripts/mkdocs_landing.py, docs/guide/, docs/reference/ and clients/python/README.md.
  • The .github/workflows/pr.yml comment "publishing a 404 from main" (it is about the Pages deployment).
  • branch = "main" in the Rust git dependency examples (docs/guide/09-clients.md, docs/reference/rust-api.md, clients/rust/README.md): pinning the release branch is what a user wants.
  • Historical measurements that name the main revision 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 in docs/internals/design/bounded-model-checking.md ("leaves main green"), which is a record rather than a policy statement.
  • Non-branch uses: main packages and -X main.Version ldflags, Java src/main, Scoop's main bucket, "main entrypoints", an example branch = "main" in element-identity-annotations.md.
  • docs/project/roadmap.md and docs/project/spec-compliance.md were not edited.

How it was verified

$ gofmt -l .                    # empty
$ go build ./...                # ok
$ go vet ./...                  # ok
$ make docs-check
python3 scripts/check-doc-links.py
0 broken link(s)
python3 scripts/check-doc-ids.py
No internal work-item labels in reader-facing documentation
python3 scripts/check-doc-figures.py
check-doc-figures: every quoted oracle figure names the round it measured
python3 scripts/changelog.py check
python3 scripts/mkdocs_census-test.py
Ran 6 tests in 0.018s
OK
$ python3 scripts/changelog.py check   # ok
$ python3 -c 'import yaml; yaml.safe_load(open(".circleci/config.yml"))'   # ok (the circleci CLI is not installed)

Loading the config with PyYAML also confirms the resolved filters: every build-test job carries {'branches': {'only': ['main', 'develop']}, 'tags': {'ignore': '/.*/'}} and the release jobs keep {'branches': {'ignore': '/.*/'}, 'tags': {'only': '/^v.*/'}}.

go test ./... was not run: no Go file changes.

Checklist

  • make test and make lint pass locally — not run; no Go file changes (gofmt, go build, go vet pass)
  • Tests added or updated for the change — n/a, CI configuration and documentation
  • Documentation extended where it already covers the surface (see CONTRIBUTING.md)
  • Changelog entry added as changes/unreleased/<slug>.<section>.md, not as an edit to CHANGELOG.md
  • baselines regenerated and make docs-counts run if a gate count moved — n/a
  • No internal work-item labels (waves, slices, F4, K5) in the body, docs, or changelog

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]>
@devin-ai-integration

Copy link
Copy Markdown
Contributor Author

🤖 Devin AI Engineer

I'll be helping with this pull request! Here's what you should know:

✅ I will automatically:

  • Address comments on this PR. Add '(aside)' to your comment to have me ignore it.
  • Look at CI failures and help fix them

Note: I can only respond to comments from users who have write access to this repository.

⚙️ Control Options:

  • Disable automatic comment, CI, and merge conflict monitoring

@devin-ai-integration
devin-ai-integration Bot marked this pull request as ready for review September 9, 2026 18:41
devin-ai-integration[bot]

This comment was marked as resolved.

@HuiJun
HuiJun merged commit 00a49a7 into develop Sep 9, 2026
12 checks passed
@HuiJun
HuiJun deleted the ci/git-flow-develop-main branch September 9, 2026 20:46
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant