Skip to content

Release

Release #196

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:
name: Build ${{ matrix.target }}
strategy:
matrix:
include:
- target: x86_64-unknown-linux-gnu
os: linux
arch: x64
ext: tar.gz
on: ubuntu-latest
artifact: paseto_cli-linux-x64
- target: x86_64-apple-darwin
os: darwin
arch: x64
ext: tar.gz
on: macos-latest
artifact: paseto_cli-darwin-x64
- target: aarch64-apple-darwin
os: darwin
arch: aarch64
ext: tar.gz
on: macos-latest
artifact: paseto_cli-darwin-aarch64
- target: x86_64-pc-windows-msvc
os: win32
arch: x64
ext: zip
on: windows-latest
artifact: paseto_cli-win32-x64
runs-on: ${{ matrix.on }}
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 }}" == "win32" ]]; then
7z a -r ${{ env.filename }} paseto_cli.exe
powershell -command "Move-Item -Path $filename -Destination ../../../"
else
tar -czf ${{ env.filename }} paseto_cli
mv ${{ env.filename }} ../../../
fi
echo "### Artifact **${{ env.filename }}** created for **${{ matrix.target }}**" >> $GITHUB_STEP_SUMMARY
shell: bash
- name: Upload Binary
uses: actions/upload-artifact@v4
with:
path: ./${{ env.filename }}
name: ${{ env.filename }}
compression-level: 9
update-package-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 }}
npm-publish-dependencies:
name: Publish to NPM
uses: ./.github/workflows/npm_dependency_publish.yml
needs: [ extract-version, update-package-version ]
with:
version: ${{ needs.extract-version.outputs.cargo_version }}
name: ${{ matrix.name }}
ext: ${{ matrix.ext }}
os: ${{ matrix.os }}
cpu: ${{ matrix.cpu }}
secrets:
token: ${{ secrets.RELEASE_TOKEN }}
npm_token: ${{ secrets.NPM_TOKEN }}
strategy:
matrix:
include:
- ext: tar.gz
name: paseto_cli-linux-x64
os: linux
cpu: x64
- ext: tar.gz
name: paseto_cli-darwin-x64
os: darwin
cpu: x64
- ext: tar.gz
name: paseto_cli-darwin-aarch64
os: darwin
cpu: aarch64
- ext: zip
name: paseto_cli-win32-x64
os: win32
cpu: x64
create-release:
name: Create v${{ needs.extract-version.outputs.cargo_version }} Release
needs: [ npm-publish-dependencies, extract-version ]
runs-on: ubuntu-latest
steps:
- name: Download Artifacts
uses: actions/download-artifact@v4
with:
merge-multiple: true
- name: Release Assets Downloaded
run: |
echo "### Release Assets Downloaded" >> $GITHUB_STEP_SUMMARY
ls -la >> $GITHUB_STEP_SUMMARY
- 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 }}
files: |
./*.tar.gz
./*.zip
- name: Debug
run: |
ls -la
echo "### Release Build: v${{ needs.extract-version.outputs.cargo_version }}" >> $GITHUB_STEP_SUMMARY
publish-cli:
name: Publish paseto_cli to NPM
needs: [ create-release, extract-version ]
runs-on: ubuntu-latest
steps:
- name: Checkout code
uses: actions/checkout@v4
with:
ref: main
- name: Install Node.js
uses: actions/setup-node@v4
with:
node-version: '20'
registry-url: 'https://registry.npmjs.org'
- name: Publish to NPM
run: |
mkdir -p dist
cp ./package.json dist
cp ./index.js dist
cp ./install.js dist
cp -r bin dist
cd dist
chmod +x bin/cli
npm publish --access public --tag latest
echo "## Published paseto_cli to npm: v${{ needs.extract-version.outputs.cargo_version }}" >> $GITHUB_STEP_SUMMARY
cat ./package.json >> $GITHUB_STEP_SUMMARY
env:
NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }}