Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
19 commits
Select commit Hold shift + click to select a range
f4dde60
Make doc generation reproducible and Linux-only; fix two non-determin…
mattleibow Jun 19, 2026
a540009
Rename "changelog" terminology to "API diff" across the doc-gen system
mattleibow Jun 19, 2026
00658b5
Review pass: final-state comments and fix doc-gen consistency slips
mattleibow Jun 19, 2026
0c7dadf
Add source_branch input to the release-notes/API-diff workflow
mattleibow Jun 19, 2026
a7d3ce2
Document/diff the newest plain .NET TFM instead of netstandard
mattleibow Jun 20, 2026
717b561
Exclude auto-generated resource designers from the API diff
mattleibow Jun 20, 2026
ddc2798
Resolve SkiaSharp self-dependencies deterministically in the API diff
mattleibow Jun 20, 2026
0fbb611
Document AddSelfDep in the API-diff determinism spec
mattleibow Jun 20, 2026
610c9fe
[api-diff] Stage self-dependencies per-diff from each package's nuspec
mattleibow Jun 22, 2026
8faefa1
[docs] Regenerate api-diff releases baseline with current scripts
mattleibow Jun 22, 2026
cb26d55
[docs] Complete the regenerated baseline with release notes
mattleibow Jun 22, 2026
5c8f1cd
[docs] Delete 3.119.3, 4.148.0 and HarfBuzzSharp 14.2.0 to validate C…
mattleibow Jun 22, 2026
1e15b99
[docs] Delete 4.x release-notes prose pages for AI re-polish via CI
mattleibow Jun 22, 2026
3cd5791
[docs] Delete HarfBuzzSharp 8.3.1.6 release-notes page for AI re-poli…
mattleibow Jun 22, 2026
0f82dfa
[docs] Restore full regenerated baseline (deterministic re-run)
mattleibow Jun 22, 2026
a12c264
[docs] Discard unpolished release-notes pages for CI to regenerate + …
mattleibow Jun 22, 2026
5c76102
[docs] Delete 4.148.0 and HarfBuzzSharp 14.2.0 api-diffs to validate …
mattleibow Jun 22, 2026
52cc782
[docs] Remove unused api-diff local-iteration flags
mattleibow Jun 22, 2026
41b592c
[docs] Re-lay out dev docs for readability (TOC + de-walled sections)
mattleibow Jun 22, 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
20 changes: 10 additions & 10 deletions .agents/skills/release-notes/SKILL.md
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
---
name: release-notes
description: >
Generate or regenerate SkiaSharp's website release notes AND API changelogs as one
Generate or regenerate SkiaSharp's website release notes AND API diffs as one
coherent set under documentation/docfx/releases/. Two phases: (1) Prepare — one script
(scripts/generate.sh) regenerates everything deterministic (the API-diff tree +
co-release-map sidecar from the published NuGet feed, and each version page's raw-data
Expand All @@ -10,13 +10,13 @@ description: >

Use this skill whenever the user asks to:
- Generate or regenerate release notes for a version ("write release notes for 3.119.2")
- Regenerate or refresh the API changelogs / API diff ("update the api diff", "regen changelogs")
- Regenerate or refresh the API diffs ("update the api diff", "regen the api diffs")
- Refresh the whole releases/ set after publishing packages
- Manually fix or update release notes that the automated workflow got wrong

Triggers: "release notes for X", "regenerate release notes", "update API changelogs",
"api diff", "changelog", "update website release notes", "write release notes",
"refresh release notes".
Triggers: "release notes for X", "regenerate release notes", "update API diffs",
"api diff", "update website release notes", "write release notes",
"refresh release notes". Also matches the legacy term "changelog" / "API changelog".

NOTE: The full set is normally regenerated automatically by the `update-release-notes`
agentic workflow when code lands on main, release branches, or tags are pushed. In that
Expand All @@ -26,9 +26,9 @@ description: >
in `output/files-to-polish.txt`.
---

# Release Notes & API Changelogs Skill
# Release Notes & API Diffs Skill

Generate SkiaSharp's website release notes **and** API changelogs as one coherent set.
Generate SkiaSharp's website release notes **and** API diffs as one coherent set.

This skill is used both by the `update-release-notes` agentic workflow (automatically
on push to `main`, `release/*` branches, and tags) and manually when regenerating,
Expand Down Expand Up @@ -87,8 +87,8 @@ The flags narrow what it touches:

| Invocation | What it regenerates |
| --- | --- |
| `generate.sh` (no args) | **Both** — the API changelogs **and** the release-notes pages, for every branch. *(The default, and what the workflow uses.)* |
| `generate.sh --api-only` | Only the machine-generated **API-diff changelog** tree under `documentation/docfx/releases/`. |
| `generate.sh` (no args) | **Both** — the API diffs **and** the release-notes pages, for every branch. *(The default, and what the workflow uses.)* |
| `generate.sh --api-only` | Only the machine-generated **API-diff** tree under `documentation/docfx/releases/`. |
| `generate.sh --notes-only` | Only the release-notes **pages'** raw-data blocks (+ `TOC.yml`/`index.md`). |
| `generate.sh <scope args>` | Same as default but limited to the given scope, e.g. `--branch main`, `--branch release/4.147.0-preview.1`, or a version like `3.119.2`. |

Expand Down Expand Up @@ -256,7 +256,7 @@ Follow these rules:

9. **Rollup at top** — Aggregate ALL changes across all previews into the main sections.

10. **Previews are minimal** — One sentence + changelog link each, at the bottom.
10. **Previews are minimal** — One sentence + Full Changelog link each, at the bottom.
Render one trailing `## <label> (<date>)` section per entry in the data-block's
`preview milestones` list (newest first), using that entry's compare link. Do not invent
previews or dates — the list is authoritative (sourced from published prerelease tags).
Expand Down
32 changes: 14 additions & 18 deletions .agents/skills/release-notes/scripts/generate.sh
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
#!/usr/bin/env bash
#
# generate.sh — the Prepare phase: run the two deterministic
# release-notes/changelog generators in the required order (Cake -> Python),
# release-notes/api diff generators in the required order (Cake -> Python),
# VERBOSE, and write the "Files to polish" list to a file.
#
# Output contract (spec §2.2/§2.3): this script is VERBOSE. Cake and Python
Expand All @@ -22,9 +22,9 @@
# generate.sh [--api-only | --notes-only] [--polish-list <path>] \
# [extra args for the Python script...]
#
# (no scope args) Full regeneration of everything: API changelogs (Cake)
# (no scope args) Full regeneration of everything: API diffs (Cake)
# then release-notes raw data for every branch (Python --all).
# --api-only Run only the Cake API-changelog generator.
# --api-only Run only the Cake API-diff generator.
# --notes-only Run only the Python release-notes generator.
# --polish-list <path> Forwarded to the Python generator: write the "Files to
# polish" list to <path> instead of the default
Expand All @@ -42,6 +42,13 @@ set -euo pipefail
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
REPO_ROOT="$(git -C "$SCRIPT_DIR" rev-parse --show-toplevel)"

# The two generation paths each have a single canonical script under
# scripts/infra/docs/ that local runs, CI, and the docs Docker wrapper all share. This
# orchestrator just calls them in the required order (Path 1 api diffs -> Path 2
# notes); it owns no commands of its own so nothing can drift between here and CI.
API_DIFFS_SH="$REPO_ROOT/scripts/infra/docs/generate-api-diffs.sh"
RELEASE_NOTES_SH="$REPO_ROOT/scripts/infra/docs/generate-release-notes.sh"

run_api=1
run_notes=1
polish_list=""
Expand All @@ -66,27 +73,16 @@ fi
cd "$REPO_ROOT"

if [ "$run_api" = 1 ]; then
if ! command -v dotnet >/dev/null 2>&1; then
echo "ERROR: the .NET SDK ('dotnet') is required for the API-changelog generator but was not found." >&2
echo " Install the SDK pinned in global.json and retry, or pass --notes-only to skip it." >&2
exit 1
fi
echo "==> Prepare [1/2]: API changelogs (Cake: docs-api-diff-past) — verbose"
dotnet tool restore
dotnet cake --target=docs-api-diff-past --nugetDiffPrerelease=true
echo "==> Prepare [1/2]: API diffs (Path 1) — verbose"
"$API_DIFFS_SH"
fi

if [ "$run_notes" = 1 ]; then
if ! command -v python3 >/dev/null 2>&1; then
echo "ERROR: 'python3' is required for the release-notes generator but was not found." >&2
echo " Install Python 3 and retry, or pass --api-only to skip it." >&2
exit 1
fi
py_args=("${notes_args[@]}")
if [ -n "$polish_list" ]; then
py_args+=(--polish-list "$polish_list")
echo "==> Files-to-polish list -> $polish_list"
fi
echo "==> Prepare [2/2]: release-notes raw data (generate-release-notes.py ${py_args[*]}) — verbose"
python3 "$SCRIPT_DIR/generate-release-notes.py" "${py_args[@]}"
echo "==> Prepare [2/2]: release-notes raw data (Path 2) — verbose"
"$RELEASE_NOTES_SH" "${py_args[@]}"
fi
Loading
Loading