name: Test

on:
  push:
    branches:
      - main
  pull_request:
    branches:
      - main
      - dev
    paths-ignore:
      - 'webview-src/**'
      - 'webview-dist/**'
      - 'examples/**'

jobs:
  build-and-test:
    runs-on: ${{ matrix.os }}
    strategy:
      fail-fast: false
      matrix:
        os: [ubuntu-latest, macos-latest, windows-latest]

    steps:
    - uses: actions/checkout@v2

    - name: Install stable toolchain
      uses: actions-rs/toolchain@v1
      with:
        toolchain: stable
        override: true
    
    - name: Install gtk on Ubuntu
      if: matrix.os == 'ubuntu-latest'
      run: |
        sudo apt-get update
        sudo apt-get install -y webkit2gtk-4.0
    - name: Get current date
      if: matrix.os == 'ubuntu-latest' || matrix.os == 'macos-latest'
      run: echo "CURRENT_DATE=$(date +'%Y-%m-%d')" >> $GITHUB_ENV

    - name: Get current date
      if: matrix.os == 'windows-latest'
      run: echo "CURRENT_DATE=$(Get-Date -Format "yyyy-MM-dd")" | Out-File -FilePath $env:GITHUB_ENV -Encoding utf8 -Append

    - name: Cache cargo state
      uses: actions/cache@v2
      env:
        cache-name: cargo-state
      with:
        path: |
          ~/.cargo/registry
          ~/.cargo/git
          ~/.cargo/bin
        key: ${{ matrix.os }}-stable-${{ env.cache-name }}-${{ hashFiles('**/Cargo.toml') }}-${{ env.CURRENT_DATE }}
        restore-keys: |
          ${{ matrix.os }}-stable-${{ env.cache-name }}-${{ hashFiles('**/Cargo.toml') }}-
          ${{ matrix.os }}-stable-${{ env.cache-name }}-
          ${{ matrix.os }}-stable-
          ${{ matrix.os }}-

    - name: Cache cargo target
      uses: actions/cache@v2
      env:
          cache-name: cargo-build
      with:
        path: ${{ matrix.project}}/target
        # Add date to the cache to keep it up to date
        key: ${{ matrix.os }}-stable-${{ env.cache-name }}-${{ hashFiles('**/Cargo.toml') }}-${{ env.CURRENT_DATE }}
        # Restore from outdated cache for speed
        restore-keys: |
          ${{ matrix.os }}-stable-${{ env.cache-name }}-${{ hashFiles('**/Cargo.toml') }}
          ${{ matrix.os }}-stable-${{ env.cache-name }}-
          ${{ matrix.os }}-stable-
          ${{ matrix.os }}-

    - name: Run tests 
      uses: actions-rs/cargo@v1
      with:
        command: test
        args: --manifest-path=Cargo.toml --release
