Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
88 changes: 14 additions & 74 deletions .github/workflows/actions.lock
Original file line number Diff line number Diff line change
Expand Up @@ -29,24 +29,23 @@ workflows:
'.github/workflows/fleet-report-back.yml':
- 'actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1'
- 'actions/download-artifact@9000827ccba6bdab643e8b6fd33ac0654aef8333'
'.github/workflows/governance.yml':
- 'metadatastician/standards@75bd5994470661a099df562d6d5ad2fe744dbd66'
'.github/workflows/governance.yml': []
'.github/workflows/hypatia-dispatch-intake.yml':
- 'actions/checkout@v7.0.1'
'.github/workflows/hypatia-scan.yml':
- 'metadatastician/standards@75bd5994470661a099df562d6d5ad2fe744dbd66'
'.github/workflows/hypatia-scan.yml': []
'.github/workflows/inbox-steward.yml':
- 'actions/checkout@v7.0.1'
- 'step-security/harden-runner@46b06cea07f9e64621fdf066ba77ac6915163d43'
'.github/workflows/instant-sync.yml':
- 'peter-evans/repository-dispatch@v4.0.1'
- 'step-security/harden-runner@46b06cea07f9e64621fdf066ba77ac6915163d43'
'.github/workflows/label-triage.yml': []
'.github/workflows/labels.yml': []
'.github/workflows/learning-loop.yml':
- 'actions/checkout@v7.0.1'
- 'actions/upload-artifact@v7.0.2'
'.github/workflows/lock-sync-gate.yml': []
'.github/workflows/mirror.yml':
- 'metadatastician/standards@75bd5994470661a099df562d6d5ad2fe744dbd66'
'.github/workflows/mirror.yml': []
'.github/workflows/pages.yml':
- 'actions/checkout@v7.0.1'
- 'actions/deploy-pages@v5.0.1'
Expand All @@ -58,16 +57,16 @@ workflows:
- 'swatinem/rust-cache@v2.9.3'
'.github/workflows/push-email-notify.yml':
- 'hyperpolymath/smtp-notify-action@v0.5.0'
- 'step-security/harden-runner@46b06cea07f9e64621fdf066ba77ac6915163d43'
'.github/workflows/repo-integrity-guard.yml':
- 'actions/checkout@v7.0.1'
'.github/workflows/rust.yml':
- 'actions/checkout@v7.0.1'
'.github/workflows/scorecard.yml':
- 'metadatastician/standards@75bd5994470661a099df562d6d5ad2fe744dbd66'
'.github/workflows/secret-scanner.yml':
- 'hyperpolymath/cicd-suite@4404c3c0474e17753fe7689f3485c02890aac113'
'.github/workflows/scorecard.yml': []
'.github/workflows/secret-scanner.yml': []
'.github/workflows/supervised-fleet-scan.yml':
- 'actions/checkout@v7.0.1'
- 'step-security/harden-runner@46b06cea07f9e64621fdf066ba77ac6915163d43'
'.github/workflows/vendored-bot-drift.yml':
- 'actions/checkout@v7.0.1'
dependencies:
Expand Down Expand Up @@ -133,36 +132,11 @@ dependencies:
repo_id: 496012378
uses:
- 'actions/upload-artifact@bbbca2ddaa5d8feaa63e36b76fdaad77386f024f'
'denoland/setup-deno@22d081ff2d3a40755e97629de92e3bcbfa7cf2ed':
ref: 'v2.0.5'
commit: 'sha1-22d081ff2d3a40755e97629de92e3bcbfa7cf2ed'
owner_id: 42048915
repo_id: 356423100
'dtolnay/rust-toolchain@e2a55d2ffb04f378e9626c28d38b36d230d1e12f':
ref: 'v1'
commit: 'sha1-e2a55d2ffb04f378e9626c28d38b36d230d1e12f'
owner_id: 1940490
repo_id: 260749683
'dtolnay/rust-toolchain@v1':
ref: 'v1'
commit: 'sha1-02cb101ec7c40f2c49e1d9714d64511d8e1b74de'
owner_id: 1940490
repo_id: 260749683
'editorconfig-checker/action-editorconfig-checker@51f63319f592f97930c73d9c46184d20bd206393':
ref: 'v3.0.0'
commit: 'sha1-51f63319f592f97930c73d9c46184d20bd206393'
owner_id: 26415196
repo_id: 297874902
'erlef/setup-beam@54075bcc5e249e4758d363f27d099f55d843f124':
ref: 'v1.24.1'
commit: 'sha1-54075bcc5e249e4758d363f27d099f55d843f124'
owner_id: 47606891
repo_id: 331103973
'github/codeql-action@b96794f015dfd88f77b49b1c93e0fa7110f94c63':
ref: 'v4.38.0'
commit: 'sha1-b96794f015dfd88f77b49b1c93e0fa7110f94c63'
owner_id: 9919
repo_id: 259445878
'github/codeql-action@v4.38.2':
ref: 'v4.38.2'
commit: 'sha1-2892aa5e19bbd11bc0cff5427e3b750a04d9e3c2'
Expand All @@ -173,13 +147,6 @@ dependencies:
commit: 'sha1-0f8e8c99d88aeb3fbfd523f1ef2c6f762d10d64d'
owner_id: 75048950
repo_id: 623796603
'hyperpolymath/cicd-suite@4404c3c0474e17753fe7689f3485c02890aac113':
ref: '4404c3c0474e17753fe7689f3485c02890aac113'
commit: 'sha1-4404c3c0474e17753fe7689f3485c02890aac113'
owner_id: 6759885
repo_id: 1326697643
uses:
- 'actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1'
'hyperpolymath/deed-ecosystem@main':
ref: 'main'
commit: 'sha1-ed83d6927e8fb21431e403dbf6d7a4af96772746'
Expand All @@ -195,45 +162,18 @@ dependencies:
commit: 'sha1-c1c9fa07992a02c1fd3d67a0dc1b08cccb852aef'
owner_id: 6759885
repo_id: 1352485172
'metadatastician/standards@75bd5994470661a099df562d6d5ad2fe744dbd66':
ref: '75bd5994470661a099df562d6d5ad2fe744dbd66'
commit: 'sha1-75bd5994470661a099df562d6d5ad2fe744dbd66'
owner_id: 297579217
repo_id: 1116521501
uses:
- 'actions/cache@55cc8345863c7cc4c66a329aec7e433d2d1c52a9'
- 'actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1'
- 'actions/upload-artifact@cf430e030ddbb5b0abf93d22962f4752f3646cd9'
- 'denoland/setup-deno@22d081ff2d3a40755e97629de92e3bcbfa7cf2ed'
- 'dtolnay/rust-toolchain@e2a55d2ffb04f378e9626c28d38b36d230d1e12f'
- 'editorconfig-checker/action-editorconfig-checker@51f63319f592f97930c73d9c46184d20bd206393'
- 'erlef/setup-beam@54075bcc5e249e4758d363f27d099f55d843f124'
- 'github/codeql-action@b96794f015dfd88f77b49b1c93e0fa7110f94c63'
- 'ossf/scorecard-action@2d1146689b8cda280b9bc96326124645441f03bc'
- 'oven-sh/setup-bun@0c5077e51419868618aeaa5fe8019c62421857d6'
- 'webfactory/ssh-agent@e83874834305fe9a4a2997156cb26c5de65a8555'
'ossf/scorecard-action@2d1146689b8cda280b9bc96326124645441f03bc':
ref: 'v2.4.4'
commit: 'sha1-2d1146689b8cda280b9bc96326124645441f03bc'
owner_id: 67707773
repo_id: 421101922
'oven-sh/setup-bun@0c5077e51419868618aeaa5fe8019c62421857d6':
ref: 'v2.2.0'
commit: 'sha1-0c5077e51419868618aeaa5fe8019c62421857d6'
owner_id: 108928776
repo_id: 512644635
'peter-evans/repository-dispatch@v4.0.1':
ref: 'v4.0.1'
commit: 'sha1-28959ce8df70de7be546dd1250a005dd32156697'
owner_id: 18365890
repo_id: 220359305
'step-security/harden-runner@46b06cea07f9e64621fdf066ba77ac6915163d43':
ref: 'v2.22.3'
commit: 'sha1-46b06cea07f9e64621fdf066ba77ac6915163d43'
owner_id: 88700172
repo_id: 422287306
'swatinem/rust-cache@v2.9.3':
ref: 'v2.9.3'
commit: 'sha1-d1527c8f67ef9af357290475d4af4b0fab8f12e0'
owner_id: 580492
repo_id: 298565987
'webfactory/ssh-agent@e83874834305fe9a4a2997156cb26c5de65a8555':
ref: 'v0.10.0'
commit: 'sha1-e83874834305fe9a4a2997156cb26c5de65a8555'
owner_id: 135788
repo_id: 208510314
53 changes: 43 additions & 10 deletions .github/workflows/e2e.yml
Original file line number Diff line number Diff line change
Expand Up @@ -8,23 +8,40 @@ on:
branches: [main]
pull_request:
branches: ['**']
permissions:
actions: read
contents: read
permissions: {}
jobs:
e2e:
name: E2E tests
permissions:
actions: read
contents: read
needs: pinned-source-closure
if: ${{ always() }}
runs-on: ubuntu-latest
timeout-minutes: 30
steps:
- name: Require verified pinned-source closure
env:
CLOSURE_RESULT: ${{ needs.pinned-source-closure.result }}
run: |
if [ "$CLOSURE_RESULT" != success ]; then
echo "Pinned-source closure did not pass: $CLOSURE_RESULT" >&2
exit 1
fi
- uses: actions/checkout@v7.0.1
- name: Install PyYAML (for workflow YAML validation)
run: pip install pyyaml --quiet
- name: Audit workflow lock auditor dependencies
run: |
set -euo pipefail
# Official RustSec binary, immutable content hash from its release asset.
archive="$RUNNER_TEMP/cargo-audit.tgz"
curl --proto '=https' --proto-redir '=https' -fsSL --retry 3 https://github.com/rustsec/rustsec/releases/download/cargo-audit/v0.22.2/cargo-audit-x86_64-unknown-linux-gnu-v0.22.2.tgz -o "$archive"
printf '%s %s\n' ab28a1bdb54db4d5d8ad5981cf1f959410370b3d28250dbd35f6a44248620e39 "$archive" | sha256sum -c -
tar -xzf "$archive" -C "$RUNNER_TEMP"
"$RUNNER_TEMP/cargo-audit-x86_64-unknown-linux-gnu-v0.22.2/cargo-audit" audit --file tools/workflow-lock-audit/Cargo.lock --deny warnings
- name: Test workflow lock-map and regeneration audit

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P1 Badge Restore PyYAML before running the E2E script

