Complete guided release console workflow
This commit is contained in:
+51
-15
@@ -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.")
|
||||
|
||||
|
||||
Reference in New Issue
Block a user