Skip to content

fix: build target name (#181) #23

fix: build target name (#181)

fix: build target name (#181) #23

Workflow file for this run

name: Rust CLI Build
on:
workflow_call:
push:
branches: [ main, feat/rust-cli ]
paths:
- 'crates/**'
- 'Cargo.toml'
- '.github/workflows/rust-cli.yml'
tags:
- 'cli@*' # Trigger release on tags starting with cli@
pull_request:
branches: [ main ]
paths:
- 'crates/**'
- 'Cargo.toml'
- '.github/workflows/rust-cli.yml'
jobs:
build:
name: Build ${{ matrix.target }}
runs-on: ${{ matrix.os }}
strategy:
fail-fast: false
matrix:
include:
- os: ubuntu-latest
target: x86_64-unknown-linux-gnu
artifact_name: ov-linux-x86_64
- os: ubuntu-latest
target: aarch64-unknown-linux-gnu
artifact_name: ov-linux-aarch64
- os: macos-latest
target: x86_64-apple-darwin
artifact_name: ov-macos-x86_64
- os: macos-latest
target: aarch64-apple-darwin
artifact_name: ov-macos-aarch64
- os: windows-latest
target: x86_64-pc-windows-msvc
artifact_name: ov-windows-x86_64.exe
steps:
- uses: actions/checkout@v4
- name: Install Rust
uses: dtolnay/rust-toolchain@v1
with:
toolchain: stable
targets: ${{ matrix.target }}
- name: Install system dependencies (Linux)
if: runner.os == 'Linux'
run: |
sudo apt-get update
sudo apt-get install -y pkg-config libssl-dev
- name: Install cross-compilation tools (Linux ARM64)
if: matrix.target == 'aarch64-unknown-linux-gnu'
run: |
sudo apt-get install -y gcc-aarch64-linux-gnu g++-aarch64-linux-gnu
echo "CARGO_TARGET_AARCH64_UNKNOWN_LINUX_GNU_LINKER=aarch64-linux-gnu-gcc" >> $GITHUB_ENV
echo "CC_aarch64_unknown_linux_gnu=aarch64-linux-gnu-gcc" >> $GITHUB_ENV
echo "CXX_aarch64_unknown_linux_gnu=aarch64-linux-gnu-g++" >> $GITHUB_ENV
- name: Cache Cargo registry and index
uses: actions/cache@v4
with:
path: |
~/.cargo/registry/index
~/.cargo/registry/cache
~/.cargo/git/db
key: ${{ runner.os }}-cargo-${{ matrix.target }}-${{ hashFiles('**/Cargo.lock') }}
restore-keys: |
${{ runner.os }}-cargo-${{ matrix.target }}-
${{ runner.os }}-cargo-
- name: Cache build artifacts
uses: actions/cache@v4
with:
path: target
key: ${{ runner.os }}-target-${{ matrix.target }}-${{ hashFiles('**/Cargo.lock') }}-${{ hashFiles('crates/**/*.rs') }}
restore-keys: |
${{ runner.os }}-target-${{ matrix.target }}-${{ hashFiles('**/Cargo.lock') }}-
${{ runner.os }}-target-${{ matrix.target }}-
- name: Build CLI
run: cargo build --release --target ${{ matrix.target }} -p ov_cli
- name: Create compressed artifacts
shell: bash
run: |
mkdir -p artifacts
cd target/${{ matrix.target }}/release
if [[ "${{ matrix.os }}" == "windows-latest" ]]; then
# Windows: create zip
7z a ../../../artifacts/${{ matrix.artifact_name }}.zip ov.exe
cd ../../../artifacts
# Use PowerShell to get hash in correct format
powershell -Command "(Get-FileHash -Algorithm SHA256 '${{ matrix.artifact_name }}.zip').Hash.ToLower() + ' ${{ matrix.artifact_name }}.zip'" > ${{ matrix.artifact_name }}.zip.sha256
else
# Unix: create tar.gz
tar czf ../../../artifacts/${{ matrix.artifact_name }}.tar.gz ov
cd ../../../artifacts
# shasum format: <hash> <filename>
shasum -a 256 ${{ matrix.artifact_name }}.tar.gz > ${{ matrix.artifact_name }}.tar.gz.sha256
fi
- name: Verify checksum format
shell: bash
run: |
echo "Contents of checksum file:"
cat artifacts/*.sha256
echo ""
echo "Verifying checksum locally:"
cd artifacts
if [[ "${{ matrix.os }}" == "windows-latest" ]]; then
sha256sum -c *.sha256 || shasum -a 256 -c *.sha256 || echo "Checksum verification skipped on Windows"
else
shasum -a 256 -c *.sha256
fi
- name: Upload artifacts
uses: actions/upload-artifact@v4
with:
name: ${{ matrix.artifact_name }}
path: artifacts/*
release:
name: Create GitHub Release
runs-on: ubuntu-latest
needs: build
if: startsWith(github.ref, 'refs/tags/cli@')
permissions:
contents: write
steps:
- name: Checkout code
uses: actions/checkout@v4
- name: Get version from tag
id: get_version
run: echo "version=${GITHUB_REF#refs/tags/cli@}" >> $GITHUB_OUTPUT
- name: Download all artifacts
uses: actions/download-artifact@v4
with:
path: artifacts
- name: Display artifact structure
run: ls -R artifacts/
- name: Create GitHub Release
uses: softprops/action-gh-release@v2
with:
name: CLI v${{ steps.get_version.outputs.version }}
body: |
# OpenViking CLI v${{ steps.get_version.outputs.version }}
## Installation
### Quick Install (macOS/Linux)
```bash
curl -fsSL https://raw.githubusercontent.com/${{ github.repository }}/refs/tags/cli@${{ steps.get_version.outputs.version }}/crates/ov_cli/install.sh | bash
```
### Manual Installation
Download the appropriate binary for your platform below, extract it, and add it to your PATH.
The CLI command is simply `ov`:
```bash
# After extraction
chmod +x ov # Unix only
mv ov /usr/local/bin/ # or any directory in your PATH
# Verify installation
ov --version
```
### Checksums
SHA256 checksums are provided for each binary for verification.
## Changes
See the [commit history](https://github.com/${{ github.repository }}/commits/cli@${{ steps.get_version.outputs.version }}) for details.
files: |
artifacts/**/*.tar.gz
artifacts/**/*.zip
artifacts/**/*.sha256
draft: false
prerelease: ${{ contains(steps.get_version.outputs.version, 'alpha') || contains(steps.get_version.outputs.version, 'beta') || contains(steps.get_version.outputs.version, 'rc') }}
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}