name: Rust

on:
  push:
    branches: [ master ]
  pull_request:
    branches: [ master ]
  schedule:
    - cron: '10 6 * * *'

env:
  CARGO_TERM_COLOR: always

jobs:
  build:
    name: Just CI
    runs-on: ubuntu-20.04
    steps:
    - name: Install build tools
      run: sudo apt-get update && sudo apt-get install build-essential libelf-dev zip -y
    - name: Install Miri
      run: |
          rustup toolchain install nightly --component miri
          rustup override set nightly
          cargo miri setup
    - uses: actions/checkout@v3
    - name: Cache
      uses: actions/cache@v3
      with:
        path: |
          ~/.cargo/registry
          ~/.cargo/git
          ~/target
          mgba-test-runner/target
        key: ${{ runner.os }}-cargo-${{ hashFiles('**/Cargo.lock') }}

    - name: install mgba-test-runner
      run: cargo install --path mgba-test-runner --verbose
    - name: Set CARGO_TARGET_DIR
      run: echo "CARGO_TARGET_DIR=$HOME/target" >> $GITHUB_ENV
    - uses: extractions/setup-just@v1
    - name: Setup mdBook
      uses: peaceiris/actions-mdbook@v1
      with:
        mdbook-version: '0.4.13'
    - name: Build and test all crates
      run: just ci
    - name: Upload build artifacts
      uses: actions/upload-artifact@v3
      with:
        name: example-games
        path: ~/target/*.gba