name: Release
on:
push:
tags:
- 'v*'
env:
CARGO_TERM_COLOR: always
jobs:
build:
name: Build (${{ matrix.target }})
runs-on: ${{ matrix.runner }}
strategy:
matrix:
include:
- target: x86_64-unknown-linux-gnu
runner: ubuntu-latest
archive: tar.gz
- target: aarch64-unknown-linux-gnu
runner: ubuntu-latest
archive: tar.gz
cross: true
- target: x86_64-apple-darwin
runner: macos-latest
archive: tar.gz
- target: aarch64-apple-darwin
runner: macos-latest
archive: tar.gz
steps:
- uses: actions/checkout@v6
- uses: dtolnay/rust-toolchain@stable
with:
targets: ${{ matrix.target }}
- name: Install cross-compilation tools
if: matrix.cross
run: |
sudo apt-get update
sudo apt-get install -y gcc-aarch64-linux-gnu
echo "CARGO_TARGET_AARCH64_UNKNOWN_LINUX_GNU_LINKER=aarch64-linux-gnu-gcc" >> $GITHUB_ENV
- uses: Swatinem/rust-cache@v2
with:
key: ${{ matrix.target }}
- name: Build release binary
run: cargo build --release --target ${{ matrix.target }}
- name: Package binary
shell: bash
run: |
cd target/${{ matrix.target }}/release
TAG="${GITHUB_REF#refs/tags/}"
ARCHIVE_NAME="inno-${TAG}-${{ matrix.target }}"
mkdir "${ARCHIVE_NAME}"
cp inno "${ARCHIVE_NAME}/"
COMP_DIR=$(find ../build/innodb-utils-*/out/completions -maxdepth 0 2>/dev/null | head -1 || true)
if [ -d "$COMP_DIR" ]; then
mkdir "${ARCHIVE_NAME}/completions"
cp "$COMP_DIR"/* "${ARCHIVE_NAME}/completions/"
fi
tar czf "${ARCHIVE_NAME}.tar.gz" "${ARCHIVE_NAME}"
shasum -a 256 "${ARCHIVE_NAME}.tar.gz" > "${ARCHIVE_NAME}.tar.gz.sha256"
echo "ARCHIVE=${ARCHIVE_NAME}.tar.gz" >> $GITHUB_ENV
echo "CHECKSUM=${ARCHIVE_NAME}.tar.gz.sha256" >> $GITHUB_ENV
- name: Build deb package
if: matrix.target == 'x86_64-unknown-linux-gnu'
env:
CARGO_DEB_VERSION: "3.6.3"
run: |
curl -sLO "https://github.com/kornelski/cargo-deb/releases/download/v${CARGO_DEB_VERSION}/cargo-deb_${CARGO_DEB_VERSION}-1_amd64.deb"
sudo dpkg -i "cargo-deb_${CARGO_DEB_VERSION}-1_amd64.deb"
cargo deb --no-build --target ${{ matrix.target }}
- name: Build rpm package
if: matrix.target == 'x86_64-unknown-linux-gnu'
run: |
cargo install cargo-generate-rpm
cargo generate-rpm --target ${{ matrix.target }}
- name: Upload artifacts
uses: actions/upload-artifact@v6
with:
name: ${{ matrix.target }}
path: |
target/${{ matrix.target }}/release/${{ env.ARCHIVE }}
target/${{ matrix.target }}/release/${{ env.CHECKSUM }}
target/${{ matrix.target }}/debian/*.deb
target/${{ matrix.target }}/generate-rpm/*.rpm
release:
name: Create Release
needs: build
runs-on: ubuntu-latest
permissions:
contents: write
steps:
- uses: actions/checkout@v6
- name: Download all artifacts
uses: actions/download-artifact@v7
with:
path: artifacts
- name: Create GitHub Release
uses: softprops/action-gh-release@v2
with:
generate_release_notes: true
files: |
artifacts/**/*.tar.gz
artifacts/**/*.sha256
artifacts/**/*.deb
artifacts/**/*.rpm
update-homebrew:
name: Update Homebrew Formula
needs: release
runs-on: ubuntu-latest
steps:
- name: Get version from tag
id: version
run: echo "version=${GITHUB_REF#refs/tags/v}" >> $GITHUB_OUTPUT
- name: Download SHA256 checksums
run: |
VERSION=${{ steps.version.outputs.version }}
BASE_URL="https://github.com/ringo380/idb-utils/releases/download/v${VERSION}"
for target in aarch64-apple-darwin x86_64-apple-darwin aarch64-unknown-linux-gnu x86_64-unknown-linux-gnu; do
curl -sL "${BASE_URL}/inno-v${VERSION}-${target}.tar.gz.sha256" -o "${target}.sha256"
done
- name: Parse checksums
id: checksums
run: |
echo "mac_arm=$(awk '{print $1}' aarch64-apple-darwin.sha256)" >> $GITHUB_OUTPUT
echo "mac_x86=$(awk '{print $1}' x86_64-apple-darwin.sha256)" >> $GITHUB_OUTPUT
echo "linux_arm=$(awk '{print $1}' aarch64-unknown-linux-gnu.sha256)" >> $GITHUB_OUTPUT
echo "linux_x86=$(awk '{print $1}' x86_64-unknown-linux-gnu.sha256)" >> $GITHUB_OUTPUT
- name: Update Homebrew formula
uses: peter-evans/repository-dispatch@v4
with:
token: ${{ secrets.HOMEBREW_TAP_TOKEN }}
repository: ringo380/homebrew-tap
event-type: update-formula
client-payload: |
{
"formula": "inno",
"version": "${{ steps.version.outputs.version }}",
"mac_arm_sha256": "${{ steps.checksums.outputs.mac_arm }}",
"mac_x86_sha256": "${{ steps.checksums.outputs.mac_x86 }}",
"linux_arm_sha256": "${{ steps.checksums.outputs.linux_arm }}",
"linux_x86_sha256": "${{ steps.checksums.outputs.linux_x86 }}"
}