Publish release #43
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
name: Publish release | |
on: | |
workflow_dispatch: | |
jobs: | |
publish: | |
concurrency: publish-mutex | |
runs-on: ubuntu-latest | |
steps: | |
- name: Checkout | |
uses: actions/checkout@v4 | |
with: | |
fetch-depth: 0 | |
submodules: true | |
token: ${{ secrets.GH_ADMIN_COMMIT_TOKEN }} | |
- name: Get latest existing tag | |
uses: WyriHaximus/github-action-get-previous-tag@v1 | |
id: get-latest-tag | |
- name: Set new version | |
uses: paulhatch/semantic-version@v5.4.0 | |
id: set-version | |
with: | |
tag_prefix: "v" | |
version_format: "${major}.${minor}.${patch}" | |
major_pattern: "(MAJOR)" | |
minor_pattern: "(MINOR)" | |
- name: Generate changelog since last tag | |
id: generate-changelog | |
run: | | |
{ | |
echo 'changelog<<EOF' | |
git log --format="* %s" ${{ steps.get-latest-tag.outputs.tag }}..HEAD | { grep -v "(IGNORE)" || :; } | |
echo EOF | |
} >> "$GITHUB_OUTPUT" | |
- name: Log version & changelog | |
run: | | |
echo "Version: $VERSION" | |
echo "Version tag: $VERSION_TAG" | |
echo "Latest tag detected: $LATEST_TAG" | |
echo "Changelog: $CHANGELOG" | |
env: | |
VERSION: ${{ steps.set-version.outputs.version }} | |
VERSION_TAG: ${{ steps.set-version.outputs.version_tag }} | |
LATEST_TAG: ${{ steps.get-latest-tag.outputs.tag }} | |
CHANGELOG: ${{ steps.generate-changelog.outputs.changelog }} | |
- name: Prevent empty release | |
if: ${{ steps.generate-changelog.outputs.changelog == '' }} | |
uses: actions/github-script@v7 | |
with: | |
script: | | |
core.setFailed("No changes since prior release") | |
- name: Update changelog | |
run: | | |
(head -8 CHANGELOG.md && echo "## $VERSION" && date "+_%d %B %Y_" && echo "" && (echo "$CHANGELOG" | sed -E 's_\(#([0-9]+)\)_([#\1](https://github.com/adobe/xmp-toolkit-rs/pull/\1)\)_') && echo "" && tail -n +9 CHANGELOG.md) > CHANGELOG.new.md | |
mv CHANGELOG.new.md CHANGELOG.md | |
env: | |
VERSION: ${{ steps.set-version.outputs.version }} | |
CHANGELOG: ${{ steps.generate-changelog.outputs.changelog }} | |
- name: Install Rust toolchain | |
uses: dtolnay/rust-toolchain@stable | |
- name: Bump crate versions | |
run: | | |
sed -i "s/^version = \"[^\"]*\"$/version = \"$VERSION\"/;" Cargo.toml | |
sed -i "s/^xmp_toolkit = \"[^\"]*\"$/xmp_toolkit = \"$VERSION\"/;" README.md | |
env: | |
VERSION: ${{ steps.set-version.outputs.version }} | |
- name: Report differences for "prepare (release)" commit | |
run: git diff | |
- name: Commit Cargo.toml and changelog | |
uses: stefanzweifel/git-auto-commit-action@v5 | |
id: commit | |
with: | |
commit_message: Prepare ${{ steps.set-version.outputs.version }} release | |
commit_user_name: Adobe CAI Team | |
commit_user_email: noreply@adobe.com | |
- name: Ensure semantic versioning requirements are met | |
uses: obi1kenobi/cargo-semver-checks-action@v2 | |
with: | |
package: xmp_toolkit | |
- name: Create release | |
uses: ncipollo/release-action@v1 | |
with: | |
body: ${{ steps.generate-changelog.outputs.changelog }} | |
commit: ${{ steps.commit.outputs.commit_hash }} | |
tag: ${{ steps.set-version.outputs.version_tag }} | |
token: ${{ secrets.GH_ADMIN_COMMIT_TOKEN }} | |
- name: Populate git submodules | |
run: git submodule init && git submodule update | |
- name: Publish crate | |
run: | | |
cargo publish --token $CRATES_IO_SECRET | |
env: | |
CRATES_IO_SECRET: ${{ secrets.CRATES_IO_SECRET }} |