Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
23 commits
Select commit Hold shift + click to select a range
c75a283
docs: post-release documentation update for v1.2.0 (#125)
mpaulosky Apr 24, 2026
6352f91
fix(docs): address Aragorn review blockers — PR #126
mpaulosky Apr 24, 2026
566c642
ci: add workflow_dispatch to squad-mark-released.yml
mpaulosky Apr 24, 2026
b79a12e
docs: add Squad Commands quick reference guide (#130)
mpaulosky Apr 24, 2026
475185e
docs: add Review PR shorthand command to Squad Commands (#133)
mpaulosky Apr 24, 2026
e7035b1
sprint(6): merge Sprint 6 — Code Quality (#160)
mpaulosky Apr 25, 2026
29415ad
sprint(7): merge Sprint 7 — xUnit v3 Pilot (Domain.Tests) (#8) (#175)
mpaulosky Apr 25, 2026
1039df8
Sprint 8 retrospective (#181) (#187)
mpaulosky Apr 26, 2026
f47fc70
fix: restore orphaned Unit.Tests coverage by migrating to Web.Tests (…
mpaulosky Apr 26, 2026
dc7e33e
logs: Sprint 9 kickoff — team readiness and phase timeline
Apr 26, 2026
6e6370c
test(Web.Tests): migrate to xUnit v3, fix headers, add AAA pattern, f…
Apr 26, 2026
b5e6c96
docs(squad): update Gimli history for Sprint 9 Web.Tests xUnit v3 mig…
Apr 26, 2026
24c9b6e
test(Web.Tests): migrate to xUnit v3 — headers, AAA, indentation (#190)
mpaulosky Apr 26, 2026
ffb3912
[Sprint 10] Migrate Web.Tests.Bunit to xUnit v3
mpaulosky Apr 26, 2026
2b8a17e
test(integration): migrate Web.Tests.Integration to xUnit v3 (#200)
mpaulosky Apr 26, 2026
dc2235c
chore(deps): bump dotnet-sdk from 10.0.202 to 10.0.203 in the all-act…
dependabot[bot] Apr 26, 2026
a8a2b35
chore(deps): bump the all-actions group with 5 updates (#197)
dependabot[bot] Apr 26, 2026
5e8e658
chore(deps): bump the all-actions group with 6 updates (#198)
dependabot[bot] Apr 26, 2026
14dc27b
sprint(12): merge Sprint 12 — xUnit v3 (AppHost.Tests)
mpaulosky Apr 26, 2026
4ac82b8
sprint(13): merge sprint 13 — xUnit v3 cleanup & docs (#14)
mpaulosky Apr 26, 2026
907d862
Merge main into dev for Sprint 13 release prep
Apr 26, 2026
f28ac3e
Fix Gimli history numbering in PR 212
Apr 26, 2026
02cf370
merge(release): reconcile main into dev before Sprint 13 release (#212)
mpaulosky Apr 26, 2026
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
2 changes: 1 addition & 1 deletion .github/workflows/code-metrics.yml
Original file line number Diff line number Diff line change
Expand Up @@ -45,7 +45,7 @@ jobs:
dir: ${{ './' }}

- name: Create pull request
uses: peter-evans/create-pull-request@v8.1.0
uses: peter-evans/create-pull-request@v8.1.1
if: ${{ steps.dotnet-code-metrics.outputs.updated-metrics }} == 'true'
with:
title: '${{ steps.dotnet-code-metrics.outputs.summary-title }}'
Expand Down
10 changes: 5 additions & 5 deletions .github/workflows/codeql-analysis.yml
Original file line number Diff line number Diff line change
Expand Up @@ -38,21 +38,21 @@ jobs:

steps:
- name: Checkout repository
uses: actions/checkout@v4
uses: actions/checkout@v6

- name: Setup .NET
uses: actions/setup-dotnet@v4
uses: actions/setup-dotnet@v5
with:
dotnet-version: '10.0.x'
dotnet-quality: 'ga'

- name: Initialize CodeQL
uses: github/codeql-action/init@v3
uses: github/codeql-action/init@v4
with:
languages: ${{ matrix.language }}

- name: Autobuild
uses: github/codeql-action/autobuild@v3
uses: github/codeql-action/autobuild@v4

- name: Perform CodeQL Analysis
uses: github/codeql-action/analyze@v3
uses: github/codeql-action/analyze@v4
155 changes: 155 additions & 0 deletions .github/workflows/dependabot-auto-merge.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,155 @@
name: Dependabot Auto-Merge

on:
pull_request_target:
types:
- opened
- reopened
- synchronize
- ready_for_review
branches:
- dev
push:
branches:
- dev
workflow_dispatch:

permissions:
contents: write
pull-requests: write

concurrency:
group: dependabot-auto-merge-${{ github.event.pull_request.number || github.ref_name || github.run_id }}
cancel-in-progress: true

jobs:
enable-auto-merge:
name: Enable auto-merge on Dependabot PRs
if: >-
github.event_name == 'pull_request_target' &&
github.event.pull_request.user.login == 'dependabot[bot]' &&
github.event.pull_request.base.ref == 'dev' &&
github.event.pull_request.draft == false
runs-on: ubuntu-latest

steps:
- name: Enable auto-merge
uses: actions/github-script@v8

Copilot AI Apr 26, 2026

Copy link

Choose a reason for hiding this comment

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

This workflow uses actions/github-script@v8, but the rest of the repo's workflows standardize on actions/github-script@v9. Please bump to @v9 here as well to stay consistent and pick up the latest fixes/security updates.

Suggested change
uses: actions/github-script@v8
uses: actions/github-script@v9

Copilot uses AI. Check for mistakes.
with:
script: |
const pullRequestId = context.payload.pull_request.node_id;
const pullNumber = context.payload.pull_request.number;

try {
await github.graphql(
`
mutation EnableAutoMerge($pullRequestId: ID!) {
enablePullRequestAutoMerge(
input: {
pullRequestId: $pullRequestId
mergeMethod: SQUASH
}
) {
pullRequest {
number
}
}
}
`,
{ pullRequestId }
);

core.info(`Enabled auto-merge for PR #${pullNumber}.`);
} catch (error) {
const message = error.message ?? String(error);
if (message.includes('already enabled')) {
core.info(`Auto-merge is already enabled for PR #${pullNumber}.`);
return;
}

throw error;
}

refresh-open-prs:
name: Refresh open Dependabot PR branches
if: github.event_name != 'pull_request_target'
runs-on: ubuntu-latest

steps:
- name: Update open Dependabot PRs
uses: actions/github-script@v8
with:
script: |
const owner = context.repo.owner;
const repo = context.repo.repo;

const openPullRequests = await github.paginate(
github.rest.pulls.list,
{
owner,
repo,
state: 'open',
base: 'dev',
per_page: 100,
}
);

const dependabotPullRequests = openPullRequests.filter(
pullRequest =>
pullRequest.user?.login === 'dependabot[bot]' &&
pullRequest.draft === false
);

if (dependabotPullRequests.length === 0) {
core.info('No open Dependabot PRs target dev.');
return;
}

for (const pullRequest of dependabotPullRequests) {
try {
await github.rest.pulls.updateBranch({
owner,
repo,
pull_number: pullRequest.number,
});

core.info(`Queued branch update for PR #${pullRequest.number}.`);
} catch (error) {
if (error.status === 409 || error.status === 422) {
core.info(
`No branch update queued for PR #${pullRequest.number}: ${error.message}`
);
} else {
throw error;
}
}

try {
await github.graphql(
`
mutation EnableAutoMerge($pullRequestId: ID!) {
enablePullRequestAutoMerge(
input: {
pullRequestId: $pullRequestId
mergeMethod: SQUASH
}
) {
pullRequest {
number
}
}
}
`,
{ pullRequestId: pullRequest.node_id }
);

core.info(`Ensured auto-merge for PR #${pullRequest.number}.`);
} catch (error) {
const message = error.message ?? String(error);
if (message.includes('already enabled')) {
core.info(`Auto-merge already enabled for PR #${pullRequest.number}.`);
} else {
core.warning(`Could not enable auto-merge for PR #${pullRequest.number}: ${message}`);
}
}
}
17 changes: 10 additions & 7 deletions .github/workflows/milestone-blog.yml
Original file line number Diff line number Diff line change
Expand Up @@ -40,13 +40,15 @@ jobs:
PUBLISH_DATE=$(date -d "${CLOSED_AT}" '+%Y-%m-%d' 2>/dev/null || date '+%Y-%m-%d')
LAST_TAG=$(gh api "repos/${{ github.repository }}/releases?per_page=1" --jq '.[0].tag_name // "none"')

echo "issues<<EOF" >> "$GITHUB_OUTPUT"
echo "$ISSUES" >> "$GITHUB_OUTPUT"
echo "EOF" >> "$GITHUB_OUTPUT"
echo "count=$ISSUE_COUNT" >> "$GITHUB_OUTPUT"
echo "feature_count=$FEATURE_COUNT" >> "$GITHUB_OUTPUT"
echo "publish_date=$PUBLISH_DATE" >> "$GITHUB_OUTPUT"
echo "last_tag=$LAST_TAG" >> "$GITHUB_OUTPUT"
{
echo "issues<<EOF"
echo "$ISSUES"
echo "EOF"
echo "count=$ISSUE_COUNT"
echo "feature_count=$FEATURE_COUNT"
echo "publish_date=$PUBLISH_DATE"
echo "last_tag=$LAST_TAG"
} >> "$GITHUB_OUTPUT"

- name: Create Ralph review issue
env:
Expand Down Expand Up @@ -103,6 +105,7 @@ jobs:
*Triggered by milestone close at ${PUBLISH_DATE}. Workflow: \`milestone-blog.yml\`*"

gh issue create \
--repo "${{ github.repository }}" \
--title "📋 Milestone Review: ${MILESTONE_TITLE} — release or blog?" \
--body "$BODY" \
--label "squad:ralph,pending-review"
31 changes: 16 additions & 15 deletions .github/workflows/milestone-release-decision.yml
Original file line number Diff line number Diff line change
Expand Up @@ -41,18 +41,19 @@ jobs:
BUMP=$(echo "$ISSUE_BODY" | grep -oE 'bump[: ]+(major|minor|patch)' | grep -oE '(major|minor|patch)' | head -1)
BUMP=${BUMP:-minor}

echo "milestone_title=$MILESTONE_TITLE" >> "$GITHUB_OUTPUT"
echo "bump=$BUMP" >> "$GITHUB_OUTPUT"
echo "issue_number=${{ github.event.issue.number }}" >> "$GITHUB_OUTPUT"
{
echo "milestone_title=$MILESTONE_TITLE"
echo "bump=$BUMP"
} >> "$GITHUB_OUTPUT"

- name: Trigger release workflow
env:
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
BUMP: ${{ steps.info.outputs.bump }}
run: |
gh workflow run squad-milestone-release.yml \
--field bump="${BUMP}" \
--field milestone_number="${{ github.event.issue.number }}"
--repo "${{ github.repository }}" \
--field bump="${BUMP}"
echo "✅ Triggered squad-milestone-release.yml (bump: ${BUMP})"

- name: Add release-triggered comment and close review issue
Expand All @@ -61,7 +62,7 @@ jobs:
ISSUE_NUMBER: ${{ github.event.issue.number }}
BUMP: ${{ steps.info.outputs.bump }}
run: |
gh issue comment "$ISSUE_NUMBER" --body "✅ **Release flow triggered.**
gh issue comment "$ISSUE_NUMBER" --repo "${{ github.repository }}" --body "✅ **Release flow triggered.**

- Version bump: \`${BUMP}\`
- \`squad-milestone-release.yml\` dispatched — this will create the tag, push it, and publish a GitHub Release.
Expand All @@ -70,7 +71,7 @@ jobs:

Closing this review issue."

gh issue close "$ISSUE_NUMBER" --reason completed
gh issue close "$ISSUE_NUMBER" --repo "${{ github.repository }}" --reason completed

# ─────────────────────────────────────────────────────────────────────────────
# PATH B: Blog Only
Expand All @@ -91,12 +92,11 @@ jobs:
PUBLISH_DATE=$(date '+%Y-%m-%d')
SLUG=$(echo "$MILESTONE_TITLE" | tr '[:upper:]' '[:lower:]' | sed 's/[^a-z0-9]/-/g' | sed 's/--*/-/g' | sed 's/^-\|-$//g')

# Pull closed issues list from the review issue body
ISSUES_BLOCK=$(echo "${{ github.event.issue.body }}" | sed -n '/### Closed Issues/,/---/p' | head -50)

echo "milestone_title=$MILESTONE_TITLE" >> "$GITHUB_OUTPUT"
echo "publish_date=$PUBLISH_DATE" >> "$GITHUB_OUTPUT"
echo "slug=$SLUG" >> "$GITHUB_OUTPUT"
{
echo "milestone_title=$MILESTONE_TITLE"
echo "publish_date=$PUBLISH_DATE"
echo "slug=$SLUG"
} >> "$GITHUB_OUTPUT"

- name: Create Bilbo blog brief issue
env:
Expand Down Expand Up @@ -130,6 +130,7 @@ jobs:
- Close both this issue and the review issue (#${REVIEW_ISSUE_NUMBER}) in the PR description"

gh issue create \
--repo "${{ github.repository }}" \
--title "Blog post: ${MILESTONE_TITLE} — milestone recap" \
--body "$BODY" \
--label "squad:bilbo"
Expand All @@ -139,12 +140,12 @@ jobs:
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
ISSUE_NUMBER: ${{ github.event.issue.number }}
run: |
gh issue comment "$ISSUE_NUMBER" --body "📝 **Blog-only path selected.**
gh issue comment "$ISSUE_NUMBER" --repo "${{ github.repository }}" --body "📝 **Blog-only path selected.**

A \`squad:bilbo\` blog brief issue has been created. Once Bilbo's PR merges:
- \`docs/blog/index.md\` will be updated (the blog page)
- \`blog-readme-sync.yml\` will update \`README.md\` (the Page)

Closing this review issue."

gh issue close "$ISSUE_NUMBER" --reason completed
gh issue close "$ISSUE_NUMBER" --repo "${{ github.repository }}" --reason completed
9 changes: 6 additions & 3 deletions .github/workflows/release-blog.yml
Original file line number Diff line number Diff line change
Expand Up @@ -30,9 +30,11 @@ jobs:
PREV_TAG=$(gh api "repos/${{ github.repository }}/releases" \
--jq '[.[] | select(.tag_name != "'"${TAG}"'")] | sort_by(.published_at) | reverse | .[0].tag_name // "HEAD~50"')

echo "publish_date=$PUBLISH_DATE" >> "$GITHUB_OUTPUT"
echo "slug=$SLUG" >> "$GITHUB_OUTPUT"
echo "prev_tag=$PREV_TAG" >> "$GITHUB_OUTPUT"
{
echo "publish_date=$PUBLISH_DATE"
echo "slug=$SLUG"
echo "prev_tag=$PREV_TAG"
} >> "$GITHUB_OUTPUT"

- name: Create Bilbo blog brief issue
env:
Expand Down Expand Up @@ -73,6 +75,7 @@ jobs:
- Close this issue in the PR description with \`Closes #<this-issue>\`"

gh issue create \
--repo "${{ github.repository }}" \
--title "Blog post: ${RELEASE_NAME} — release recap" \
--body "$BODY" \
--label "squad:bilbo"
4 changes: 2 additions & 2 deletions .github/workflows/squad-ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -18,10 +18,10 @@ jobs:
timeout-minutes: 20

steps:
- uses: actions/checkout@v4
- uses: actions/checkout@v6

- name: Setup .NET
uses: actions/setup-dotnet@v4
uses: actions/setup-dotnet@v5
with:
global-json-file: global.json

Expand Down
2 changes: 1 addition & 1 deletion .github/workflows/squad-label-enforce.yml
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@ jobs:
enforce:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: actions/checkout@v6

- name: Enforce mutual exclusivity
uses: actions/github-script@v9
Expand Down
3 changes: 2 additions & 1 deletion .github/workflows/squad-preview.yml
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@ jobs:
- uses: actions/checkout@v6

- name: Setup .NET
uses: actions/setup-dotnet@v4
uses: actions/setup-dotnet@v5
with:
global-json-file: global.json

Expand All @@ -28,5 +28,6 @@ jobs:
- name: Run unit tests
run: |
dotnet test tests/Architecture.Tests --configuration Release --no-build --verbosity normal
dotnet test tests/Domain.Tests --configuration Release --no-build --verbosity normal
dotnet test tests/Web.Tests --configuration Release --no-build --verbosity normal
dotnet test tests/Web.Tests.Integration --configuration Release --no-build --verbosity normal
2 changes: 1 addition & 1 deletion .github/workflows/squad-promote.yml
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,7 @@ jobs:
token: ${{ secrets.GITHUB_TOKEN }}

- name: Setup .NET
uses: actions/setup-dotnet@v4
uses: actions/setup-dotnet@v5
with:
global-json-file: global.json

Expand Down
Loading
Loading