name: PR Build

on:
  pull_request:
    types: [opened, synchronize, reopened]
  workflow_dispatch:

permissions:
  pull-requests: write
  issues: write
  repository-projects: write

jobs:
  build-ui:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v2
      - uses: actions/setup-node@v2
        with:
          node-version: '18'

      - name: NodeModules Cache
        uses: actions/cache@v2
        with:
          path: '**/node_modules'
          key: node_modules-${{ hashFiles('**/yarn.lock') }}

      - name: UI Install
        run: yarn --cwd ./src/Ombi/ClientApp install

      - name: Build UI
        run: yarn --cwd ./src/Ombi/ClientApp run build

  unit-test:
    runs-on: ubuntu-latest

    steps:
      - uses: actions/checkout@v2
      - uses: actions/setup-dotnet@v1
        with:
          dotnet-version: '6.0.x'

      - name: Nuget Cache
        uses: actions/cache@v2
        with:
          path: ~/.nuget/packages
          key: ${{ runner.os }}-nuget-${{ hashFiles('**/packages.lock.json') }}
          restore-keys: |
            ${{ runner.os }}-nuget

      - name: Run Unit Tests
        run: |
          cd src
          dotnet test --configuration "Release" --logger "trx;LogFileName=test-results.trx"

  analysis:
    runs-on: ubuntu-latest
    steps:
    - uses: actions/checkout@v2
      with:
        # Disabling shallow clone is recommended for improving relevancy of reporting
        fetch-depth: 0
    - name: SonarCloud Scan
      uses: sonarsource/sonarcloud-github-action@master
      with:
        args: >
          -Dsonar.organization=ombi-app
          -Dsonar.projectKey=Ombi-app_Ombi
      env:
        GITHUB_TOKEN:  ${{ secrets.GITHUB_TOKEN }}
        SONAR_TOKEN: ${{ secrets.SONAR_TOKEN }}

  publish:
    runs-on: ubuntu-latest
    needs: [ unit-test ]
    strategy:
      matrix:
        include:
          - os: win10-x64
            format: zip
            compression: zip
          - os: win10-x86
            format: zip
            compression: zip
          - os: linux-x64
            format: tar.gz
            compression: tar
          - os: linux-arm
            format: tar.gz
            compression: tar
          - os: linux-arm64
            compression: tar
            format: tar.gz
          - os: osx-x64
            compression: tar
            format: tar.gz
    steps:
      - uses: actions/checkout@v2
      - uses: actions/setup-dotnet@v1
        with:
          dotnet-version: '6.0.x'

      - name: Nuget Cache
        uses: actions/cache@v2
        with:
          path: ~/.nuget/packages
          key: ${{ runner.os }}-nuget-${{ hashFiles('**/packages.lock.json') }}
          restore-keys: |
            ${{ runner.os }}-nuget

      - name: Publish Backend ${{ matrix.os }}
        run: dotnet publish -c Release -r ${{ matrix.os }} -o "${{ matrix.os }}" --self-contained true -p:PublishSingleFile=true
        working-directory: src/Ombi