Replacing the PyYAML installation with this step removes a prerequisite that is still used later: tests/e2e.sh:170 executes import yaml for every workflow, and .github/workflows/labels.yml:12 explicitly documents that PyYAML is not preinstalled on GitHub runners. On a clean ubuntu-latest image without that module, every parse attempt is therefore counted as a failure and the E2E job fails; retain the installation or migrate that validation before removing it.

Useful? React with 👍 / 👎.

run: |
python3 tests/workflow-lock-map-test.py
python3 tests/lock-regeneration-test.py
python3 scripts/audit-workflow-lock-map.py
cargo test --locked --manifest-path tools/workflow-lock-audit/Cargo.toml
bash scripts/audit-workflow-lock-map.sh
- name: Verify automation quarantine
run: bash tests/automation-quarantine-test.sh
- name: Verify fix-outcome verdicts
Expand All @@ -41,10 +58,26 @@ jobs:
run: bash tests/fleet-report-back-test.sh
- name: Fleet enrolment fixer (report-back rollout)
run: bash tests/fix-fleet-enrolment-test.sh
- name: Lock closure contracts (dropped edges, malformed refs)
pinned-source-closure:
name: Pinned source closure
runs-on: ubuntu-latest
timeout-minutes: 15
permissions:
contents: read
steps:
- uses: actions/checkout@v7.0.1
- name: Set source cache
run: printf 'PINNED_SOURCE_CACHE=%s/fleet-pinned-sources\n' "$RUNNER_TEMP" >> "$GITHUB_ENV"
- name: Test pinned-source failure modes
run: bash scripts/tests/pinned-reusable-sources-test.sh
- name: Authenticate pinned reusable sources
run: bash scripts/audit-pinned-reusable-sources.sh --fetch-sources
- name: Preserve lock closure contracts
run: bash scripts/tests/lock-closure-test.sh
- name: Audit this repository's lock closure
- name: Audit vendor lock and pinned-source closure
run: ./scripts/audit-lock-closure.sh
- name: Test source closure through migration preflight
run: bash scripts/tests/pinned-source-entrypoints-test.sh
- name: Prepared secret-scanner migration stays gated
run: |
# 0 = every precondition holds, 2 = evidence still missing (expected
Expand Down
2 changes: 1 addition & 1 deletion .github/workflows/governance.yml
Original file line number Diff line number Diff line change
Expand Up @@ -35,7 +35,7 @@ permissions:

