Skip to content

Release

Release #1

Workflow file for this run

name: Release
# To make a release:
#
# 1. Update Cargo.toml version and CHANGELOG.md on master
# 2. Run workflow https://github.com/trishume/syntect/actions/workflows/Release.yml on master
# 3. Done!
on:
workflow_dispatch: # This workflow can only be triggered manually.
inputs:
one_time_crates_io_token_secret:
description: "A one-time crates.io token (delete it after first use)"
required: true
type: string
env:
CARGO_TERM_COLOR: always
jobs:
# Make sure regular CI passes before we make a release.
ci:
uses: ./.github/workflows/CI.yml
# After regular CI passes we publish to crates.io and push a git tag.
publish-and-tag:
needs: ci
runs-on: ubuntu-latest
permissions:
contents: write # So we can push a tag.
outputs:
VERSION: ${{ steps.version.outputs.VERSION }}
TAG_NAME: ${{ steps.version.outputs.TAG_NAME }}
steps:
- run: |
# See https://github.com/actions/runner/issues/643#issuecomment-708468716
# See https://github.com/actions/runner/issues/475#issuecomment-635775403
masked_secret=$(jq -r '.inputs.one_time_crates_io_token_secret' $GITHUB_EVENT_PATH)
echo "::add-mask::$masked_secret"
- uses: actions/checkout@v4
- run: cargo publish -p syntect
env:
CARGO_REGISTRY_TOKEN: ${{ inputs.one_time_crates_io_token_secret }}
- name: version
id: version
run: |
version=$(cargo read-manifest --manifest-path Cargo.toml | jq --raw-output .version)
echo "VERSION=${version}" >> $GITHUB_OUTPUT
echo "TAG_NAME=v${version}" >> $GITHUB_OUTPUT
- name: push tag
run: |
git tag ${{ steps.version.outputs.TAG_NAME }}
git push origin ${{ steps.version.outputs.TAG_NAME }}
# Lastly, create a GitHub release.
release:
needs: publish-and-tag
runs-on: ubuntu-latest
permissions:
contents: write # So we can create a release.
steps:
- uses: actions/checkout@v4
- run: cargo install parse-changelog@0.6.4 --locked
- name: create release
env:
GH_TOKEN: ${{ github.token }}
run: |
notes="$(parse-changelog CHANGELOG.md ${{ needs.publish-and-tag.outputs.VERSION }})"
title="${{ needs.publish-and-tag.outputs.TAG_NAME }}"
gh release create --title "$title" --notes "$notes" ${{ needs.publish-and-tag.outputs.TAG_NAME }}