Skip to content

Release

Release #102

name: Release and Publish
on:
workflow_dispatch
env:
CARGO_TERM_COLOR: always
jobs:
extract-version:
name: Extract Version
runs-on: ubuntu-latest
outputs:
cargo_version: ${{ steps.extract.outputs.cargo_version }}
steps:
- uses: actions/checkout@v4
- name: Extract version from Cargo.toml
id: extract
run: |
version=$(grep '^version =' Cargo.toml | sed 's/version = "//' | sed 's/"//')
echo "Extracted version: $version"
if [ -z "$version" ]; then
echo "Error: Version is blank."
exit 1
fi
echo "### Release Build: v$version" >> $GITHUB_STEP_SUMMARY
echo "cargo_version=$version" >> $GITHUB_OUTPUT
build-jobs:
strategy:
matrix:
include:
- target: x86_64-unknown-linux-gnu
os: linux
arch: x64
ext: tar.gz
artifact: paseto_cli-linux-x64
- target: x86_64-apple-darwin
os: darwin
arch: x64
ext: tar.gz
artifact: paseto_cli-darwin-x64
- target: aarch64-apple-darwin
os: darwin
arch: arm64
ext: tar.gz
artifact: paseto_cli-darwin-aarch64
- target: x86_64-pc-windows-msvc
os: win32
arch: x64
ext: zip
artifact: paseto_cli-win32-x64
runs-on: ${{ matrix.os }}
env:
filename: ${{ matrix.artifact }}.${{ matrix.ext }}
steps:
- name: Checkout code
uses: actions/checkout@v4
- name: Install Rust
uses: actions-rs/toolchain@v1
with:
toolchain: stable
target: ${{ matrix.target }}
override: true
- name: Build
uses: actions-rs/cargo@v1
with:
command: build
args: --release --target ${{ matrix.target }}
- name: Package Binary
run: |
cd target/${{ matrix.target }}/release
if [[ "${{ matrix.os }}" == "darwin" ]]; then
tar -czf $filename paseto_cli
mv $filename ../../../
elif [[ "${{ matrix.os }}" == "win32" ]]; then
7z a -r $filename paseto_cli.exe
powershell -command "Move-Item -Path paseto_cli-win32-x64.zip -Destination ../../../"
fi
echo "### Artifact **$filename** created for **${{ matrix.target }}**" >> $GITHUB_STEP_SUMMARY
shell: bash
- name: Upload Binary
uses: actions/upload-artifact@v4
with:
name: ${{ matrix.target }}
path: $filename
compression-level: 9
update-package-json-version:
name: Update package.json version
uses: ./.github/workflows/update_package_json_version.yml
needs: [ build-jobs, extract-version ]
with:
version: ${{ needs.extract-version.outputs.cargo_version }}
secrets:
token: ${{ secrets.RELEASE_TOKEN }}
create-release:
needs: [ build-jobs, extract-version ]
runs-on: ubuntu-latest
steps:
- name: Download Artifacts
uses: actions/download-artifact@v4
- name: Create Release and Upload Release Assets
uses: softprops/action-gh-release@v2
env:
GITHUB_TOKEN: ${{ secrets.RELEASE_TOKEN }}
with:
tag_name: v${{ needs.extract-version.outputs.cargo_version }}
name: Release ${{ needs.extract-version.outputs.cargo_version }}
draft: false
prerelease: true
token: ${{ secrets.RELEASE_TOKEN }}
publish-npm:
needs: [ create-release, extract-version, update-package-json-version ]
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Setup Node.js
uses: actions/setup-node@v4
with:
node-version: '20'
registry-url: 'https://registry.npmjs.org'
- name: Using Workflow Run ID
run: |
echo "Downloading artifacts from workflow id: ${{ needs.build-jobs.outputs.workflow_run_id }}"
- name: Download Artifacts
uses: actions/download-artifact@v4
with:
run-id: ${{ needs.build-jobs.outputs.workflow_run_id }}
path: .
- name: Install dependencies
env:
BINARY_DISTRIBUTION_VERSION: ${{ needs.extract-version.outputs.cargo_version }}
CI: true
run: |
npm install
npm ci
- name: Publish Linux x64 Binary
run: |
mkdir -p paseto_cli-linux-x64/bin
tar -xzf paseto_cli-linux-x64.tar.gz -C paseto_cli-linux-x64/bin
cd paseto_cli-linux-x64
npm publish
env:
NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }}
- name: Publish macOS x64 Binary
run: |
ls -la
mkdir -p paseto_cli-darwin-x64/bin
tar -xzf paseto_cli-darwin-x64.tar.gz -C paseto_cli-darwin-x64/bin
cd paseto_cli-darwin-x64
npm publish
env:
NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }}
- name: Publish macOS arm64 Binary
run: |
ls -la
mkdir -p paseto_cli-darwin-arm64/bin
tar -xzf paseto_cli-darwin-arm64.tar.gz -C paseto_cli-darwin-arm64/bin
cd paseto_cli-darwin-arm64
npm publish
env:
NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }}
- name: Publish Windows x64 Binary
run: |
dir
mkdir -p paseto_cli-windows-x64/bin
unzip paseto_cli-win32-x64.zip -d paseto_cli-windows-x64/bin
cd paseto_cli-windows-x64
npm publish
env:
NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }}