Skip to content

ci(core): propose core release bumps and track drift on core main - #13

Open
pimlock wants to merge 1 commit into
mainfrom
feat/5-core-sync/pimlock
Open

pimlock wants to merge 1 commit into
mainfrom
feat/5-core-sync/pimlock

Conversation

@pimlock

@pimlock pimlock commented Nov 8, 2026 •

Copy link
Copy Markdown
Contributor

Summary

Ports sdk-go's core sync automation. An hourly workflow opens a bump PR for each new core release tag. A nightly workflow compares core main with the pin and keeps one Core main drift issue current. Both scripts run locally with --dry-run.

Stacked on #12, which provides the E2E lane that bump PRs run.

Related Issue

Closes #5. Part of NVIDIA/OpenShell#5287.

Changes

  • core-watch.yml (hourly, or by hand with a tag) runs scripts/core-sync/core-tags.sh, then scripts/core-sync/open-bump-pr.sh for each tag. Each bump PR, chore(core): track <tag> on branch core/<tag>:

    • moves OPENSHELL_CORE_REF, regenerates the bindings with mise run proto:gen, and refreshes the files copied from core;
    • shows the proto diff between the two tags in its body;
    • is labeled core-bump plus stable or prerelease.

    Every new stable tag gets a PR, plus the newest pre-release. A newer pre-release proposal closes the older one. A proposal is never reopened once closed.

  • core-drift.yml (nightly) runs scripts/core-sync/drift-check.sh, then update-drift-issue.sh, which creates, updates or closes the Core main drift issue. It checks three things:

    • buf breaking between the pin and core main, for the protos the SDK generates;
    • the unit tests against bindings regenerated from main;
    • the RPCs no SDK code calls (informational only).
  • report-failure.sh adds a dated line to that issue when either workflow fails.

  • scripts/vendored-core-files.txt lists the files copied from core: the OAuth fixture, its license sidecar and the E2E Dockerfile. conformance:check and the bump script both read it, so adding a copied file is a one-line change.

  • mise tasks: core:tags, core:bump, core:drift.

  • Docs: scripts/README.md has the script and workflow tables. The README and CONTRIBUTING.md each have a short section on keeping up with core.

Differences from sdk-go:

Bump PRs run E2E against their own pin, because e2e.yml reads OPENSHELL_CORE_REF from the PR branch.

Needs before it runs on main:

Testing

  • mise run core:tags prints v0.1.8-pre.3; with --all, it prints pre.1 to pre.3.
  • mise run core:bump -- v0.1.8-pre.3 --dry-run --base HEAD builds the bump commit (pin, 2 binding files, no copied-file changes) and prints the PR body with the proto diff. It removes its local branch and worktree afterwards.
  • mise run core:drift against core main (af02016) passes: no breaking changes, and the unit tests pass on regenerated bindings. It lists 73 uncovered RPCs.
  • update-drift-issue.sh --dry-run creates no issue for a passing report and would create one for a failing report. report-failure.sh --dry-run would create the issue with the failure line.
  • conformance:check passes, and fails when the vendored Dockerfile is edited.
  • mise run check, shellcheck, actionlint and zizmor pass.
  • A real core-watch run opens a bump PR, and a real core-drift run updates the drift issue. Both need ci: GitHub App and sdk-bot environment for the automation #7.

@pimlock
pimlock requested a review from SDAChess November 8, 2026 23:32
@pimlock
pimlock marked this pull request as ready for review November 8, 2026 23:48
@pimlock
pimlock requested review from a team as code owners November 8, 2026 23:48
@pimlock
pimlock added this pull request to stack #4 November 8, 2026 23:50
@pimlock
pimlock force-pushed the feat/5-core-sync/pimlock branch from 1b83e75 to 56bc43f Compare November 9, 2026 00:15
@pimlock
pimlock force-pushed the feat/5-core-sync/pimlock branch 3 times, most recently from a801a6e to 3d00186 Compare November 9, 2026 15:51
Base automatically changed from feat/6-e2e/pimlock to main November 9, 2026 16:00
Ports sdk-go's core sync automation into scripts/core-sync/:

- core-watch.yml (hourly) runs core-tags.sh and opens one bump PR per
  new core tag with open-bump-pr.sh: it moves OPENSHELL_CORE_REF,
  regenerates the bindings with `mise run proto:gen`, refreshes the
  files copied from core, and puts the proto diff in the body. Every
  stable tag gets a PR, plus the newest pre-release; a newer
  pre-release closes the older proposal.
- core-drift.yml (nightly) runs drift-check.sh: buf breaking between
  the pin and core main for the protos the SDK generates, the unit tests
  against bindings regenerated from main, and the RPCs the SDK doesn't
  call. update-drift-issue.sh keeps one "Core main drift" issue current.
- report-failure.sh records failed runs in that issue.

Both workflows use the sdk-bot App token, so bump PRs get CI, including
E2E against the proposed core version. The files copied from core are
listed once, in scripts/vendored-core-files.txt, which conformance:check
and the bump script both read. scripts/README.md describes every script
by directory, and the README and CONTRIBUTING.md cover core bumps.

Signed-off-by: Piotr Mlocek <pmlocek@nvidia.com>
@pimlock
pimlock force-pushed the feat/5-core-sync/pimlock branch from 3d00186 to 05d58b3 Compare November 9, 2026 16:00
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.

ci: propose bindings updates for new core releases and track drift against core main

1 participant