diff --git a/.github/dependabot.yml b/.github/dependabot.yml index 797c69f0..17a35b1c 100644 --- a/.github/dependabot.yml +++ b/.github/dependabot.yml @@ -6,7 +6,7 @@ version: 2 updates: - + # Maintain dependencies for GitHub Actions - package-ecosystem: "github-actions" directory: "/" diff --git a/.github/workflows/code-metrics.yml b/.github/workflows/code-metrics.yml index 9e4fbe24..749e2606 100644 --- a/.github/workflows/code-metrics.yml +++ b/.github/workflows/code-metrics.yml @@ -50,4 +50,4 @@ jobs: with: title: '${{ steps.dotnet-code-metrics.outputs.summary-title }}' body: '${{ steps.dotnet-code-metrics.outputs.summary-details }}' - commit-message: '.NET code metrics, automated pull request.' \ No newline at end of file + commit-message: '.NET code metrics, automated pull request.' diff --git a/.github/workflows/lint-markdown.yml b/.github/workflows/lint-markdown.yml new file mode 100644 index 00000000..d03c4004 --- /dev/null +++ b/.github/workflows/lint-markdown.yml @@ -0,0 +1,32 @@ +name: Lint Markdown +# Runs markdownlint-cli2 using the repo's .markdownlint.json config + +on: + push: + branches: [dev, insider] + paths: ['**.md', '.markdownlint.json', '.github/workflows/lint-markdown.yml'] + pull_request: + branches: [dev, preview, main, insider] + paths: ['**.md', '.markdownlint.json', '.github/workflows/lint-markdown.yml'] + +permissions: + contents: read + +jobs: + markdownlint: + name: markdownlint + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v6 + + - name: Run markdownlint + uses: DavidAnson/markdownlint-cli2-action@v23 + with: + globs: | + **/*.md + !.squad/** + !.copilot/** + !.github/agents/** + !.github/skills/** + !.github/copilot-instructions.md + config: '.markdownlint.json' diff --git a/.github/workflows/lint-yaml.yml b/.github/workflows/lint-yaml.yml new file mode 100644 index 00000000..af66e806 --- /dev/null +++ b/.github/workflows/lint-yaml.yml @@ -0,0 +1,38 @@ +name: Lint YAML +# Validates all workflow and config YAML files + +on: + push: + branches: [dev, insider] + paths: ['**.yml', '**.yaml'] + pull_request: + branches: [dev, preview, main, insider] + paths: ['**.yml', '**.yaml'] + +permissions: + contents: read + +jobs: + yamllint: + name: yamllint + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v6 + + - name: Run yamllint + uses: ibiqlik/action-yamllint@v3 + with: + file_or_dir: . + config_data: | + extends: default + ignore: | + .squad/ + rules: + line-length: + max: 200 + allow-non-breakable-inline-mappings: true + truthy: + allowed-values: ['true', 'false', 'on'] + brackets: + min-spaces-inside: 0 + max-spaces-inside: 1 diff --git a/.github/workflows/squad-heartbeat.yml b/.github/workflows/squad-heartbeat.yml index 00b32a1c..6a68a488 100644 --- a/.github/workflows/squad-heartbeat.yml +++ b/.github/workflows/squad-heartbeat.yml @@ -61,13 +61,13 @@ jobs: core.info('No triage results — board is clear'); return; } - + const results = JSON.parse(fs.readFileSync(path, 'utf8')); if (results.length === 0) { core.info('📋 Board is clear — Ralph found no untriaged issues'); return; } - + for (const decision of results) { try { await github.rest.issues.addLabels({ @@ -76,7 +76,7 @@ jobs: issue_number: decision.issueNumber, labels: [decision.label] }); - + await github.rest.issues.createComment({ owner: context.repo.owner, repo: context.repo.repo, @@ -92,13 +92,13 @@ jobs: '> To reassign, swap the `squad:*` label.' ].join('\n') }); - + core.info(`Triaged #${decision.issueNumber} → ${decision.assignTo} (${decision.source})`); } catch (e) { core.warning(`Failed to triage #${decision.issueNumber}: ${e.message}`); } } - + core.info(`🔄 Ralph triaged ${results.length} issue(s)`); # Copilot auto-assign step (uses PAT if available) diff --git a/.github/workflows/squad-label-enforce.yml b/.github/workflows/squad-label-enforce.yml index 147ac130..2cc36a93 100644 --- a/.github/workflows/squad-label-enforce.yml +++ b/.github/workflows/squad-label-enforce.yml @@ -35,7 +35,7 @@ jobs: // Handle go: namespace (mutual exclusivity) if (appliedLabel.startsWith('go:')) { - const otherGoLabels = allLabels.filter(l => + const otherGoLabels = allLabels.filter(l => l.startsWith('go:') && l !== appliedLabel ); @@ -97,7 +97,7 @@ jobs: // Handle release: namespace (mutual exclusivity) if (appliedLabel.startsWith('release:')) { - const otherReleaseLabels = allLabels.filter(l => + const otherReleaseLabels = allLabels.filter(l => l.startsWith('release:') && l !== appliedLabel ); @@ -123,7 +123,7 @@ jobs: // Handle type: namespace (mutual exclusivity) if (appliedLabel.startsWith('type:')) { - const otherTypeLabels = allLabels.filter(l => + const otherTypeLabels = allLabels.filter(l => l.startsWith('type:') && l !== appliedLabel ); @@ -149,7 +149,7 @@ jobs: // Handle priority: namespace (mutual exclusivity) if (appliedLabel.startsWith('priority:')) { - const otherPriorityLabels = allLabels.filter(l => + const otherPriorityLabels = allLabels.filter(l => l.startsWith('priority:') && l !== appliedLabel ); diff --git a/.github/workflows/squad-mark-released.yml b/.github/workflows/squad-mark-released.yml index 7b5b6abc..32138f26 100644 --- a/.github/workflows/squad-mark-released.yml +++ b/.github/workflows/squad-mark-released.yml @@ -13,9 +13,9 @@ permissions: contents: read env: - PROJECT_ID: PVT_kwHOA5k0b84BVFTy - STATUS_FIELD_ID: PVTSSF_lAHOA5k0b84BVFTyzhQjgPk - DONE_OPTION_ID: "98236657" + PROJECT_ID: PVT_kwHOA5k0b84BVFTy + STATUS_FIELD_ID: PVTSSF_lAHOA5k0b84BVFTyzhQjgPk + DONE_OPTION_ID: "98236657" RELEASED_OPTION_ID: "8e246b27" jobs: diff --git a/.github/workflows/squad-pr-auto-label.yml b/.github/workflows/squad-pr-auto-label.yml index c0ff06fe..c918e541 100644 --- a/.github/workflows/squad-pr-auto-label.yml +++ b/.github/workflows/squad-pr-auto-label.yml @@ -30,7 +30,7 @@ jobs: const labelNames = currentLabels.map(l => l.name); // Check if already has squad labels - const hasSquadLabel = labelNames.some(name => + const hasSquadLabel = labelNames.some(name => name === 'squad' || name.startsWith('squad:') ); diff --git a/.github/workflows/squad-test.yml b/.github/workflows/squad-test.yml index 754fe33d..37cfd710 100644 --- a/.github/workflows/squad-test.yml +++ b/.github/workflows/squad-test.yml @@ -462,7 +462,7 @@ jobs: ls -la ~/.cache/ms-playwright/ 2>/dev/null || echo "No playwright cache found" echo "dotnet version:" dotnet --version - + dotnet test tests/AppHost.Tests \ --configuration Release \ --no-build \