# #
#   @type               github workflow
#   @desc               deploys docker container
#   @author             Aetherinox
#   @url                https://github.com/Aetherinox
# #

name: "⚙️ Deploy › Docker › Main"
run-name: "⚙️ Deploy › Docker › Main"

# #
#   triggers
# #

on:

    # #
    #   Trigger > Workflow Dispatch
    # #

    workflow_dispatch:
        inputs:

            # #
            #   true:     runs all actions, even ones not scheduled
            #   false:    only scheduled tasks will run
            # #

            PRINT_ONLY:
              description:  "📑 Print Debugs Only"
              required:     true
              default:      false
              type:         boolean

    # #
    #   Trigger > Push
    # #

    push:
        tags:
            - '*'

# #
#   environment variables
# #

env:
    BOT_NAME_1:           AdminServ
    BOT_NAME_2:           AdminServX
    BOT_NAME_3:           EuropaServ
    BOT_NAME_DEPENDABOT:  dependabot[bot]

# #
#   jobs
#
#   The way pushed docker containers on Github work, the most recent image built goes at the top.
#   We will use the order below which builds the :latest image last so that it appears at the very
#   top of the packages page.
# #

jobs:

    # #
    #   Job > Docker Release > Github
    # #

    job-docker-release-github-php:
        name: >-
          📦 Release › Github › PHP
        runs-on: ubuntu-latest
        permissions:
            contents: read
            packages: write
            attestations: write
            id-token: write
        steps:

            # #
            #   Release > Github > Start
            # #

            - name: "✅ Start"
              id: task_release_gh_start
              run: |
                echo "Starting Github docker release for image PHP"

            # #
            #   Release > Github > Checkout
            # #

            - name: "☑️ Checkout"
              id: task_release_gh_checkout
              uses: actions/checkout@v4
              with:
                  fetch-depth: 0

            # #
            #   Release > Github > QEMU
            # #

            - name: "⚙️ Set up QEMU"
              id: task_release_gh_qemu
              uses: docker/setup-qemu-action@v3

            # #
            #   Release > Github > Setup BuildX
            # #

            - name: "⚙️ Setup Buildx"
              id: task_release_gh_buildx
              uses: docker/setup-buildx-action@v3
              with:
                  version: latest
                  driver-opts: 'image=moby/buildkit:v0.10.5'

            # #
            #   Release > Github > Registry Login
            # #

            - name: "⚙️ Login to DockerHub"
              id: task_release_gh_registry
              if: github.event_name != 'pull_request'
              uses: docker/login-action@v3
              with:
                  registry: ghcr.io
                  username: ${{ github.actor }}
                  password: ${{ secrets.SELF_TOKEN_CL }}

            # #
            #   Release > Github > Meta
            # #

            - name: "🔨 Docker meta"
              id: task_release_gh_meta
              uses: docker/metadata-action@v5
              with:
                  images: |
                      ghcr.io/Aetherinox/thetvapp-docker
                  tags: |
                      type=ref,enable=true,priority=600,prefix=,suffix=-php,event=tag
                  flavor: |
                      latest=false

            # #
            #   Release > Github > Debug
            # #

            - name: "🪪 Debug › Print"
              id: task_release_gh_print
              run: |
                echo "registry ............. Github"
                echo "github.actor.......... ${{ github.actor }}"
                echo "github.ref ........... ${{ github.ref }}"
                echo "github.event_name .... ${{ github.event_name }}"
                echo "tags ................. ${{ steps.task_release_gh_meta.outputs.tags }}"
                echo "labels ............... ${{ steps.task_release_gh_meta.outputs.labels }}"

            # #
            #   Release > Github > Build and Push
            # #

            - name: "📦 Build and push"
              id: task_release_gh_push
              uses: docker/build-push-action@v6
              if: ( github.event_name == 'workflow_dispatch' && inputs.PRINT_ONLY == 'false' ) || ( github.event_name == 'push' )
              with:
                  context: .
                  file: Dockerfile-php.template
                  platforms: linux/amd64
                  push: ${{ github.event_name != 'pull_request' }}
                  tags: ${{ steps.task_release_gh_meta.outputs.tags }}
                  labels: ${{ steps.task_release_gh_meta.outputs.labels }}

    # #
    #   Job > Docker Release > Github
    # #

    job-docker-release-dockerhub-php:
        name: >-
          📦 Release › Dockerhub › PHP
        runs-on: ubuntu-latest
        permissions:
            contents: read
            packages: write
            attestations: write
            id-token: write
        steps:

            # #
            #   Release > Dockerhub > Start
            # #

            - name: "✅ Start"
              id: task_release_dh_start
              run: |
                echo "Starting Github docker release"

            # #
            #   Release > Dockerhub > Checkout
            # #

            - name: "☑️ Checkout"
              id: task_release_dh_checkout
              uses: actions/checkout@v4
              with:
                  fetch-depth: 0

            # #
            #   Release > Dockerhub > QEMU
            # #

            - name: "⚙️ Set up QEMU"
              id: task_release_dh_qemu
              uses: docker/setup-qemu-action@v3

            # #
            #   Release > Dockerhub > Setup BuildX
            # #

            - name: "⚙️ Setup Buildx"
              id: task_release_dh_buildx
              uses: docker/setup-buildx-action@v3
              with:
                  version: latest
                  driver-opts: 'image=moby/buildkit:v0.10.5'

            # #
            #   Release > Dockerhub > Registry Login
            # #

            - name: "⚙️ Login to DockerHub"
              id: task_release_dh_registry
              if: github.event_name != 'pull_request'
              uses: docker/login-action@v3
              with:
                  username: aetherinox
                  password: ${{ secrets.SELF_DOCKERHUB_TOKEN }}

            # #
            #   Release > Dockerhub > Meta
            # #

            - name: "🔨 Docker meta"
              id: task_release_dh_meta
              uses: docker/metadata-action@v5
              with:
                  images: |
                      aetherinox/thetvapp
                  tags: |
                      type=raw,value=latest,enable=false
                      type=ref,enable=true,priority=600,prefix=,suffix=-php,event=tag
                  flavor: |
                      latest=false

            # #
            #   Release > Dockerhub > Debug
            # #

            - name: "🪪 Debug › Print"
              id: task_release_dh_print
              run: |
                  echo "registry ............. Dockerhub"
                  echo "github.actor.......... ${{ github.actor }}"
                  echo "github.ref ........... ${{ github.ref }}"
                  echo "github.event_name .... ${{ github.event_name }}"
                  echo "tags ................. ${{ steps.task_release_dh_meta.outputs.tags }}"
                  echo "labels ............... ${{ steps.task_release_dh_meta.outputs.labels }}"

            # #
            #   Release > Dockerhub > Build and Push
            # #

            - name: "📦 Build and push"
              id: task_release_dh_push
              uses: docker/build-push-action@v6
              if: ( github.event_name == 'workflow_dispatch' && inputs.PRINT_ONLY == 'false' ) || ( github.event_name == 'push' )
              with:
                  context: .
                  file: Dockerfile-php.template
                  platforms: linux/amd64
                  push: ${{ github.event_name != 'pull_request' }}
                  tags: ${{ steps.task_release_dh_meta.outputs.tags }}
                  labels: ${{ steps.task_release_dh_meta.outputs.labels }}

    # #
    #   Job > Docker Release > Github
    # #

    job-docker-release-github-main:
        name: >-
          📦 Release › Github › Main
        runs-on: ubuntu-latest
        permissions:
            contents: read
            packages: write
            attestations: write
            id-token: write
        needs: [ job-docker-release-github-php, job-docker-release-dockerhub-php ]
        steps:

            # #
            #   Release > Github > Start
            # #

            - name: "✅ Start"
              id: task_release_gh_start
              run: |
                echo "Starting Github docker release"

            # #
            #   Release > Github > Checkout
            # #

            - name: "☑️ Checkout"
              id: task_release_gh_checkout
              uses: actions/checkout@v4
              with:
                  fetch-depth: 0

            # #
            #   Release > Github > QEMU
            # #

            - name: "⚙️ Set up QEMU"
              id: task_release_gh_qemu
              uses: docker/setup-qemu-action@v3

            # #
            #   Release > Github > Setup BuildX
            # #

            - name: "⚙️ Setup Buildx"
              id: task_release_gh_buildx
              uses: docker/setup-buildx-action@v3
              with:
                  version: latest
                  driver-opts: 'image=moby/buildkit:v0.10.5'

            # #
            #   Release > Github > Registry Login
            # #

            - name: "⚙️ Login to DockerHub"
              id: task_release_gh_registry
              if: github.event_name != 'pull_request'
              uses: docker/login-action@v3
              with:
                  registry: ghcr.io
                  username: ${{ github.actor }}
                  password: ${{ secrets.SELF_TOKEN_CL }}

            # #
            #   Release > Github > Meta
            # #

            - name: "🔨 Docker meta"
              id: task_release_gh_meta
              uses: docker/metadata-action@v5
              with:
                  images: |
                      ghcr.io/Aetherinox/thetvapp-docker
                  tags: |
                      type=raw,value=latest,enable=${{ endsWith(github.ref, 'main') }}
                      type=ref,event=tag

            # #
            #   Release > Github > Debug
            # #

            - name: "🪪 Debug › Print"
              id: task_release_gh_print
              run: |
                  echo "registry ............. Github"
                  echo "github.actor.......... ${{ github.actor }}"
                  echo "github.ref ........... ${{ github.ref }}"
                  echo "github.event_name .... ${{ github.event_name }}"
                  echo "tags ................. ${{ steps.task_release_gh_meta.outputs.tags }}"
                  echo "labels ............... ${{ steps.task_release_gh_meta.outputs.labels }}"

            # #
            #   Release > Github > Build and Push
            # #

            - name: "📦 Build and push"
              id: task_release_gh_push
              uses: docker/build-push-action@v6
              if: ( github.event_name == 'workflow_dispatch' && inputs.PRINT_ONLY == 'false' ) || ( github.event_name == 'push' )
              with:
                  context: .
                  file: Dockerfile
                  platforms: linux/amd64
                  push: ${{ github.event_name != 'pull_request' }}
                  tags: ${{ steps.task_release_gh_meta.outputs.tags }}
                  labels: ${{ steps.task_release_gh_meta.outputs.labels }}

    # #
    #   Job > Docker Release > Github
    # #

    job-docker-release-dockerhub-main:
        name: >-
          📦 Release › Dockerhub › Main
        runs-on: ubuntu-latest
        permissions:
            contents: read
            packages: write
            attestations: write
            id-token: write
        needs: [ job-docker-release-github-php, job-docker-release-dockerhub-php ]
        steps:

            # #
            #   Release > Dockerhub > Start
            # #

            - name: "✅ Start"
              id: task_release_dh_start
              run: |
                echo "Starting Github docker release"

            # #
            #   Release > Dockerhub > Checkout
            # #

            - name: "☑️ Checkout"
              id: task_release_dh_checkout
              uses: actions/checkout@v4
              with:
                  fetch-depth: 0

            # #
            #   Release > Dockerhub > QEMU
            # #

            - name: "⚙️ Set up QEMU"
              id: task_release_dh_qemu
              uses: docker/setup-qemu-action@v3

            # #
            #   Release > Dockerhub > Setup BuildX
            # #

            - name: "⚙️ Setup Buildx"
              id: task_release_dh_buildx
              uses: docker/setup-buildx-action@v3
              with:
                  version: latest
                  driver-opts: 'image=moby/buildkit:v0.10.5'

            # #
            #   Release > Dockerhub > Registry Login
            # #

            - name: "⚙️ Login to DockerHub"
              id: task_release_dh_registry
              if: github.event_name != 'pull_request'
              uses: docker/login-action@v3
              with:
                  username: aetherinox
                  password: ${{ secrets.SELF_DOCKERHUB_TOKEN }}

            # #
            #   Release > Dockerhub > Meta
            # #

            - name: "🔨 Docker meta"
              id: task_release_dh_meta
              uses: docker/metadata-action@v5
              with:
                  images: |
                      aetherinox/thetvapp
                  tags: |
                      type=raw,value=latest,enable=${{ endsWith(github.ref, 'main') }}
                      type=ref,event=tag

            # #
            #   Release > Dockerhub > Debug
            # #

            - name: "🪪 Debug › Print"
              id: task_release_dh_print
              run: |
                  echo "registry ............. Dockerhub"
                  echo "github.actor.......... ${{ github.actor }}"
                  echo "github.ref ........... ${{ github.ref }}"
                  echo "github.event_name .... ${{ github.event_name }}"
                  echo "tags ................. ${{ steps.task_release_dh_meta.outputs.tags }}"
                  echo "labels ............... ${{ steps.task_release_dh_meta.outputs.labels }}"

            # #
            #   Release > Dockerhub > Build and Push
            # #

            - name: "📦 Build and push"
              id: task_release_dh_push
              uses: docker/build-push-action@v6
              if: ( github.event_name == 'workflow_dispatch' && inputs.PRINT_ONLY == 'false' ) || ( github.event_name == 'push' )
              with:
                  context: .
                  file: Dockerfile
                  platforms: linux/amd64
                  push: ${{ github.event_name != 'pull_request' }}
                  tags: ${{ steps.task_release_dh_meta.outputs.tags }}
                  labels: ${{ steps.task_release_dh_meta.outputs.labels }}
