ci: build without cross #100
Workflow file for this run
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: 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_CMD 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 }} |