ci: workflow to update homebrew #70
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: | |
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" = "release" ]; then | |
dryrun=false | |
elif [ "$GITHUB_EVENT_NAME" = "workflow_dispatch" ]; then | |
dryrun=${{ inputs.dryrun }} | |
else | |
dryrun=true | |
fi | |
echo "Dryrun: $dryrun" | |
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 | |
runs-on: ${{ matrix.os }} | |
strategy: | |
fail-fast: false | |
matrix: | |
os: | |
- ubuntu-latest | |
- macos-latest | |
# - windows-latest | |
arch: | |
- x86_64 | |
- aarch64 | |
steps: | |
- name: Checkout | |
uses: actions/checkout@v4 | |
- name: Install Cross | |
if: matrix.arch == 'aarch64' && matrix.os == 'ubuntu-latest' | |
uses: taiki-e/install-action@v2 | |
with: | |
tool: cross | |
- name: Setup Environment | |
run: | | |
if [ "${{ matrix.os }}" = "macos-latest" ]; then | |
CARGO_CMD=cargo | |
CARGO_BUILD_TARGET="${{ matrix.arch }}-apple-darwin" | |
rustup target add $CARGO_BUILD_TARGET | |
else | |
if [ "${{ matrix.arch }}" = "aarch64" ]; then | |
CARGO_CMD=cross | |
else | |
CARGO_CMD=cargo | |
fi | |
CARGO_BUILD_TARGET="${{ matrix.arch }}-unknown-linux-gnu" | |
fi | |
echo "CARGO_CMD=$CARGO_CMD" >> $GITHUB_ENV | |
echo "CARGO_BUILD_TARGET=$CARGO_BUILD_TARGET" >> $GITHUB_ENV | |
- name: Build | |
id: build | |
run: | | |
$CARGO_CMD build --release --locked --package maa-cli | |
cd "target/$CARGO_BUILD_TARGET/release" | |
tarball="$CARGO_BUILD_TARGET.tar" | |
tar -cvf $tarball maa | |
echo "file_path=$PWD/$tarball" >> $GITHUB_OUTPUT | |
- name: Upload Artifact | |
uses: actions/upload-artifact@v3 | |
with: | |
name: maa_cli-${{ env.CARGO_BUILD_TARGET }} | |
path: ${{ steps.build.outputs.file_path }} | |
retention-days: 1 | |
build-universal: | |
name: Build Universal Binary | |
runs-on: macos-latest | |
needs: 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 | |
id: build | |
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 | |
tarball="universal-apple-darwin.tar" | |
tar -cvf $tarball maa | |
echo "file_path=$PWD/$tarball" >> $GITHUB_OUTPUT | |
- name: Upload Artifact | |
uses: actions/upload-artifact@v3 | |
with: | |
name: maa_cli-universal-apple-darwin | |
path: ${{ steps.build.outputs.file_path }} | |
retention-days: 1 | |
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 (Release) | |
if: github.event_name == 'push' && contains(github.ref, 'refs/tags/') | |
uses: actions/checkout@v4 | |
with: | |
ref: version | |
path: version | |
- name: Checkout version branch (Test) | |
if: github.event_name == 'pull_request' | |
uses: actions/checkout@v4 | |
with: | |
ref: version-test | |
path: version | |
- name: Extract files, Generate checksums and Update version.json | |
run: | | |
version=${{ needs.meta.outputs.version }} | |
for target in x86_64-unknown-linux-gnu aarch64-unknown-linux-gnu universal-apple-darwin; do | |
dir="maa_cli-$target" | |
tar -xvf "$dir/$target.tar" -C "$dir" | |
if [ "$target" == "universal-apple-darwin" ]; then | |
archive_name="maa_cli-v$version-$target.zip" | |
zip -r $archive_name $dir/maa | |
else | |
archive_name="maa_cli-v$version-$target.tar.gz" | |
tar -czvf $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: github.event_name == 'push' && contains(github.ref, 'refs/tags/') | |
with: | |
name: v${{ needs.meta.outputs.version }} | |
generate_release_notes: true | |
fail_on_unmatched_files: true | |
files: | | |
maa_cli-v${{ needs.meta.outputs.version }}-x86_64-unknown-linux-gnu.tar.gz* | |
maa_cli-v${{ needs.meta.outputs.version }}-aarch64-unknown-linux-gnu.tar.gz* | |
maa_cli-v${{ needs.meta.outputs.version }}-universal-apple-darwin.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" | |
git commit version.json -m "Update version.json" | |
git push |