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
6 changes: 6 additions & 0 deletions .changeset/fix-1441-pin-actions-sha.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
---
"@bradygaster/squad-cli": patch
"@bradygaster/squad-sdk": patch
---

Pin GitHub Actions references to full-length commit SHAs across the 10 shipped workflow templates (`squad-ci.yml`, `squad-docs.yml`, `squad-heartbeat.yml`, `squad-issue-assign.yml`, `squad-label-enforce.yml`, `squad-preview.yml`, `squad-promote.yml`, `squad-release.yml`, `squad-triage.yml`, `sync-squad-labels.yml`), matching the same hardening already applied to this repo's own `.github/workflows/`. Orgs that require SHA-pinned actions as a supply-chain policy can now use `squad init`/`squad upgrade` without hand-patching every installed workflow. Closes #1441.
2 changes: 1 addition & 1 deletion .github/actions/setup-squad-node/action.yml
Original file line number Diff line number Diff line change
Expand Up @@ -50,7 +50,7 @@ runs:
exit 1
fi

- uses: actions/setup-node@v4
- uses: actions/setup-node@49933ea5288caeca8642d1e84afbd3f7d6820020 #v4
with:
node-version: ${{ inputs.node-version }}
registry-url: ${{ inputs.registry-url }}
Expand Down
8 changes: 4 additions & 4 deletions .github/workflows/squad-agents-ai-ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -44,10 +44,10 @@ jobs:
DOTNET_NOLOGO: '1'

steps:
- uses: actions/checkout@v7
- uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 #v7

- name: Setup .NET SDK
uses: actions/setup-dotnet@v5
uses: actions/setup-dotnet@26b0ec14cb23fa6904739307f278c14f94c95bf1 #v5
with:
dotnet-version: '10.0.x'

Expand Down Expand Up @@ -77,14 +77,14 @@ jobs:

- name: Upload test results
if: always()
uses: actions/upload-artifact@v7
uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a #v7
with:
name: squad-agents-ai-testresults-${{ matrix.os }}
path: TestResults
if-no-files-found: ignore

- name: Upload NuGet packages
uses: actions/upload-artifact@v7
uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a #v7
with:
name: squad-agents-ai-nupkgs-${{ matrix.os }}
path: nupkgs
Expand Down
8 changes: 4 additions & 4 deletions .github/workflows/squad-agents-ai-release.yml
Original file line number Diff line number Diff line change
Expand Up @@ -62,12 +62,12 @@ jobs:

steps:
- name: Checkout
uses: actions/checkout@v7
uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 #v7
with:
fetch-depth: 0

- name: Setup .NET SDK
uses: actions/setup-dotnet@v5
uses: actions/setup-dotnet@26b0ec14cb23fa6904739307f278c14f94c95bf1 #v5
with:
dotnet-version: '10.0.x'

Expand Down Expand Up @@ -162,15 +162,15 @@ jobs:

