Complete guided release console workflow
Dependency Audit / dependency-audit (push) Successful in 2m35s
Deployment Installer / deployment-installer (push) Successful in 6s
Security Audit / security-audit (push) Failing after 15s

This commit is contained in:
2026-07-31 05:46:50 +02:00
parent b4248a849e
commit f1fd143ef5
13 changed files with 2332 additions and 117 deletions
+51 -15
View File
@@ -45,7 +45,9 @@ from govoplan_release.release_execution import (
verify_catalog_publication_precondition,
verify_repository_preflight_binding,
verify_repository_step_precondition,
verify_release_alignment,
verify_release_runtime_binding,
verify_candidate_installation,
)
from govoplan_release.release_run import (
ReleaseRunConflict,
@@ -532,7 +534,13 @@ def create_app(
) == "interrupted":
plan_step = release_run_plan_step(run, step_id)
spec = executor_spec(plan_step)
if spec is not None and spec.kind in {"tag", "push"}:
if spec is not None and spec.kind in {
"version",
"commit",
"core_bundle",
"tag",
"push",
}:
repo = str(plan_step["repo"])
receipt = reconciled_repository_receipt(
spec=spec,
@@ -542,6 +550,7 @@ def create_app(
expected_receipt=preceding_repository_receipt(
run, step_id=step_id, repo=repo
),
repo_versions=run["immutable"]["input"]["repo_versions"],
)
return release_run_view(
app.state.release_runs.reconcile_step(
@@ -637,7 +646,15 @@ def create_app(
plan_step=plan_step,
workspace_root=app.state.workspace_root,
)
if spec.kind in {"preflight", "tag", "push"}:
repository_kinds = {
"preflight",
"version",
"commit",
"core_bundle",
"tag",
"push",
}
if spec.kind in repository_kinds:
repo = str(plan_step["repo"])
version = run["immutable"]["input"]["repo_versions"][repo]
expected_repository_receipt = preceding_repository_receipt(
@@ -659,7 +676,21 @@ def create_app(
)
receipt = None
if spec.kind in {"preflight", "tag", "push"}:
source_receipts = {
repo: source_receipt
for repo in run["immutable"]["input"]["repo_versions"]
if isinstance(
(
source_receipt := preceding_repository_receipt(
run,
step_id=step_id,
repo=repo,
)
),
dict,
)
}
if spec.kind in repository_kinds:
result, receipt = execute_repository_step(
spec=spec,
plan_step=plan_step,
@@ -667,6 +698,13 @@ def create_app(
workspace_root=app.state.workspace_root,
remote=DURABLE_REMOTE,
expected_receipt=expected_repository_receipt,
source_receipts=source_receipts,
)
elif spec.kind == "alignment":
result = verify_release_alignment(
repo_versions=run["immutable"]["input"]["repo_versions"],
workspace_root=app.state.workspace_root,
source_receipts=source_receipts,
)
elif spec.kind == "catalog_generate":
attempt_fingerprint = (
@@ -690,18 +728,7 @@ def create_app(
signing_keys=signing_keys,
remote=DURABLE_REMOTE,
check_public=run["immutable"]["input"]["public_catalog"],
source_receipts={
repo: receipt
for repo in run["immutable"]["input"]["repo_versions"]
if isinstance(
(
receipt := preceding_repository_receipt(
run, step_id=step_id, repo=repo
)
),
dict,
)
},
source_receipts=source_receipts,
base_catalog=base_catalog,
base_keyring=base_keyring,
)
@@ -738,6 +765,15 @@ def create_app(
"Published candidate changed while its effect was in flight; "
"reconcile the immutable website commit and remote tag."
) from exc
elif spec.kind == "install_verify":
candidate_path = verified_run_candidate(
run,
candidate_root=app.state.release_candidate_root,
)
result = verify_candidate_installation(
candidate_path=candidate_path,
repo_versions=run["immutable"]["input"]["repo_versions"],
)
else:
raise ReleaseRunConflict("Release executor mapping is incomplete.")