name: CD
on:
release:
types:
- created
permissions:
contents: write
checks: write
actions: read
issues: read
packages: write
pull-requests: read
repository-projects: read
statuses: read
jobs:
linux_builds:
runs-on: ubuntu-latest
steps:
- name: Checkout the repository
uses: actions/checkout@v2
- name: Install Linux Cross Compilers
run: |
sudo apt-get update
sudo apt-get install -y \
gcc-aarch64-linux-gnu \
g++-aarch64-linux-gnu \
binutils-aarch64-linux-gnu \
libgcc-9-dev-arm64-cross \
libstdc++-9-dev-arm64-cross \
- name: Install rustup targets
run: rustup target add x86_64-unknown-linux-gnu aarch64-unknown-linux-gnu
- name: Build x86_64 binary
run: cargo build --release --target=x86_64-unknown-linux-gnu
- name: Set up environment for cross-compilation
run: |
echo "CC_aarch64_unknown_linux_gnu=aarch64-linux-gnu-gcc" >> $GITHUB_ENV
echo "CXX_aarch64_unknown_linux_gnu=aarch64-linux-gnu-g++" >> $GITHUB_ENV
echo "CARGO_TARGET_AARCH64_UNKNOWN_LINUX_GNU_LINKER=aarch64-linux-gnu-gcc" >> $GITHUB_ENV
- name: Build aarch64 binary
run: |
cargo build --release --target=aarch64-unknown-linux-gnu
- name: Build release name
run: |
PKG_NAME=$(cargo metadata --no-deps --format-version 1 | jq -r '.packages[0].name')
PKG_VERSION=$(cargo metadata --no-deps --format-version 1 | jq -r '.packages[0].version')
RELEASE_NAME="${PKG_NAME}_${PKG_VERSION}"
echo "RELEASE_NAME=$RELEASE_NAME" >> $GITHUB_ENV
- name: Tar x86_64 binary
run: |
PKG_NAME=$(cargo metadata --no-deps --format-version 1 | jq -r '.packages[0].name')
tar -czvf ${{ env.RELEASE_NAME }}-gnu-linux-x86_64.tar.gz -C target/x86_64-unknown-linux-gnu/release ${PKG_NAME}
- name: Tar arm64 binary
run: |
PKG_NAME=$(cargo metadata --no-deps --format-version 1 | jq -r '.packages[0].name')
tar -czvf ${{ env.RELEASE_NAME }}-gnu-linux-aarch64.tar.gz -C target/aarch64-unknown-linux-gnu/release ${PKG_NAME}
- name: Generate SHA256 checksums
run: |
shasum -a 256 ${{ env.RELEASE_NAME }}-gnu-linux-x86_64.tar.gz > ${{ env.RELEASE_NAME }}-gnu-linux-x86_64.tar.gz.sha256
shasum -a 256 ${{ env.RELEASE_NAME }}-gnu-linux-aarch64.tar.gz > ${{ env.RELEASE_NAME }}-gnu-linux-aarch64.tar.gz.sha256
- name: Upload release binaries
uses: softprops/action-gh-release@c95fe1489396fe8a9eb87c0abf8aa5b2ef267fda env:
GITHUB_TOKEN: ${{ github.token }} with:
files: |
${{ env.RELEASE_NAME }}-gnu-linux-x86_64.tar.gz
${{ env.RELEASE_NAME }}-gnu-linux-x86_64.tar.gz.sha256
${{ env.RELEASE_NAME }}-gnu-linux-aarch64.tar.gz
${{ env.RELEASE_NAME }}-gnu-linux-aarch64.tar.gz.sha256
macos_builds:
runs-on: macos-latest
steps:
- name: Checkout the repository
uses: actions/checkout@v2
- name: Install rustup targets
run: rustup target add x86_64-apple-darwin aarch64-apple-darwin
- name: Build the executable
run: cargo build --release --target=x86_64-apple-darwin --target=aarch64-apple-darwin
- name: Build release name
run: |
PKG_NAME=$(cargo metadata --no-deps --format-version 1 | jq -r '.packages[0].name')
PKG_VERSION=$(cargo metadata --no-deps --format-version 1 | jq -r '.packages[0].version')
RELEASE_NAME="${PKG_NAME}_${PKG_VERSION}"
echo "RELEASE_NAME=$RELEASE_NAME" >> $GITHUB_ENV
- name: Tar x86_64 binary
run: |
PKG_NAME=$(cargo metadata --no-deps --format-version 1 | jq -r '.packages[0].name')
tar -czvf ${{ env.RELEASE_NAME }}-macos-x86_64.tar.gz -C target/x86_64-apple-darwin/release ${PKG_NAME}
- name: Tar arm64 binary
run: |
PKG_NAME=$(cargo metadata --no-deps --format-version 1 | jq -r '.packages[0].name')
tar -czvf ${{ env.RELEASE_NAME }}-macos-aarch64.tar.gz -C target/aarch64-apple-darwin/release ${PKG_NAME}
- name: Generate SHA256 checksums
run: |
shasum -a 256 ${{ env.RELEASE_NAME }}-macos-x86_64.tar.gz > ${{ env.RELEASE_NAME }}-macos-x86_64.tar.gz.sha256
shasum -a 256 ${{ env.RELEASE_NAME }}-macos-aarch64.tar.gz > ${{ env.RELEASE_NAME }}-macos-aarch64.tar.gz.sha256
- name: Upload release binaries
uses: softprops/action-gh-release@c95fe1489396fe8a9eb87c0abf8aa5b2ef267fda
env:
GITHUB_TOKEN: ${{ github.token }}
with:
files: |
${{ env.RELEASE_NAME }}-macos-x86_64.tar.gz
${{ env.RELEASE_NAME }}-macos-aarch64.tar.gz
${{ env.RELEASE_NAME }}-macos-x86_64.tar.gz.sha256
${{ env.RELEASE_NAME }}-macos-aarch64.tar.gz.sha256
windows_builds:
runs-on: windows-latest
steps:
- name: Checkout the repository
uses: actions/checkout@v2
- name: Install rustup targets
run: rustup target add x86_64-pc-windows-msvc aarch64-pc-windows-msvc
shell: pwsh
- name: Build the executable
run: |
cargo build --release --target=x86_64-pc-windows-msvc --target=aarch64-pc-windows-msvc
shell: pwsh
- name: Build release name
run: |
$PKG_NAME = (cargo metadata --no-deps --format-version 1 | ConvertFrom-Json).packages[0].name
$PKG_VERSION = (cargo metadata --no-deps --format-version 1 | ConvertFrom-Json).packages[0].version
$RELEASE_NAME = "${PKG_NAME}_${PKG_VERSION}"
echo "RELEASE_NAME=$RELEASE_NAME" | Out-File -FilePath $Env:GITHUB_ENV -Append
shell: pwsh
- name: Zip Windows x86_64 binary
run: |
$PKG_NAME = (cargo metadata --no-deps --format-version 1 | ConvertFrom-Json).packages[0].name
& 7z a "$Env:RELEASE_NAME-windows-x86_64.zip" "target/x86_64-pc-windows-msvc/release/$PKG_NAME.exe"
shell: pwsh
- name: Zip Windows ARM64 binary
run: |
$PKG_NAME = (cargo metadata --no-deps --format-version 1 | ConvertFrom-Json).packages[0].name
& 7z a "$Env:RELEASE_NAME-windows-aarch64.zip" "target/aarch64-pc-windows-msvc/release/$PKG_NAME.exe"
shell: pwsh
- name: Generate SHA256 checksums
run: |
Get-FileHash -Algorithm SHA256 "$Env:RELEASE_NAME-windows-x86_64.zip" | Format-List | Out-File "$Env:RELEASE_NAME-windows-x86_64.zip.sha256"
Get-FileHash -Algorithm SHA256 "$Env:RELEASE_NAME-windows-aarch64.zip" | Format-List | Out-File "$Env:RELEASE_NAME-windows-aarch64.zip.sha256"
shell: pwsh
- name: Upload release binaries to GitHub
uses: softprops/action-gh-release@c95fe1489396fe8a9eb87c0abf8aa5b2ef267fda
env:
GITHUB_TOKEN: ${{ github.token }}
with:
files: |
${{ env.RELEASE_NAME }}-windows-x86_64.zip
${{ env.RELEASE_NAME }}-windows-aarch64.zip
${{ env.RELEASE_NAME }}-windows-x86_64.zip.sha256
${{ env.RELEASE_NAME }}-windows-aarch64.zip.sha256