name: rust-toy-app on: pull_request: types: [opened, synchronize, reopened] workflow_dispatch: jobs: build-release: permissions: contents: read strategy: fail-fast: false matrix: include: - runner: ubuntu-latest target: x86_64-unknown-linux-gnu - runner: ubuntu-latest target: aarch64-unknown-linux-gnu - runner: ubuntu-latest target: x86_64-unknown-illumos - runner: macos-latest target: x86_64-apple-darwin - runner: macos-latest target: aarch64-apple-darwin - runner: ubuntu-latest target: x86_64-unknown-freebsd # - runner: ubuntu-latest # target: aarch64-unknown-freebsd # TODO: re-introduce when implemented # - runner: ubuntu-latest # target: x86_64-unknown-openbsd # TODO: re-introduce when implemented # - runner: ubuntu-latest # target: aarch64-unknown-openbsd # TODO: re-introduce when implemented - runner: windows-latest target: x86_64-pc-windows-gnullvm - runner: windows-latest target: aarch64-pc-windows-gnullvm runs-on: ${{ matrix.runner }} steps: - name: Checkout repository uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 - name: Setup uv # v6.4.3 uses: astral-sh/setup-uv@b75a909f75acd358c2196fb9a5f1299a9a8868a4 with: python-version: '3.13' - name: Extract crate version id: crate-version shell: bash working-directory: rust-toy-app run: | set -euo pipefail version=$( \ uv run --python 3.13 python -c "from pathlib import Path; import tomllib; print(tomllib.loads(Path('Cargo.toml').read_text(encoding='utf-8'))['package']['version'])" \ ) echo "version=${version}" >> "$GITHUB_OUTPUT" - name: Build uses: ./.github/actions/rust-build-release with: target: ${{ matrix.target }} project-dir: rust-toy-app - name: Verify artifacts id: verify-artifacts run: | set -euo pipefail bin=rust-toy-app if [[ "${{ matrix.target }}" == *windows* ]]; then bin=rust-toy-app.exe fi binary_path="target/${{ matrix.target }}/release/$bin" echo "Verifying binary at: $binary_path" test -f "$binary_path" shopt -s nullglob manpages=(target/${{ matrix.target }}/release/build/rust-toy-app-*/out/rust-toy-app.1) (( "${#manpages[@]}" > 0 )) echo "binary=rust-toy-app/$binary_path" >> "$GITHUB_OUTPUT" echo "binary-relative=${binary_path}" >> "$GITHUB_OUTPUT" echo "manpage=rust-toy-app/${manpages[0]}" >> "$GITHUB_OUTPUT" echo "manpage-relative=${manpages[0]}" >> "$GITHUB_OUTPUT" working-directory: rust-toy-app shell: bash - name: Package Linux artifacts if: contains(matrix.target, 'unknown-linux-') uses: ./.github/actions/linux-packages with: project-dir: rust-toy-app bin-name: rust-toy-app package-name: rust-toy-app target: ${{ matrix.target }} version: ${{ steps.crate-version.outputs.version }} man-paths: ${{ steps.verify-artifacts.outputs.manpage-relative }} - name: Validate Linux packages if: contains(matrix.target, 'unknown-linux-') uses: ./.github/actions/validate-linux-packages env: POLYTHENE_ISOLATION: bubblewrap with: project-dir: rust-toy-app package-name: rust-toy-app bin-name: rust-toy-app target: ${{ matrix.target }} version: ${{ steps.crate-version.outputs.version }} formats: deb expected-paths: | /usr/bin/rust-toy-app /usr/share/man/man1/rust-toy-app.1.gz polythene-store: ${{ runner.temp }}/polythene-store - name: Package macOS installer if: contains(matrix.target, 'apple-darwin') id: package-macos uses: ./.github/actions/macos-package with: name: rust-toy-app identifier: dev.sharedactions.rust-toy-app binary: ${{ steps.verify-artifacts.outputs.binary }} manpage: ${{ steps.verify-artifacts.outputs.manpage }} license-file: rust-toy-app/LICENSE version: ${{ steps.crate-version.outputs.version }}