# This workflow _produces_ caches which are used to speed up pull request builds.
# Originally from https://github.com/libp2p/rust-libp2p/blob/master/.github/workflows/cache-factory.yml

name: Cache Factory

on:
  push:
    branches:
      - main
  schedule:
    - cron: "0 0 * * *"
  pull_request:
    paths:
      - ".github/workflows/cache-factory.yaml"
  workflow_dispatch:

# Cancel previous runs of the same workflow on the same branch.
concurrency:
  group: ${{ github.workflow }}-${{ github.ref }}
  cancel-in-progress: true

# From: https://github.com/rust-lang/rust-analyzer/blob/master/.github/workflows/ci.yaml
env:
  CARGO_INCREMENTAL: 0
  CARGO_NET_RETRY: 10
  RUST_BACKTRACE: short
  RUSTUP_MAX_RETRIES: 10

jobs:
  make_cache:
    if: false # Temporarily disabled
    strategy:
      fail-fast: true
      matrix:
        settings:
          - host: macos-15-intel
            target: x86_64-apple-darwin
          - host: macos-14
            target: aarch64-apple-darwin
          - host: windows-latest
            target: x86_64-pc-windows-msvc
          # - host: windows-latest
          #   target: aarch64-pc-windows-msvc
          - host: ubuntu-22.04
            target: x86_64-unknown-linux-gnu
          # - host: ubuntu-22.04
          #   target: x86_64-unknown-linux-musl
          # - host: uubuntu-22.04
          #   target: aarch64-unknown-linux-gnu
          # - host: ubuntu-22.04
          #   target: aarch64-unknown-linux-musl
          # - host: ubuntu-22.04
          #   target: armv7-unknown-linux-gnueabihf
    name: "Make Cache"
    runs-on: ${{ matrix.settings.host }}
    if: github.repository == 'spacedriveapp/spacedrive'
    permissions: {}
    timeout-minutes: 150 # 2.5 hours
    steps:
      - name: Maximize build space
        if: ${{ runner.os == 'Linux' }}
        uses: easimon/maximize-build-space@master
        with:
          swap-size-mb: 4096
          root-reserve-mb: 6144
          remove-dotnet: "true"
          remove-codeql: "true"
          remove-haskell: "true"
          remove-docker-images: "true"

      - name: Checkout repository
        uses: actions/checkout@v4

      - name: Symlink target to C:\
        if: ${{ runner.os == 'Windows' }}
        shell: powershell
        run: |
          New-Item -ItemType Directory -Force -Path C:\spacedrive_target
          New-Item -Path target -ItemType Junction -Value C:\spacedrive_target

      - name: Setup System and Rust
        uses: ./.github/actions/setup-system
        with:
          token: ${{ secrets.GITHUB_TOKEN }}
          target: ${{ matrix.settings.target }}
          save-cache: "true"

      - name: Compile tests (debug)
        run: cargo test --workspace --all-features --no-run --locked --target ${{ matrix.settings.target }}

      - name: Compile tests (release)
        run: cargo test --workspace --all-features --no-run --locked --release --target ${{ matrix.settings.target }}

      # It's faster to `test` before `build` ¯\_(ツ)_/¯
      - name: Compile (debug)
        run: cargo build --quiet --workspace --all-features --target ${{ matrix.settings.target }}

      - name: Compile (release)
        run: cargo build --quiet --workspace --all-features --release --target ${{ matrix.settings.target }}

      - name: Clippy
        if: runner.os == 'Linux'
        run: cargo clippy --workspace --all-features --target ${{ matrix.settings.target }}
