name: Prepare container for testing

on:
  workflow_dispatch:

env:
  REGISTRY: ghcr.io
  IMAGE_NAME: ${{ github.repository }}
    
jobs:
  build-push:
    name: Build & push
    runs-on: ubuntu-latest
    permissions:
      contents: read
      packages: write
    steps:
      - name: Setup Node.js
        uses: actions/setup-node@v4
      - name: Get tools latest version
        id: npm_version
        run: |
          echo "qa-version=$(npm show rete-qa version)" >> "$GITHUB_OUTPUT"
          echo "kit-version=$(npm show rete-kit version)" >> "$GITHUB_OUTPUT"
      - name: Log in to the Container registry
        uses: docker/login-action@65b78e6e13532edd9afa3aa52ac7964289d1a9c1
        with:
          registry: ${{ env.REGISTRY }}
          username: ${{ github.actor }}
          password: ${{ secrets.GITHUB_TOKEN }}
      - name: Tag
        id: tag
        run: echo "value=qa-${{ steps.npm_version.outputs.qa-version }}-kit-${{ steps.npm_version.outputs.kit-version }}" >> "$GITHUB_OUTPUT"
      - name: Check if image with tag exists
        id: exists
        uses: tyriis/docker-image-tag-exists@v2.0.1
        with:
          registry: ${{ env.REGISTRY }}
          repository: ${{ env.IMAGE_NAME }}
          tag: ${{ steps.tag.outputs.value }}
      - name: Create Multiline File
        run: |
          cat <<EOL > Dockerfile
          FROM node:18

          RUN npm i -g rete-qa@${{ steps.npm_version.outputs.qa-version }} rete-kit@${{ steps.npm_version.outputs.kit-version }}
          RUN npx playwright install --with-deps
          EOL
      - name: Extract metadata (tags, labels) for Docker
        id: meta
        if: steps.exists.outputs.tag == 'not found'
        uses: docker/metadata-action@9ec57ed1fcdbf14dcef7dfbe97b2010124a938b7
        with:
          images: ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}
          tags: |
            type=raw,value=${{ steps.tag.outputs.value }}
      - name: Build and push Docker image
        if: steps.exists.outputs.tag == 'not found'
        uses: docker/build-push-action@f2a1d5e99d037542a71f64918e516c093c6f3fc4
        with:
          context: .
          push: true
          tags: ${{ steps.meta.outputs.tags }}
          labels: ${{ steps.meta.outputs.labels }}
    
