name: Publish Images

on:
  push:
    branches:
      - main

jobs:
  test:
    name: Build and Test
    runs-on: ubuntu-20.04-8core-sl
    concurrency:
      group: ${{ github.workflow }}-main-${{ matrix.images.target }}
      cancel-in-progress: true
    permissions:
      contents: read
      deployments: write
      issues: write
      packages: write
    strategy:
      fail-fast: false
      matrix:
        images:
          - environment: Production-SLIM
            prefix: slim-
            target: slim
          - environment: Production
            prefix: ""
            image-id: standard
    timeout-minutes: 60
    steps:
      - name: Checkout Code
        uses: actions/checkout@v3

      - name: Retrieve Datetime
        run: echo "BUILD_DATE=$(date -u +'%Y-%m-%dT%H:%M:%SZ')" >> "${GITHUB_ENV}"

      - name: Login to Docker Hub
        uses: docker/login-action@v2.1.0
        with:
          username: ${{ secrets.DOCKER_USERNAME }}
          password: ${{ secrets.DOCKER_PASSWORD }}

      - name: Login to GHCR
        uses: docker/login-action@v2.1.0
        with:
          registry: ghcr.io
          username: ${{ github.actor }}
          password: ${{ secrets.GITHUB_TOKEN }}

      - name: Start ${{ matrix.images.environment }} Deployment
        uses: bobheadxi/deployments@v1.3.0
        id: deployment
        with:
          step: start
          token: ${{ secrets.GITHUB_TOKEN }}
          env: ${{ matrix.images.environment }}

      - name: Build and Push Image
        uses: docker/build-push-action@v3
        with:
          context: .
          file: ./Dockerfile
          build-args: |
            BUILD_DATE=${{ env.BUILD_DATE }}
            BUILD_REVISION=${{ github.sha }}
            BUILD_VERSION=${{ github.sha }}
          load: false
          push: true
          secrets: |
            GITHUB_TOKEN=${{ secrets.GITHUB_TOKEN }}
          tags: |
            github/super-linter:${{ matrix.images.prefix }}latest
            ghcr.io/github/super-linter:${{ matrix.images.prefix }}latest
          target: "${{ matrix.images.target }}"

      - name: Update ${{ matrix.images.environment }} Deployment
        uses: bobheadxi/deployments@v1.3.0
        if: always()
        with:
          step: finish
          token: ${{ secrets.GITHUB_TOKEN }}
          status: ${{ job.status }}
          deployment_id: ${{ steps.deployment.outputs.deployment_id }}
          env: ${{ steps.deployment.outputs.env }}
          env_url: https://github.com/github/super-linter

      - name: Create Issue on Failure
        uses: actions/github-script@v6
        if: failure()
        with:
          github-token: ${{secrets.GITHUB_TOKEN}}
          script: |
            const create = await github.rest.issues.create({
              owner: context.repo.owner,
              repo: context.repo.repo,
              title: "Failed to deploy to production",
              body: "Automation has failed us!\nMore information can be found at:\n - ${{ github.server_url }}/${{ github.repository }}/actions/runs/${{ github.run_id }}"
              assignees: [
                "lindluni"
              ]
            })