Skip to content

Refine ACP and watcher handling #15

Refine ACP and watcher handling

Refine ACP and watcher handling #15

Workflow file for this run

name: Release
on:
push:
tags:
- "v*"
workflow_dispatch:
permissions:
contents: write
env:
FORCE_JAVASCRIPT_ACTIONS_TO_NODE24: true
jobs:
build-linux:
name: Build for Linux
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Setup Node.js
uses: actions/setup-node@v4
with:
node-version: '24'
- name: Install pnpm
uses: pnpm/action-setup@v4
- name: Get pnpm store directory
shell: bash
run: |
echo "STORE_PATH=$(pnpm store path --silent)" >> $GITHUB_ENV
- name: Setup pnpm cache
uses: actions/cache@v4
with:
path: ${{ env.STORE_PATH }}
key: ${{ runner.os }}-pnpm-store-${{ hashFiles('**/pnpm-lock.yaml') }}
restore-keys: |
${{ runner.os }}-pnpm-store-
- name: Install dependencies
run: pnpm install --frozen-lockfile
- name: Build frontend
working-directory: ./anycode
run: pnpm build
- name: Verify frontend build
working-directory: ./anycode-backend
run: |
if [ ! -d "dist" ] || [ -z "$(ls -A dist)" ]; then
echo "Error: dist directory is empty or missing"
exit 1
fi
echo "Frontend build verified: $(ls -la dist | head -5)"
- name: Install Rust
uses: dtolnay/rust-toolchain@stable
with:
toolchain: 1.93.0
- name: Add musl target
run: rustup target add x86_64-unknown-linux-musl
- name: Install musl toolchain
run: |
sudo apt-get update
sudo apt-get install -y musl-tools
- name: Cache Rust dependencies
uses: Swatinem/rust-cache@v2
with:
workspaces: |
anycode-backend -> target
- name: Build Linux x86_64 musl binary
working-directory: ./anycode-backend
run: cargo build --release --target x86_64-unknown-linux-musl
- name: Package as tar.gz
working-directory: ./anycode-backend
run: |
mkdir -p dist-release
strip target/x86_64-unknown-linux-musl/release/anycode
cp target/x86_64-unknown-linux-musl/release/anycode dist-release/
tar -czf anycode-linux-x86_64-musl.tar.gz -C dist-release anycode
- name: Upload to release
if: startsWith(github.ref, 'refs/tags/')
uses: softprops/action-gh-release@v2
with:
files: anycode-backend/anycode-linux-x86_64-musl.tar.gz
tag_name: ${{ github.ref_name }}
name: Release ${{ github.ref_name }}
build-linux-arm64:
name: Build for Linux ARM64
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Setup Node.js
uses: actions/setup-node@v4
with:
node-version: '24'
- name: Install pnpm
uses: pnpm/action-setup@v4
- name: Get pnpm store directory
shell: bash
run: |
echo "STORE_PATH=$(pnpm store path --silent)" >> $GITHUB_ENV
- name: Setup pnpm cache
uses: actions/cache@v4
with:
path: ${{ env.STORE_PATH }}
key: ${{ runner.os }}-pnpm-store-${{ hashFiles('**/pnpm-lock.yaml') }}
restore-keys: |
${{ runner.os }}-pnpm-store-
- name: Install dependencies
run: pnpm install --frozen-lockfile
- name: Build frontend
working-directory: ./anycode
run: pnpm build
- name: Verify frontend build
working-directory: ./anycode-backend
run: |
if [ ! -d "dist" ] || [ -z "$(ls -A dist)" ]; then
echo "Error: dist directory is empty or missing"
exit 1
fi
echo "Frontend build verified: $(ls -la dist | head -5)"
- name: Build Linux aarch64 musl binary
uses: houseabsolute/actions-rust-cross@v1
with:
command: build
target: aarch64-unknown-linux-musl
args: "--release"
working-directory: ./anycode-backend
- name: Package as tar.gz
working-directory: ./anycode-backend
run: |
mkdir -p dist-release
cp target/aarch64-unknown-linux-musl/release/anycode dist-release/
tar -czf anycode-linux-aarch64-musl.tar.gz -C dist-release anycode
- name: Upload to release
if: startsWith(github.ref, 'refs/tags/')
uses: softprops/action-gh-release@v2
with:
files: anycode-backend/anycode-linux-aarch64-musl.tar.gz
tag_name: ${{ github.ref_name }}
name: Release ${{ github.ref_name }}
build-macos:
name: Build for macOS Universal
runs-on: macos-latest
steps:
- uses: actions/checkout@v4
- name: Setup Node.js
uses: actions/setup-node@v4
with:
node-version: '24'
- name: Install pnpm
uses: pnpm/action-setup@v4
- name: Get pnpm store directory
shell: bash
run: |
echo "STORE_PATH=$(pnpm store path --silent)" >> $GITHUB_ENV
- name: Setup pnpm cache
uses: actions/cache@v4
with:
path: ${{ env.STORE_PATH }}
key: ${{ runner.os }}-pnpm-store-${{ hashFiles('**/pnpm-lock.yaml') }}
restore-keys: |
${{ runner.os }}-pnpm-store-
- name: Install dependencies
run: pnpm install --frozen-lockfile
- name: Build frontend
working-directory: ./anycode
run: pnpm build
- name: Verify frontend build
working-directory: ./anycode-backend
run: |
if [ ! -d "dist" ] || [ -z "$(ls -A dist)" ]; then
echo "Error: dist directory is empty or missing"
exit 1
fi
echo "Frontend build verified: $(ls -la dist | head -5)"
- name: Install Rust
uses: dtolnay/rust-toolchain@stable
with:
toolchain: 1.93.0
targets: aarch64-apple-darwin,x86_64-apple-darwin
- name: Cache Rust dependencies
uses: Swatinem/rust-cache@v2
with:
workspaces: |
anycode-backend -> target
- name: Build macOS binaries
working-directory: ./anycode-backend
run: |
cargo build --release --target aarch64-apple-darwin
cargo build --release --target x86_64-apple-darwin
- name: Create universal binary
working-directory: ./anycode-backend
run: |
mkdir -p dist-release
lipo -create \
target/aarch64-apple-darwin/release/anycode \
target/x86_64-apple-darwin/release/anycode \
-output dist-release/anycode
- name: Package as tar.gz
working-directory: ./anycode-backend
run: |
strip dist-release/anycode
tar -czf anycode-universal-apple-darwin.tar.gz -C dist-release anycode
- name: Upload to release
if: startsWith(github.ref, 'refs/tags/')
uses: softprops/action-gh-release@v2
with:
files: anycode-backend/anycode-universal-apple-darwin.tar.gz
tag_name: ${{ github.ref_name }}
name: Release ${{ github.ref_name }}