jobs:
governance:
uses: metadatastician/standards/.github/workflows/governance-reusable.yml@75bd5994470661a099df562d6d5ad2fe744dbd66
uses: metadatastician/standards/.github/workflows/governance-reusable.yml@ea2f4d8a886585ed442687ae63d4ad7493379ba4
permissions:
actions: read
contents: read
Expand Down
33 changes: 28 additions & 5 deletions .github/workflows/inbox-steward.yml
Original file line number Diff line number Diff line change
Expand Up @@ -47,11 +47,7 @@
# unattended. It still runs on PR/review/check events and workflow_dispatch for
# MONITORING; the auto-merge job itself is gated OFF by default (see below).

permissions:
contents: write
pull-requests: write
repository-projects: read
actions: read
permissions: {}

concurrency:
group: ${{ github.workflow }}-${{ github.repository }}
Expand All @@ -61,6 +57,11 @@
# Job 1: Identify PRs that have passed all required checks
identify-passed-prs:
name: Identify PRs passed CICD
permissions:
contents: read
pull-requests: read
repository-projects: read
actions: read
runs-on: ubuntu-latest
timeout-minutes: 10
outputs:
Expand Down Expand Up @@ -154,6 +155,11 @@
# Job 2: Validate each PR against merge criteria
validate-prs:
name: Validate PRs against criteria
permissions:
contents: read
pull-requests: read
repository-projects: read
actions: read
runs-on: ubuntu-latest
timeout-minutes: 15
needs: identify-passed-prs
Expand Down Expand Up @@ -280,6 +286,12 @@
# Job 3: Auto-merge qualifying PRs
auto-merge-prs:
name: Auto-merge qualifying PRs
permissions:
contents: write
pull-requests: write
outputs:
merged_count: ${{ steps.merge.outputs.merged_count }}
failed_count: ${{ steps.merge.outputs.failed_count }}
runs-on: ubuntu-latest
timeout-minutes: 10
needs: validate-prs
Expand Down Expand Up @@ -373,12 +385,23 @@
# Job 4: Dispatch lessons to Hypatia
dispatch-to-hypatia:
name: Dispatch lessons to Hypatia
permissions:
contents: read
runs-on: ubuntu-latest
timeout-minutes: 5
needs: [identify-passed-prs, validate-prs, auto-merge-prs]
if: always() && (needs.identify-passed-prs.result == 'success' || needs.validate-prs.result == 'success')

