name: Test & release

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

jobs:
  test:
    name: npm test
    runs-on: ubuntu-latest
    timeout-minutes: 10
    strategy:
      matrix:
        node: [16]
    steps:
      - name: ⬇️ Checkout repo
        uses: actions/checkout@v4

      - name: ⎔ Setup node
        uses: actions/setup-node@v4
        with:
          node-version: ${{ matrix.node }}
          cache: "npm"

      - name: 📥 Download deps
        run: npm ci
        env:
          NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }}

      - name: ▶️ Run tests
        run: npm run test

  release:
    name: 🚀 Release
    needs: [test]
    runs-on: ubuntu-latest
    if: ${{ !github.event.fork &&
      contains('refs/heads/master,refs/heads/main', github.ref) && github.event_name == 'push' }}
    steps:
      - name: ⬇️ Checkout repo
        uses: actions/checkout@v4

      - name: ⎔ Setup node
        uses: actions/setup-node@v4
        with:
          node-version-file: .nvmrc
          cache: npm

      - name: 📥 Download deps
        run: npm ci
        env:
          NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }}

      - name: 🏗 Run build script
        run: npm run --if-present build

      - name: 🚀 Release
        uses: tradeshift/actions-semantic-release@v2
        id: semantic-release
        with:
          registry: https://registry.npmjs.com/
          npm_publish: true
        env:
          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
          NODE_AUTH_TOKEN: ${{ secrets.NPM_PUBLISH_TOKEN_PUBLIC }}

  docker:
    needs: [release]
    runs-on: ubuntu-latest
    steps:
      - name: Docker auth
        uses: tradeshift/actions-docker@v1
        with:
          repository: 063399264027.dkr.ecr.eu-west-1.amazonaws.com/tradeshift-base/http-mockserver
          auth-only: true
      - name: get the latest release with tag
        id: latest-release
        run: |
          echo "::set-output name=release::$(curl -s https://api.github.com/repos/Tradeshift/http-mockserver/releases/latest |
            grep '"tag_name":' |
            sed -E 's/.*"([^"]+)".*/\1/')"
      - name: Checkout
        uses: actions/checkout@v4
        with:
          ref: ${{ github.event.pull_request.head.sha }}
      - name: Build and push Docker image
        uses: tradeshift/actions-docker@v1
        with:
          repository: 063399264027.dkr.ecr.eu-west-1.amazonaws.com/tradeshift-base/http-mockserver
          build-args: |
            NPM_TOKEN=${{ secrets.NPM_TOKEN }}
            SOURCE_COMMIT=${{ github.event.pull_request.head.sha }}
          tags: |
            063399264027.dkr.ecr.eu-west-1.amazonaws.com/tradeshift-base/http-mockserver:${{ steps.latest-release.outputs.release }}
