diff --git a/.github/scripts/ubuntu_setup.sh b/.github/scripts/ubuntu_setup.sh new file mode 100755 index 0000000..db9ca76 --- /dev/null +++ b/.github/scripts/ubuntu_setup.sh @@ -0,0 +1,21 @@ +#!/bin/sh + +# sudo needed for github runner, not available by default for cross images +if command -v sudo >/dev/null 2>&1; then + SUDO="sudo" +else + SUDO="" +fi + +# Needed for cross-compilation +if [ -n "$CROSS_DEB_ARCH" ]; then + $SUDO dpkg --add-architecture "$CROSS_DEB_ARCH" +fi + +# CROSS_DEB_ARCH is empty for native builds +$SUDO apt-get update && $SUDO apt-get install --assume-yes \ + libssl-dev${CROSS_DEB_ARCH:+:$CROSS_DEB_ARCH} \ + libgtk-3-dev${CROSS_DEB_ARCH:+:$CROSS_DEB_ARCH} \ + libgtk-layer-shell-dev${CROSS_DEB_ARCH:+:$CROSS_DEB_ARCH} \ + libpulse-dev${CROSS_DEB_ARCH:+:$CROSS_DEB_ARCH} \ + libluajit-5.1-dev${CROSS_DEB_ARCH:+:$CROSS_DEB_ARCH} diff --git a/.github/workflows/binary.yml b/.github/workflows/binary.yml new file mode 100644 index 0000000..5205987 --- /dev/null +++ b/.github/workflows/binary.yml @@ -0,0 +1,68 @@ +name: Binary +on: + workflow_run: + workflows: [Deploy] + types: [completed] + release: + types: [created] + workflow_dispatch: + +jobs: + get_last_release: + runs-on: ubuntu-latest + outputs: + latest_release_tag: ${{ steps.latest-release.outputs.LATEST_RELEASE_TAG }} + steps: + - uses: actions/checkout@v4 + - name: Extract the latest release + id: latest-release + run: echo "LATEST_RELEASE_TAG=$(gh release ls --json isLatest,tagName -q '.[] | select(.isLatest == true) | .tagName')" >> $GITHUB_OUTPUT + env: + GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} + + + build: + if: ${{ github.event_name != 'workflow_run' || github.event.workflow_run.conclusion == 'success' }} + name: Build + runs-on: ubuntu-latest + needs: get_last_release + strategy: + fail-fast: false + matrix: + platform: + - {target: x86_64-unknown-linux-gnu, zipext: ".tar.gz"} + - {target: aarch64-unknown-linux-gnu, zipext: ".tar.gz"} + + steps: + - uses: actions/checkout@v4 + with: + ref: ${{ needs.get_last_release.outputs.latest_release_tag }} + + - uses: taiki-e/install-action@v2 + with: + tool: cross + + - name: Add OpenSSL crate (vendored) + run: cargo add openssl --features vendored + + - name: Cross Build Release + run: cross build --locked --release --target=${{ matrix.platform.target }} + + - name: Get name of Binary from metadata + run: echo "BINARY_NAME=$(cargo metadata --no-deps --format-version 1 | jq -r '.packages[].targets[] | select( .kind | map(. == "bin") | any ) | .name')" >> $GITHUB_ENV + + - name: Compress the built binary + if: ${{ matrix.platform.zipext == '.tar.gz' }} + run: tar -zcvf ${{env.BINARY_NAME}}-${{needs.get_last_release.outputs.latest_release_tag}}-${{matrix.platform.target}}.tar.gz -C target/${{matrix.platform.target}}/release ${{env.BINARY_NAME}} + + - name: Upload to release + run: gh release upload ${{needs.get_last_release.outputs.latest_release_tag}} ${{env.BINARY_NAME}}-${{needs.get_last_release.outputs.latest_release_tag}}-${{matrix.platform.target}}${{matrix.platform.zipext}} + env: + GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} + + on-failure: + runs-on: ubuntu-latest + if: ${{ github.event_name == 'workflow_run' && github.event.workflow_run.conclusion == 'failure' }} + steps: + - run: echo 'The triggering workflow Deploy failed' + - run: exit 1 diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index b02903c..8f8b4dd 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -32,9 +32,7 @@ jobs: name: Cache dependencies - name: Install build deps - run: | - sudo apt-get update - sudo apt-get install libgtk-3-dev libgtk-layer-shell-dev libpulse-dev + run: ./.github/scripts/ubuntu_setup.sh - name: Clippy run: cargo clippy --no-default-features --features config+json @@ -53,9 +51,7 @@ jobs: name: Cache dependencies - name: Install build deps - run: | - sudo apt-get update - sudo apt-get install libgtk-3-dev libgtk-layer-shell-dev libpulse-dev + run: ./.github/scripts/ubuntu_setup.sh - name: Clippy run: cargo clippy --all-targets --all-features @@ -72,9 +68,7 @@ jobs: name: Cache dependencies - name: Install build deps - run: | - sudo apt-get update - sudo apt-get install libgtk-3-dev libgtk-layer-shell-dev libpulse-dev + run: ./.github/scripts/ubuntu_setup.sh - name: Build run: cargo build --verbose @@ -82,4 +76,4 @@ jobs: - name: Run tests uses: actions-rs/cargo@v1 with: - command: test \ No newline at end of file + command: test diff --git a/.github/workflows/deploy.yml b/.github/workflows/deploy.yml index 2d6e37b..f8f68a1 100644 --- a/.github/workflows/deploy.yml +++ b/.github/workflows/deploy.yml @@ -18,9 +18,7 @@ jobs: override: true - name: Install build deps - run: | - sudo apt-get update - sudo apt-get install libgtk-3-dev libgtk-layer-shell-dev libpulse-dev + run: ./.github/scripts/ubuntu_setup.sh - name: Update CHANGELOG id: changelog @@ -48,4 +46,4 @@ jobs: - uses: katyo/publish-crates@v1 with: - registry-token: ${{ secrets.CARGO_REGISTRY_TOKEN }} \ No newline at end of file + registry-token: ${{ secrets.CARGO_REGISTRY_TOKEN }} diff --git a/.gitignore b/.gitignore index ea8c4bf..0e71e34 100644 --- a/.gitignore +++ b/.gitignore @@ -1 +1,2 @@ /target +.direnv/ diff --git a/.idea/runConfigurations/Clippy__Strict_.xml b/.idea/runConfigurations/Clippy__Strict_.xml index f84cc2e..9ea2d8f 100644 --- a/.idea/runConfigurations/Clippy__Strict_.xml +++ b/.idea/runConfigurations/Clippy__Strict_.xml @@ -1,15 +1,15 @@ -