steps:
- name: Harden credential-bearing runner
uses: step-security/harden-runner@46b06cea07f9e64621fdf066ba77ac6915163d43
with:
egress-policy: block
disable-telemetry: true
allowed-endpoints: >-
github.com:443
api.github.com:443
codeload.github.com:443
- name: Checkout gitbot-fleet
uses: actions/checkout@v7.0.1

Expand Down
7 changes: 7 additions & 0 deletions .github/workflows/instant-sync.yml
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,13 @@ jobs:
env:
HAS_TOKEN: ${{ secrets.FARM_DISPATCH_TOKEN != '' }}
steps:
- name: Harden credential-bearing runner
uses: step-security/harden-runner@46b06cea07f9e64621fdf066ba77ac6915163d43
with:
egress-policy: block
disable-telemetry: true
allowed-endpoints: >-
api.github.com:443
- name: Trigger Propagation
if: env.HAS_TOKEN == 'true'
uses: peter-evans/repository-dispatch@v4.0.1
Expand Down
10 changes: 10 additions & 0 deletions .github/workflows/push-email-notify.yml
Original file line number Diff line number Diff line change
Expand Up @@ -40,6 +40,16 @@ jobs:
runs-on: ubuntu-latest
timeout-minutes: 5
steps:
- name: Harden credential-bearing runner
uses: step-security/harden-runner@46b06cea07f9e64621fdf066ba77ac6915163d43
with:
egress-policy: block
disable-telemetry: true
allowed-endpoints: >-
github.com:443
api.github.com:443
release-assets.githubusercontent.com:443
${{ secrets.SMTP_HOST }}:${{ secrets.SMTP_PORT || '465' }}
- name: Send push notification email
uses: hyperpolymath/smtp-notify-action@v0.5.0
with:
Expand Down
6 changes: 6 additions & 0 deletions .github/workflows/supervised-fleet-scan.yml
Original file line number Diff line number Diff line change
Expand Up @@ -34,6 +34,12 @@ jobs:
timeout-minutes: 60

steps:
- name: Harden credential-bearing runner
uses: step-security/harden-runner@46b06cea07f9e64621fdf066ba77ac6915163d43
with:
egress-policy: audit
# Scheduled fleet scans contact rule-specific services; audit the
# observed boundary before enabling a reviewed endpoint block list.
- name: Checkout gitbot-fleet
uses: actions/checkout@v7.0.1
with:
Expand Down
Loading
Loading