name: Create Artifacts

on:
  workflow_dispatch:
  push:
    branches: [ fix ]

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

      - 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

      - name: Publish UI Artifacts
        uses: actions/upload-artifact@v2
        with:
          name: angular_dist
          path: |
            ./src/Ombi/ClientApp/dist

  unit-test:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v2
      - uses: actions/setup-dotnet@v1
        with:
          dotnet-version: '5.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 -c NonUiBuild --logger trx --results-directory "TestResults"

  publish:
    runs-on: ubuntu-latest
    needs: [ build-ui ]
    strategy:
      matrix:
        include:
          - os: win10-x64
            format: zip
            compression: zip
    steps:
      - uses: actions/checkout@v2

      - 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

      - name: Download Angular
        uses: actions/download-artifact@v2
        with:
          name: angular_dist
          path: ~/src/Ombi/dist

      - name: Copy Dist to Artifacts
        run: |
          cd ${{ matrix.os }}
          sudo mkdir -p ClientApp/dist
          echo "mkdir /ClientApp"
          echo "list os (ClientApp should be here)"
          ls
          cd ..
          echo "Copy dist to /ClientApp"
          sudo mv ~/src/Ombi/dist/* ${{ matrix.os }}/ClientApp/dist
        working-directory: src/Ombi

      - name: Archive Release
        uses: thedoctor0/zip-release@master
        with:
          type: '${{ matrix.compression }}'
          filename: '../${{ matrix.os }}.${{ matrix.format }}'
          path: '.'
          directory: 'src/Ombi/${{ matrix.os }}'

      - name: Publish Release
        uses: actions/upload-artifact@v2
        with:
          name: ${{ matrix.os }}
          path: |
            ./src/Ombi/${{ matrix.os }}.${{ matrix.format }}
