Skip to content

build: publish v0.2.0 #37

build: publish v0.2.0

build: publish v0.2.0 #37

Workflow file for this run

name: Release
on:
push:
tags:
- 'v*'
workflow_dispatch:
permissions:
id-token: write
contents: write
packages: write
jobs:
build-binaries:
name: Build Binaries
runs-on: ${{ matrix.platform }}
strategy:
matrix:
platform: [ubuntu-latest, windows-latest, macos-latest]
arch:
- x64
- arm64
exclude:
- platform: windows-latest
arch: arm64
steps:
- name: Checkout
uses: actions/checkout@v4
with:
fetch-depth: 0
- name: Install Tools
uses: ./.github/actions/install-tools
- name: Set up MSVC Environment
if: runner.os == 'Windows'
uses: ilammy/msvc-dev-cmd@v1
with:
arch: ${{ matrix.arch }}
- name: Remove Git link.exe from PATH
if: runner.os == 'Windows'
run: |
echo "Original PATH: %PATH%"
set PATH=%PATH:"C:\Program Files\Git\usr\bin";=%
echo "Modified PATH: %PATH%"
shell: cmd
- name: Check for Correct link.exe
if: runner.os == 'Windows'
run: where link
- name: Install Cross
if: runner.os != 'Windows'
run: cargo install cross --locked
- name: Build Binaries (Unix)
if: runner.os != 'Windows'
run: |
echo "Building for ${{ matrix.platform }} on architecture ${{ matrix.arch }}"
if [[ "${{ matrix.platform }}" == "ubuntu-latest" ]]; then
if [[ "${{ matrix.arch }}" == "x64" ]]; then
cross build --release --target x86_64-unknown-linux-gnu
elif [[ "${{ matrix.arch }}" == "arm64" ]]; then
cross build --release --target aarch64-unknown-linux-gnu
fi
elif [[ "${{ matrix.platform }}" == "macos-latest" ]]; then
if [[ "${{ matrix.arch }}" == "x64" ]]; then
cross build --release --target x86_64-apple-darwin
elif [[ "${{ matrix.arch }}" == "arm64" ]]; then
cross build --release --target aarch64-apple-darwin
fi
fi
shell: bash
- name: Build Binaries (Windows)
if: runner.os == 'Windows'
run: |
echo "Building for ${{ matrix.platform }} on architecture ${{ matrix.arch }}"
cargo build --release --target x86_64-pc-windows-msvc
shell: cmd
- name: Move Binaries to Bin Folder (Unix)
if: runner.os != 'Windows'
run: |
if [[ "${{ matrix.platform }}" == "ubuntu-latest" ]]; then
if [[ "${{ matrix.arch }}" == "x64" ]]; then
mkdir -p ./bin/linux/x64
cp target/x86_64-unknown-linux-gnu/release/todoctor ./bin/linux/x64/todoctor
chmod +x ./bin/linux/x64/todoctor
elif [[ "${{ matrix.arch }}" == "arm64" ]]; then
mkdir -p ./bin/linux/arm64
cp target/aarch64-unknown-linux-gnu/release/todoctor ./bin/linux/arm64/todoctor
chmod +x ./bin/linux/arm64/todoctor
fi
elif [[ "${{ matrix.platform }}" == "macos-latest" ]]; then
if [[ "${{ matrix.arch }}" == "x64" ]]; then
mkdir -p ./bin/macos/x64
cp target/x86_64-apple-darwin/release/todoctor ./bin/macos/x64/todoctor
chmod +x ./bin/macos/x64/todoctor
elif [[ "${{ matrix.arch }}" == "arm64" ]]; then
mkdir -p ./bin/macos/arm64
cp target/aarch64-apple-darwin/release/todoctor ./bin/macos/arm64/todoctor
chmod +x ./bin/macos/arm64/todoctor
fi
fi
shell: bash
- name: Move Binaries to Bin Folder (Windows)
if: runner.os == 'Windows'
run: |
mkdir bin\windows\x64
copy target\x86_64-pc-windows-msvc\release\todoctor.exe bin\windows\x64\todoctor.exe
shell: cmd
- name: Upload Binaries
uses: actions/upload-artifact@v4
with:
name: todoctor-${{ matrix.platform }}-${{ matrix.arch }}
path: '**/*'
release:
name: Release
runs-on: ubuntu-latest
needs: build-binaries
steps:
- name: Checkout
uses: actions/checkout@v4
with:
fetch-depth: 0
- name: Install Tools
uses: ./.github/actions/install-tools
- name: Install Dependencies
uses: ./.github/actions/install-dependencies
- name: Build Static Assets
run: pnpm run build:preview
- name: Download Binaries for Linux x64
uses: actions/download-artifact@v4
with:
name: todoctor-ubuntu-latest-x64
path: .
- name: Download Binaries for Linux arm64
uses: actions/download-artifact@v4
with:
name: todoctor-ubuntu-latest-arm64
path: .
- name: Download Binaries for macOS x64
uses: actions/download-artifact@v4
with:
name: todoctor-macos-latest-x64
path: .
- name: Download Binaries for macOS arm64
uses: actions/download-artifact@v4
with:
name: todoctor-macos-latest-arm64
path: .
- name: Download Binaries for Windows x64
uses: actions/download-artifact@v4
with:
name: todoctor-windows-latest-x64
path: .
- name: Set Execute Permissions on Binaries
run: |
chmod +x ./bin/linux/x64/todoctor
chmod +x ./bin/linux/arm64/todoctor
chmod +x ./bin/macos/x64/todoctor
chmod +x ./bin/macos/arm64/todoctor
- name: Verify Binary Permissions
run: |
ls -l ./bin/linux/x64/todoctor
ls -l ./bin/linux/arm64/todoctor
ls -l ./bin/macos/x64/todoctor
ls -l ./bin/macos/arm64/todoctor
- name: Create GitHub Release
run: pnpm run ci:changelog
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
- name: Configure NPM Auth
run: echo "//registry.npmjs.org/:_authToken=${{ secrets.NODE_AUTH_TOKEN }}" > ~/.npmrc
- name: Clear Package JSON
run: pnpm run ci:clear
- name: Publish to NPM
run: npm publish --access public --no-git-checks --provenance