Arm build for Linux #596
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: CI | |
on: | |
push: | |
branches: [master] | |
pull_request: | |
branches: [master] | |
env: | |
CARGO_TERM_COLOR: always | |
jobs: | |
code-style: | |
runs-on: ubuntu-latest | |
steps: | |
- name: Checkout Repository | |
uses: actions/checkout@v4 | |
- name: Setup Cache | |
uses: Swatinem/rust-cache@v2 | |
- name: Install Linux Dependencies | |
if: runner.os == 'Linux' | |
run: sudo apt-get update && sudo apt-get install -y libgtk-3-dev libssl-dev libasound2-dev | |
- name: Check Formatting | |
run: cargo clippy -- -D warnings | |
build: | |
strategy: | |
fail-fast: false | |
matrix: | |
include: | |
- os: ubuntu-latest | |
targets: [x86_64-unknown-linux-gnu, aarch64-unknown-linux-gnu] | |
- os: macOS-latest | |
- os: windows-latest | |
runs-on: ${{ matrix.os }} | |
env: | |
MACOSX_DEPLOYMENT_TARGET: 11.0 | |
steps: | |
- name: Checkout Repository | |
uses: actions/checkout@v4 | |
- name: Setup Cache | |
uses: Swatinem/rust-cache@v2 | |
- name: Install Linux Dependencies | |
if: runner.os == 'Linux' | |
run: sudo apt-get update && sudo apt-get install -y libgtk-3-dev libssl-dev libasound2-dev | |
- name: Setup ARM Linux build environment | |
if: runner.os == 'Linux' | |
run: | | |
sudo apt-get install -y gcc-aarch64-linux-gnu qemu-user-static | |
rustup target add aarch64-unknown-linux-gnu | |
- name: Build and Package (Linux) | |
if: runner.os == 'Linux' | |
run: | | |
targets=("x86_64-unknown-linux-gnu" "aarch64-unknown-linux-gnu") | |
for target in "${targets[@]}"; do | |
cargo build --release --target $target | |
arch=$(echo $target | cut -d'-' -f1) | |
chmod +x target/$target/release/psst-gui | |
zip -j psst-gui-$arch.zip target/$target/release/psst-gui | |
echo "artifact_$arch=psst-gui-$arch.zip" >> $GITHUB_OUTPUT | |
done | |
- name: Build and Package (macOS) | |
if: runner.os == 'macOS' | |
run: | | |
targets=("x86_64-apple-darwin" "aarch64-apple-darwin") | |
for target in "${targets[@]}"; do | |
rustup target add $target | |
cargo build --release --target $target | |
done | |
lipo -create -output target/release/psst-gui \ | |
target/x86_64-apple-darwin/release/psst-gui \ | |
target/aarch64-apple-darwin/release/psst-gui | |
# Bundle the app | |
cargo bundle --release | |
# Create universal binary in the bundle | |
lipo -create -output target/release/bundle/osx/Psst.app/Contents/MacOS/psst-gui \ | |
target/x86_64-apple-darwin/release/psst-gui \ | |
target/aarch64-apple-darwin/release/psst-gui | |
# Create DMG | |
hdiutil create -volname "Psst" -srcfolder target/release/bundle/osx -ov -format UDZO Psst.dmg | |
# Zip the DMG | |
zip -j Psst.dmg.zip Psst.dmg | |
echo "artifact_macos=Psst.dmg.zip" >> $GITHUB_OUTPUT | |
- name: Build and Package (Windows) | |
if: runner.os == 'Windows' | |
run: | | |
cargo build --release | |
zip -j psst-gui-win64.zip target/release/psst-gui.exe | |
echo "artifact_win64=psst-gui-win64.zip" >> $GITHUB_OUTPUT | |
- name: Upload Artifacts | |
uses: actions/upload-artifact@v4 | |
with: | |
name: psst-gui-${{ runner.os }} | |
path: | | |
psst-gui-*.zip | |
Psst.dmg.zip | |
deb: | |
runs-on: ubuntu-latest | |
needs: build | |
steps: | |
- name: Checkout Repository | |
uses: actions/checkout@v4 | |
- name: Download Linux Binary | |
uses: actions/download-artifact@v4 | |
with: | |
name: psst-gui | |
path: ${{runner.workspace}} | |
- name: Move Binary | |
run: mkdir -p ${{runner.workspace}}/pkg/usr/bin/; mv ${{runner.workspace}}/psst-gui $_ | |
- name: Move Desktop Entry | |
run: mkdir -p ${{runner.workspace}}/pkg/usr/share/applications/; mv .pkg/psst.desktop $_ | |
- name: Add Icons | |
run: | | |
LOGOS=$(cd ./psst-gui/assets/ && ls logo_*.png) | |
for LOGO in $LOGOS | |
do | |
LOGO_SIZE=$(echo "${LOGO}" | grep -oE '[[:digit:]]{2,}') | |
mkdir -p "${{runner.workspace}}/pkg/usr/share/icons/hicolor/${LOGO_SIZE}x${LOGO_SIZE}/" | |
cp "./psst-gui/assets/${LOGO}" "$_/psst.png" | |
done | |
mkdir -p "${{runner.workspace}}/pkg/usr/share/icons/hicolor/scalable/apps/" | |
cp "./psst-gui/assets/logo.svg" "$_/psst.svg" | |
- name: Set Permissions | |
run: chmod 755 ${{runner.workspace}}/pkg/usr/bin/psst-gui | |
- name: Move License | |
run: mkdir -p ${{runner.workspace}}/pkg/usr/share/doc/psst-gui/; mv .pkg/copyright $_ | |
- name: Move Package Config | |
run: mkdir -p ${{runner.workspace}}/pkg/; mv .pkg/DEBIAN $_/ | |
- name: Set Version | |
run: "echo Version: $(git rev-list --count HEAD) >> ${{runner.workspace}}/pkg/DEBIAN/control" | |
- name: Build Package | |
run: cat ${{runner.workspace}}/pkg/DEBIAN/control && dpkg-deb -b ${{runner.workspace}}/pkg/ psst_$(git rev-list --count HEAD)_amd64.deb | |
- name: Upload Debian Package | |
uses: actions/upload-artifact@v4 | |
with: | |
name: psst-deb | |
path: "*.deb" | |
appimage: | |
if: false # Disable temporarily: https://github.com/jpochyla/psst/actions/runs/3897410142/jobs/6655282029 | |
runs-on: ubuntu-latest | |
needs: deb | |
steps: | |
- name: Checkout Repository | |
uses: actions/checkout@v4 | |
- name: Download Debian Package | |
uses: actions/download-artifact@v4 | |
with: | |
name: psst-deb | |
path: ${{runner.workspace}} | |
- name: Install Dependencies | |
run: sudo apt-get update && sudo apt-get install -y libfuse2 | |
- name: Create Workspace | |
run: mkdir -p ${{runner.workspace}}/appimage | |
- name: Download the Latest pkg2appimage | |
run: | | |
latest_release_appimage_url=$(wget -q https://api.github.com/repos/AppImageCommunity/pkg2appimage/releases/latest -O - | jq -r '.assets[0].browser_download_url') | |
wget --directory-prefix=${{runner.workspace}}/appimage -c $latest_release_appimage_url | |
- name: Create Path to pkg2appimage | |
run: | | |
pkg2appimage_executable=$(ls ${{runner.workspace}}/appimage) | |
app_path=${{runner.workspace}}/appimage/${pkg2appimage_executable} | |
chmod +x ${app_path} | |
echo "app_path=${app_path}" >> $GITHUB_ENV | |
- name: Create Path to pkg2appimage's Recipe File | |
run: | | |
recipe_path=${{runner.workspace}}/psst/.pkg/APPIMAGE/pkg2appimage-ingredients.yml | |
echo "recipe_path=${recipe_path}" >> $GITHUB_ENV | |
- name: Run pkg2appimage | |
run: | | |
${{env.app_path}} ${{env.recipe_path}} | |
- name: Upload AppImage | |
uses: actions/upload-artifact@v4 | |
with: | |
name: psst-appimage | |
path: ${{runner.workspace}}/out/*.AppImage |