- name: Upload NuGet package artifacts
if: always()
uses: actions/upload-artifact@v7
uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a #v7
with:
name: squad-agents-ai-nupkgs-${{ steps.version.outputs.PACKAGE_VERSION }}
path: nupkgs/*
if-no-files-found: ignore

- name: NuGet login (OIDC → temp API key)
id: nuget-login
uses: NuGet/login@v1
uses: NuGet/login@8d196754b4036150537f80ac539e15c2f1028841 #v1
with:
user: ${{ vars.NUGET_USER }}

Expand Down
22 changes: 11 additions & 11 deletions .github/workflows/squad-ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,7 @@ jobs:
code: ${{ steps.filter.outputs.code }}
workflows: ${{ steps.filter.outputs.workflows }}
steps:
- uses: actions/checkout@v7
- uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 #v7
with:
fetch-depth: 0
- name: Detect changed paths
Expand Down Expand Up @@ -62,8 +62,8 @@ jobs:
runs-on: ubuntu-latest
timeout-minutes: 5
steps:
- uses: actions/checkout@v7
- uses: actions/setup-node@v6
- uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 #v7
- uses: actions/setup-node@48b55a011bda9f5d6aeb4c2d9c7362e8dae4041e #v6
with:
node-version: 22
cache: 'npm'
Expand Down Expand Up @@ -91,8 +91,8 @@ jobs:
runs-on: ubuntu-latest
timeout-minutes: 15
steps:
- uses: actions/checkout@v7
- uses: actions/setup-node@v6
- uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 #v7
- uses: actions/setup-node@48b55a011bda9f5d6aeb4c2d9c7362e8dae4041e #v6
with:
node-version: 22
cache: 'npm'
Expand Down Expand Up @@ -189,10 +189,10 @@ jobs:
runs-on: ubuntu-latest
timeout-minutes: 5
steps:
- uses: actions/checkout@v7
- uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 #v7
with:
fetch-depth: 0
- uses: actions/setup-node@v6
- uses: actions/setup-node@48b55a011bda9f5d6aeb4c2d9c7362e8dae4041e #v6
with:
node-version: 22
- name: Fetch PR labels
Expand Down Expand Up @@ -386,10 +386,10 @@ jobs:
runs-on: ubuntu-latest
timeout-minutes: 5
steps:
- uses: actions/checkout@v7
- uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 #v7
with:
fetch-depth: 0
- uses: actions/setup-node@v6
- uses: actions/setup-node@48b55a011bda9f5d6aeb4c2d9c7362e8dae4041e #v6
with:
node-version: 22
- name: Check skip conditions
Expand Down Expand Up @@ -519,10 +519,10 @@ jobs:
runs-on: ubuntu-latest
timeout-minutes: 15
steps:
- uses: actions/checkout@v7
- uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 #v7
with:
fetch-depth: 0
- uses: actions/setup-node@v6
- uses: actions/setup-node@48b55a011bda9f5d6aeb4c2d9c7362e8dae4041e #v6
with:
node-version: 22
cache: 'npm'
Expand Down
6 changes: 3 additions & 3 deletions .github/workflows/squad-docs-links.yml
Original file line number Diff line number Diff line change
Expand Up @@ -9,11 +9,11 @@ jobs:
permissions:
issues: write
steps:
- uses: actions/checkout@v7
- uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 #v7

- name: Check external links
id: lychee
uses: lycheeverse/lychee-action@v2
uses: lycheeverse/lychee-action@8646ba30535128ac92d33dfc9133794bfdd9b411 #v2
with:
args: >-
--verbose
Expand All @@ -27,7 +27,7 @@ jobs:

- name: Create issue on broken links
if: steps.lychee.outputs.exit_code != 0
uses: peter-evans/create-issue-from-file@v6
uses: peter-evans/create-issue-from-file@fca9117c27cdc29c6c4db3b86c48e4115a786710 #v6
with:
title: '🔗 Broken external links detected'
content-filepath: ./lychee/out.md
Expand Down
8 changes: 4 additions & 4 deletions .github/workflows/squad-docs.yml
Original file line number Diff line number Diff line change
Expand Up @@ -21,9 +21,9 @@ jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v7
- uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 #v7

- uses: actions/setup-node@v6
- uses: actions/setup-node@48b55a011bda9f5d6aeb4c2d9c7362e8dae4041e #v6
with:
node-version: '22'
cache: npm
Expand All @@ -41,7 +41,7 @@ jobs:
GITHUB_SHA: ${{ github.sha }}

- name: Upload Pages artifact
uses: actions/upload-pages-artifact@v5
uses: actions/upload-pages-artifact@fc324d3547104276b827a68afc52ff2a11cc49c9 #v5
with:
path: docs/dist

Expand All @@ -54,4 +54,4 @@ jobs:
steps:
- name: Deploy to GitHub Pages
id: deployment
uses: actions/deploy-pages@v5
uses: actions/deploy-pages@cd2ce8fcbc39b97be8ca5fce6e763baed58fa128 #v5
10 changes: 5 additions & 5 deletions .github/workflows/squad-heartbeat.yml
Original file line number Diff line number Diff line change
Expand Up @@ -39,13 +39,13 @@ jobs:
heartbeat:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v7
- uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 #v7

# CI Hardening: GitHub API rate limit monitoring (item 9)
# Ralph makes multiple API calls (list issues, add labels, create comments).
# Check rate limit early to avoid silent failures mid-workflow.
- name: "📊 Check GitHub API rate limit"
uses: actions/github-script@v9
uses: actions/github-script@3a2844b7e9c422d3c10d287c895573f7108da1b3 #v9
with:
script: |
const { data: rateLimit } = await github.rest.rateLimit.get();
Expand All @@ -63,7 +63,7 @@ jobs:
}

- name: Ralph — Repair orphaned squad labels
uses: actions/github-script@v9
uses: actions/github-script@3a2844b7e9c422d3c10d287c895573f7108da1b3 #v9
with:
script: |
// Find issues with squad:{member} labels but missing parent "squad" label
Expand Down Expand Up @@ -115,7 +115,7 @@ jobs:

- name: Ralph — Apply triage decisions
if: steps.check-script.outputs.has_script == 'true' && hashFiles('triage-results.json') != ''
uses: actions/github-script@v9
uses: actions/github-script@3a2844b7e9c422d3c10d287c895573f7108da1b3 #v9
with:
script: |
const fs = require('fs');
Expand Down Expand Up @@ -167,7 +167,7 @@ jobs:
# Copilot auto-assign step (uses PAT if available)
- name: Ralph — Assign @copilot issues
if: success()
uses: actions/github-script@v9
uses: actions/github-script@3a2844b7e9c422d3c10d287c895573f7108da1b3 #v9
with:
github-token: ${{ secrets.COPILOT_ASSIGN_TOKEN || secrets.GITHUB_TOKEN }}
script: |
Expand Down
6 changes: 3 additions & 3 deletions .github/workflows/squad-impact.yml
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,7 @@ jobs:
if: github.actor != 'dependabot[bot]'
steps:
- name: Checkout scripts (base branch only)
uses: actions/checkout@v7
uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 #v7
with:
sparse-checkout: |
scripts/analyze-impact.mjs
Expand All @@ -34,7 +34,7 @@ jobs:
sparse-checkout-cone-mode: false

- name: Setup Node.js
uses: actions/setup-node@v6
uses: actions/setup-node@48b55a011bda9f5d6aeb4c2d9c7362e8dae4041e #v6
with:
node-version: 22

Expand All @@ -45,7 +45,7 @@ jobs:
run: node scripts/analyze-impact.mjs ${{ github.event.pull_request.number }}

- name: Post impact report
uses: actions/github-script@v9
uses: actions/github-script@3a2844b7e9c422d3c10d287c895573f7108da1b3 #v9
with:
script: |
const fs = require('fs');
Expand Down
4 changes: 2 additions & 2 deletions .github/workflows/squad-insider-publish.yml
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,7 @@ jobs:
matrix:
node-version: [22]
steps:
- uses: actions/checkout@v7
- uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 #v7
with:
ref: dev

Expand Down Expand Up @@ -81,7 +81,7 @@ jobs:
matrix:
node-version: [22]
steps:
- uses: actions/checkout@v7
- uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 #v7
with:
ref: dev

Expand Down
8 changes: 4 additions & 4 deletions .github/workflows/squad-issue-assign.yml
Original file line number Diff line number Diff line change
Expand Up @@ -19,12 +19,12 @@ jobs:
if: startsWith(github.event.label.name, 'squad:')
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v7
- uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 #v7

# CI Hardening: GitHub API rate limit monitoring (item 9)
# Issue assignment makes multiple API calls (read team file, add labels, comment, assign).
- name: "📊 Check GitHub API rate limit"
uses: actions/github-script@v9
uses: actions/github-script@3a2844b7e9c422d3c10d287c895573f7108da1b3 #v9
with:
script: |
const { data: rateLimit } = await github.rest.rateLimit.get();
Expand All @@ -42,7 +42,7 @@ jobs:
}

- name: Identify assigned member and trigger work
uses: actions/github-script@v9
uses: actions/github-script@3a2844b7e9c422d3c10d287c895573f7108da1b3 #v9
with:
script: |
const fs = require('fs');
Expand Down Expand Up @@ -153,7 +153,7 @@ jobs:
# Separate step: assign @copilot using PAT (required for coding agent)
- name: Assign @copilot coding agent
if: github.event.label.name == 'squad:copilot'
uses: actions/github-script@v9
uses: actions/github-script@3a2844b7e9c422d3c10d287c895573f7108da1b3 #v9
with:
github-token: ${{ secrets.COPILOT_ASSIGN_TOKEN }}
script: |
Expand Down
4 changes: 2 additions & 2 deletions .github/workflows/squad-label-enforce.yml
Original file line number Diff line number Diff line change
Expand Up @@ -17,10 +17,10 @@ jobs:
enforce:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v7
- uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 #v7

- name: Enforce mutual exclusivity
uses: actions/github-script@v9
uses: actions/github-script@3a2844b7e9c422d3c10d287c895573f7108da1b3 #v9
with:
script: |
const issue = context.payload.issue;
Expand Down
14 changes: 7 additions & 7 deletions .github/workflows/squad-npm-publish.yml
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@ jobs:
runs-on: ubuntu-latest
timeout-minutes: 5
steps:
- uses: actions/checkout@v7
- uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 #v7
with:
fetch-depth: 0
- name: "Scan for file: references in package.json files"
Expand Down Expand Up @@ -119,10 +119,10 @@ jobs:
runs-on: ubuntu-latest
timeout-minutes: 10
steps:
- uses: actions/checkout@v7
- uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 #v7
with:
fetch-depth: 0
- uses: actions/setup-node@v6
- uses: actions/setup-node@48b55a011bda9f5d6aeb4c2d9c7362e8dae4041e #v6
with:
node-version: 22
cache: 'npm'
Expand Down Expand Up @@ -191,10 +191,10 @@ jobs:
runs-on: ubuntu-latest
timeout-minutes: 10
steps:
- uses: actions/checkout@v7
- uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 #v7
with:
fetch-depth: 0
- uses: actions/setup-node@v6
- uses: actions/setup-node@48b55a011bda9f5d6aeb4c2d9c7362e8dae4041e #v6
with:
node-version: 22
registry-url: 'https://registry.npmjs.org'
Expand Down Expand Up @@ -265,10 +265,10 @@ jobs:
runs-on: ubuntu-latest
timeout-minutes: 10
steps:
- uses: actions/checkout@v7
- uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 #v7
with:
fetch-depth: 0
- uses: actions/setup-node@v6
- uses: actions/setup-node@48b55a011bda9f5d6aeb4c2d9c7362e8dae4041e #v6
with:
node-version: 22
registry-url: 'https://registry.npmjs.org'
Expand Down
2 changes: 1 addition & 1 deletion .github/workflows/squad-pr-nudge.yml
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@ jobs:
name: "Nudge Stale PRs"
runs-on: ubuntu-latest
steps:
- uses: actions/github-script@v9
- uses: actions/github-script@3a2844b7e9c422d3c10d287c895573f7108da1b3 #v9
with:
script: |
const STALE_DAYS = 7;
Expand Down
2 changes: 1 addition & 1 deletion .github/workflows/squad-pr-readiness.yml
Original file line number Diff line number Diff line change
Expand Up @@ -33,7 +33,7 @@ jobs:
|| github.event.workflow_run.pull_requests[0] != null)
steps:
- name: Checkout scripts
uses: actions/checkout@v7
uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 #v7
with:
sparse-checkout: scripts/pr-readiness.mjs
sparse-checkout-cone-mode: false
Expand Down
Loading
Loading