Releases: link-foundation/meta-language
[Rust] 0.39.0
Added
- Changeset-style fragment format with frontmatter for specifying version bump type
- New
get-bump-type.mjsscript to automatically determine version bump from fragments - Automatic version bumping on merge to main based on changelog fragments
- Detailed documentation for the changelog fragment system in
changelog.d/README.md
Changed
- Updated
collect-changelog.mjsto strip frontmatter when collecting fragments - Updated
version-and-commit.mjsto handle frontmatter in fragments - Enhanced release workflow to automatically determine bump type from changesets
Changed
- Add
detect-changesjob with cross-platformdetect-code-changes.mjsscript - Make lint job independent of changelog check (runs based on file changes only)
- Allow docs-only PRs without changelog fragment requirement
- Handle changelog check 'skipped' state in dependent jobs
- Exclude
changelog.d/,docs/,experiments/,examples/folders and markdown files from code changes detection
Fixed
- Fixed README.md to correctly reference Node.js scripts (
.mjs) instead of Python scripts (.py) - Updated project structure in README.md to match actual script files in
scripts/directory - Fixed example code in README.md that had invalid Rust with two
mainfunctions
Added
- Added crates.io publishing support to CI/CD workflow
- Added
release_modeinput with "instant" and "changelog-pr" options for manual releases - Added
--tag-prefixand--crates-io-urloptions to create-github-release.mjs script - Added comprehensive case study documentation for Issue #11 in docs/case-studies/issue-11/
Changed
- Changed changelog fragment check from warning to error (exit 1) to enforce changelog requirements
- Updated job conditions with
always() && !cancelled()to fix workflow_dispatch job skipping issue - Renamed manual-release job to "Instant Release" for clarity
Fixed
- Fixed deprecated
::set-outputGitHub Actions command in version-and-commit.mjs - Fixed workflow_dispatch triggering issues where lint/build/release jobs were incorrectly skipped
Fixed
- Fixed changelog fragment check to validate that a fragment is added in the PR diff rather than just checking if any fragments exist in the directory. This prevents the check from incorrectly passing when there are leftover fragments from previous PRs that haven't been released yet.
Changed
- Converted shell scripts in
release.ymlto cross-platform.mjsscripts for improved portability and performance:check-changelog-fragment.mjs- validates changelog fragment is added in PR diffgit-config.mjs- configures git user for CI/CDcheck-release-needed.mjs- checks if release is neededpublish-crate.mjs- publishes package to crates.iocreate-changelog-fragment.mjs- creates changelog fragments for manual releasesget-version.mjs- gets current version from Cargo.toml
Added
- Added
check-version-modification.mjsscript to detect manual version changes in Cargo.toml - Added
version-checkjob to CI/CD workflow that runs on pull requests - Added skip logic for automated release branches (changelog-manual-release-, changeset-release/, release/, automated-release/)
Changed
- Version modifications in Cargo.toml are now blocked in pull requests to enforce automated release pipeline
Added
- Added support for
CARGO_REGISTRY_TOKENas alternative toCARGO_TOKENfor crates.io publishing - Added case study documentation for Issue #17 (yargs reserved word and dual token support)
Changed
- Updated workflow to use fallback logic:
${{ secrets.CARGO_REGISTRY_TOKEN || secrets.CARGO_TOKEN }} - Improved publish-crate.mjs to check both
CARGO_REGISTRY_TOKENandCARGO_TOKENenvironment variables - Added warning message when neither token is set
Added
- New
scripts/rust-paths.mjsutility for automatic Rust package root detection - Support for both single-language and multi-language repository structures in all CI/CD scripts
- Configuration options via
--rust-rootCLI argument andRUST_ROOTenvironment variable - Comprehensive case study documentation in
docs/case-studies/issue-19/
Changed
- Updated all release scripts to use the new path detection utility:
scripts/bump-version.mjsscripts/check-release-needed.mjsscripts/collect-changelog.mjsscripts/get-bump-type.mjsscripts/get-version.mjsscripts/publish-crate.mjsscripts/version-and-commit.mjs
Changed
- check-release-needed.mjs: Now checks crates.io API directly instead of git tags to determine if a version is already released. This prevents false positives where git tags exist but the package was never actually published to crates.io.
Added
-
CI/CD Troubleshooting Guide: New documentation at
docs/ci-cd/troubleshooting.mdcovering common issues like skipped jobs, false positive version checks, publishing failures, and secret configuration. -
Enhanced Error Handling in publish-crate.mjs: Added specific detection and helpful error messages for authentication failures, including guidance on secret configuration and workflow setup.
-
Case Study Documentation: Added comprehensive case study at
docs/case-studies/issue-21/analyzing CI/CD failures from browser-commander repository (issues #27, #29, #31, #33) with timeline, root causes, and lessons learned.
Fixed
- Prevent False Positive Version Checks: The release workflow now correctly identifies unpublished versions by checking crates.io instead of relying on git tags, which can exist without the package being published.
Changed
- Translated all CI/CD scripts from JavaScript (.mjs) to Rust (.rs) using rust-script
- Scripts now use native Rust with rust-script for execution in shell
- Removed Node.js dependency from CI/CD pipeline
- Updated GitHub Actions workflow to use rust-script instead of node
- Updated README and CONTRIBUTING documentation with new script references
Added
- Cache
restore-keysfor partial cache hits across all workflow jobs - Explicit
tokenparameter in checkout for release jobs - Code coverage job with
cargo-llvm-covand Codecov integration - Codecov badge in README.md
- Pre-release version support (e.g.,
0.1.0-beta.1) in version parsing --release-labelparameter for multi-language release disambiguationensure_version_exceeds_published()logic to prevent publishing duplicate versionsget_max_published_version()to query highest non-yanked version from crates.iomax_published_versionoutput from check-release-needed for downstream use- Version fallback logic in auto-release Create GitHub Release step
Changed
- Updated
actions/checkoutfrom v4 to v6 - Updated
actions/cachefrom v4 to v5 - Updated
peter-evans/create-pull-requestfrom v7 to v8 - Made
publish-crate.rsfail (exit 1) when version already exists on crates.io - Improved
create-github-release.rsto check combined stdout+stderr and detect "Validation Failed"
Fixed
- Fix publish steps overriding workflow-level CARGO_TOKEN fallback, breaking CARGO_REGISTRY_TOKEN-only configurations (#32)
- Fix non-fast-forward push failures in multi-workflow repos by adding fetch/rebase and push retry logic (#31)
- Add mono-repo path support to check-changelog-fragment.rs, check-version-modification.rs, and create-changelog-fragment.rs
- Add
!cancelled()guard to test job condition to respect workflow cancellation
Fixed
- Fixed
version-and-commit.rsto check crates.io instead of git tags for determining if a version is already released - This prevents the release pipeline from getting stuck when git tags exist without corresponding crates.io publication
Added
- Added
--tag-prefixsupport toversion-and-commit.rsfor multi-language repository compatibility - Added crates.io and docs.rs badges to README.md
- Added automatic crates.io and docs.rs badge injection in GitHub release notes
- Added documentation deployment job to CI/CD pipeline (deploys to GitHub Pages after release)
- Added case study documentation for issue #25
Fixed
- Fixed unsupported look-ahead regex in
create-github-release.rsthat caused a panic when parsing CHANGELOG.md. Replaced with a two-step approach using only features supported by Rust'sregexcrate.
Changed
- Restructured example application as a simple CLI sum calculator using
lino-arguments - Renamed default package to
example-sum-package-namewith Unlicense license - Reorganized test structure:
tests/unit/sum.rs,tests/integration/sum.rs,tests/unit/ci-cd/ - Converted experiment scripts into proper unit tests in
tests/unit/ci-cd/changelog_parsing.rs - Added CI/CD skip logic for template default package name
example-sum-package-name - Updated README.md badges and documentation
Fixed
- Change detection script now uses per-commit diff instead of full PR diff, so commits touching only non-code files correctly skip CI jobs even when earlier commits in the same PR changed code files
Fixed
- Make release scripts resolve the publishable crate manifest when the repository root uses a Cargo workspace manifest.
Fixed
- Decoupled GitHub Pages documentation deployment from package release publication and fixed release-script warning failures under
RUSTFLAGS=-Dwarnings.
Changed
- Added explicit GitHub Actions job timeouts and documented Rust test timeout guidance.
Fixed
- Added a non-blocking warning threshold to the Rust file-size check so near-limit files are surfaced before concurrent PR merges can exceed the hard limit.
Fixed
- Made
create-github-release.rsbuild GitHub release titles as[Language] X.Y.Zinstead of reusing the tag prefix.
A...
[Rust] 0.38.0
Added
- Changeset-style fragment format with frontmatter for specifying version bump type
- New
get-bump-type.mjsscript to automatically determine version bump from fragments - Automatic version bumping on merge to main based on changelog fragments
- Detailed documentation for the changelog fragment system in
changelog.d/README.md
Changed
- Updated
collect-changelog.mjsto strip frontmatter when collecting fragments - Updated
version-and-commit.mjsto handle frontmatter in fragments - Enhanced release workflow to automatically determine bump type from changesets
Changed
- Add
detect-changesjob with cross-platformdetect-code-changes.mjsscript - Make lint job independent of changelog check (runs based on file changes only)
- Allow docs-only PRs without changelog fragment requirement
- Handle changelog check 'skipped' state in dependent jobs
- Exclude
changelog.d/,docs/,experiments/,examples/folders and markdown files from code changes detection
Fixed
- Fixed README.md to correctly reference Node.js scripts (
.mjs) instead of Python scripts (.py) - Updated project structure in README.md to match actual script files in
scripts/directory - Fixed example code in README.md that had invalid Rust with two
mainfunctions
Added
- Added crates.io publishing support to CI/CD workflow
- Added
release_modeinput with "instant" and "changelog-pr" options for manual releases - Added
--tag-prefixand--crates-io-urloptions to create-github-release.mjs script - Added comprehensive case study documentation for Issue #11 in docs/case-studies/issue-11/
Changed
- Changed changelog fragment check from warning to error (exit 1) to enforce changelog requirements
- Updated job conditions with
always() && !cancelled()to fix workflow_dispatch job skipping issue - Renamed manual-release job to "Instant Release" for clarity
Fixed
- Fixed deprecated
::set-outputGitHub Actions command in version-and-commit.mjs - Fixed workflow_dispatch triggering issues where lint/build/release jobs were incorrectly skipped
Fixed
- Fixed changelog fragment check to validate that a fragment is added in the PR diff rather than just checking if any fragments exist in the directory. This prevents the check from incorrectly passing when there are leftover fragments from previous PRs that haven't been released yet.
Changed
- Converted shell scripts in
release.ymlto cross-platform.mjsscripts for improved portability and performance:check-changelog-fragment.mjs- validates changelog fragment is added in PR diffgit-config.mjs- configures git user for CI/CDcheck-release-needed.mjs- checks if release is neededpublish-crate.mjs- publishes package to crates.iocreate-changelog-fragment.mjs- creates changelog fragments for manual releasesget-version.mjs- gets current version from Cargo.toml
Added
- Added
check-version-modification.mjsscript to detect manual version changes in Cargo.toml - Added
version-checkjob to CI/CD workflow that runs on pull requests - Added skip logic for automated release branches (changelog-manual-release-, changeset-release/, release/, automated-release/)
Changed
- Version modifications in Cargo.toml are now blocked in pull requests to enforce automated release pipeline
Added
- Added support for
CARGO_REGISTRY_TOKENas alternative toCARGO_TOKENfor crates.io publishing - Added case study documentation for Issue #17 (yargs reserved word and dual token support)
Changed
- Updated workflow to use fallback logic:
${{ secrets.CARGO_REGISTRY_TOKEN || secrets.CARGO_TOKEN }} - Improved publish-crate.mjs to check both
CARGO_REGISTRY_TOKENandCARGO_TOKENenvironment variables - Added warning message when neither token is set
Added
- New
scripts/rust-paths.mjsutility for automatic Rust package root detection - Support for both single-language and multi-language repository structures in all CI/CD scripts
- Configuration options via
--rust-rootCLI argument andRUST_ROOTenvironment variable - Comprehensive case study documentation in
docs/case-studies/issue-19/
Changed
- Updated all release scripts to use the new path detection utility:
scripts/bump-version.mjsscripts/check-release-needed.mjsscripts/collect-changelog.mjsscripts/get-bump-type.mjsscripts/get-version.mjsscripts/publish-crate.mjsscripts/version-and-commit.mjs
Changed
- check-release-needed.mjs: Now checks crates.io API directly instead of git tags to determine if a version is already released. This prevents false positives where git tags exist but the package was never actually published to crates.io.
Added
-
CI/CD Troubleshooting Guide: New documentation at
docs/ci-cd/troubleshooting.mdcovering common issues like skipped jobs, false positive version checks, publishing failures, and secret configuration. -
Enhanced Error Handling in publish-crate.mjs: Added specific detection and helpful error messages for authentication failures, including guidance on secret configuration and workflow setup.
-
Case Study Documentation: Added comprehensive case study at
docs/case-studies/issue-21/analyzing CI/CD failures from browser-commander repository (issues #27, #29, #31, #33) with timeline, root causes, and lessons learned.
Fixed
- Prevent False Positive Version Checks: The release workflow now correctly identifies unpublished versions by checking crates.io instead of relying on git tags, which can exist without the package being published.
Changed
- Translated all CI/CD scripts from JavaScript (.mjs) to Rust (.rs) using rust-script
- Scripts now use native Rust with rust-script for execution in shell
- Removed Node.js dependency from CI/CD pipeline
- Updated GitHub Actions workflow to use rust-script instead of node
- Updated README and CONTRIBUTING documentation with new script references
Added
- Cache
restore-keysfor partial cache hits across all workflow jobs - Explicit
tokenparameter in checkout for release jobs - Code coverage job with
cargo-llvm-covand Codecov integration - Codecov badge in README.md
- Pre-release version support (e.g.,
0.1.0-beta.1) in version parsing --release-labelparameter for multi-language release disambiguationensure_version_exceeds_published()logic to prevent publishing duplicate versionsget_max_published_version()to query highest non-yanked version from crates.iomax_published_versionoutput from check-release-needed for downstream use- Version fallback logic in auto-release Create GitHub Release step
Changed
- Updated
actions/checkoutfrom v4 to v6 - Updated
actions/cachefrom v4 to v5 - Updated
peter-evans/create-pull-requestfrom v7 to v8 - Made
publish-crate.rsfail (exit 1) when version already exists on crates.io - Improved
create-github-release.rsto check combined stdout+stderr and detect "Validation Failed"
Fixed
- Fix publish steps overriding workflow-level CARGO_TOKEN fallback, breaking CARGO_REGISTRY_TOKEN-only configurations (#32)
- Fix non-fast-forward push failures in multi-workflow repos by adding fetch/rebase and push retry logic (#31)
- Add mono-repo path support to check-changelog-fragment.rs, check-version-modification.rs, and create-changelog-fragment.rs
- Add
!cancelled()guard to test job condition to respect workflow cancellation
Fixed
- Fixed
version-and-commit.rsto check crates.io instead of git tags for determining if a version is already released - This prevents the release pipeline from getting stuck when git tags exist without corresponding crates.io publication
Added
- Added
--tag-prefixsupport toversion-and-commit.rsfor multi-language repository compatibility - Added crates.io and docs.rs badges to README.md
- Added automatic crates.io and docs.rs badge injection in GitHub release notes
- Added documentation deployment job to CI/CD pipeline (deploys to GitHub Pages after release)
- Added case study documentation for issue #25
Fixed
- Fixed unsupported look-ahead regex in
create-github-release.rsthat caused a panic when parsing CHANGELOG.md. Replaced with a two-step approach using only features supported by Rust'sregexcrate.
Changed
- Restructured example application as a simple CLI sum calculator using
lino-arguments - Renamed default package to
example-sum-package-namewith Unlicense license - Reorganized test structure:
tests/unit/sum.rs,tests/integration/sum.rs,tests/unit/ci-cd/ - Converted experiment scripts into proper unit tests in
tests/unit/ci-cd/changelog_parsing.rs - Added CI/CD skip logic for template default package name
example-sum-package-name - Updated README.md badges and documentation
Fixed
- Change detection script now uses per-commit diff instead of full PR diff, so commits touching only non-code files correctly skip CI jobs even when earlier commits in the same PR changed code files
Fixed
- Make release scripts resolve the publishable crate manifest when the repository root uses a Cargo workspace manifest.
Fixed
- Decoupled GitHub Pages documentation deployment from package release publication and fixed release-script warning failures under
RUSTFLAGS=-Dwarnings.
Changed
- Added explicit GitHub Actions job timeouts and documented Rust test timeout guidance.
Fixed
- Added a non-blocking warning threshold to the Rust file-size check so near-limit files are surfaced before concurrent PR merges can exceed the hard limit.
Fixed
- Made
create-github-release.rsbuild GitHub release titles as[Language] X.Y.Zinstead of reusing the tag prefix.
A...
[Rust] 0.37.0
Added
- Changeset-style fragment format with frontmatter for specifying version bump type
- New
get-bump-type.mjsscript to automatically determine version bump from fragments - Automatic version bumping on merge to main based on changelog fragments
- Detailed documentation for the changelog fragment system in
changelog.d/README.md
Changed
- Updated
collect-changelog.mjsto strip frontmatter when collecting fragments - Updated
version-and-commit.mjsto handle frontmatter in fragments - Enhanced release workflow to automatically determine bump type from changesets
Changed
- Add
detect-changesjob with cross-platformdetect-code-changes.mjsscript - Make lint job independent of changelog check (runs based on file changes only)
- Allow docs-only PRs without changelog fragment requirement
- Handle changelog check 'skipped' state in dependent jobs
- Exclude
changelog.d/,docs/,experiments/,examples/folders and markdown files from code changes detection
Fixed
- Fixed README.md to correctly reference Node.js scripts (
.mjs) instead of Python scripts (.py) - Updated project structure in README.md to match actual script files in
scripts/directory - Fixed example code in README.md that had invalid Rust with two
mainfunctions
Added
- Added crates.io publishing support to CI/CD workflow
- Added
release_modeinput with "instant" and "changelog-pr" options for manual releases - Added
--tag-prefixand--crates-io-urloptions to create-github-release.mjs script - Added comprehensive case study documentation for Issue #11 in docs/case-studies/issue-11/
Changed
- Changed changelog fragment check from warning to error (exit 1) to enforce changelog requirements
- Updated job conditions with
always() && !cancelled()to fix workflow_dispatch job skipping issue - Renamed manual-release job to "Instant Release" for clarity
Fixed
- Fixed deprecated
::set-outputGitHub Actions command in version-and-commit.mjs - Fixed workflow_dispatch triggering issues where lint/build/release jobs were incorrectly skipped
Fixed
- Fixed changelog fragment check to validate that a fragment is added in the PR diff rather than just checking if any fragments exist in the directory. This prevents the check from incorrectly passing when there are leftover fragments from previous PRs that haven't been released yet.
Changed
- Converted shell scripts in
release.ymlto cross-platform.mjsscripts for improved portability and performance:check-changelog-fragment.mjs- validates changelog fragment is added in PR diffgit-config.mjs- configures git user for CI/CDcheck-release-needed.mjs- checks if release is neededpublish-crate.mjs- publishes package to crates.iocreate-changelog-fragment.mjs- creates changelog fragments for manual releasesget-version.mjs- gets current version from Cargo.toml
Added
- Added
check-version-modification.mjsscript to detect manual version changes in Cargo.toml - Added
version-checkjob to CI/CD workflow that runs on pull requests - Added skip logic for automated release branches (changelog-manual-release-, changeset-release/, release/, automated-release/)
Changed
- Version modifications in Cargo.toml are now blocked in pull requests to enforce automated release pipeline
Added
- Added support for
CARGO_REGISTRY_TOKENas alternative toCARGO_TOKENfor crates.io publishing - Added case study documentation for Issue #17 (yargs reserved word and dual token support)
Changed
- Updated workflow to use fallback logic:
${{ secrets.CARGO_REGISTRY_TOKEN || secrets.CARGO_TOKEN }} - Improved publish-crate.mjs to check both
CARGO_REGISTRY_TOKENandCARGO_TOKENenvironment variables - Added warning message when neither token is set
Added
- New
scripts/rust-paths.mjsutility for automatic Rust package root detection - Support for both single-language and multi-language repository structures in all CI/CD scripts
- Configuration options via
--rust-rootCLI argument andRUST_ROOTenvironment variable - Comprehensive case study documentation in
docs/case-studies/issue-19/
Changed
- Updated all release scripts to use the new path detection utility:
scripts/bump-version.mjsscripts/check-release-needed.mjsscripts/collect-changelog.mjsscripts/get-bump-type.mjsscripts/get-version.mjsscripts/publish-crate.mjsscripts/version-and-commit.mjs
Changed
- check-release-needed.mjs: Now checks crates.io API directly instead of git tags to determine if a version is already released. This prevents false positives where git tags exist but the package was never actually published to crates.io.
Added
-
CI/CD Troubleshooting Guide: New documentation at
docs/ci-cd/troubleshooting.mdcovering common issues like skipped jobs, false positive version checks, publishing failures, and secret configuration. -
Enhanced Error Handling in publish-crate.mjs: Added specific detection and helpful error messages for authentication failures, including guidance on secret configuration and workflow setup.
-
Case Study Documentation: Added comprehensive case study at
docs/case-studies/issue-21/analyzing CI/CD failures from browser-commander repository (issues #27, #29, #31, #33) with timeline, root causes, and lessons learned.
Fixed
- Prevent False Positive Version Checks: The release workflow now correctly identifies unpublished versions by checking crates.io instead of relying on git tags, which can exist without the package being published.
Changed
- Translated all CI/CD scripts from JavaScript (.mjs) to Rust (.rs) using rust-script
- Scripts now use native Rust with rust-script for execution in shell
- Removed Node.js dependency from CI/CD pipeline
- Updated GitHub Actions workflow to use rust-script instead of node
- Updated README and CONTRIBUTING documentation with new script references
Added
- Cache
restore-keysfor partial cache hits across all workflow jobs - Explicit
tokenparameter in checkout for release jobs - Code coverage job with
cargo-llvm-covand Codecov integration - Codecov badge in README.md
- Pre-release version support (e.g.,
0.1.0-beta.1) in version parsing --release-labelparameter for multi-language release disambiguationensure_version_exceeds_published()logic to prevent publishing duplicate versionsget_max_published_version()to query highest non-yanked version from crates.iomax_published_versionoutput from check-release-needed for downstream use- Version fallback logic in auto-release Create GitHub Release step
Changed
- Updated
actions/checkoutfrom v4 to v6 - Updated
actions/cachefrom v4 to v5 - Updated
peter-evans/create-pull-requestfrom v7 to v8 - Made
publish-crate.rsfail (exit 1) when version already exists on crates.io - Improved
create-github-release.rsto check combined stdout+stderr and detect "Validation Failed"
Fixed
- Fix publish steps overriding workflow-level CARGO_TOKEN fallback, breaking CARGO_REGISTRY_TOKEN-only configurations (#32)
- Fix non-fast-forward push failures in multi-workflow repos by adding fetch/rebase and push retry logic (#31)
- Add mono-repo path support to check-changelog-fragment.rs, check-version-modification.rs, and create-changelog-fragment.rs
- Add
!cancelled()guard to test job condition to respect workflow cancellation
Fixed
- Fixed
version-and-commit.rsto check crates.io instead of git tags for determining if a version is already released - This prevents the release pipeline from getting stuck when git tags exist without corresponding crates.io publication
Added
- Added
--tag-prefixsupport toversion-and-commit.rsfor multi-language repository compatibility - Added crates.io and docs.rs badges to README.md
- Added automatic crates.io and docs.rs badge injection in GitHub release notes
- Added documentation deployment job to CI/CD pipeline (deploys to GitHub Pages after release)
- Added case study documentation for issue #25
Fixed
- Fixed unsupported look-ahead regex in
create-github-release.rsthat caused a panic when parsing CHANGELOG.md. Replaced with a two-step approach using only features supported by Rust'sregexcrate.
Changed
- Restructured example application as a simple CLI sum calculator using
lino-arguments - Renamed default package to
example-sum-package-namewith Unlicense license - Reorganized test structure:
tests/unit/sum.rs,tests/integration/sum.rs,tests/unit/ci-cd/ - Converted experiment scripts into proper unit tests in
tests/unit/ci-cd/changelog_parsing.rs - Added CI/CD skip logic for template default package name
example-sum-package-name - Updated README.md badges and documentation
Fixed
- Change detection script now uses per-commit diff instead of full PR diff, so commits touching only non-code files correctly skip CI jobs even when earlier commits in the same PR changed code files
Fixed
- Make release scripts resolve the publishable crate manifest when the repository root uses a Cargo workspace manifest.
Fixed
- Decoupled GitHub Pages documentation deployment from package release publication and fixed release-script warning failures under
RUSTFLAGS=-Dwarnings.
Changed
- Added explicit GitHub Actions job timeouts and documented Rust test timeout guidance.
Fixed
- Added a non-blocking warning threshold to the Rust file-size check so near-limit files are surfaced before concurrent PR merges can exceed the hard limit.
Fixed
- Made
create-github-release.rsbuild GitHub release titles as[Language] X.Y.Zinstead of reusing the tag prefix.
A...
[Rust] 0.36.0
Added
- Changeset-style fragment format with frontmatter for specifying version bump type
- New
get-bump-type.mjsscript to automatically determine version bump from fragments - Automatic version bumping on merge to main based on changelog fragments
- Detailed documentation for the changelog fragment system in
changelog.d/README.md
Changed
- Updated
collect-changelog.mjsto strip frontmatter when collecting fragments - Updated
version-and-commit.mjsto handle frontmatter in fragments - Enhanced release workflow to automatically determine bump type from changesets
Changed
- Add
detect-changesjob with cross-platformdetect-code-changes.mjsscript - Make lint job independent of changelog check (runs based on file changes only)
- Allow docs-only PRs without changelog fragment requirement
- Handle changelog check 'skipped' state in dependent jobs
- Exclude
changelog.d/,docs/,experiments/,examples/folders and markdown files from code changes detection
Fixed
- Fixed README.md to correctly reference Node.js scripts (
.mjs) instead of Python scripts (.py) - Updated project structure in README.md to match actual script files in
scripts/directory - Fixed example code in README.md that had invalid Rust with two
mainfunctions
Added
- Added crates.io publishing support to CI/CD workflow
- Added
release_modeinput with "instant" and "changelog-pr" options for manual releases - Added
--tag-prefixand--crates-io-urloptions to create-github-release.mjs script - Added comprehensive case study documentation for Issue #11 in docs/case-studies/issue-11/
Changed
- Changed changelog fragment check from warning to error (exit 1) to enforce changelog requirements
- Updated job conditions with
always() && !cancelled()to fix workflow_dispatch job skipping issue - Renamed manual-release job to "Instant Release" for clarity
Fixed
- Fixed deprecated
::set-outputGitHub Actions command in version-and-commit.mjs - Fixed workflow_dispatch triggering issues where lint/build/release jobs were incorrectly skipped
Fixed
- Fixed changelog fragment check to validate that a fragment is added in the PR diff rather than just checking if any fragments exist in the directory. This prevents the check from incorrectly passing when there are leftover fragments from previous PRs that haven't been released yet.
Changed
- Converted shell scripts in
release.ymlto cross-platform.mjsscripts for improved portability and performance:check-changelog-fragment.mjs- validates changelog fragment is added in PR diffgit-config.mjs- configures git user for CI/CDcheck-release-needed.mjs- checks if release is neededpublish-crate.mjs- publishes package to crates.iocreate-changelog-fragment.mjs- creates changelog fragments for manual releasesget-version.mjs- gets current version from Cargo.toml
Added
- Added
check-version-modification.mjsscript to detect manual version changes in Cargo.toml - Added
version-checkjob to CI/CD workflow that runs on pull requests - Added skip logic for automated release branches (changelog-manual-release-, changeset-release/, release/, automated-release/)
Changed
- Version modifications in Cargo.toml are now blocked in pull requests to enforce automated release pipeline
Added
- Added support for
CARGO_REGISTRY_TOKENas alternative toCARGO_TOKENfor crates.io publishing - Added case study documentation for Issue #17 (yargs reserved word and dual token support)
Changed
- Updated workflow to use fallback logic:
${{ secrets.CARGO_REGISTRY_TOKEN || secrets.CARGO_TOKEN }} - Improved publish-crate.mjs to check both
CARGO_REGISTRY_TOKENandCARGO_TOKENenvironment variables - Added warning message when neither token is set
Added
- New
scripts/rust-paths.mjsutility for automatic Rust package root detection - Support for both single-language and multi-language repository structures in all CI/CD scripts
- Configuration options via
--rust-rootCLI argument andRUST_ROOTenvironment variable - Comprehensive case study documentation in
docs/case-studies/issue-19/
Changed
- Updated all release scripts to use the new path detection utility:
scripts/bump-version.mjsscripts/check-release-needed.mjsscripts/collect-changelog.mjsscripts/get-bump-type.mjsscripts/get-version.mjsscripts/publish-crate.mjsscripts/version-and-commit.mjs
Changed
- check-release-needed.mjs: Now checks crates.io API directly instead of git tags to determine if a version is already released. This prevents false positives where git tags exist but the package was never actually published to crates.io.
Added
-
CI/CD Troubleshooting Guide: New documentation at
docs/ci-cd/troubleshooting.mdcovering common issues like skipped jobs, false positive version checks, publishing failures, and secret configuration. -
Enhanced Error Handling in publish-crate.mjs: Added specific detection and helpful error messages for authentication failures, including guidance on secret configuration and workflow setup.
-
Case Study Documentation: Added comprehensive case study at
docs/case-studies/issue-21/analyzing CI/CD failures from browser-commander repository (issues #27, #29, #31, #33) with timeline, root causes, and lessons learned.
Fixed
- Prevent False Positive Version Checks: The release workflow now correctly identifies unpublished versions by checking crates.io instead of relying on git tags, which can exist without the package being published.
Changed
- Translated all CI/CD scripts from JavaScript (.mjs) to Rust (.rs) using rust-script
- Scripts now use native Rust with rust-script for execution in shell
- Removed Node.js dependency from CI/CD pipeline
- Updated GitHub Actions workflow to use rust-script instead of node
- Updated README and CONTRIBUTING documentation with new script references
Added
- Cache
restore-keysfor partial cache hits across all workflow jobs - Explicit
tokenparameter in checkout for release jobs - Code coverage job with
cargo-llvm-covand Codecov integration - Codecov badge in README.md
- Pre-release version support (e.g.,
0.1.0-beta.1) in version parsing --release-labelparameter for multi-language release disambiguationensure_version_exceeds_published()logic to prevent publishing duplicate versionsget_max_published_version()to query highest non-yanked version from crates.iomax_published_versionoutput from check-release-needed for downstream use- Version fallback logic in auto-release Create GitHub Release step
Changed
- Updated
actions/checkoutfrom v4 to v6 - Updated
actions/cachefrom v4 to v5 - Updated
peter-evans/create-pull-requestfrom v7 to v8 - Made
publish-crate.rsfail (exit 1) when version already exists on crates.io - Improved
create-github-release.rsto check combined stdout+stderr and detect "Validation Failed"
Fixed
- Fix publish steps overriding workflow-level CARGO_TOKEN fallback, breaking CARGO_REGISTRY_TOKEN-only configurations (#32)
- Fix non-fast-forward push failures in multi-workflow repos by adding fetch/rebase and push retry logic (#31)
- Add mono-repo path support to check-changelog-fragment.rs, check-version-modification.rs, and create-changelog-fragment.rs
- Add
!cancelled()guard to test job condition to respect workflow cancellation
Fixed
- Fixed
version-and-commit.rsto check crates.io instead of git tags for determining if a version is already released - This prevents the release pipeline from getting stuck when git tags exist without corresponding crates.io publication
Added
- Added
--tag-prefixsupport toversion-and-commit.rsfor multi-language repository compatibility - Added crates.io and docs.rs badges to README.md
- Added automatic crates.io and docs.rs badge injection in GitHub release notes
- Added documentation deployment job to CI/CD pipeline (deploys to GitHub Pages after release)
- Added case study documentation for issue #25
Fixed
- Fixed unsupported look-ahead regex in
create-github-release.rsthat caused a panic when parsing CHANGELOG.md. Replaced with a two-step approach using only features supported by Rust'sregexcrate.
Changed
- Restructured example application as a simple CLI sum calculator using
lino-arguments - Renamed default package to
example-sum-package-namewith Unlicense license - Reorganized test structure:
tests/unit/sum.rs,tests/integration/sum.rs,tests/unit/ci-cd/ - Converted experiment scripts into proper unit tests in
tests/unit/ci-cd/changelog_parsing.rs - Added CI/CD skip logic for template default package name
example-sum-package-name - Updated README.md badges and documentation
Fixed
- Change detection script now uses per-commit diff instead of full PR diff, so commits touching only non-code files correctly skip CI jobs even when earlier commits in the same PR changed code files
Fixed
- Make release scripts resolve the publishable crate manifest when the repository root uses a Cargo workspace manifest.
Fixed
- Decoupled GitHub Pages documentation deployment from package release publication and fixed release-script warning failures under
RUSTFLAGS=-Dwarnings.
Changed
- Added explicit GitHub Actions job timeouts and documented Rust test timeout guidance.
Fixed
- Added a non-blocking warning threshold to the Rust file-size check so near-limit files are surfaced before concurrent PR merges can exceed the hard limit.
Fixed
- Made
create-github-release.rsbuild GitHub release titles as[Language] X.Y.Zinstead of reusing the tag prefix.
A...
[Rust] 0.35.0
Added
- Changeset-style fragment format with frontmatter for specifying version bump type
- New
get-bump-type.mjsscript to automatically determine version bump from fragments - Automatic version bumping on merge to main based on changelog fragments
- Detailed documentation for the changelog fragment system in
changelog.d/README.md
Changed
- Updated
collect-changelog.mjsto strip frontmatter when collecting fragments - Updated
version-and-commit.mjsto handle frontmatter in fragments - Enhanced release workflow to automatically determine bump type from changesets
Changed
- Add
detect-changesjob with cross-platformdetect-code-changes.mjsscript - Make lint job independent of changelog check (runs based on file changes only)
- Allow docs-only PRs without changelog fragment requirement
- Handle changelog check 'skipped' state in dependent jobs
- Exclude
changelog.d/,docs/,experiments/,examples/folders and markdown files from code changes detection
Fixed
- Fixed README.md to correctly reference Node.js scripts (
.mjs) instead of Python scripts (.py) - Updated project structure in README.md to match actual script files in
scripts/directory - Fixed example code in README.md that had invalid Rust with two
mainfunctions
Added
- Added crates.io publishing support to CI/CD workflow
- Added
release_modeinput with "instant" and "changelog-pr" options for manual releases - Added
--tag-prefixand--crates-io-urloptions to create-github-release.mjs script - Added comprehensive case study documentation for Issue #11 in docs/case-studies/issue-11/
Changed
- Changed changelog fragment check from warning to error (exit 1) to enforce changelog requirements
- Updated job conditions with
always() && !cancelled()to fix workflow_dispatch job skipping issue - Renamed manual-release job to "Instant Release" for clarity
Fixed
- Fixed deprecated
::set-outputGitHub Actions command in version-and-commit.mjs - Fixed workflow_dispatch triggering issues where lint/build/release jobs were incorrectly skipped
Fixed
- Fixed changelog fragment check to validate that a fragment is added in the PR diff rather than just checking if any fragments exist in the directory. This prevents the check from incorrectly passing when there are leftover fragments from previous PRs that haven't been released yet.
Changed
- Converted shell scripts in
release.ymlto cross-platform.mjsscripts for improved portability and performance:check-changelog-fragment.mjs- validates changelog fragment is added in PR diffgit-config.mjs- configures git user for CI/CDcheck-release-needed.mjs- checks if release is neededpublish-crate.mjs- publishes package to crates.iocreate-changelog-fragment.mjs- creates changelog fragments for manual releasesget-version.mjs- gets current version from Cargo.toml
Added
- Added
check-version-modification.mjsscript to detect manual version changes in Cargo.toml - Added
version-checkjob to CI/CD workflow that runs on pull requests - Added skip logic for automated release branches (changelog-manual-release-, changeset-release/, release/, automated-release/)
Changed
- Version modifications in Cargo.toml are now blocked in pull requests to enforce automated release pipeline
Added
- Added support for
CARGO_REGISTRY_TOKENas alternative toCARGO_TOKENfor crates.io publishing - Added case study documentation for Issue #17 (yargs reserved word and dual token support)
Changed
- Updated workflow to use fallback logic:
${{ secrets.CARGO_REGISTRY_TOKEN || secrets.CARGO_TOKEN }} - Improved publish-crate.mjs to check both
CARGO_REGISTRY_TOKENandCARGO_TOKENenvironment variables - Added warning message when neither token is set
Added
- New
scripts/rust-paths.mjsutility for automatic Rust package root detection - Support for both single-language and multi-language repository structures in all CI/CD scripts
- Configuration options via
--rust-rootCLI argument andRUST_ROOTenvironment variable - Comprehensive case study documentation in
docs/case-studies/issue-19/
Changed
- Updated all release scripts to use the new path detection utility:
scripts/bump-version.mjsscripts/check-release-needed.mjsscripts/collect-changelog.mjsscripts/get-bump-type.mjsscripts/get-version.mjsscripts/publish-crate.mjsscripts/version-and-commit.mjs
Changed
- check-release-needed.mjs: Now checks crates.io API directly instead of git tags to determine if a version is already released. This prevents false positives where git tags exist but the package was never actually published to crates.io.
Added
-
CI/CD Troubleshooting Guide: New documentation at
docs/ci-cd/troubleshooting.mdcovering common issues like skipped jobs, false positive version checks, publishing failures, and secret configuration. -
Enhanced Error Handling in publish-crate.mjs: Added specific detection and helpful error messages for authentication failures, including guidance on secret configuration and workflow setup.
-
Case Study Documentation: Added comprehensive case study at
docs/case-studies/issue-21/analyzing CI/CD failures from browser-commander repository (issues #27, #29, #31, #33) with timeline, root causes, and lessons learned.
Fixed
- Prevent False Positive Version Checks: The release workflow now correctly identifies unpublished versions by checking crates.io instead of relying on git tags, which can exist without the package being published.
Changed
- Translated all CI/CD scripts from JavaScript (.mjs) to Rust (.rs) using rust-script
- Scripts now use native Rust with rust-script for execution in shell
- Removed Node.js dependency from CI/CD pipeline
- Updated GitHub Actions workflow to use rust-script instead of node
- Updated README and CONTRIBUTING documentation with new script references
Added
- Cache
restore-keysfor partial cache hits across all workflow jobs - Explicit
tokenparameter in checkout for release jobs - Code coverage job with
cargo-llvm-covand Codecov integration - Codecov badge in README.md
- Pre-release version support (e.g.,
0.1.0-beta.1) in version parsing --release-labelparameter for multi-language release disambiguationensure_version_exceeds_published()logic to prevent publishing duplicate versionsget_max_published_version()to query highest non-yanked version from crates.iomax_published_versionoutput from check-release-needed for downstream use- Version fallback logic in auto-release Create GitHub Release step
Changed
- Updated
actions/checkoutfrom v4 to v6 - Updated
actions/cachefrom v4 to v5 - Updated
peter-evans/create-pull-requestfrom v7 to v8 - Made
publish-crate.rsfail (exit 1) when version already exists on crates.io - Improved
create-github-release.rsto check combined stdout+stderr and detect "Validation Failed"
Fixed
- Fix publish steps overriding workflow-level CARGO_TOKEN fallback, breaking CARGO_REGISTRY_TOKEN-only configurations (#32)
- Fix non-fast-forward push failures in multi-workflow repos by adding fetch/rebase and push retry logic (#31)
- Add mono-repo path support to check-changelog-fragment.rs, check-version-modification.rs, and create-changelog-fragment.rs
- Add
!cancelled()guard to test job condition to respect workflow cancellation
Fixed
- Fixed
version-and-commit.rsto check crates.io instead of git tags for determining if a version is already released - This prevents the release pipeline from getting stuck when git tags exist without corresponding crates.io publication
Added
- Added
--tag-prefixsupport toversion-and-commit.rsfor multi-language repository compatibility - Added crates.io and docs.rs badges to README.md
- Added automatic crates.io and docs.rs badge injection in GitHub release notes
- Added documentation deployment job to CI/CD pipeline (deploys to GitHub Pages after release)
- Added case study documentation for issue #25
Fixed
- Fixed unsupported look-ahead regex in
create-github-release.rsthat caused a panic when parsing CHANGELOG.md. Replaced with a two-step approach using only features supported by Rust'sregexcrate.
Changed
- Restructured example application as a simple CLI sum calculator using
lino-arguments - Renamed default package to
example-sum-package-namewith Unlicense license - Reorganized test structure:
tests/unit/sum.rs,tests/integration/sum.rs,tests/unit/ci-cd/ - Converted experiment scripts into proper unit tests in
tests/unit/ci-cd/changelog_parsing.rs - Added CI/CD skip logic for template default package name
example-sum-package-name - Updated README.md badges and documentation
Fixed
- Change detection script now uses per-commit diff instead of full PR diff, so commits touching only non-code files correctly skip CI jobs even when earlier commits in the same PR changed code files
Fixed
- Make release scripts resolve the publishable crate manifest when the repository root uses a Cargo workspace manifest.
Fixed
- Decoupled GitHub Pages documentation deployment from package release publication and fixed release-script warning failures under
RUSTFLAGS=-Dwarnings.
Changed
- Added explicit GitHub Actions job timeouts and documented Rust test timeout guidance.
Fixed
- Added a non-blocking warning threshold to the Rust file-size check so near-limit files are surfaced before concurrent PR merges can exceed the hard limit.
Fixed
- Made
create-github-release.rsbuild GitHub release titles as[Language] X.Y.Zinstead of reusing the tag prefix.
A...
[Rust] 0.34.0
Added
- Changeset-style fragment format with frontmatter for specifying version bump type
- New
get-bump-type.mjsscript to automatically determine version bump from fragments - Automatic version bumping on merge to main based on changelog fragments
- Detailed documentation for the changelog fragment system in
changelog.d/README.md
Changed
- Updated
collect-changelog.mjsto strip frontmatter when collecting fragments - Updated
version-and-commit.mjsto handle frontmatter in fragments - Enhanced release workflow to automatically determine bump type from changesets
Changed
- Add
detect-changesjob with cross-platformdetect-code-changes.mjsscript - Make lint job independent of changelog check (runs based on file changes only)
- Allow docs-only PRs without changelog fragment requirement
- Handle changelog check 'skipped' state in dependent jobs
- Exclude
changelog.d/,docs/,experiments/,examples/folders and markdown files from code changes detection
Fixed
- Fixed README.md to correctly reference Node.js scripts (
.mjs) instead of Python scripts (.py) - Updated project structure in README.md to match actual script files in
scripts/directory - Fixed example code in README.md that had invalid Rust with two
mainfunctions
Added
- Added crates.io publishing support to CI/CD workflow
- Added
release_modeinput with "instant" and "changelog-pr" options for manual releases - Added
--tag-prefixand--crates-io-urloptions to create-github-release.mjs script - Added comprehensive case study documentation for Issue #11 in docs/case-studies/issue-11/
Changed
- Changed changelog fragment check from warning to error (exit 1) to enforce changelog requirements
- Updated job conditions with
always() && !cancelled()to fix workflow_dispatch job skipping issue - Renamed manual-release job to "Instant Release" for clarity
Fixed
- Fixed deprecated
::set-outputGitHub Actions command in version-and-commit.mjs - Fixed workflow_dispatch triggering issues where lint/build/release jobs were incorrectly skipped
Fixed
- Fixed changelog fragment check to validate that a fragment is added in the PR diff rather than just checking if any fragments exist in the directory. This prevents the check from incorrectly passing when there are leftover fragments from previous PRs that haven't been released yet.
Changed
- Converted shell scripts in
release.ymlto cross-platform.mjsscripts for improved portability and performance:check-changelog-fragment.mjs- validates changelog fragment is added in PR diffgit-config.mjs- configures git user for CI/CDcheck-release-needed.mjs- checks if release is neededpublish-crate.mjs- publishes package to crates.iocreate-changelog-fragment.mjs- creates changelog fragments for manual releasesget-version.mjs- gets current version from Cargo.toml
Added
- Added
check-version-modification.mjsscript to detect manual version changes in Cargo.toml - Added
version-checkjob to CI/CD workflow that runs on pull requests - Added skip logic for automated release branches (changelog-manual-release-, changeset-release/, release/, automated-release/)
Changed
- Version modifications in Cargo.toml are now blocked in pull requests to enforce automated release pipeline
Added
- Added support for
CARGO_REGISTRY_TOKENas alternative toCARGO_TOKENfor crates.io publishing - Added case study documentation for Issue #17 (yargs reserved word and dual token support)
Changed
- Updated workflow to use fallback logic:
${{ secrets.CARGO_REGISTRY_TOKEN || secrets.CARGO_TOKEN }} - Improved publish-crate.mjs to check both
CARGO_REGISTRY_TOKENandCARGO_TOKENenvironment variables - Added warning message when neither token is set
Added
- New
scripts/rust-paths.mjsutility for automatic Rust package root detection - Support for both single-language and multi-language repository structures in all CI/CD scripts
- Configuration options via
--rust-rootCLI argument andRUST_ROOTenvironment variable - Comprehensive case study documentation in
docs/case-studies/issue-19/
Changed
- Updated all release scripts to use the new path detection utility:
scripts/bump-version.mjsscripts/check-release-needed.mjsscripts/collect-changelog.mjsscripts/get-bump-type.mjsscripts/get-version.mjsscripts/publish-crate.mjsscripts/version-and-commit.mjs
Changed
- check-release-needed.mjs: Now checks crates.io API directly instead of git tags to determine if a version is already released. This prevents false positives where git tags exist but the package was never actually published to crates.io.
Added
-
CI/CD Troubleshooting Guide: New documentation at
docs/ci-cd/troubleshooting.mdcovering common issues like skipped jobs, false positive version checks, publishing failures, and secret configuration. -
Enhanced Error Handling in publish-crate.mjs: Added specific detection and helpful error messages for authentication failures, including guidance on secret configuration and workflow setup.
-
Case Study Documentation: Added comprehensive case study at
docs/case-studies/issue-21/analyzing CI/CD failures from browser-commander repository (issues #27, #29, #31, #33) with timeline, root causes, and lessons learned.
Fixed
- Prevent False Positive Version Checks: The release workflow now correctly identifies unpublished versions by checking crates.io instead of relying on git tags, which can exist without the package being published.
Changed
- Translated all CI/CD scripts from JavaScript (.mjs) to Rust (.rs) using rust-script
- Scripts now use native Rust with rust-script for execution in shell
- Removed Node.js dependency from CI/CD pipeline
- Updated GitHub Actions workflow to use rust-script instead of node
- Updated README and CONTRIBUTING documentation with new script references
Added
- Cache
restore-keysfor partial cache hits across all workflow jobs - Explicit
tokenparameter in checkout for release jobs - Code coverage job with
cargo-llvm-covand Codecov integration - Codecov badge in README.md
- Pre-release version support (e.g.,
0.1.0-beta.1) in version parsing --release-labelparameter for multi-language release disambiguationensure_version_exceeds_published()logic to prevent publishing duplicate versionsget_max_published_version()to query highest non-yanked version from crates.iomax_published_versionoutput from check-release-needed for downstream use- Version fallback logic in auto-release Create GitHub Release step
Changed
- Updated
actions/checkoutfrom v4 to v6 - Updated
actions/cachefrom v4 to v5 - Updated
peter-evans/create-pull-requestfrom v7 to v8 - Made
publish-crate.rsfail (exit 1) when version already exists on crates.io - Improved
create-github-release.rsto check combined stdout+stderr and detect "Validation Failed"
Fixed
- Fix publish steps overriding workflow-level CARGO_TOKEN fallback, breaking CARGO_REGISTRY_TOKEN-only configurations (#32)
- Fix non-fast-forward push failures in multi-workflow repos by adding fetch/rebase and push retry logic (#31)
- Add mono-repo path support to check-changelog-fragment.rs, check-version-modification.rs, and create-changelog-fragment.rs
- Add
!cancelled()guard to test job condition to respect workflow cancellation
Fixed
- Fixed
version-and-commit.rsto check crates.io instead of git tags for determining if a version is already released - This prevents the release pipeline from getting stuck when git tags exist without corresponding crates.io publication
Added
- Added
--tag-prefixsupport toversion-and-commit.rsfor multi-language repository compatibility - Added crates.io and docs.rs badges to README.md
- Added automatic crates.io and docs.rs badge injection in GitHub release notes
- Added documentation deployment job to CI/CD pipeline (deploys to GitHub Pages after release)
- Added case study documentation for issue #25
Fixed
- Fixed unsupported look-ahead regex in
create-github-release.rsthat caused a panic when parsing CHANGELOG.md. Replaced with a two-step approach using only features supported by Rust'sregexcrate.
Changed
- Restructured example application as a simple CLI sum calculator using
lino-arguments - Renamed default package to
example-sum-package-namewith Unlicense license - Reorganized test structure:
tests/unit/sum.rs,tests/integration/sum.rs,tests/unit/ci-cd/ - Converted experiment scripts into proper unit tests in
tests/unit/ci-cd/changelog_parsing.rs - Added CI/CD skip logic for template default package name
example-sum-package-name - Updated README.md badges and documentation
Fixed
- Change detection script now uses per-commit diff instead of full PR diff, so commits touching only non-code files correctly skip CI jobs even when earlier commits in the same PR changed code files
Fixed
- Make release scripts resolve the publishable crate manifest when the repository root uses a Cargo workspace manifest.
Fixed
- Decoupled GitHub Pages documentation deployment from package release publication and fixed release-script warning failures under
RUSTFLAGS=-Dwarnings.
Changed
- Added explicit GitHub Actions job timeouts and documented Rust test timeout guidance.
Fixed
- Added a non-blocking warning threshold to the Rust file-size check so near-limit files are surfaced before concurrent PR merges can exceed the hard limit.
Fixed
- Made
create-github-release.rsbuild GitHub release titles as[Language] X.Y.Zinstead of reusing the tag prefix.
A...
[Rust] 0.33.0
Added
- Changeset-style fragment format with frontmatter for specifying version bump type
- New
get-bump-type.mjsscript to automatically determine version bump from fragments - Automatic version bumping on merge to main based on changelog fragments
- Detailed documentation for the changelog fragment system in
changelog.d/README.md
Changed
- Updated
collect-changelog.mjsto strip frontmatter when collecting fragments - Updated
version-and-commit.mjsto handle frontmatter in fragments - Enhanced release workflow to automatically determine bump type from changesets
Changed
- Add
detect-changesjob with cross-platformdetect-code-changes.mjsscript - Make lint job independent of changelog check (runs based on file changes only)
- Allow docs-only PRs without changelog fragment requirement
- Handle changelog check 'skipped' state in dependent jobs
- Exclude
changelog.d/,docs/,experiments/,examples/folders and markdown files from code changes detection
Fixed
- Fixed README.md to correctly reference Node.js scripts (
.mjs) instead of Python scripts (.py) - Updated project structure in README.md to match actual script files in
scripts/directory - Fixed example code in README.md that had invalid Rust with two
mainfunctions
Added
- Added crates.io publishing support to CI/CD workflow
- Added
release_modeinput with "instant" and "changelog-pr" options for manual releases - Added
--tag-prefixand--crates-io-urloptions to create-github-release.mjs script - Added comprehensive case study documentation for Issue #11 in docs/case-studies/issue-11/
Changed
- Changed changelog fragment check from warning to error (exit 1) to enforce changelog requirements
- Updated job conditions with
always() && !cancelled()to fix workflow_dispatch job skipping issue - Renamed manual-release job to "Instant Release" for clarity
Fixed
- Fixed deprecated
::set-outputGitHub Actions command in version-and-commit.mjs - Fixed workflow_dispatch triggering issues where lint/build/release jobs were incorrectly skipped
Fixed
- Fixed changelog fragment check to validate that a fragment is added in the PR diff rather than just checking if any fragments exist in the directory. This prevents the check from incorrectly passing when there are leftover fragments from previous PRs that haven't been released yet.
Changed
- Converted shell scripts in
release.ymlto cross-platform.mjsscripts for improved portability and performance:check-changelog-fragment.mjs- validates changelog fragment is added in PR diffgit-config.mjs- configures git user for CI/CDcheck-release-needed.mjs- checks if release is neededpublish-crate.mjs- publishes package to crates.iocreate-changelog-fragment.mjs- creates changelog fragments for manual releasesget-version.mjs- gets current version from Cargo.toml
Added
- Added
check-version-modification.mjsscript to detect manual version changes in Cargo.toml - Added
version-checkjob to CI/CD workflow that runs on pull requests - Added skip logic for automated release branches (changelog-manual-release-, changeset-release/, release/, automated-release/)
Changed
- Version modifications in Cargo.toml are now blocked in pull requests to enforce automated release pipeline
Added
- Added support for
CARGO_REGISTRY_TOKENas alternative toCARGO_TOKENfor crates.io publishing - Added case study documentation for Issue #17 (yargs reserved word and dual token support)
Changed
- Updated workflow to use fallback logic:
${{ secrets.CARGO_REGISTRY_TOKEN || secrets.CARGO_TOKEN }} - Improved publish-crate.mjs to check both
CARGO_REGISTRY_TOKENandCARGO_TOKENenvironment variables - Added warning message when neither token is set
Added
- New
scripts/rust-paths.mjsutility for automatic Rust package root detection - Support for both single-language and multi-language repository structures in all CI/CD scripts
- Configuration options via
--rust-rootCLI argument andRUST_ROOTenvironment variable - Comprehensive case study documentation in
docs/case-studies/issue-19/
Changed
- Updated all release scripts to use the new path detection utility:
scripts/bump-version.mjsscripts/check-release-needed.mjsscripts/collect-changelog.mjsscripts/get-bump-type.mjsscripts/get-version.mjsscripts/publish-crate.mjsscripts/version-and-commit.mjs
Changed
- check-release-needed.mjs: Now checks crates.io API directly instead of git tags to determine if a version is already released. This prevents false positives where git tags exist but the package was never actually published to crates.io.
Added
-
CI/CD Troubleshooting Guide: New documentation at
docs/ci-cd/troubleshooting.mdcovering common issues like skipped jobs, false positive version checks, publishing failures, and secret configuration. -
Enhanced Error Handling in publish-crate.mjs: Added specific detection and helpful error messages for authentication failures, including guidance on secret configuration and workflow setup.
-
Case Study Documentation: Added comprehensive case study at
docs/case-studies/issue-21/analyzing CI/CD failures from browser-commander repository (issues #27, #29, #31, #33) with timeline, root causes, and lessons learned.
Fixed
- Prevent False Positive Version Checks: The release workflow now correctly identifies unpublished versions by checking crates.io instead of relying on git tags, which can exist without the package being published.
Changed
- Translated all CI/CD scripts from JavaScript (.mjs) to Rust (.rs) using rust-script
- Scripts now use native Rust with rust-script for execution in shell
- Removed Node.js dependency from CI/CD pipeline
- Updated GitHub Actions workflow to use rust-script instead of node
- Updated README and CONTRIBUTING documentation with new script references
Added
- Cache
restore-keysfor partial cache hits across all workflow jobs - Explicit
tokenparameter in checkout for release jobs - Code coverage job with
cargo-llvm-covand Codecov integration - Codecov badge in README.md
- Pre-release version support (e.g.,
0.1.0-beta.1) in version parsing --release-labelparameter for multi-language release disambiguationensure_version_exceeds_published()logic to prevent publishing duplicate versionsget_max_published_version()to query highest non-yanked version from crates.iomax_published_versionoutput from check-release-needed for downstream use- Version fallback logic in auto-release Create GitHub Release step
Changed
- Updated
actions/checkoutfrom v4 to v6 - Updated
actions/cachefrom v4 to v5 - Updated
peter-evans/create-pull-requestfrom v7 to v8 - Made
publish-crate.rsfail (exit 1) when version already exists on crates.io - Improved
create-github-release.rsto check combined stdout+stderr and detect "Validation Failed"
Fixed
- Fix publish steps overriding workflow-level CARGO_TOKEN fallback, breaking CARGO_REGISTRY_TOKEN-only configurations (#32)
- Fix non-fast-forward push failures in multi-workflow repos by adding fetch/rebase and push retry logic (#31)
- Add mono-repo path support to check-changelog-fragment.rs, check-version-modification.rs, and create-changelog-fragment.rs
- Add
!cancelled()guard to test job condition to respect workflow cancellation
Fixed
- Fixed
version-and-commit.rsto check crates.io instead of git tags for determining if a version is already released - This prevents the release pipeline from getting stuck when git tags exist without corresponding crates.io publication
Added
- Added
--tag-prefixsupport toversion-and-commit.rsfor multi-language repository compatibility - Added crates.io and docs.rs badges to README.md
- Added automatic crates.io and docs.rs badge injection in GitHub release notes
- Added documentation deployment job to CI/CD pipeline (deploys to GitHub Pages after release)
- Added case study documentation for issue #25
Fixed
- Fixed unsupported look-ahead regex in
create-github-release.rsthat caused a panic when parsing CHANGELOG.md. Replaced with a two-step approach using only features supported by Rust'sregexcrate.
Changed
- Restructured example application as a simple CLI sum calculator using
lino-arguments - Renamed default package to
example-sum-package-namewith Unlicense license - Reorganized test structure:
tests/unit/sum.rs,tests/integration/sum.rs,tests/unit/ci-cd/ - Converted experiment scripts into proper unit tests in
tests/unit/ci-cd/changelog_parsing.rs - Added CI/CD skip logic for template default package name
example-sum-package-name - Updated README.md badges and documentation
Fixed
- Change detection script now uses per-commit diff instead of full PR diff, so commits touching only non-code files correctly skip CI jobs even when earlier commits in the same PR changed code files
Fixed
- Make release scripts resolve the publishable crate manifest when the repository root uses a Cargo workspace manifest.
Fixed
- Decoupled GitHub Pages documentation deployment from package release publication and fixed release-script warning failures under
RUSTFLAGS=-Dwarnings.
Changed
- Added explicit GitHub Actions job timeouts and documented Rust test timeout guidance.
Fixed
- Added a non-blocking warning threshold to the Rust file-size check so near-limit files are surfaced before concurrent PR merges can exceed the hard limit.
Fixed
- Made
create-github-release.rsbuild GitHub release titles as[Language] X.Y.Zinstead of reusing the tag prefix.
A...
[Rust] 0.32.0
Added
- Changeset-style fragment format with frontmatter for specifying version bump type
- New
get-bump-type.mjsscript to automatically determine version bump from fragments - Automatic version bumping on merge to main based on changelog fragments
- Detailed documentation for the changelog fragment system in
changelog.d/README.md
Changed
- Updated
collect-changelog.mjsto strip frontmatter when collecting fragments - Updated
version-and-commit.mjsto handle frontmatter in fragments - Enhanced release workflow to automatically determine bump type from changesets
Changed
- Add
detect-changesjob with cross-platformdetect-code-changes.mjsscript - Make lint job independent of changelog check (runs based on file changes only)
- Allow docs-only PRs without changelog fragment requirement
- Handle changelog check 'skipped' state in dependent jobs
- Exclude
changelog.d/,docs/,experiments/,examples/folders and markdown files from code changes detection
Fixed
- Fixed README.md to correctly reference Node.js scripts (
.mjs) instead of Python scripts (.py) - Updated project structure in README.md to match actual script files in
scripts/directory - Fixed example code in README.md that had invalid Rust with two
mainfunctions
Added
- Added crates.io publishing support to CI/CD workflow
- Added
release_modeinput with "instant" and "changelog-pr" options for manual releases - Added
--tag-prefixand--crates-io-urloptions to create-github-release.mjs script - Added comprehensive case study documentation for Issue #11 in docs/case-studies/issue-11/
Changed
- Changed changelog fragment check from warning to error (exit 1) to enforce changelog requirements
- Updated job conditions with
always() && !cancelled()to fix workflow_dispatch job skipping issue - Renamed manual-release job to "Instant Release" for clarity
Fixed
- Fixed deprecated
::set-outputGitHub Actions command in version-and-commit.mjs - Fixed workflow_dispatch triggering issues where lint/build/release jobs were incorrectly skipped
Fixed
- Fixed changelog fragment check to validate that a fragment is added in the PR diff rather than just checking if any fragments exist in the directory. This prevents the check from incorrectly passing when there are leftover fragments from previous PRs that haven't been released yet.
Changed
- Converted shell scripts in
release.ymlto cross-platform.mjsscripts for improved portability and performance:check-changelog-fragment.mjs- validates changelog fragment is added in PR diffgit-config.mjs- configures git user for CI/CDcheck-release-needed.mjs- checks if release is neededpublish-crate.mjs- publishes package to crates.iocreate-changelog-fragment.mjs- creates changelog fragments for manual releasesget-version.mjs- gets current version from Cargo.toml
Added
- Added
check-version-modification.mjsscript to detect manual version changes in Cargo.toml - Added
version-checkjob to CI/CD workflow that runs on pull requests - Added skip logic for automated release branches (changelog-manual-release-, changeset-release/, release/, automated-release/)
Changed
- Version modifications in Cargo.toml are now blocked in pull requests to enforce automated release pipeline
Added
- Added support for
CARGO_REGISTRY_TOKENas alternative toCARGO_TOKENfor crates.io publishing - Added case study documentation for Issue #17 (yargs reserved word and dual token support)
Changed
- Updated workflow to use fallback logic:
${{ secrets.CARGO_REGISTRY_TOKEN || secrets.CARGO_TOKEN }} - Improved publish-crate.mjs to check both
CARGO_REGISTRY_TOKENandCARGO_TOKENenvironment variables - Added warning message when neither token is set
Added
- New
scripts/rust-paths.mjsutility for automatic Rust package root detection - Support for both single-language and multi-language repository structures in all CI/CD scripts
- Configuration options via
--rust-rootCLI argument andRUST_ROOTenvironment variable - Comprehensive case study documentation in
docs/case-studies/issue-19/
Changed
- Updated all release scripts to use the new path detection utility:
scripts/bump-version.mjsscripts/check-release-needed.mjsscripts/collect-changelog.mjsscripts/get-bump-type.mjsscripts/get-version.mjsscripts/publish-crate.mjsscripts/version-and-commit.mjs
Changed
- check-release-needed.mjs: Now checks crates.io API directly instead of git tags to determine if a version is already released. This prevents false positives where git tags exist but the package was never actually published to crates.io.
Added
-
CI/CD Troubleshooting Guide: New documentation at
docs/ci-cd/troubleshooting.mdcovering common issues like skipped jobs, false positive version checks, publishing failures, and secret configuration. -
Enhanced Error Handling in publish-crate.mjs: Added specific detection and helpful error messages for authentication failures, including guidance on secret configuration and workflow setup.
-
Case Study Documentation: Added comprehensive case study at
docs/case-studies/issue-21/analyzing CI/CD failures from browser-commander repository (issues #27, #29, #31, #33) with timeline, root causes, and lessons learned.
Fixed
- Prevent False Positive Version Checks: The release workflow now correctly identifies unpublished versions by checking crates.io instead of relying on git tags, which can exist without the package being published.
Changed
- Translated all CI/CD scripts from JavaScript (.mjs) to Rust (.rs) using rust-script
- Scripts now use native Rust with rust-script for execution in shell
- Removed Node.js dependency from CI/CD pipeline
- Updated GitHub Actions workflow to use rust-script instead of node
- Updated README and CONTRIBUTING documentation with new script references
Added
- Cache
restore-keysfor partial cache hits across all workflow jobs - Explicit
tokenparameter in checkout for release jobs - Code coverage job with
cargo-llvm-covand Codecov integration - Codecov badge in README.md
- Pre-release version support (e.g.,
0.1.0-beta.1) in version parsing --release-labelparameter for multi-language release disambiguationensure_version_exceeds_published()logic to prevent publishing duplicate versionsget_max_published_version()to query highest non-yanked version from crates.iomax_published_versionoutput from check-release-needed for downstream use- Version fallback logic in auto-release Create GitHub Release step
Changed
- Updated
actions/checkoutfrom v4 to v6 - Updated
actions/cachefrom v4 to v5 - Updated
peter-evans/create-pull-requestfrom v7 to v8 - Made
publish-crate.rsfail (exit 1) when version already exists on crates.io - Improved
create-github-release.rsto check combined stdout+stderr and detect "Validation Failed"
Fixed
- Fix publish steps overriding workflow-level CARGO_TOKEN fallback, breaking CARGO_REGISTRY_TOKEN-only configurations (#32)
- Fix non-fast-forward push failures in multi-workflow repos by adding fetch/rebase and push retry logic (#31)
- Add mono-repo path support to check-changelog-fragment.rs, check-version-modification.rs, and create-changelog-fragment.rs
- Add
!cancelled()guard to test job condition to respect workflow cancellation
Fixed
- Fixed
version-and-commit.rsto check crates.io instead of git tags for determining if a version is already released - This prevents the release pipeline from getting stuck when git tags exist without corresponding crates.io publication
Added
- Added
--tag-prefixsupport toversion-and-commit.rsfor multi-language repository compatibility - Added crates.io and docs.rs badges to README.md
- Added automatic crates.io and docs.rs badge injection in GitHub release notes
- Added documentation deployment job to CI/CD pipeline (deploys to GitHub Pages after release)
- Added case study documentation for issue #25
Fixed
- Fixed unsupported look-ahead regex in
create-github-release.rsthat caused a panic when parsing CHANGELOG.md. Replaced with a two-step approach using only features supported by Rust'sregexcrate.
Changed
- Restructured example application as a simple CLI sum calculator using
lino-arguments - Renamed default package to
example-sum-package-namewith Unlicense license - Reorganized test structure:
tests/unit/sum.rs,tests/integration/sum.rs,tests/unit/ci-cd/ - Converted experiment scripts into proper unit tests in
tests/unit/ci-cd/changelog_parsing.rs - Added CI/CD skip logic for template default package name
example-sum-package-name - Updated README.md badges and documentation
Fixed
- Change detection script now uses per-commit diff instead of full PR diff, so commits touching only non-code files correctly skip CI jobs even when earlier commits in the same PR changed code files
Fixed
- Make release scripts resolve the publishable crate manifest when the repository root uses a Cargo workspace manifest.
Fixed
- Decoupled GitHub Pages documentation deployment from package release publication and fixed release-script warning failures under
RUSTFLAGS=-Dwarnings.
Changed
- Added explicit GitHub Actions job timeouts and documented Rust test timeout guidance.
Fixed
- Added a non-blocking warning threshold to the Rust file-size check so near-limit files are surfaced before concurrent PR merges can exceed the hard limit.
Fixed
- Made
create-github-release.rsbuild GitHub release titles as[Language] X.Y.Zinstead of reusing the tag prefix.
A...
[Rust] 0.31.0
Added
- Changeset-style fragment format with frontmatter for specifying version bump type
- New
get-bump-type.mjsscript to automatically determine version bump from fragments - Automatic version bumping on merge to main based on changelog fragments
- Detailed documentation for the changelog fragment system in
changelog.d/README.md
Changed
- Updated
collect-changelog.mjsto strip frontmatter when collecting fragments - Updated
version-and-commit.mjsto handle frontmatter in fragments - Enhanced release workflow to automatically determine bump type from changesets
Changed
- Add
detect-changesjob with cross-platformdetect-code-changes.mjsscript - Make lint job independent of changelog check (runs based on file changes only)
- Allow docs-only PRs without changelog fragment requirement
- Handle changelog check 'skipped' state in dependent jobs
- Exclude
changelog.d/,docs/,experiments/,examples/folders and markdown files from code changes detection
Fixed
- Fixed README.md to correctly reference Node.js scripts (
.mjs) instead of Python scripts (.py) - Updated project structure in README.md to match actual script files in
scripts/directory - Fixed example code in README.md that had invalid Rust with two
mainfunctions
Added
- Added crates.io publishing support to CI/CD workflow
- Added
release_modeinput with "instant" and "changelog-pr" options for manual releases - Added
--tag-prefixand--crates-io-urloptions to create-github-release.mjs script - Added comprehensive case study documentation for Issue #11 in docs/case-studies/issue-11/
Changed
- Changed changelog fragment check from warning to error (exit 1) to enforce changelog requirements
- Updated job conditions with
always() && !cancelled()to fix workflow_dispatch job skipping issue - Renamed manual-release job to "Instant Release" for clarity
Fixed
- Fixed deprecated
::set-outputGitHub Actions command in version-and-commit.mjs - Fixed workflow_dispatch triggering issues where lint/build/release jobs were incorrectly skipped
Fixed
- Fixed changelog fragment check to validate that a fragment is added in the PR diff rather than just checking if any fragments exist in the directory. This prevents the check from incorrectly passing when there are leftover fragments from previous PRs that haven't been released yet.
Changed
- Converted shell scripts in
release.ymlto cross-platform.mjsscripts for improved portability and performance:check-changelog-fragment.mjs- validates changelog fragment is added in PR diffgit-config.mjs- configures git user for CI/CDcheck-release-needed.mjs- checks if release is neededpublish-crate.mjs- publishes package to crates.iocreate-changelog-fragment.mjs- creates changelog fragments for manual releasesget-version.mjs- gets current version from Cargo.toml
Added
- Added
check-version-modification.mjsscript to detect manual version changes in Cargo.toml - Added
version-checkjob to CI/CD workflow that runs on pull requests - Added skip logic for automated release branches (changelog-manual-release-, changeset-release/, release/, automated-release/)
Changed
- Version modifications in Cargo.toml are now blocked in pull requests to enforce automated release pipeline
Added
- Added support for
CARGO_REGISTRY_TOKENas alternative toCARGO_TOKENfor crates.io publishing - Added case study documentation for Issue #17 (yargs reserved word and dual token support)
Changed
- Updated workflow to use fallback logic:
${{ secrets.CARGO_REGISTRY_TOKEN || secrets.CARGO_TOKEN }} - Improved publish-crate.mjs to check both
CARGO_REGISTRY_TOKENandCARGO_TOKENenvironment variables - Added warning message when neither token is set
Added
- New
scripts/rust-paths.mjsutility for automatic Rust package root detection - Support for both single-language and multi-language repository structures in all CI/CD scripts
- Configuration options via
--rust-rootCLI argument andRUST_ROOTenvironment variable - Comprehensive case study documentation in
docs/case-studies/issue-19/
Changed
- Updated all release scripts to use the new path detection utility:
scripts/bump-version.mjsscripts/check-release-needed.mjsscripts/collect-changelog.mjsscripts/get-bump-type.mjsscripts/get-version.mjsscripts/publish-crate.mjsscripts/version-and-commit.mjs
Changed
- check-release-needed.mjs: Now checks crates.io API directly instead of git tags to determine if a version is already released. This prevents false positives where git tags exist but the package was never actually published to crates.io.
Added
-
CI/CD Troubleshooting Guide: New documentation at
docs/ci-cd/troubleshooting.mdcovering common issues like skipped jobs, false positive version checks, publishing failures, and secret configuration. -
Enhanced Error Handling in publish-crate.mjs: Added specific detection and helpful error messages for authentication failures, including guidance on secret configuration and workflow setup.
-
Case Study Documentation: Added comprehensive case study at
docs/case-studies/issue-21/analyzing CI/CD failures from browser-commander repository (issues #27, #29, #31, #33) with timeline, root causes, and lessons learned.
Fixed
- Prevent False Positive Version Checks: The release workflow now correctly identifies unpublished versions by checking crates.io instead of relying on git tags, which can exist without the package being published.
Changed
- Translated all CI/CD scripts from JavaScript (.mjs) to Rust (.rs) using rust-script
- Scripts now use native Rust with rust-script for execution in shell
- Removed Node.js dependency from CI/CD pipeline
- Updated GitHub Actions workflow to use rust-script instead of node
- Updated README and CONTRIBUTING documentation with new script references
Added
- Cache
restore-keysfor partial cache hits across all workflow jobs - Explicit
tokenparameter in checkout for release jobs - Code coverage job with
cargo-llvm-covand Codecov integration - Codecov badge in README.md
- Pre-release version support (e.g.,
0.1.0-beta.1) in version parsing --release-labelparameter for multi-language release disambiguationensure_version_exceeds_published()logic to prevent publishing duplicate versionsget_max_published_version()to query highest non-yanked version from crates.iomax_published_versionoutput from check-release-needed for downstream use- Version fallback logic in auto-release Create GitHub Release step
Changed
- Updated
actions/checkoutfrom v4 to v6 - Updated
actions/cachefrom v4 to v5 - Updated
peter-evans/create-pull-requestfrom v7 to v8 - Made
publish-crate.rsfail (exit 1) when version already exists on crates.io - Improved
create-github-release.rsto check combined stdout+stderr and detect "Validation Failed"
Fixed
- Fix publish steps overriding workflow-level CARGO_TOKEN fallback, breaking CARGO_REGISTRY_TOKEN-only configurations (#32)
- Fix non-fast-forward push failures in multi-workflow repos by adding fetch/rebase and push retry logic (#31)
- Add mono-repo path support to check-changelog-fragment.rs, check-version-modification.rs, and create-changelog-fragment.rs
- Add
!cancelled()guard to test job condition to respect workflow cancellation
Fixed
- Fixed
version-and-commit.rsto check crates.io instead of git tags for determining if a version is already released - This prevents the release pipeline from getting stuck when git tags exist without corresponding crates.io publication
Added
- Added
--tag-prefixsupport toversion-and-commit.rsfor multi-language repository compatibility - Added crates.io and docs.rs badges to README.md
- Added automatic crates.io and docs.rs badge injection in GitHub release notes
- Added documentation deployment job to CI/CD pipeline (deploys to GitHub Pages after release)
- Added case study documentation for issue #25
Fixed
- Fixed unsupported look-ahead regex in
create-github-release.rsthat caused a panic when parsing CHANGELOG.md. Replaced with a two-step approach using only features supported by Rust'sregexcrate.
Changed
- Restructured example application as a simple CLI sum calculator using
lino-arguments - Renamed default package to
example-sum-package-namewith Unlicense license - Reorganized test structure:
tests/unit/sum.rs,tests/integration/sum.rs,tests/unit/ci-cd/ - Converted experiment scripts into proper unit tests in
tests/unit/ci-cd/changelog_parsing.rs - Added CI/CD skip logic for template default package name
example-sum-package-name - Updated README.md badges and documentation
Fixed
- Change detection script now uses per-commit diff instead of full PR diff, so commits touching only non-code files correctly skip CI jobs even when earlier commits in the same PR changed code files
Fixed
- Make release scripts resolve the publishable crate manifest when the repository root uses a Cargo workspace manifest.
Fixed
- Decoupled GitHub Pages documentation deployment from package release publication and fixed release-script warning failures under
RUSTFLAGS=-Dwarnings.
Changed
- Added explicit GitHub Actions job timeouts and documented Rust test timeout guidance.
Fixed
- Added a non-blocking warning threshold to the Rust file-size check so near-limit files are surfaced before concurrent PR merges can exceed the hard limit.
Fixed
- Made
create-github-release.rsbuild GitHub release titles as[Language] X.Y.Zinstead of reusing the tag prefix.
A...
[Rust] 0.30.0
Added
- Changeset-style fragment format with frontmatter for specifying version bump type
- New
get-bump-type.mjsscript to automatically determine version bump from fragments - Automatic version bumping on merge to main based on changelog fragments
- Detailed documentation for the changelog fragment system in
changelog.d/README.md
Changed
- Updated
collect-changelog.mjsto strip frontmatter when collecting fragments - Updated
version-and-commit.mjsto handle frontmatter in fragments - Enhanced release workflow to automatically determine bump type from changesets
Changed
- Add
detect-changesjob with cross-platformdetect-code-changes.mjsscript - Make lint job independent of changelog check (runs based on file changes only)
- Allow docs-only PRs without changelog fragment requirement
- Handle changelog check 'skipped' state in dependent jobs
- Exclude
changelog.d/,docs/,experiments/,examples/folders and markdown files from code changes detection
Fixed
- Fixed README.md to correctly reference Node.js scripts (
.mjs) instead of Python scripts (.py) - Updated project structure in README.md to match actual script files in
scripts/directory - Fixed example code in README.md that had invalid Rust with two
mainfunctions
Added
- Added crates.io publishing support to CI/CD workflow
- Added
release_modeinput with "instant" and "changelog-pr" options for manual releases - Added
--tag-prefixand--crates-io-urloptions to create-github-release.mjs script - Added comprehensive case study documentation for Issue #11 in docs/case-studies/issue-11/
Changed
- Changed changelog fragment check from warning to error (exit 1) to enforce changelog requirements
- Updated job conditions with
always() && !cancelled()to fix workflow_dispatch job skipping issue - Renamed manual-release job to "Instant Release" for clarity
Fixed
- Fixed deprecated
::set-outputGitHub Actions command in version-and-commit.mjs - Fixed workflow_dispatch triggering issues where lint/build/release jobs were incorrectly skipped
Fixed
- Fixed changelog fragment check to validate that a fragment is added in the PR diff rather than just checking if any fragments exist in the directory. This prevents the check from incorrectly passing when there are leftover fragments from previous PRs that haven't been released yet.
Changed
- Converted shell scripts in
release.ymlto cross-platform.mjsscripts for improved portability and performance:check-changelog-fragment.mjs- validates changelog fragment is added in PR diffgit-config.mjs- configures git user for CI/CDcheck-release-needed.mjs- checks if release is neededpublish-crate.mjs- publishes package to crates.iocreate-changelog-fragment.mjs- creates changelog fragments for manual releasesget-version.mjs- gets current version from Cargo.toml
Added
- Added
check-version-modification.mjsscript to detect manual version changes in Cargo.toml - Added
version-checkjob to CI/CD workflow that runs on pull requests - Added skip logic for automated release branches (changelog-manual-release-, changeset-release/, release/, automated-release/)
Changed
- Version modifications in Cargo.toml are now blocked in pull requests to enforce automated release pipeline
Added
- Added support for
CARGO_REGISTRY_TOKENas alternative toCARGO_TOKENfor crates.io publishing - Added case study documentation for Issue #17 (yargs reserved word and dual token support)
Changed
- Updated workflow to use fallback logic:
${{ secrets.CARGO_REGISTRY_TOKEN || secrets.CARGO_TOKEN }} - Improved publish-crate.mjs to check both
CARGO_REGISTRY_TOKENandCARGO_TOKENenvironment variables - Added warning message when neither token is set
Added
- New
scripts/rust-paths.mjsutility for automatic Rust package root detection - Support for both single-language and multi-language repository structures in all CI/CD scripts
- Configuration options via
--rust-rootCLI argument andRUST_ROOTenvironment variable - Comprehensive case study documentation in
docs/case-studies/issue-19/
Changed
- Updated all release scripts to use the new path detection utility:
scripts/bump-version.mjsscripts/check-release-needed.mjsscripts/collect-changelog.mjsscripts/get-bump-type.mjsscripts/get-version.mjsscripts/publish-crate.mjsscripts/version-and-commit.mjs
Changed
- check-release-needed.mjs: Now checks crates.io API directly instead of git tags to determine if a version is already released. This prevents false positives where git tags exist but the package was never actually published to crates.io.
Added
-
CI/CD Troubleshooting Guide: New documentation at
docs/ci-cd/troubleshooting.mdcovering common issues like skipped jobs, false positive version checks, publishing failures, and secret configuration. -
Enhanced Error Handling in publish-crate.mjs: Added specific detection and helpful error messages for authentication failures, including guidance on secret configuration and workflow setup.
-
Case Study Documentation: Added comprehensive case study at
docs/case-studies/issue-21/analyzing CI/CD failures from browser-commander repository (issues #27, #29, #31, #33) with timeline, root causes, and lessons learned.
Fixed
- Prevent False Positive Version Checks: The release workflow now correctly identifies unpublished versions by checking crates.io instead of relying on git tags, which can exist without the package being published.
Changed
- Translated all CI/CD scripts from JavaScript (.mjs) to Rust (.rs) using rust-script
- Scripts now use native Rust with rust-script for execution in shell
- Removed Node.js dependency from CI/CD pipeline
- Updated GitHub Actions workflow to use rust-script instead of node
- Updated README and CONTRIBUTING documentation with new script references
Added
- Cache
restore-keysfor partial cache hits across all workflow jobs - Explicit
tokenparameter in checkout for release jobs - Code coverage job with
cargo-llvm-covand Codecov integration - Codecov badge in README.md
- Pre-release version support (e.g.,
0.1.0-beta.1) in version parsing --release-labelparameter for multi-language release disambiguationensure_version_exceeds_published()logic to prevent publishing duplicate versionsget_max_published_version()to query highest non-yanked version from crates.iomax_published_versionoutput from check-release-needed for downstream use- Version fallback logic in auto-release Create GitHub Release step
Changed
- Updated
actions/checkoutfrom v4 to v6 - Updated
actions/cachefrom v4 to v5 - Updated
peter-evans/create-pull-requestfrom v7 to v8 - Made
publish-crate.rsfail (exit 1) when version already exists on crates.io - Improved
create-github-release.rsto check combined stdout+stderr and detect "Validation Failed"
Fixed
- Fix publish steps overriding workflow-level CARGO_TOKEN fallback, breaking CARGO_REGISTRY_TOKEN-only configurations (#32)
- Fix non-fast-forward push failures in multi-workflow repos by adding fetch/rebase and push retry logic (#31)
- Add mono-repo path support to check-changelog-fragment.rs, check-version-modification.rs, and create-changelog-fragment.rs
- Add
!cancelled()guard to test job condition to respect workflow cancellation
Fixed
- Fixed
version-and-commit.rsto check crates.io instead of git tags for determining if a version is already released - This prevents the release pipeline from getting stuck when git tags exist without corresponding crates.io publication
Added
- Added
--tag-prefixsupport toversion-and-commit.rsfor multi-language repository compatibility - Added crates.io and docs.rs badges to README.md
- Added automatic crates.io and docs.rs badge injection in GitHub release notes
- Added documentation deployment job to CI/CD pipeline (deploys to GitHub Pages after release)
- Added case study documentation for issue #25
Fixed
- Fixed unsupported look-ahead regex in
create-github-release.rsthat caused a panic when parsing CHANGELOG.md. Replaced with a two-step approach using only features supported by Rust'sregexcrate.
Changed
- Restructured example application as a simple CLI sum calculator using
lino-arguments - Renamed default package to
example-sum-package-namewith Unlicense license - Reorganized test structure:
tests/unit/sum.rs,tests/integration/sum.rs,tests/unit/ci-cd/ - Converted experiment scripts into proper unit tests in
tests/unit/ci-cd/changelog_parsing.rs - Added CI/CD skip logic for template default package name
example-sum-package-name - Updated README.md badges and documentation
Fixed
- Change detection script now uses per-commit diff instead of full PR diff, so commits touching only non-code files correctly skip CI jobs even when earlier commits in the same PR changed code files
Fixed
- Make release scripts resolve the publishable crate manifest when the repository root uses a Cargo workspace manifest.
Fixed
- Decoupled GitHub Pages documentation deployment from package release publication and fixed release-script warning failures under
RUSTFLAGS=-Dwarnings.
Changed
- Added explicit GitHub Actions job timeouts and documented Rust test timeout guidance.
Fixed
- Added a non-blocking warning threshold to the Rust file-size check so near-limit files are surfaced before concurrent PR merges can exceed the hard limit.
Fixed
- Made
create-github-release.rsbuild GitHub release titles as[Language] X.Y.Zinstead of reusing the tag prefix.