diff --git a/k8s/railiance/bootstrap-job.yaml b/k8s/railiance/bootstrap-job.yaml index aef4999..487763d 100644 --- a/k8s/railiance/bootstrap-job.yaml +++ b/k8s/railiance/bootstrap-job.yaml @@ -30,7 +30,7 @@ spec: fsGroup: 10001 containers: - name: bootstrap - image: forgejo.coulomb.social/coulomb/target-revenue:0.1.3 + image: forgejo.coulomb.social/coulomb/target-revenue:0.1.4 imagePullPolicy: IfNotPresent env: - name: TRF_BOOTSTRAP_BINKY diff --git a/k8s/railiance/deployment.yaml b/k8s/railiance/deployment.yaml index 7c37cab..1c9d8c7 100644 --- a/k8s/railiance/deployment.yaml +++ b/k8s/railiance/deployment.yaml @@ -25,7 +25,7 @@ spec: fsGroup: 10001 containers: - name: target-revenue - image: forgejo.coulomb.social/coulomb/target-revenue:0.1.3 + image: forgejo.coulomb.social/coulomb/target-revenue:0.1.4 imagePullPolicy: IfNotPresent ports: - name: http diff --git a/k8s/railiance/migrate-job.yaml b/k8s/railiance/migrate-job.yaml index ff8f1c1..8bbdc12 100644 --- a/k8s/railiance/migrate-job.yaml +++ b/k8s/railiance/migrate-job.yaml @@ -28,7 +28,7 @@ spec: fsGroup: 10001 containers: - name: migrate - image: forgejo.coulomb.social/coulomb/target-revenue:0.1.3 + image: forgejo.coulomb.social/coulomb/target-revenue:0.1.4 imagePullPolicy: IfNotPresent env: - name: TRF_RUN_MIGRATIONS diff --git a/src/target_revenue/service/control_plane_app.py b/src/target_revenue/service/control_plane_app.py index 2063317..a4cd4b6 100644 --- a/src/target_revenue/service/control_plane_app.py +++ b/src/target_revenue/service/control_plane_app.py @@ -26,7 +26,7 @@ from psycopg_pool import ConnectionPool from starlette.middleware.sessions import SessionMiddleware from .. import breach_record, control_plane, ledger, metrics, registry -from . import keys, reference_docs +from . import guidance, keys, reference_docs _STATIC_DIR = os.path.join(os.path.dirname(__file__), "static") _TEMPLATES_DIR = os.path.join(os.path.dirname(__file__), "control_plane_templates") @@ -201,8 +201,27 @@ def dashboard( conn: Connection = Depends(get_connection), ): phases = registry.list_phase_manifests_for_licensor(conn, licensor.licensor_id) + pending = 0 + if registry.has_right(licensor.rights, "operator"): + pending = len(control_plane.list_proposed_entries(conn, status="pending")) + first_id = phases[0]["phase"]["id"] if phases else None + next_steps = guidance.dashboard_guidance( + rights=licensor.rights, + phase_count=len(phases), + pending_proposals=pending, + root_path=_root_path(request), + first_phase_id=first_id, + ) return templates.TemplateResponse( - request, "dashboard.html", _template_context(request, licensor, phases=phases) + request, + "dashboard.html", + _template_context( + request, + licensor, + phases=phases, + next_steps=next_steps, + pending_proposals=pending, + ), ) @@ -291,6 +310,27 @@ def phase_detail( phase_attestation = control_plane.get_or_publish_attestation( conn, phase_id, signing_key ) + extension_count = len(registry.list_extensions(conn)) + pending_for_phase = 0 + if registry.has_right(licensor.rights, "operator"): + pending_for_phase = len( + control_plane.list_proposed_entries(conn, phase_id=phase_id, status="pending") + ) + next_steps = guidance.phase_guidance( + rights=licensor.rights, + root_path=_root_path(request), + phase_id=phase_id, + metrics=computed_metrics, + ledger_len=len(entries), + extension_count=extension_count, + has_attestation=phase_attestation is not None, + pending_proposals_for_phase=pending_for_phase, + ) + checklist = guidance.phase_lifecycle_checklist( + ledger_len=len(entries), + metrics=computed_metrics, + has_attestation=phase_attestation is not None, + ) return templates.TemplateResponse( request, "phase_detail.html", @@ -302,6 +342,8 @@ def phase_detail( metrics=computed_metrics, breaches=breaches, attestation=phase_attestation, + next_steps=next_steps, + checklist=checklist, ), ) diff --git a/src/target_revenue/service/control_plane_templates/base.html b/src/target_revenue/service/control_plane_templates/base.html index 46ce3ba..6abb182 100644 --- a/src/target_revenue/service/control_plane_templates/base.html +++ b/src/target_revenue/service/control_plane_templates/base.html @@ -13,6 +13,7 @@ } +