name: Publish
on:
pull_request:
branches:
- main
types: [closed]
permissions:
contents: write
jobs:
setup:
runs-on: ubuntu-latest
if: startsWith(github.head_ref, 'release/v') && github.event.pull_request.merged == true
outputs:
appname: spellout
tag: ${{ steps.vars.outputs.tag }}
upload_url: ${{ steps.create_release.outputs.upload_url }}
steps:
- name: Git Tag Name
id: vars
run: |
echo "tag=${GITHUB_HEAD_REF##*/v}" >> $GITHUB_OUTPUT
- name: Create release
id: create_release
uses: marvinpinto/action-automatic-releases@latest
with:
repo_token: ${{ secrets.GITHUB_TOKEN }}
automatic_release_tag: v${{ steps.vars.outputs.tag }}
title: Release v${{ steps.vars.outputs.tag }}
draft: false
prerelease: false
documents:
runs-on: ubuntu-latest
needs: setup
outputs:
appname: ${{ needs.setup.outputs.appname }}
tag: ${{ needs.setup.outputs.tag }}
upload_url: ${{ needs.setup.outputs.upload_url }}
steps:
- name: Checkout
uses: actions/checkout@v6
with:
ref: main
fetch-depth: 0
- name: Setup Go
uses: actions/setup-go@v6
with:
go-version: '1.25'
- name: Setup Hugo
uses: peaceiris/actions-hugo@v3
with:
hugo-version: '0.154.5'
extended: true
- name: Build Site
run: |
git worktree add docs/public gh-pages
(cd docs ; hugo)
- name: Deploy
uses: peaceiris/actions-gh-pages@v4
with:
github_token: ${{ secrets.GITHUB_TOKEN }}
publish_dir: ./docs/public
publish:
runs-on: ${{ matrix.os }}
needs: documents
outputs:
appname: ${{ needs.documents.outputs.appname }}
tag: ${{ needs.documents.outputs.tag }}
strategy:
matrix:
include:
- os: ubuntu-latest
target: aarch64-unknown-linux-gnu
artifact_name: ${{ needs.documents.outputs.appname }}
asset_name: ${{ needs.documents.outputs.appname }}-${{ needs.documents.outputs.tag }}_linux_arm64
ext: ''
- os: ubuntu-latest
target: x86_64-unknown-linux-gnu
artifact_name: ${{ needs.documents.outputs.appname }}
asset_name: ${{ needs.documents.outputs.appname }}-${{ needs.documents.outputs.tag }}_linux_amd64
ext: ''
- os: macos-latest
target: aarch64-apple-darwin
artifact_name: ${{ needs.documents.outputs.appname }}
asset_name: ${{ needs.documents.outputs.appname }}-${{ needs.documents.outputs.tag }}_darwin_arm64
ext: ''
- os: macos-latest
target: x86_64-apple-darwin
artifact_name: ${{ needs.documents.outputs.appname }}
asset_name: ${{ needs.documents.outputs.appname }}-${{ needs.documents.outputs.tag }}_darwin_amd64
ext: ''
steps:
- name: Checkout
uses: actions/checkout@v6
with:
ref: main
fetch-depth: 0
- name: Setup variables
id: vars
shell: bash
run: |
DIR=$(echo "${{ needs.documents.outputs.appname }}-${{ needs.documents.outputs.tag }}")
echo "dir=$DIR" >> $GITHUB_OUTPUT
- name: Setup Zig
uses: mlugg/setup-zig@v2
- name: build
run: |
rustup update stable
rustup target add ${{ matrix.target }}
cargo install cargo-zigbuild
cargo zigbuild --release --target ${{ matrix.target }}
# cargo zigbuild --release --features normalization --target ${{ matrix.target }} --target-dir normalization
- name: Create release file
shell: bash
run: |
DIR=${{ steps.vars.outputs.dir }}
DIST=${{ matrix.target }}
mkdir -p dist/$DIST/$DIR
# cp -r site/public dist/$DIST/$DIR/docs
cp -r README.md LICENSE assets/completions dist/$DIST/$DIR
cp target/${{ matrix.target }}/release/${{ matrix.artifact_name }} dist/$DIST/$DIR/spellout${{ matrix.ext}}
tar cvfz dist/${{ matrix.asset_name }}.tar.gz -C dist/$DIST $DIR
- name: Upload release assets
id: upload-release-assets
uses: actions/upload-release-asset@v1.0.1
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
with:
asset_path: dist/${{ matrix.asset_name }}.tar.gz
asset_name: ${{ matrix.asset_name }}.tar.gz
asset_content_type: application/x-gzip
upload_url: ${{ needs.documents.outputs.upload_url }}
publish_to_crates_io:
runs-on: ubuntu-latest
permissions:
contents: write
id-token: write
needs: publish
outputs:
appname: ${{ needs.publish.outputs.appname }}
tag: ${{ needs.publish.outputs.tag }}
steps:
- name: Checkout
uses: actions/checkout@v6
- name: Authenticate with custom registry
id: auth
uses: rust-lang/crates-io-auth-action@v1
- name: publish
env:
CARGO_REGISTRY_TOKEN: ${{ steps.auth.outputs.token }}
run:
cargo publish