From 51168906c4185e40b596fa4849bc8beba8601600 Mon Sep 17 00:00:00 2001 From: Jackson Goode Date: Wed, 3 Jul 2024 12:38:42 -0700 Subject: [PATCH 1/7] Arm build for Linux --- .github/workflows/build.yml | 71 ++++++++++++++++++++++++++++--------- 1 file changed, 55 insertions(+), 16 deletions(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 7530f187..6cb19a9b 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -30,7 +30,14 @@ jobs: strategy: fail-fast: false matrix: - os: [ubuntu-latest, macOS-latest, windows-latest] + 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 @@ -43,17 +50,31 @@ jobs: - 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 + run: | + sudo apt-get update && sudo apt-get install -y libgtk-3-dev libssl-dev libasound2-dev + if [ "${{ matrix.arch }}" == "aarch64" ]; then + sudo apt-get install -y qemu-user-static gcc-aarch64-linux-gnu + fi - name: Run Tests run: cargo test continue-on-error: true - - name: Build Release - if: runner.os != 'macOS' + - name: Build Release (Windows) + if: runner.os == 'Windows' run: cargo build --release - - name: Build x86_64 and aarch64 for macOS + - name: Build Release (Linux) + if: runner.os == 'Linux' + run: | + rustup target add aarch64-unknown-linux-gnu + cargo build --release --target x86_64-unknown-linux-gnu --target aarch64-unknown-linux-gnu + env: + CARGO_TARGET_AARCH64_UNKNOWN_LINUX_GNU_LINKER: aarch64-linux-gnu-gcc + CARGO_TARGET_AARCH64_UNKNOWN_LINUX_GNU_RUNNER: qemu-aarch64-static + PKG_CONFIG_SYSROOT_DIR: / + + - name: Build Release (macOS) if: runner.os == 'macOS' run: | rustup target add x86_64-apple-darwin aarch64-apple-darwin @@ -94,16 +115,20 @@ jobs: name: Psst.dmg path: ./Psst.dmg - - name: Make Linux Binary Executable + - name: Make Linux Binaries Executable if: runner.os == 'Linux' - run: chmod +x target/release/psst-gui + 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 Binary + - name: Upload Linux Binaries uses: actions/upload-artifact@v4 if: runner.os == 'Linux' with: - name: psst-gui - path: target/release/psst-gui + 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 @@ -115,18 +140,27 @@ jobs: deb: runs-on: ubuntu-latest needs: build + strategy: + matrix: + arch: [amd64, arm64] steps: - name: Checkout Repository uses: actions/checkout@v4 - - name: Download Linux Binary + - name: Download Linux Binaries uses: actions/download-artifact@v4 with: name: psst-gui - path: ${{runner.workspace}} + path: ${{runner.workspace}}/binaries - name: Move Binary - run: mkdir -p ${{runner.workspace}}/pkg/usr/bin/; mv ${{runner.workspace}}/psst-gui $_ + 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 $_ @@ -150,18 +184,23 @@ jobs: 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 $_/ + 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)_amd64.deb + 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 + name: psst-deb-${{ matrix.arch }} path: "*.deb" appimage: From 214b162e44b4b241e7355e388ea810b81a9a3b9f Mon Sep 17 00:00:00 2001 From: Jackson Goode Date: Wed, 3 Jul 2024 14:40:33 -0700 Subject: [PATCH 2/7] Use cross --- .github/workflows/build.yml | 52 ++++++++++++++--------------------- Cargo.toml | 1 + Cross.toml | 21 ++++++++++++++ psst-gui/Cargo.toml | 24 ++++++++++------ psst-gui/src/data/playlist.rs | 8 +++--- 5 files changed, 62 insertions(+), 44 deletions(-) create mode 100644 Cross.toml diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 6cb19a9b..845445ab 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -32,15 +32,16 @@ jobs: matrix: include: - os: ubuntu-latest - arch: x86_64 + target: x86_64-unknown-linux-gnu - os: ubuntu-latest - arch: aarch64 + target: aarch64-unknown-linux-gnu - os: macOS-latest - os: windows-latest runs-on: ${{ matrix.os }} env: MACOSX_DEPLOYMENT_TARGET: 11.0 + PKG_CONFIG_SYSROOT_DIR: / steps: - name: Checkout Repository uses: actions/checkout@v4 @@ -48,31 +49,17 @@ jobs: - name: Setup Cache uses: Swatinem/rust-cache@v2 - - name: Install Linux Dependencies + - name: Install Cross if: runner.os == 'Linux' - run: | - sudo apt-get update && sudo apt-get install -y libgtk-3-dev libssl-dev libasound2-dev - if [ "${{ matrix.arch }}" == "aarch64" ]; then - sudo apt-get install -y qemu-user-static gcc-aarch64-linux-gnu - fi - - - name: Run Tests - run: cargo test - continue-on-error: true - - - name: Build Release (Windows) - if: runner.os == 'Windows' - run: cargo build --release + run: cargo install cross - - name: Build Release (Linux) + - name: Build (Linux) if: runner.os == 'Linux' - run: | - rustup target add aarch64-unknown-linux-gnu - cargo build --release --target x86_64-unknown-linux-gnu --target aarch64-unknown-linux-gnu - env: - CARGO_TARGET_AARCH64_UNKNOWN_LINUX_GNU_LINKER: aarch64-linux-gnu-gcc - CARGO_TARGET_AARCH64_UNKNOWN_LINUX_GNU_RUNNER: qemu-aarch64-static - PKG_CONFIG_SYSROOT_DIR: / + uses: clechasseur/rs-cargo@v2 + with: + use-cross: true + command: build + args: --release --target ${{ matrix.target }} - name: Build Release (macOS) if: runner.os == 'macOS' @@ -80,6 +67,10 @@ jobs: 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 @@ -115,20 +106,17 @@ jobs: name: Psst.dmg path: ./Psst.dmg - - name: Make Linux Binaries Executable + - name: Make Linux Binary 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 + chmod +x target/${{ matrix.target }}/release/psst-gui - - name: Upload Linux Binaries + - name: Upload Linux Binary 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: psst-gui-${{ matrix.target }} + path: target/${{ matrix.target }}/release/psst-gui - name: Upload Windows Executable uses: actions/upload-artifact@v4 diff --git a/Cargo.toml b/Cargo.toml index a11ac648..cbb75d08 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -15,5 +15,6 @@ codegen-units = 1 [profile.dev.package.symphonia] opt-level = 2 + [profile.dev.package.libsamplerate] opt-level = 2 diff --git a/Cross.toml b/Cross.toml new file mode 100644 index 00000000..2fc0e7e8 --- /dev/null +++ b/Cross.toml @@ -0,0 +1,21 @@ +[target.x86_64-unknown-linux-gnu] +image = "ghcr.io/cross-rs/x86_64-unknown-linux-gnu:edge" +pre-build = [ + "dpkg --add-architecture $CROSS_DEB_ARCH", + """apt-get update && apt-get --assume-yes install \ + libgtk-3-dev:$CROSS_DEB_ARCH \ + libssl-dev:$CROSS_DEB_ARCH \ + libasound2-dev:$CROSS_DEB_ARCH + """, +] + +[target.aarch64-unknown-linux-gnu] +image = "ghcr.io/cross-rs/aarch64-unknown-linux-gnu:edge" +pre-build = [ + "dpkg --add-architecture $CROSS_DEB_ARCH", + """apt-get update && apt-get --assume-yes install \ + libgtk-3-dev:$CROSS_DEB_ARCH \ + libssl-dev:$CROSS_DEB_ARCH \ + libasound2-dev:$CROSS_DEB_ARCH + """, +] diff --git a/psst-gui/Cargo.toml b/psst-gui/Cargo.toml index 07f4604d..1413dc89 100644 --- a/psst-gui/Cargo.toml +++ b/psst-gui/Cargo.toml @@ -36,13 +36,21 @@ ureq = { version = "2.8.0", features = ["json", "socks-proxy"] } url = { version = "2.4.1" } # GUI -druid = { git = "https://github.com/jpochyla/druid", branch = "psst", features = ["im", "image", "jpeg", "png", "serde"] } +druid = { git = "https://github.com/jpochyla/druid", branch = "psst", features = [ + "im", + "image", + "jpeg", + "png", + "serde", +] } druid-enums = { git = "https://github.com/jpochyla/druid-enums" } -druid-shell = { git = "https://github.com/jpochyla/druid", branch = "psst", features = ["raw-win-handle"] } +druid-shell = { git = "https://github.com/jpochyla/druid", branch = "psst", features = [ + "raw-win-handle", +] } open = { version = "5.0.0" } raw-window-handle = { version = "0.5.2" } # Must stay compatible with Druid souvlaki = { version = "0.6.1" } -webbrowser = {version = "0.8.11"} +webbrowser = { version = "0.8.11" } [target.'cfg(windows)'.build-dependencies] winres = { version = "0.1.12" } @@ -52,11 +60,11 @@ image = { version = "0.24.7" } name = "Psst" identifier = "com.jpochyla.psst" icon = [ - "assets/logo_32.png", - "assets/logo_64.png", - "assets/logo_128.png", - "assets/logo_256.png", - "assets/logo_512.png", + "assets/logo_32.png", + "assets/logo_64.png", + "assets/logo_128.png", + "assets/logo_256.png", + "assets/logo_512.png", ] version = "0.1.0" resources = [] diff --git a/psst-gui/src/data/playlist.rs b/psst-gui/src/data/playlist.rs index c96f5624..9d9b1363 100644 --- a/psst-gui/src/data/playlist.rs +++ b/psst-gui/src/data/playlist.rs @@ -27,7 +27,7 @@ pub struct PlaylistRemoveTrack { pub struct Playlist { pub id: Arc, pub name: Arc, - #[serde(skip_serializing_if="Option::is_none")] + #[serde(skip_serializing_if = "Option::is_none")] pub images: Option>, pub description: Arc, #[serde(rename = "tracks")] @@ -46,9 +46,9 @@ impl Playlist { } pub fn image(&self, width: f64, height: f64) -> Option<&Image> { - self.images.as_ref().and_then(|images| { - Image::at_least_of_size(images, width, height) - }) + self.images + .as_ref() + .and_then(|images| Image::at_least_of_size(images, width, height)) } pub fn url(&self) -> String { From cfcb51b6d907269ff17fe275342eca5e507c2c9f Mon Sep 17 00:00:00 2001 From: Jackson Goode Date: Sat, 6 Jul 2024 00:37:44 -0700 Subject: [PATCH 3/7] Fix cross and deb implementations --- .github/workflows/build.yml | 17 ++++++++--------- Cargo.toml | 7 +------ 2 files changed, 9 insertions(+), 15 deletions(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 845445ab..773f0465 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -108,8 +108,7 @@ jobs: - name: Make Linux Binary Executable if: runner.os == 'Linux' - run: | - chmod +x target/${{ matrix.target }}/release/psst-gui + run: chmod +x target/${{ matrix.target }}/release/psst-gui - name: Upload Linux Binary uses: actions/upload-artifact@v4 @@ -130,7 +129,11 @@ jobs: needs: build strategy: matrix: - arch: [amd64, arm64] + include: + - arch: amd64 + target: x86_64-unknown-linux-gnu + - arch: arm64 + target: aarch64-unknown-linux-gnu steps: - name: Checkout Repository uses: actions/checkout@v4 @@ -138,17 +141,13 @@ jobs: - name: Download Linux Binaries uses: actions/download-artifact@v4 with: - name: psst-gui + name: psst-gui-${{ matrix.target }} 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 + mv ${{runner.workspace}}/binaries/psst-gui ${{runner.workspace}}/pkg/usr/bin/ - name: Move Desktop Entry run: mkdir -p ${{runner.workspace}}/pkg/usr/share/applications/; mv .pkg/psst.desktop $_ diff --git a/Cargo.toml b/Cargo.toml index cbb75d08..235f3777 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,11 +1,6 @@ [workspace] resolver = "2" -members = [ - "psst-protocol", - "psst-core", - "psst-cli", - "psst-gui", -] +members = ["psst-protocol", "psst-core", "psst-cli", "psst-gui"] [profile.release] opt-level = 3 From e31ef51ee21ed8e17f5cfbdea0a111328e79cc1c Mon Sep 17 00:00:00 2001 From: Jackson Goode Date: Sat, 6 Jul 2024 00:47:38 -0700 Subject: [PATCH 4/7] Cache Docker used by cross --- .github/workflows/build.yml | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 773f0465..95bd12fc 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -46,9 +46,14 @@ jobs: - name: Checkout Repository uses: actions/checkout@v4 - - name: Setup Cache + - name: Setup Rust Cache uses: Swatinem/rust-cache@v2 + - name: Cache Docker images. + uses: ScribeMD/docker-cache@0.5.0 + with: + key: docker-${{ runner.os }}-${{ hashFiles('Cross.toml') }} + - name: Install Cross if: runner.os == 'Linux' run: cargo install cross From 82f9f74df5790fd2bbfda92772b207e3e1a7f431 Mon Sep 17 00:00:00 2001 From: Jackson Goode Date: Sat, 6 Jul 2024 00:58:44 -0700 Subject: [PATCH 5/7] Differentiate by cross config --- .github/workflows/build.yml | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 95bd12fc..21251e1d 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -48,11 +48,8 @@ jobs: - name: Setup Rust Cache uses: Swatinem/rust-cache@v2 - - - name: Cache Docker images. - uses: ScribeMD/docker-cache@0.5.0 with: - key: docker-${{ runner.os }}-${{ hashFiles('Cross.toml') }} + key: ${{ hashFiles('Cross.toml') }} - name: Install Cross if: runner.os == 'Linux' From 91055d21a9bd210817910cb9149963b8a85b21b6 Mon Sep 17 00:00:00 2001 From: Jackson Goode Date: Sat, 6 Jul 2024 13:00:54 -0700 Subject: [PATCH 6/7] Move to Cargo --- .github/workflows/build.yml | 1 - Cargo.toml | 10 ++++++++++ Cross.toml | 21 --------------------- 3 files changed, 10 insertions(+), 22 deletions(-) delete mode 100644 Cross.toml diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 21251e1d..aea0fb71 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -41,7 +41,6 @@ jobs: runs-on: ${{ matrix.os }} env: MACOSX_DEPLOYMENT_TARGET: 11.0 - PKG_CONFIG_SYSROOT_DIR: / steps: - name: Checkout Repository uses: actions/checkout@v4 diff --git a/Cargo.toml b/Cargo.toml index 235f3777..cc5cb954 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -13,3 +13,13 @@ opt-level = 2 [profile.dev.package.libsamplerate] opt-level = 2 + +[workspace.metadata.cross.target] +image = "ghcr.io/cross-rs/{{TARGET}}:edge" +pre-build = [""" + dpkg --add-architecture $CROSS_DEB_ARCH && \ + apt-get update && apt-get --assume-yes install \ + libgtk-3-dev:$CROSS_DEB_ARCH \ + libssl-dev:$CROSS_DEB_ARCH \ + libasound2-dev:$CROSS_DEB_ARCH + """] diff --git a/Cross.toml b/Cross.toml deleted file mode 100644 index 2fc0e7e8..00000000 --- a/Cross.toml +++ /dev/null @@ -1,21 +0,0 @@ -[target.x86_64-unknown-linux-gnu] -image = "ghcr.io/cross-rs/x86_64-unknown-linux-gnu:edge" -pre-build = [ - "dpkg --add-architecture $CROSS_DEB_ARCH", - """apt-get update && apt-get --assume-yes install \ - libgtk-3-dev:$CROSS_DEB_ARCH \ - libssl-dev:$CROSS_DEB_ARCH \ - libasound2-dev:$CROSS_DEB_ARCH - """, -] - -[target.aarch64-unknown-linux-gnu] -image = "ghcr.io/cross-rs/aarch64-unknown-linux-gnu:edge" -pre-build = [ - "dpkg --add-architecture $CROSS_DEB_ARCH", - """apt-get update && apt-get --assume-yes install \ - libgtk-3-dev:$CROSS_DEB_ARCH \ - libssl-dev:$CROSS_DEB_ARCH \ - libasound2-dev:$CROSS_DEB_ARCH - """, -] From 47bf5f8f755e8b09b549bb344900a35d2023e4bd Mon Sep 17 00:00:00 2001 From: Jackson Goode Date: Sat, 6 Jul 2024 14:09:19 -0700 Subject: [PATCH 7/7] Add cross.toml --- .github/workflows/build.yml | 6 +----- Cargo.toml | 10 ---------- Cross.toml | 14 ++++++++++++++ 3 files changed, 15 insertions(+), 15 deletions(-) create mode 100644 Cross.toml diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index aea0fb71..fce403a5 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -56,11 +56,7 @@ jobs: - name: Build (Linux) if: runner.os == 'Linux' - uses: clechasseur/rs-cargo@v2 - with: - use-cross: true - command: build - args: --release --target ${{ matrix.target }} + run: cross build --release --target ${{ matrix.target }} - name: Build Release (macOS) if: runner.os == 'macOS' diff --git a/Cargo.toml b/Cargo.toml index cc5cb954..235f3777 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -13,13 +13,3 @@ opt-level = 2 [profile.dev.package.libsamplerate] opt-level = 2 - -[workspace.metadata.cross.target] -image = "ghcr.io/cross-rs/{{TARGET}}:edge" -pre-build = [""" - dpkg --add-architecture $CROSS_DEB_ARCH && \ - apt-get update && apt-get --assume-yes install \ - libgtk-3-dev:$CROSS_DEB_ARCH \ - libssl-dev:$CROSS_DEB_ARCH \ - libasound2-dev:$CROSS_DEB_ARCH - """] diff --git a/Cross.toml b/Cross.toml new file mode 100644 index 00000000..f98ce5af --- /dev/null +++ b/Cross.toml @@ -0,0 +1,14 @@ +[build] +pre-build = [""" + dpkg --add-architecture $CROSS_DEB_ARCH && \ + apt-get update && apt-get --assume-yes install \ + libgtk-3-dev:$CROSS_DEB_ARCH \ + libssl-dev:$CROSS_DEB_ARCH \ + libasound2-dev:$CROSS_DEB_ARCH +"""] + +[target.x86_64-unknown-linux-gnu] +image = "ghcr.io/cross-rs/x86_64-unknown-linux-gnu:edge" + +[target.aarch64-unknown-linux-gnu] +image = "ghcr.io/cross-rs/aarch64-unknown-linux-gnu:edge"