Publish release tags in dependency order
This commit is contained in:
@@ -54,6 +54,11 @@ skips complete registry pairs and does not duplicate an active workflow. Use
|
|||||||
`--repository govoplan-core` for a bounded dispatch or `--verify-existing` to
|
`--repository govoplan-core` for a bounded dispatch or `--verify-existing` to
|
||||||
rebuild and hash-verify versions already present in both registries.
|
rebuild and hash-verify versions already present in both registries.
|
||||||
|
|
||||||
|
For coordinated lockstep tags, `push-release-tag.sh` pushes module tags first,
|
||||||
|
Core next, and the meta tag last. This is a dependency guarantee for a
|
||||||
|
single-capacity Actions runner: the developer package cannot run before its
|
||||||
|
exact Core and module versions have entered the queue.
|
||||||
|
|
||||||
It builds one wheel and, where applicable, one npm tarball. The workflow records
|
It builds one wheel and, where applicable, one npm tarball. The workflow records
|
||||||
the source tag, source commit, filename, size, and SHA-256 in
|
the source tag, source commit, filename, size, and SHA-256 in
|
||||||
`package-artifacts.json` before publishing. Gitea rejects a second upload of the
|
`package-artifacts.json` before publishing. Gitea rejects a second upload of the
|
||||||
|
|||||||
@@ -40,6 +40,15 @@ class ReleaseEntrypointGateTests(unittest.TestCase):
|
|||||||
self.assertLess(full_gate, first_push)
|
self.assertLess(full_gate, first_push)
|
||||||
self.assertLess(manifest_gate, confirm)
|
self.assertLess(manifest_gate, confirm)
|
||||||
|
|
||||||
|
def test_lockstep_release_pushes_meta_package_after_core(self) -> None:
|
||||||
|
script = (META_ROOT / "tools" / "release" / "push-release-tag.sh").read_text()
|
||||||
|
module_push = script.index('for repo in "${MODULE_REPOS[@]}"; do\n run git -C "$repo" push')
|
||||||
|
core_push = script.index('run git -C "$ROOT" push', module_push)
|
||||||
|
support_push = script.index('for repo in "${SUPPORT_REPOS[@]}"; do\n run git -C "$repo" push', core_push)
|
||||||
|
|
||||||
|
self.assertLess(module_push, core_push)
|
||||||
|
self.assertLess(core_push, support_push)
|
||||||
|
|
||||||
def test_source_catalog_generator_enforces_explicit_repo_versions(self) -> None:
|
def test_source_catalog_generator_enforces_explicit_repo_versions(self) -> None:
|
||||||
script = (META_ROOT / "tools" / "release" / "generate-release-catalog.py").read_text()
|
script = (META_ROOT / "tools" / "release" / "generate-release-catalog.py").read_text()
|
||||||
|
|
||||||
|
|||||||
@@ -938,10 +938,13 @@ fi
|
|||||||
run git -C "$ROOT" commit -m "$COMMIT_MESSAGE"
|
run git -C "$ROOT" commit -m "$COMMIT_MESSAGE"
|
||||||
run git -C "$ROOT" tag -a "$TAG" -m "$TAG_MESSAGE"
|
run git -C "$ROOT" tag -a "$TAG" -m "$TAG_MESSAGE"
|
||||||
|
|
||||||
for repo in "${PRE_CORE_REPOS[@]}"; do
|
for repo in "${MODULE_REPOS[@]}"; do
|
||||||
run git -C "$repo" push --atomic "$REMOTE" "HEAD:refs/heads/${BRANCHES[$repo]}" "refs/tags/$TAG"
|
run git -C "$repo" push --atomic "$REMOTE" "HEAD:refs/heads/${BRANCHES[$repo]}" "refs/tags/$TAG"
|
||||||
done
|
done
|
||||||
run git -C "$ROOT" push --atomic "$REMOTE" "HEAD:refs/heads/${BRANCHES[$ROOT]}" "refs/tags/$TAG"
|
run git -C "$ROOT" push --atomic "$REMOTE" "HEAD:refs/heads/${BRANCHES[$ROOT]}" "refs/tags/$TAG"
|
||||||
|
for repo in "${SUPPORT_REPOS[@]}"; do
|
||||||
|
run git -C "$repo" push --atomic "$REMOTE" "HEAD:refs/heads/${BRANCHES[$repo]}" "refs/tags/$TAG"
|
||||||
|
done
|
||||||
|
|
||||||
if [[ "$PUBLISH_WEB_CATALOG" -eq 1 ]]; then
|
if [[ "$PUBLISH_WEB_CATALOG" -eq 1 ]]; then
|
||||||
CATALOG_ARGS=(
|
CATALOG_ARGS=(
|
||||||
|
|||||||
Reference in New Issue
Block a user