Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
106 commits
Select commit Hold shift + click to select a range
2b6dcac
feat(scripts): detect modified-but-unreleased upstream deps during re…
sandersaares May 20, 2026
e296b92
refactor(scripts): drop legacy Invoke-GitCommand wrapper
sandersaares May 20, 2026
116e267
Merge branch 'main' into feat/release-deps-upstream-scan
sandersaares May 21, 2026
dbfdbcd
ci(release-deps): drop fragile delta.skip gate
sandersaares May 21, 2026
5db6f49
refactor(scripts): address PR review comments on git invocation
sandersaares May 21, 2026
8c0deb5
Merge branch 'main' into feat/release-deps-upstream-scan
sandersaares May 21, 2026
81deaff
fix(scripts): update existing release records when nested cascade upg…
sandersaares May 21, 2026
cedd750
fix(scripts): use per-crate baseline for unreleased-dep detection
sandersaares May 21, 2026
6c4cc5f
fix(scripts): address Copilot review on cedd7503
sandersaares May 21, 2026
0361fda
docs(scripts): move release-deps test cases into scripts/tests/
sandersaares May 22, 2026
034d5ca
Merge remote-tracking branch 'origin/main' into feat/release-deps-ups…
sandersaares May 22, 2026
f50bb86
docs(scripts): clarify per-crate baseline vs base-ref-anchored releas…
sandersaares May 22, 2026
38ff1eb
docs(scripts/tests): add harness crafting hints chapter
sandersaares May 22, 2026
9a435d0
fix(scripts): drop double-backslash in Get-EscapedRegexSpecialChars
sandersaares May 22, 2026
c56b7f5
chore: remove obsolete bump-crate-version prompt
sandersaares May 22, 2026
51da613
style(scripts): drop "(s)" from output strings
sandersaares May 22, 2026
d087928
fix(scripts): skip prompts for crates already cascade-bumped within I…
sandersaares May 22, 2026
4c673a4
test(scripts): Phase 1 — Pester foundation + topology presets
sandersaares May 22, 2026
d082d7b
refactor(scripts): Phase 2 — Invoke-ReleaseMain + Invoke-WorkspaceCheck
sandersaares May 22, 2026
507ed07
test(scripts): Phase 3 — pure-function unit tests (55 tests)
sandersaares May 22, 2026
46b346a
test(scripts): Phase 4 — git / filesystem unit tests (27 tests)
sandersaares May 22, 2026
4e4770a
test(scripts): Phase 5 — integration tests for release flow
sandersaares May 22, 2026
42903b7
test(scripts): add Phase 6 e2e scenario runner and 7 release scenarios
sandersaares May 22, 2026
3b36946
ci(scripts): Phase 7 - run Pester suite on Windows + Linux
sandersaares May 22, 2026
511fd90
fix(scripts): scope Update-CrateVersion replacement to [package] table
sandersaares May 26, 2026
3874852
fix(scripts): force array context in semver helpers to fix single-seg…
sandersaares May 26, 2026
14b11b3
fix(scripts): scope package-version regex to [package], excluding rus…
sandersaares May 26, 2026
83c0ec4
Merge remote-tracking branch 'origin/main' into feat/release-deps-ups…
sandersaares May 26, 2026
9708470
refactor(scripts): extract release-flow library
sandersaares May 26, 2026
008263f
docs(scripts/tests): delete obsolete RELEASE-DEPS-TEST-CASES.md
sandersaares May 26, 2026
31b647b
fix(scripts): align cascade bullet with repo convention; LF line endings
sandersaares May 26, 2026
14a6921
fix(scripts): auto-detect file EOL convention; revert cascade-bullet …
sandersaares May 26, 2026
b899baf
feat(scripts): one-at-a-time package menu for release post-scan
sandersaares May 29, 2026
5558736
feat(release): prefer VS Code for diff viewer with .diff syntax detec…
sandersaares May 29, 2026
1d971b5
feat(release): list every release-set caller as a subsumed dependency…
sandersaares May 29, 2026
ce8ec9c
feat(release): show concrete semver-aware version transitions in per-…
sandersaares May 29, 2026
f9b5561
feat(release): hide redundant fix option on Cargo 0.x.y packages
sandersaares May 29, 2026
bdfa680
feat(release): show 'Analyzing packages...' status during post-releas…
sandersaares May 29, 2026
6ccb523
test(release): add stable-version scenarios proving options 4/5 are d…
sandersaares May 29, 2026
478c8ec
feat(release): tailor 'next steps' message to multi-package releases
sandersaares May 29, 2026
a76f060
feat(scripts): reword cascade announcement using semantic change voca…
Copilot May 29, 2026
163468b
feat(scripts)!: replace release-crate -Bump with semantic -Change par…
Copilot May 29, 2026
5de4b0c
feat(scripts)!: rename -Change Fix to -Change Patch
sandersaares May 29, 2026
06a7608
feat(scripts): use semantic bump labels in per-dependent cascade line
sandersaares May 29, 2026
88caa5b
feat(scripts): detect cross-invocation pending releases
sandersaares May 29, 2026
f8496ef
feat(scripts): re-prompt only choice line after viewing package diff
sandersaares May 29, 2026
8ffe929
perf(scripts): cache invariant git lookups in dep-scan loop
sandersaares May 29, 2026
53948dc
fix(scripts): surface non-breaking cascade-bumped modified packages f…
sandersaares May 29, 2026
b8ebd38
test(scripts): harden PromptFlow mocks against the ,@() pitfall
sandersaares May 30, 2026
24ce58f
refactor(scripts)!: rename crate to package across release tooling
sandersaares May 30, 2026
85b9fe4
refactor(scripts): make release-crate.ps1 canonical parameter -Name w…
sandersaares May 30, 2026
8a736d9
fix(scripts): use change-type vocabulary in version-bump announcement
sandersaares May 30, 2026
a82baaa
refactor(scripts)!: replace "bump" terminology with change-type / ver…
sandersaares May 30, 2026
50c9635
fix(scripts): preserve trailing newline in Add-CascadeBulletToVersion…
sandersaares May 30, 2026
a219d43
Merge remote-tracking branch 'origin/main' into feat/release-deps-ups…
sandersaares May 30, 2026
bd1145e
docs(scripts): introduce docs/releasing.md; drop -NonInteractive; add…
sandersaares May 30, 2026
78f2ebc
refactor(scripts): split check-unreleased-dependencies.ps1 into lib+w…
sandersaares May 30, 2026
fbbef3d
chore(scripts): polish - terminology, pluralization, strict BaseRef
sandersaares May 30, 2026
0a94962
feat(scripts): add Parse-ReleaseTokens for bundled-input release CLI
sandersaares May 30, 2026
6dc37ed
feat(scripts): add Resolve-ReleaseSet for bundled-input cascade resol…
sandersaares May 30, 2026
924eb7a
feat(scripts): Write-Changelog accepts cascadeReasons array
sandersaares May 30, 2026
16fbb5c
refactor(scripts): rename Update-PendingReleaseVersion to Update-Rele…
sandersaares May 31, 2026
e99ac4f
refactor(scripts): Get-UnreleasedModifiedDependencies consumes Resolv…
sandersaares May 31, 2026
1aadde1
feat(scripts): add bundled-input release flow (Invoke-ReleasePackages…
sandersaares May 31, 2026
0507f42
feat(scripts): add release-packages.ps1 CLI shell and wire scenario h…
sandersaares May 31, 2026
c02e045
test(scripts): migrate scenarios to bundled-input model
sandersaares May 31, 2026
fe44afa
refactor(scripts): delete obsolete iterative release-crate flow
sandersaares May 31, 2026
1f3eca6
docs(releasing): remove base-ref leaks from local-driver descriptions
sandersaares May 31, 2026
aa21665
fix(scripts): Invoke-PlanReview re-resolves plan before iteration-cap…
sandersaares May 31, 2026
01d92b6
fix(scripts): anchor Update-PackageVersion regex to start of line
sandersaares May 31, 2026
534cee9
docs(releasing): correct CI scoping for release-deps check
sandersaares May 31, 2026
5475bdb
feat(scripts): add release-changed-packages.ps1 guided workflow
sandersaares Jun 1, 2026
3f3b171
feat(scripts): show all in-workspace dependents in per-package menu
sandersaares Jun 1, 2026
420ff5c
fix(scripts): normalise cascade-reason versions in resolved release plan
sandersaares Jun 1, 2026
06fc623
fix(scripts): merge existing ## Unreleased section into new release n…
sandersaares Jun 1, 2026
6b210f6
test(scripts): tighten scenario release-set assertion and fix S20 des…
sandersaares Jun 1, 2026
afc042b
Merge branch 'main' into feat/release-deps-upstream-scan
sandersaares Jun 1, 2026
eb84457
chore(scripts): address Copilot reviewer feedback round 3
sandersaares Jun 1, 2026
48c918e
docs(releasing): simplify change-spec model and refresh release docs
sandersaares Jun 1, 2026
5ae7703
test(check-unreleased-deps): match ModifySource signature
sandersaares Jun 1, 2026
de28e67
Merge remote-tracking branch 'origin/main' into feat/release-deps-ups…
sandersaares Jun 1, 2026
2eb5fdc
chore(scripts): address round-4 Copilot reviewer comments
sandersaares Jun 1, 2026
48fa3b8
feat(scripts): merge release-changed-packages into release-packages w…
sandersaares Jun 4, 2026
1a6fe1c
docs(releasing): document unified release-packages.ps1 with -Packages…
sandersaares Jun 4, 2026
aa4b726
refactor(scripts): show direct dependents only in package menu (drop …
sandersaares Jun 4, 2026
e2c189c
refactor(scripts): enforce interactive-only release-packages.ps1; add…
sandersaares Jun 4, 2026
74aeaa3
feat(scripts): detect dotted-key publish.workspace / version.workspac…
sandersaares Jun 4, 2026
16f7597
feat(scripts): add -Force switch to release-packages.ps1 to override …
sandersaares Jun 4, 2026
29f2387
fix(scripts): restrict -Force to -Packages mode (no-op in -Changed / …
sandersaares Jun 4, 2026
0a23b45
refactor(scripts): replace 'Ignore - changes are immaterial' menu wor…
sandersaares Jun 4, 2026
6b19591
style(scripts): capitalise 'No in-workspace dependents' menu hint for…
sandersaares Jun 4, 2026
4cdf678
fix(scripts): alphabetise the 'Released packages' summary list at end…
sandersaares Jun 4, 2026
e52a1ea
Merge branch 'main' into feat/release-deps-upstream-scan
sandersaares Jun 4, 2026
b26bbda
chore(scripts): address round-5 reviewer comments and pluralisation pass
sandersaares Jun 4, 2026
62c8946
docs(release-packages): warn that -Changed only scans inside crates/
sandersaares Jun 5, 2026
d9e55af
Merge branch 'main' into feat/release-deps-upstream-scan
sandersaares Jun 5, 2026
c2d0d5f
chore(scripts): declare PowerShell 7.0 as the minimum required version
sandersaares Jun 5, 2026
d283619
test(release): delete skipped no-progress test in Invoke-PlanReview
sandersaares Jun 5, 2026
7380a05
test(release): close two test-suite gaps surfaced by the test-suite r…
sandersaares Jun 5, 2026
1978a7f
test(release): align S00 scenario internal Name with file name
sandersaares Jun 5, 2026
b562f27
Merge branch 'main' into feat/release-deps-upstream-scan
sandersaares Jun 5, 2026
4c5aa63
refactor(scripts): drop unreleased-deps CI scope; apply LIVE-flow BFS…
sandersaares Jun 5, 2026
0bbbdb1
Merge remote-tracking branch 'origin/feat/release-deps-upstream-scan'…
sandersaares Jun 5, 2026
429ab73
Merge branch 'main' into feat/release-deps-upstream-scan
sandersaares Jun 5, 2026
1285d37
docs(release-packages): show help examples as ./scripts/release-packa…
sandersaares Jun 5, 2026
d1b2184
Merge remote-tracking branch 'origin/feat/release-deps-upstream-scan'…
sandersaares Jun 5, 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
131 changes: 0 additions & 131 deletions .github/prompts/bump-crate-version.prompt.md

This file was deleted.

41 changes: 41 additions & 0 deletions .github/workflows/main.yml
Original file line number Diff line number Diff line change
Expand Up @@ -455,6 +455,46 @@ jobs:
- name: Check External Type Exposure
run: cargo +${{ env.RUST_NIGHTLY_EXTERNAL_TYPES }} -Zscript scripts/check-external-types.rs ${{ env.RUST_NIGHTLY_EXTERNAL_TYPES }}

script-tests:
# Pester test suite for the release-related PowerShell scripts
# (release-packages.ps1, lib/releasing.ps1, lib/release-flow.ps1).
# Always runs (no delta gate) because script-level changes don't move any
# Rust crates so delta would mark the PR skippable, but the scripts
# themselves may still need validation. Cross-platform matrix mirrors the
# platforms developers run the scripts on locally.
runs-on: ${{ matrix.os }}
strategy:
fail-fast: false
matrix:
os: [ubuntu-latest, windows-latest]
steps:
# prep
- name: Checkout
uses: actions/checkout@v6.0.3
- name: Setup
# The synthetic-workspace fixture builder shells out to `cargo metadata`,
# so Rust must be available even though no Rust code is compiled.
uses: ./.github/actions/setup
with:
rust-toolchain: RUST_LATEST

- name: Install Pester
shell: pwsh
run: |
$existing = Get-Module Pester -ListAvailable |
Sort-Object Version -Descending |
Select-Object -First 1
if ($null -eq $existing -or $existing.Version -lt [version]'5.7.0') {
Install-Module -Name Pester -MinimumVersion 5.7.1 -Force -Scope CurrentUser -SkipPublisherCheck
} else {
Write-Host "Pester $($existing.Version) already installed; skipping."
}

# execute
- name: Run Pester Suite
shell: pwsh
run: ./scripts/tests/Pester/Run-Tests.ps1

# Single aggregating ("fan-in") status check. Branch protection should
# require ONLY this context for the workflow jobs below: it succeeds when
# every dependency either succeeded or was skipped, and fails if any
Expand Down Expand Up @@ -500,6 +540,7 @@ jobs:
- pr-title
- license-headers
- external-type-exposure
- script-tests
runs-on: ubuntu-latest
steps:
- name: Validate Dependency Results
Expand Down
10 changes: 9 additions & 1 deletion AGENTS.md
Original file line number Diff line number Diff line change
Expand Up @@ -22,9 +22,17 @@ The spell checker dictionary is in the `.spelling` file, one word per line in ar

## Changelogs

The changelogs are updated by `scripts/release-crate.ps1` at release time, based on Git history. It is not necessary to make manual edits
The changelogs are updated by `scripts/release-packages.ps1` at release time, based on Git history. It is not necessary to make manual edits
to the changelogs, though you are permitted to do so if explicitly instructed.

## Releasing Packages

See [docs/releasing.md](docs/releasing.md) for the release tooling
reference: glossary (direct/transitive dependent vs dependency, cascade
direction, change type vs version component, release set, pending
release, elevation), the cascade-organisation invariants, and the
workflow for `scripts/release-packages.ps1`.

## Pull Requests

Pull request titles must follow [Conventional Commits](https://www.conventionalcommits.org/) naming, e.g. `feat(bytesbuf): add new metric` or `fix(cachet): correct eviction logic`.
Expand Down
2 changes: 2 additions & 0 deletions DEVELOPMENT.md
Original file line number Diff line number Diff line change
Expand Up @@ -47,6 +47,7 @@ After installing the Rust toolchain, we setup repository-specific tooling:

1. Execute `just build` to build the workspace. Verify that the build is successful.
1. Execute `just test` to execute all tests in the workspace. Verify that all tests pass.
1. Execute `just test-scripts` to run the Pester suite for the release-related PowerShell scripts. Verify that all tests pass.
1. Validate that debugging works by opening `crates/tick/examples/tick_basic.rs` and pressing the `Debug` link that appears above `main()`. This should successfully launch the example app under the debugger.

# Linux (WSL) environment setup
Expand Down Expand Up @@ -91,6 +92,7 @@ After installing the Rust toolchains, we setup the build target directory for fa

1. Execute `just build` to build the workspace. Verify that the build is successful.
1. Execute `just test` to execute all tests in the workspace. Verify that all tests pass.
1. Execute `just test-scripts` to run the Pester suite for the release-related PowerShell scripts. Verify that all tests pass.

## Setup Visual Studio Code integration

Expand Down
11 changes: 6 additions & 5 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -74,7 +74,7 @@ The `add-crate` script does the following:
`cargo-doc2readme`](https://crates.io/crates/cargo-doc2readme)
with a set of appropriate CI badges.

- Creates an empty `CHANGELOG.md` file for the crate, which will later get populated by the `scripts\release-crate.ps1`
- Creates an empty `CHANGELOG.md` file for the crate, which will later get populated by the `scripts\release-packages.ps1`
script.

- Creates placeholder `logo.png` and `favicon.ico` files for the crate, which you're expected to replace with legit
Expand All @@ -91,9 +91,10 @@ this simple process:

2. Create a branch off of main.

3. Run `./scripts/release-crate.ps1 <crate_name> [new_version]` to bump a crate's version and update the crate's
`CHANGELOG.md` file.
Run the script many times if you want to release several crates in the same PR.
3. Run `./scripts/release-packages.ps1 -Packages '<crate_name>@<change_type>'` to update versions and changelogs.
The change type for each package is one of `breaking`, `nonbreaking`, `patch`, or an explicit version like
`1.0.0`. To release several crates together, list them all in the same `-Packages` argument
(for example, `'foo@nonbreaking','bar@patch'`); the script plans the entire release up-front.

4. Create a PR like normal to push changes out.

Expand All @@ -112,7 +113,7 @@ automation processes:
always reflects the latest crate documentation.

- The `CHANGELOG.md` file in each crate's directory is auto-generated from the commits to a crate's directory by the
`scripts/release-crate.ps1` script.
`scripts/release-packages.ps1` script.

To generate documentation locally with all features enabled (including feature-gated items), run:

Expand Down
Loading
Loading