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
2 changes: 1 addition & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -80,6 +80,7 @@ For security concerns, please review our [Security Policy](docs/SECURITY.md).

| Version | Date | Title | Blog post |
| ------- | ---- | ----- | --------- |
| [v0.0.14](https://github.com/mpaulosky/IssueTracker/releases/tag/v0.0.14) | 2026-09-30 | ci: Skip the build and tests on docs-only PRs | [Post](https://github.com/mpaulosky/IssueTracker/blob/main/docs/blogs/2026-09-30-pr-175-ci-skip-the-build-and-tests-on-docs-only-prs.md) |
| [v0.0.13](https://github.com/mpaulosky/IssueTracker/releases/tag/v0.0.13) | 2026-09-30 | ci(release): Release merged PRs one at a time, in merge order | [Post](https://github.com/mpaulosky/IssueTracker/blob/main/docs/blogs/2026-09-30-pr-172-ci-release-release-merged-prs-one-at-a-time-in-merge-order.md) |
| [v0.0.12](https://github.com/mpaulosky/IssueTracker/releases/tag/v0.0.12) | 2026-09-30 | ci(hooks): Lint the staged Markdown, not the working copy | [Post](https://github.com/mpaulosky/IssueTracker/blob/main/docs/blogs/2026-09-30-pr-170-ci-hooks-lint-the-staged-markdown-not-the-working-copy.md) |
| [v0.0.11](https://github.com/mpaulosky/IssueTracker/releases/tag/v0.0.11) | 2026-09-30 | refactor(CoreBusiness): Rename ApprovedForRelease to Approved | [Post](https://github.com/mpaulosky/IssueTracker/blob/main/docs/blogs/2026-09-30-pr-168-refactor-corebusiness-rename-approvedforrelease-to-approved.md) |
Expand All @@ -89,7 +90,6 @@ For security concerns, please review our [Security Policy](docs/SECURITY.md).
| [v0.0.7](https://github.com/mpaulosky/IssueTracker/releases/tag/v0.0.7) | 2026-09-29 | test(UI): Move bUnit tests to BunitContext on bUnit 2.11.3 | [Post](https://github.com/mpaulosky/IssueTracker/blob/main/docs/blogs/2026-09-29-pr-159-test-ui-move-bunit-tests-to-bunitcontext-on-bunit-2-11-3.md) |
| [v0.0.6](https://github.com/mpaulosky/IssueTracker/releases/tag/v0.0.6) | 2026-09-29 | ci(release): Drop featured_image from release blog posts | [Post](https://github.com/mpaulosky/IssueTracker/blob/main/docs/blogs/2026-09-29-pr-157-ci-release-drop-featured-image-from-release-blog-posts.md) |
| [v0.0.5](https://github.com/mpaulosky/IssueTracker/releases/tag/v0.0.5) | 2026-09-29 | docs: Add a CONTEXT.md glossary of the domain language | [Post](https://github.com/mpaulosky/IssueTracker/blob/main/docs/blogs/2026-09-29-pr-153-docs-add-a-context-md-glossary-of-the-domain-language.md) |
| [v0.0.4](https://github.com/mpaulosky/IssueTracker/releases/tag/v0.0.4) | 2026-09-29 | ci: Run code metrics by hand and drop unused Auth0 settings | [Post](https://github.com/mpaulosky/IssueTracker/blob/main/docs/blogs/2026-09-29-pr-148-ci-run-code-metrics-by-hand-and-drop-unused-auth0-settings.md) |

<!-- RELEASES_END -->

Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,53 @@
---
post_title: "ci: Skip the build and tests on docs-only PRs"
author1: mpaulosky
post_slug: "v0.0.14-pr-175"
microsoft_alias: n/a
categories:
- engineering
tags:
- release:v0.0.14
- automation
ai_note: "Generated by release automation from the PR title, description, commits and changed files. No AI summary."
summary: "Release notes seed for v0.0.14 from PR #175."
post_date: "2026-09-30"
---
# ci: Skip the build and tests on docs-only PRs

- **Release tag:** `v0.0.14`
- **Source PR:** [#175](https://github.com/mpaulosky/IssueTracker/pull/175)

## PR description

### Summary

Every release blog PR changes only documentation (`docs/blogs/`, `README.md`, `docs/README.md`), yet ran the full build, all eight test projects, coverage and CodeQL: about **17 runner-minutes** each (#167, #169, #171). `paths-ignore` can't skip them, because `Build Solution` and `Test Suite` are required checks, and a check that never reports blocks the merge.

- **New `Detect Changes` job** (`ci.yml`) classifies the PR's changed files. When every one is Markdown or under `docs/`, `Build Solution`, the test matrix and coverage are **skipped**. GitHub counts a required check skipped by its `if:` as passing, and `pr-automerge.yml` relies on GitHub's `CLEAN` merge state, which does the same.
- **Fails safe:** any other path (workflows, scripts, `.cs`, project files) runs the full suite, as do pushes and manual runs. An empty diff runs it too. Renames are listed under both paths (`--no-renames`), so moving code into `docs/` or to a `.md` name still runs the suite.
- **`Test Suite` stays honest:** it still fails on any failed or cancelled job, and also when `Detect Changes` itself didn't succeed, so the build can't be skipped by mistake. On a docs-only PR its summary says the build and tests were skipped.
- **CodeQL** ignores `docs/**` and `**/*.md` on `pull_request`. It isn't a required check, and `main`'s push and weekly runs still cover the code.
- Lint Markdown, YAML and Actions, and the Python and hook tests, still run on every PR.

### Testing

- The classification was run in a scratch repo (and `--no-renames` confirmed to list both paths when `src/a.cs` is moved to `docs/a.md`): a blog-PR-shaped change and `docs/index.html` → docs-only. A `.cs` file, a workflow, Markdown plus code, a file named `docs.md.cs`, and an empty diff → full suite.
- `yamllint`, `actionlint` and `zizmor` are clean, and `scripts/gate.sh` passed.
- This PR changes workflows, so its own CI takes the full-suite path.
- The docs-only path was checked live on a throwaway draft PR that changes one doc and targets this branch (see the comments), before this PR was marked ready.

Fixes #173

🤖 Generated with [Claude Code](https://claude.com/claude-code)

## Commits

- ci: Skip the build and tests on docs-only PRs (`ae80ddc`)
- ci: Classify both paths of a renamed file (`7638193`)

## Files changed

### .github/

- `.github/workflows/ci.yml` (+67 / -3)
- `.github/workflows/codeql-analysis.yml` (+5 / -0)
1 change: 1 addition & 0 deletions docs/blogs/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@ This directory contains concise release-review posts for merged PR releases.

| Date | Title | Tags |
| ---- | ----- | ---- |
| 2026-09-30 | [ci: Skip the build and tests on docs-only PRs](2026-09-30-pr-175-ci-skip-the-build-and-tests-on-docs-only-prs.md) | release,automation |
| 2026-09-30 | [ci(release): Release merged PRs one at a time, in merge order](2026-09-30-pr-172-ci-release-release-merged-prs-one-at-a-time-in-merge-order.md) | release,automation |
| 2026-09-30 | [ci(hooks): Lint the staged Markdown, not the working copy](2026-09-30-pr-170-ci-hooks-lint-the-staged-markdown-not-the-working-copy.md) | release,automation |
| 2026-09-30 | [refactor(CoreBusiness): Rename ApprovedForRelease to Approved](2026-09-30-pr-168-refactor-corebusiness-rename-approvedforrelease-to-approved.md) | release,automation |
Expand Down
Loading