vitasdk-sys 0.3.3

Raw bindings to vitasdk
Documentation
name: Build

on:
  push:
    branches:
      - main
  pull_request:

env:
  # If you update LLVM_VERSION, remember to also update `update-bindings.yml`
  # and `README.md`
  LLVM_VERSION: "16"

jobs:
  install-vitasdk:
    uses: ./.github/workflows/setup-vitasdk.yml
    with:
      path: /opt/vitasdk

  build-example:
    name: Build example
    runs-on: ubuntu-latest
    needs: install-vitasdk
    timeout-minutes: 20
    steps:
      - uses: actions/checkout@v4

      - name: Restore vitasdk cache
        uses: actions/cache/restore@v3
        with:
          path: /opt/vitasdk
          key: ${{ runner.os }}-vitasdk
          fail-on-cache-miss: true

      - name: Cache dependencies
        uses: actions/cache@v3
        with:
          path: |
            ~/.cargo/bin/
            ~/.cargo/registry/index/
            ~/.cargo/registry/cache/
            ~/.cargo/git/db/
          key: ${{ runner.os }}-cargo-${{ hashFiles('Cargo.lock') }}

      - name: Install cargo-vita
        continue-on-error: true
        run: |
          cargo install cargo-vita

      - name: Install rust nightly
        uses: actions-rs/toolchain@v1
        with:
          toolchain: nightly
          profile: minimal
          components: rust-src

      - name: Add Vita SDK tools to path
        run: |
          echo "/opt/vitasdk/bin" >> $GITHUB_PATH

      - name: Build example in debug mode
        env:
          VITASDK: /opt/vitasdk
        run: |
          cd examples/std-hello-world
          cargo +nightly vita build vpk

      - name: Build example in release mode
        env:
          VITASDK: /opt/vitasdk
        run: |
          cd examples/std-hello-world
          cargo +nightly vita build vpk --release

      - name: Upload debug build
        uses: actions/upload-artifact@v3
        with:
          name: std-hello-world-debug-build
          path: target/armv7-sony-vita-newlibeabihf/debug/std-hello-world.*
          if-no-files-found: error

      - name: Upload release build
        uses: actions/upload-artifact@v3
        with:
          name: std-hello-world-release-build
          path: target/armv7-sony-vita-newlibeabihf/release/std-hello-world.*
          if-no-files-found: error

  clippy:
    name: Clippy
    runs-on: ubuntu-latest
    needs: install-vitasdk
    timeout-minutes: 10
    steps:
      - uses: actions/checkout@v3

      - name: Restore vitasdk cache
        uses: actions/cache/restore@v4
        with:
          path: /opt/vitasdk
          key: ${{ runner.os }}-vitasdk
          fail-on-cache-miss: true

      - uses: actions-rs/toolchain@v1
        with:
          toolchain: stable
          components: clippy
          profile: minimal
          override: true

      - name: Run clippy
        env:
          VITASDK: /opt/vitasdk
        run: |
          cargo clippy --tests --workspace -- -Dclippy::all -Dwarnings

  rustfmt:
    name: Rustfmt
    runs-on: ubuntu-latest
    timeout-minutes: 10
    steps:
      - uses: actions/checkout@v3

      - uses: actions-rs/toolchain@v1
        with:
          toolchain: stable
          components: rustfmt
          profile: minimal
          override: true

      - name: Run rustfmt
        run: |
          cargo fmt --check --all

  missing-libs:
    name: Check missing libs
    runs-on: ubuntu-latest
    needs: install-vitasdk
    timeout-minutes: 10
    steps:
      - uses: actions/checkout@v3
        with:
          submodules: true

      - name: Restore vitasdk cache
        uses: actions/cache/restore@v3
        with:
          path: /opt/vitasdk
          key: ${{ runner.os }}-vitasdk
          fail-on-cache-miss: true

      - name: Cache LLVM and Clang
        id: cache-llvm
        uses: actions/cache@v3
        with:
          path: |
            ${{ runner.temp }}/llvm
          key: llvm

      - name: Install LLVM and Clang
        uses: KyleMayes/install-llvm-action@v1
        with:
          version: ${{ env.LLVM_VERSION }}
          directory: ${{ runner.temp }}/llvm
          cached: ${{ steps.cache-llvm.outputs.cache-hit }}

      - uses: actions-rs/toolchain@v1
        with:
          toolchain: stable
          profile: minimal
          override: true

      - name: Run build-util
        env:
          VITASDK: /opt/vitasdk
        run: |
          cargo run --profile build-util -p vitasdk-sys-build-util -- stub-libs --missing-libs --fail-if-any

  # Checks if there's no diff when regenerating bindings
  check-bindings:
    name: Check bindings
    runs-on: ubuntu-latest
    needs: install-vitasdk
    timeout-minutes: 10
    steps:
      - uses: actions/checkout@v3
        with:
          submodules: true
      - name: Restore vitasdk cache
        uses: actions/cache/restore@v3
        with:
          path: /opt/vitasdk
          key: ${{ runner.os }}-vitasdk
          fail-on-cache-miss: true

      - name: Cache LLVM and Clang
        id: cache-llvm
        uses: actions/cache@v3
        with:
          path: |
            ${{ runner.temp }}/llvm
          key: llvm

      - name: Install LLVM and Clang
        uses: KyleMayes/install-llvm-action@v1
        with:
          version: ${{ env.LLVM_VERSION }}
          directory: ${{ runner.temp }}/llvm
          cached: ${{ steps.cache-llvm.outputs.cache-hit }}

      - uses: actions-rs/toolchain@v1
        with:
          toolchain: stable
          profile: minimal
          override: true

      - name: Regenerate bindings
        env:
          VITASDK: /opt/vitasdk
          # From clang-sys
          LIBCLANG_PATH: ${{ runner.temp }}/llvm/lib
          LLVM_CONFIG_PATH: ${{ runner.temp }}/llvm/bin/llvm-config
        run: |
          cargo run --profile build-util -p vitasdk-sys-build-util -- bindgen

      - name: Check diff
        run: |
          git add . && git diff --quiet && git diff --cached --quiet

  doc:
    name: Doc
    runs-on: ubuntu-latest
    timeout-minutes: 30
    env:
      RUSTDOCFLAGS: -D warnings
    steps:
      - uses: actions/checkout@v4

      - uses: actions-rs/toolchain@v1
        with:
          toolchain: nightly
          components: rust-docs, rust-src
          profile: minimal
          override: true

      - name: Run cargo doc
        run: DOCS_RS=1 RUSTDOCFLAGS="--cfg docsrs" cargo +nightly doc --all-features --target armv7-sony-vita-newlibeabihf -Z build-std