Build and release binary #39
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
name: Build and release binary | ||
on: | ||
push: | ||
tags: | ||
- "v*" | ||
workflow_dispatch: | ||
inputs: | ||
version: | ||
description: "Version to build" | ||
required: true | ||
default: "0.0.0" | ||
defaults: | ||
run: | ||
shell: bash | ||
jobs: | ||
info: | ||
runs-on: ubuntu-latest | ||
outputs: | ||
version: ${{ steps.version.outputs.version }} | ||
prerelease: ${{ steps.version.outputs.prerelease }} | ||
steps: | ||
- name: Determine version | ||
id: version | ||
run: | | ||
if [ -z "${{ inputs.version }}" ]; then | ||
VERSION=$(echo $GITHUB_REF | sed 's/refs\/tags\/v//') | ||
else | ||
VERSION=${{ inputs.version }} | ||
fi | ||
if [[ $VERSION == *"-"* ]]; then | ||
PRERELEASE=true | ||
else | ||
PRERELEASE=false | ||
fi | ||
echo "version=${VERSION}" >> $GITHUB_OUTPUT | ||
echo "prerelease=${PRERELEASE}" >> $GITHUB_OUTPUT | ||
build: | ||
needs: | ||
- info | ||
strategy: | ||
matrix: | ||
os: [ubuntu-latest, windows-latest, macos-13] | ||
include: | ||
- os: ubuntu-latest | ||
suffix: -linux | ||
- os: windows-latest | ||
suffix: -windows | ||
- os: macos-13 # Intel Macにする | ||
suffix: -macos | ||
runs-on: ${{ matrix.os }} | ||
steps: | ||
- name: Setup zip | ||
if: matrix.os == 'windows-latest' | ||
run: | | ||
curl.exe https://www.willus.com/archive/zip64/infozip_binaries_win64.zip -o zip64.zip | ||
7z x zip64.zip -oC:\tools | ||
echo "C:/tools" >> $GITHUB_PATH | ||
- name: Checkout repository | ||
uses: actions/checkout@v4 | ||
with: | ||
submodules: recursive | ||
- name: Setup Bazel | ||
uses: bazel-contrib/[email protected] | ||
- name: Setup Rust | ||
uses: dtolnay/rust-toolchain@master | ||
with: | ||
toolchain: stable | ||
components: rustfmt, clippy | ||
- name: Setup pnpm | ||
uses: pnpm/action-setup@v4 | ||
with: | ||
version: 8 | ||
- name: Setup Node | ||
uses: actions/setup-node@v4 | ||
with: | ||
node-version: 20 | ||
cache: "pnpm" | ||
cache-dependency-path: "crates/assets/frontend/pnpm-lock.yaml" | ||
- name: Cache rust dependencies | ||
uses: Swatinem/rust-cache@v2 | ||
- name: Build frontend | ||
run: | | ||
cd crates/assets/frontend | ||
pnpm install | ||
pnpm build | ||
- name: Build rust | ||
run: | | ||
Check failure on line 91 in .github/workflows/build.yml GitHub Actions / Build and release binaryInvalid workflow file
|
||
echo "Building version ${{ jobs.info.outputs.version }}" | ||
cargo install cargo-edit | ||
cargo set-version ${{ jobs.info.outputs.version }} -p cantari | ||
cargo test --all | ||
cargo build --release -vv | ||
- name: Archive | ||
run: | | ||
mkdir archive | ||
cp -r target/release/{sample.vvm,*.html,dict} archive | ||
cp target/release/{*.dylib,*.so,*.so.*,*.dll} archive || true | ||
cp target/release/{cantari,cantari.exe} archive || true | ||
cp crates/cantari/engine_manifest.json archive | ||
cd archive | ||
zip -r ../cantari-${{ jobs.info.outputs.version }}${{ matrix.suffix }}.zip . | ||
cd .. | ||
mv cantari-${{ jobs.info.outputs.version }}${{ matrix.suffix }}.zip cantari-${{ jobs.info.outputs.version }}${{ matrix.suffix }}.vvpp | ||
- name: Create Release | ||
uses: softprops/action-gh-release@v2 | ||
with: | ||
tag_name: v${{ jobs.info.outputs.version }} | ||
prerelease: true | ||
files: | | ||
cantari-${{ jobs.info.outputs.version }}${{ matrix.suffix }}.vvpp | ||
set-information: | ||
needs: | ||
- info | ||
- build | ||
runs-on: ubuntu-latest | ||
steps: | ||
- name: Set information | ||
uses: actions/github-script@v7 | ||
with: | ||
script: | | ||
const version = "${{ needs.info.outputs.version }}" | ||
const prerelease = "${{ needs.info.outputs.prerelease }}" | ||
const body = | ||
"使い方はここを参照してください:https://github.com/sevenc-nanashi/Cantari?tab=readme-ov-file#cantari--let-utaus-speak-on-voicevox" + | ||
"Mac OS版は不安定です。` | ||
const { data: release } = await github.repos.getReleaseByTag({ | ||
owner: context.repo.owner, | ||
repo: context.repo.repo, | ||
tag: `v${version}`, | ||
}) | ||
await github.repos.updateRelease({ | ||
owner: context.repo.owner, | ||
repo: context.repo.repo, | ||
release_id: release.id, | ||
tag_name: `v${version}`, | ||
prerelease, | ||
body, | ||
}) |