diff --git a/.github/workflows/dependency-review.yml b/.github/workflows/dependency-review.yml deleted file mode 100644 index c303d1e61..000000000 --- a/.github/workflows/dependency-review.yml +++ /dev/null @@ -1,50 +0,0 @@ -name: Dependency Review - -on: - pull_request: - branches: - - develop - - master - - "release/**" - workflow_dispatch: - -permissions: - contents: read - pull-requests: read - -concurrency: - group: dependency-review-${{ github.event.pull_request.number || github.ref }} - cancel-in-progress: true - -jobs: - dependency-review: - runs-on: ubuntu-latest - permissions: - contents: read - pull-requests: read - steps: - - name: Harden the runner (Audit all outbound calls) - uses: step-security/harden-runner@bf7454d06d71f1098171f2acdf0cd4708d7b5920 # v2.20.0 - with: - egress-policy: audit - - - name: Checkout repository - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 - with: - persist-credentials: false - - - name: Log dependency review policy - env: - BASE_REF: ${{ github.base_ref || github.ref_name }} - HEAD_REF: ${{ github.head_ref || github.ref_name }} - run: | - printf 'Dependency Review fails on moderate, high, or critical dependency findings.\n' - printf 'Base ref: %s\n' "$BASE_REF" - printf 'Head ref: %s\n' "$HEAD_REF" - - - name: Review dependency changes - uses: actions/dependency-review-action@a1d282b36b6f3519aa1f3fc636f609c47dddb294 # v5.0.0 - with: - fail-on-severity: moderate - comment-summary-in-pr: never - warn-only: false diff --git a/backend/tests/test_release_governance.py b/backend/tests/test_release_governance.py index a23c70746..ea9d0e27d 100644 --- a/backend/tests/test_release_governance.py +++ b/backend/tests/test_release_governance.py @@ -401,32 +401,6 @@ def test_stepsecurity_remediation_adds_pinned_audit_hardening() -> None: assert "egress-policy: block" in mail_smoke_workflow assert "allowed-endpoints:" in mail_smoke_workflow - dependency_review_workflow = read_repo_text( - ".github/workflows/dependency-review.yml" - ) - assert ( - "actions/dependency-review-action@a1d282b36b6f3519aa1f3fc636f609c47dddb294 # v5.0.0" - in dependency_review_workflow - ) - assert "BASE_REF: ${{ github.base_ref || github.ref_name }}" in ( - dependency_review_workflow - ) - assert "HEAD_REF: ${{ github.head_ref || github.ref_name }}" in ( - dependency_review_workflow - ) - log_dependency_review_step = dependency_review_workflow.split( - "- name: Log dependency review policy", 1 - )[1].split("- name: Review dependency changes", 1)[0] - log_dependency_review_script = log_dependency_review_step.split("run: |", 1)[1] - assert "${{ github.base_ref || github.ref_name }}" not in ( - log_dependency_review_script - ) - assert "${{ github.head_ref || github.ref_name }}" not in ( - log_dependency_review_script - ) - assert "printf 'Base ref: %s\\n' \"$BASE_REF\"" in log_dependency_review_script - assert "printf 'Head ref: %s\\n' \"$HEAD_REF\"" in log_dependency_review_script - pre_commit = read_repo_text(".pre-commit-config.yaml") assert "https://github.com/gitleaks/gitleaks" in pre_commit assert "rev: v8.16.3" in pre_commit @@ -440,6 +414,14 @@ def test_stepsecurity_remediation_adds_pinned_audit_hardening() -> None: assert "rev: v2.17.2" in pre_commit +def test_dependency_review_is_owned_by_the_central_required_workflow() -> None: + assert not (WORKFLOW_DIR / "dependency-review.yml").exists() + + agent_guidance = read_repo_text("AGENTS.md") + assert "central **Security Scan** required gate" in agent_guidance + assert "`dependency-review` (diff-scoped)" in agent_guidance + + def test_actionlint_recognizes_the_mail_egress_runner_label() -> None: actionlint_config = read_repo_text(".github/actionlint.yaml")