Skip to content

Arm build for Linux #605

Arm build for Linux

Arm build for Linux #605

Workflow file for this run

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
arch: x86_64
- os: ubuntu-latest
arch: aarch64
- 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: Run Tests
run: cargo test
continue-on-error: true
- name: Build Release (Linux)
if: runner.os == 'Linux'
uses: houseabsolute/actions-rust-cross@v0
with:
command: build
target: ${{ matrix.arch }}-unknown-linux-gnu
args: --release
- name: Build Release (macOS)
if: runner.os == 'macOS'
run: |
rustup target add x86_64-apple-darwin aarch64-apple-darwin
cargo build --release --target x86_64-apple-darwin --target aarch64-apple-darwin
- name: Build Release (Windows)
if: runner.os == 'Windows'
run: cargo build --release
- name: Cache cargo-bundle
if: runner.os == 'macOS'
id: cache-cargo-bundle
uses: actions/cache@v4
with:
path: ~/.cargo/bin/cargo-bundle
key: ${{ runner.os }}-cargo-bundle-${{ hashFiles('**/Cargo.lock') }}
- name: Install cargo-bundle
if: runner.os == 'macOS' && steps.cache-cargo-bundle.outputs.cache-hit != 'true'
run: cargo install cargo-bundle
- name: Bundle macOS Release
if: runner.os == 'macOS'
run: cargo bundle --release
working-directory: psst-gui
- name: Create macOS universal binary
if: runner.os == 'macOS'
run: |
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
- name: Create macOS Disk Image
if: runner.os == 'macOS'
run: hdiutil create -volname "Psst" -srcfolder target/release/bundle/osx -ov -format UDZO Psst.dmg
- name: Upload macOS Disk Image
uses: actions/upload-artifact@v4
if: runner.os == 'macOS'
with:
name: Psst.dmg
path: ./Psst.dmg
- name: Make Linux Binaries Executable
if: runner.os == 'Linux'
run: |
chmod +x target/x86_64-unknown-linux-gnu/release/psst-gui
chmod +x target/aarch64-unknown-linux-gnu/release/psst-gui
- name: Upload Linux Binaries
uses: actions/upload-artifact@v4
if: runner.os == 'Linux'
with:
name: psst-gui-linux
path: |
target/x86_64-unknown-linux-gnu/release/psst-gui
target/aarch64-unknown-linux-gnu/release/psst-gui
- name: Upload Windows Executable
uses: actions/upload-artifact@v4
if: runner.os == 'Windows'
with:
name: Psst.exe
path: target/release/psst-gui.exe
deb:
runs-on: ubuntu-latest
needs: build
strategy:
matrix:
arch: [amd64, arm64]
steps:
- name: Checkout Repository
uses: actions/checkout@v4
- name: Download Linux Binaries
uses: actions/download-artifact@v4
with:
name: psst-gui
path: ${{runner.workspace}}/binaries
- name: Move Binary
run: |
mkdir -p ${{runner.workspace}}/pkg/usr/bin/
if [ "${{ matrix.arch }}" == "amd64" ]; then
mv ${{runner.workspace}}/binaries/x86_64-unknown-linux-gnu/release/psst-gui ${{runner.workspace}}/pkg/usr/bin/
else
mv ${{runner.workspace}}/binaries/aarch64-unknown-linux-gnu/release/psst-gui ${{runner.workspace}}/pkg/usr/bin/
fi
- 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/
cp -r .pkg/DEBIAN $_/
sed -i 's/Architecture: amd64/Architecture: ${{ matrix.arch }}/' ${{runner.workspace}}/pkg/DEBIAN/control
- 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)_${{ matrix.arch }}.deb
- name: Upload Debian Package
uses: actions/upload-artifact@v4
with:
name: psst-deb-${{ matrix.arch }}
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