Skip to content

Merge pull request #384 from zhang-accounting/fix/stack-display-for-m… #228

Merge pull request #384 from zhang-accounting/fix/stack-display-for-m…

Merge pull request #384 from zhang-accounting/fix/stack-display-for-m… #228

Workflow file for this run

name: Build/publish release
on:
push:
branches:
- main
tags:
- "v*"
pull_request:
jobs:
create-release:
if: (startsWith(github.ref_name, 'v') && github.ref_type == 'tag')
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: taiki-e/create-gh-release-action@v1
with:
title: $version
token: ${{ secrets.GITHUB_TOKEN }}
build-frontend:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: pnpm/action-setup@v3
with:
version: 8
- uses: actions/setup-node@v4
with:
node-version: 'lts/*'
cache: 'pnpm'
cache-dependency-path: frontend/pnpm-lock.yaml
- name: frontend install
run: pnpm install
working-directory: ./frontend
- name: frontend build
run: pnpm build
working-directory: ./frontend
- uses: actions/upload-artifact@v4
name: Save frontend build artifact
with:
name: frontend-build
if-no-files-found: error
retention-days: 1
path: ./frontend/dist
publish:
name: Binary ${{ matrix.target }} (on ${{ matrix.os }})
needs:
- build-frontend
continue-on-error: true
strategy:
matrix:
include:
- os: ubuntu-latest
target: x86_64-unknown-linux-gnu
compress: true
cargo_flags: "--features frontend"
- os: ubuntu-latest
target: aarch64-unknown-linux-gnu
compress: true
cargo_flags: "--features frontend"
# - os: ubuntu-latest
# target: riscv64gc-unknown-linux-gnu
# compress: false
# cargo_flags: "--features frontend"
- os: windows-latest
target: x86_64-pc-windows-msvc
compress: true
cargo_flags: "--features frontend"
- os: macos-latest
target: x86_64-apple-darwin
compress: true
cargo_flags: "--features frontend"
- os: macos-latest
target: aarch64-apple-darwin
compress: false
cargo_flags: "--features frontend"
- os: ubuntu-latest
target: x86_64-unknown-freebsd
compress: false
cargo_flags: "--features frontend"
# The type of runner that the job will run on
# Runs on Ubuntu if other os is not specified above
runs-on: ${{ matrix.os || 'ubuntu-latest' }}
timeout-minutes: 90
permissions:
contents: write
steps:
- uses: actions/checkout@v4
- name: create version file
if: (startsWith(github.ref_name, 'v') && github.ref_type == 'tag')
run: echo "${{github.ref_name}}" | tail -c+2 >> .build_version
- name: Get version from tag
id: extract_version
run: |
echo "version=${GITHUB_REF_NAME#v}" >> "$GITHUB_OUTPUT"
shell: bash
- uses: actions/download-artifact@v4
with:
name: frontend-build
path: ./frontend/dist
- name: Setup Rust toolchain
uses: dtolnay/rust-toolchain@stable
- run: sudo apt install musl-tools
if: startsWith(matrix.os, 'ubuntu')
- name: Install openssl
if: startsWith(matrix.os, 'ubuntu')
run: sudo apt install pkg-config libssl-dev
- uses: actions/setup-python@v5
with:
python-version: '3.10'
- name: cargo build
uses: houseabsolute/actions-rust-cross@v0
with:
command: build
args: --release --locked --bin zhang ${{ matrix.cargo_flags }}
target: ${{ matrix.target }}
- name: Set exe extension for Windows
run: echo "EXE=.exe" >> $env:GITHUB_ENV
if: startsWith(matrix.os, 'windows')
- name: Upload artifact
uses: actions/upload-artifact@v4
with:
name: ${{ matrix.target }}
path: target/${{ matrix.target }}/release/zhang${{ env.EXE }}
- name: Release
uses: svenstaro/upload-release-action@v2
# only release if the commit is tagged with version
if: startsWith(github.ref_name, 'v') && github.ref_type == 'tag'
with:
repo_token: ${{ secrets.GITHUB_TOKEN }}
file: target/${{ matrix.target }}/release/zhang${{ env.EXE }}
tag: ${{ github.ref_name }}
asset_name: zhang-${{ steps.extract_version.outputs.version }}-${{ matrix.target }}${{ env.EXE }}
docker-image-release:
runs-on: ubuntu-latest
needs: publish
# Run for tags and pushes to the default branch
if: (startsWith(github.ref_name, 'v') && github.ref_type == 'tag') || github.event.repository.default_branch == github.ref_name
steps:
- uses: actions/checkout@v4
- name: Get version from tag
id: extract_version
run: |
echo "version=${GITHUB_REF_NAME#v}" >> "$GITHUB_OUTPUT"
shell: bash
- name: Download artifact aarch64-unknown-linux-gnu
uses: actions/download-artifact@v4
with:
name: aarch64-unknown-linux-gnu
path: target/aarch64-unknown-linux-gnu/release
- name: Download artifact x86_64-unknown-linux-gnu
uses: actions/download-artifact@v4
with:
name: x86_64-unknown-linux-gnu
path: target/x86_64-unknown-linux-gnu/release
- name: podman login
run: podman login --username ${{ secrets.DOCKERHUB_USERNAME }} --password ${{ secrets.DOCKERHUB_TOKEN }} docker.io
- name: podman build linux/arm64
run: podman build --format docker --platform linux/arm64/v8 --manifest zhang -f Dockerfile target/aarch64-unknown-linux-gnu/release
- name: podman build linux/amd64
run: podman build --format docker --platform linux/amd64 --manifest zhang -f Dockerfile target/x86_64-unknown-linux-gnu/release
- name: podman manifest push snapshot
run: podman manifest push zhang docker.io/kilerd/zhang:snapshot
- name: podman manifest push snapshot with hash
run: podman manifest push zhang docker.io/kilerd/zhang:${{ github.sha }}
- name: podman manifest push latest
run: podman manifest push zhang docker.io/kilerd/zhang:latest
if: startsWith(github.ref_name, 'v')
- name: podman manifest push tag version
run: podman manifest push zhang docker.io/kilerd/zhang:${{ steps.extract_version.outputs.version }}
if: startsWith(github.ref_name, 'v')
notify-example-build:
runs-on: ubuntu-latest
needs: docker-image-release
steps:
- uses: actions/checkout@v4
- name: Echo git commit hash to file
run: |
mkdir example-deployment
echo "${GITHUB_SHA}" > ./example-deployment/git_sha
- name: Pushes to another repository
uses: cpina/github-action-push-to-another-repository@main
env:
API_TOKEN_GITHUB: ${{ secrets.API_TOKEN_GITHUB }}
with:
source-directory: 'example-deployment'
destination-github-username: 'zhang-accounting'
destination-repository-name: 'zhang-example'
target-directory: 'example-deployment'
user-email: [email protected]
target-branch: main
release-wasm:
runs-on: ubuntu-latest
if: (startsWith(github.ref_name, 'v') && github.ref_type == 'tag')
steps:
- uses: actions/checkout@v4
- uses: actions-rust-lang/setup-rust-toolchain@v1
- name: update wasm version
run: |
chmod +x ./update-cargo-version.sh
./update-cargo-version.sh "${{github.ref_name}}"
working-directory: ./bindings/wasm
- uses: jetli/[email protected]
with:
# Optional version of wasm-pack to install(eg. 'v0.9.1', 'latest')
version: 'v0.12.1'
- name: build wasm
run: wasm-pack build
working-directory: ./bindings/wasm
- name: pack wasm
run: wasm-pack pack
working-directory: ./bindings/wasm
- name: setup npm token
run: echo "//registry.npmjs.org/:_authToken=$NPM_TOKEN" >> ~/.npmrc
env:
NPM_TOKEN: ${{ secrets.NPM_TOKEN }}
- name: publish to npm
run: wasm-pack publish
working-directory: ./bindings/wasm