Skip to content

Publish release

Publish release #37

Workflow file for this run

name: Publish release
on:
workflow_dispatch:
jobs:
publish:
concurrency: publish-mutex
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v3
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.2.1
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@v3
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@v4
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: Publish crate
run: |
cargo publish --no-verify --token $CRATES_IO_SECRET
env:
CRATES_IO_SECRET: ${{ secrets.CRATES_IO_SECRET }}