Skip to content

ci: build without cross #108

ci: build without cross

ci: build without cross #108

Workflow file for this run

name: Release
on:
push:
tags:
- "v[0-9]+.[0-9]+.[0-9]+"
# Just used for testing
pull_request:
branches:
- main
paths:
- ".github/workflows/release.yml"
workflow_dispatch:
inputs:
dryrun:
description: Don't create release
default: true
required: true
type: boolean
defaults:
run:
shell: bash
permissions:
contents: read
jobs:
meta:
name: Meta
runs-on: ubuntu-latest
outputs:
dryrun: ${{ steps.dryrun.outputs.dryrun }}
version: ${{ steps.version.outputs.version }}
steps:
- name: Checkout
uses: actions/checkout@v4
- name: Check if Dryrun
id: dryrun
run: |
if [[ "$GITHUB_EVENT_NAME" = "push" && "$GITHUB_REF" = "refs/tags/v"* ]]; then
dryrun=false
elif [ "$GITHUB_EVENT_NAME" = "workflow_dispatch" ]; then
dryrun=${{ inputs.dryrun }}
else
dryrun=true
fi
echo "dryrun=$dryrun" >> $GITHUB_OUTPUT
- name: Get Version
id: version
run: |
CARGO_VERSION=$(yq -oy ".package.version" maa-cli/Cargo.toml)
# check if version is equal to tag if not PR
if [ "$GITHUB_EVENT_NAME" != "pull_request" ]; then
REF=${{ github.ref }}
REF_VERSION=${REF#refs/tags/v}
if [ "$REF_VERSION" != "$CARGO_VERSION" ]; then
echo "Version mismatch: $REF_VERSION != $CARGO_VERSION"
fi
fi
echo "Version: $CARGO_VERSION"
echo "version=$CARGO_VERSION" >> $GITHUB_OUTPUT
build:
name: Build
needs: meta
runs-on: ${{ matrix.os }}
strategy:
fail-fast: false
matrix:
os:
- ubuntu-latest
- macos-latest
- windows-latest
arch:
- x86_64
- aarch64
exclude:
# Failed to cross compile ring on Windows
- os: windows-latest
arch: aarch64
steps:
- name: Checkout
uses: actions/checkout@v4
- name: Setup Rust
uses: ./.github/actions/setup
with:
os: ${{ matrix.os }}
arch: ${{ matrix.arch }}
- name: Build
run: |
cargo build --release --locked --package maa-cli
- name: Tar Artifact
run: |
tar -cvf "$CARGO_BUILD_TARGET.tar" -C target/$CARGO_BUILD_TARGET/release maa
- name: Upload Artifact
uses: actions/upload-artifact@v3
with:
name: maa_cli-${{ env.CARGO_BUILD_TARGET }}
path: $CARGO_BUILD_TARGET.tar
retention-days: 1
if-no-files-found: error
build-universal:
name: Build Universal Binary
runs-on: macos-latest
needs: [meta, build]
steps:
# download all artifacts, even if not all are used,
# because this action don't support wildcards
- name: Download Artifacts
uses: actions/download-artifact@v3
- name: Create universal binaries
run: |
for arch in x86_64 aarch64; do
target="$arch-apple-darwin"
dir="maa_cli-$target"
tar -xvf "$dir/$target.tar" -C "$dir"
done
lipo -create -output maa maa_cli-x86_64-apple-darwin/maa maa_cli-aarch64-apple-darwin/maa
tar -cvf "universal-apple-darwin.tar" maa
- name: Upload Artifact
uses: actions/upload-artifact@v3
with:
name: maa_cli-universal-apple-darwin
path: universal-apple-darwin.tar
retention-days: 1
if-no-files-found: error
release:
name: Release
runs-on: ubuntu-latest
needs: [meta, build, build-universal]
permissions:
contents: write
steps:
- name: Download Artifacts
uses: actions/download-artifact@v3
- name: Checkout version branch
uses: actions/checkout@v4
with:
ref: version
path: version
- name: Extract files, Generate checksums and Update version.json
run: |
version=${{ needs.meta.outputs.version }}
targets=(
x86_64-unknown-linux-gnu
aarch64-unknown-linux-gnu
universal-apple-darwin
x86_64-pc-windows-msvc
)
for target in "${targets[@]}"; do
dir="maa_cli-$target"
tar -xvf "$dir/$target.tar" -C "$dir"
# use tar on linux and zip on other platforms
if [[ "$target" == *"linux"* ]]; then
archive_name="maa_cli-v$version-$target.tar.gz"
tar -czvf $archive_name $dir/maa
else
archive_name="maa_cli-v$version-$target.zip"
zip -r $archive_name $dir/maa
fi
checksum=$(sha256sum $archive_name)
size=$(stat -c%s $archive_name)
checksum_hash=$(echo $checksum | cut -d ' ' -f 1)
echo $checksum > $archive_name.sha256sum
version_file="version/version.json"
yq -i -oj ".maa-cli.$target.version = \"$version\"" $version_file
yq -i -oj ".maa-cli.$target.tag = \"v$version\"" $version_file
yq -i -oj ".maa-cli.$target.name = \"$archive_name\"" $version_file
yq -i -oj ".maa-cli.$target.size = $size" $version_file
yq -i -oj ".maa-cli.$target.sha256sum = \"$(echo $checksum | cut -d ' ' -f 1)\"" $version_file
done
- name: Create Release
uses: softprops/action-gh-release@v1
if: ${{ !fromJson(needs.meta.outputs.dryrun) }}
with:
name: v${{ needs.meta.outputs.version }}
generate_release_notes: true
fail_on_unmatched_files: true
files: |
maa_cli-v${{ needs.meta.outputs.version }}-*-unknown-linux-gnu.tar.gz*
maa_cli-v${{ needs.meta.outputs.version }}-universal-apple-darwin.zip*
maa_cli-v${{ needs.meta.outputs.version }}-*-pc-windows-msvc.zip*
- name: Commit version.json and Push
working-directory: version
run: |
git config --local user.name "github-actions[bot]"
git config --local user.email "41898282+github-actions[bot]@users.noreply.github.com"
echo '```diff' >> $GITHUB_STEP_SUMMARY
git diff version.json >> $GITHUB_STEP_SUMMARY
echo '```' >> $GITHUB_STEP_SUMMARY
git commit version.json -m "Update version.json"
git push --verbose ${{ fromJson(needs.meta.outputs.dryrun) && '--dry-run' || ''}}
publish-homebrew:
needs: [meta, release]
name: Publish Homebrew
uses: ./.github/workflows/publish-homebrew.yml
with:
version: v${{ needs.meta.outputs.version }}
dryrun: ${{ fromJson(needs.meta.outputs.dryrun) }}
secrets:
MAA_HOMEBREW_BUMP_PR: ${{ secrets.MAA_HOMEBREW_BUMP_PR }}
publish-aur:
needs: [meta, release]
if: ${{ !fromJson(needs.meta.outputs.dryrun) }}
name: Publish AUR Package
uses: ./.github/workflows/publish-aur.yml
with:
pkgver: ${{ needs.meta.outputs.version }}
dryrun: false
secrets:
AUR_SSH_PRIVATE_KEY: ${{ secrets.AUR_SSH_PRIVATE_KEY }}