name: ci

on: [push]

jobs:
  build:

    runs-on: ubuntu-latest
    strategy:
      fail-fast: false
      matrix:
        dotnet-version: [ '6.0.x' ]

    steps:
      - uses: actions/checkout@v2
      - name: Setup .NET Core SDK ${{ matrix.dotnet-version }}
        uses: actions/setup-dotnet@v1.7.2
        with:
          dotnet-version: ${{ matrix.dotnet-version }}
      - name: Install Dependencies
        run: dotnet restore
      - name: Build
        run: dotnet build --configuration Release --no-restore
      - name: Test
        run: dotnet test --no-restore --verbosity normal

  build-Docker:

    runs-on: ubuntu-latest
    needs: [build, build-Js] # for ignoring bad builds
    if: github.event_name == 'push' && github.ref == 'refs/heads/master'

    steps:
      - uses: actions/checkout@v2

      - name: Set up Docker Buildx
        uses: docker/setup-buildx-action@v1

      - name: Login to DockerHub
        uses: docker/login-action@v1
        with:
          username: ${{ secrets.DOCKERHUB_USERNAME }}
          password: ${{ secrets.DOCKERHUB_TOKEN }}

      - name: Build CLI Container
        uses: docker/build-push-action@v2
        with:
          push: true
          tags: sarsoo/selector-cli:latest
          file: Dockerfile.CLI

      - name: Build Web Container
        uses: docker/build-push-action@v2
        with:
          push: true
          tags: sarsoo/selector-web:latest
          file: Dockerfile.Web

  build-Js:

    runs-on: ubuntu-latest
    strategy:
      fail-fast: false
      matrix:
        node: [16]
    
    steps:
      - uses: actions/checkout@v2
      
      - name: Install Node ${{ matrix.node }}
        uses: actions/setup-node@v2
        with:
          node-version: ${{ matrix.node }}

      - name: Install Node Packages
        working-directory: ./Selector.Web
        run: npm ci
      
      - name: Compile Front-end
        working-directory: ./Selector.Web
        run: npm run build --if-present