name: CI

on:
  push:
    branches:
    - main
  pull_request:
    branches: 
    - main

jobs:
  build-core:
    runs-on: ubuntu-latest
    steps:
    - name: Checkout Source Code
      uses: actions/checkout@v2
    - name: Update pkg-config database
      run: sudo ldconfig
    - name: Setup Docker Buildx
      id: buildx
      uses: docker/setup-buildx-action@v2
    - name: Cache build
      id: cache-build
      uses: actions/cache@v2
      with:
        path: build-cache-st
        key: build-cache-st-v1-${{ hashFiles('Dockerfile', 'Makefile', 'build/*') }}
        restore-keys: |
          build-cache-st-v1-
    - name: Build ffmpeg-core
      run: make prd EXTRA_ARGS="--cache-from=type=local,src=build-cache-st --cache-to=type=local,dest=build-cache-st,mode=max"
    - name: Upload core
      uses: actions/upload-artifact@v2
      with:
        name: ffmpeg-core
        path: packages/core/dist/*
  build-core-mt:
    runs-on: ubuntu-latest
    steps:
    - name: Checkout Source Code
      uses: actions/checkout@v2
    - name: Setup Docker Buildx
      id: buildx
      uses: docker/setup-buildx-action@v2
    - name: Cache build
      id: cache-build
      uses: actions/cache@v2
      with:
        path: build-cache-mt
        key: build-cache-mt-v1-${{ hashFiles('Dockerfile', 'Makefile', 'build/*') }}
        restore-keys: |
          build-cache-v1-
    - name: Build ffmpet-core-mt
      run: make prd-mt EXTRA_ARGS="--cache-from=type=local,src=build-cache-mt --cache-to=type=local,dest=build-cache-mt,mode=max"
    - name: Upload core-mt
      uses: actions/upload-artifact@v2
      with:
        name: ffmpeg-core-mt
        path: packages/core-mt/dist/*
  tests:
    runs-on: ubuntu-latest
    needs:
      - build-core
      - build-core-mt
    steps:
    - name: Checkout Source Code
      uses: actions/checkout@v2
    - name: Download ffmpeg-core
      uses: actions/download-artifact@v2
      with:
        name: ffmpeg-core
        path: packages/core/dist
    - name: Download ffmpeg-core-mt
      uses: actions/download-artifact@v2
      with:
        name: ffmpeg-core-mt
        path: packages/core-mt/dist
    - name: Use Node.js 18
      uses: actions/setup-node@v2
      with:
        node-version: 18.x
    - name: Cache dependencies
      id: cache-dependencies
      uses: actions/cache@v2
      with:
        path: node_modules
        key: node-modules-${{ hashFiles('package-lock.json') }}
        restore-keys: |
          node-modules-
    - name: Install dependencies
      run: npm install
    - name: Run tests
      run: npm test