name: ci

on:
  push:
  workflow_dispatch:

jobs:
  build:
    runs-on: ubuntu-22.04

    steps:
      - name: Checkout code
        uses: actions/checkout@v4
        with:
          submodules: recursive
          fetch-depth: 0

      - name: Load versions from .env.versions
        id: versions
        run: |
          # Source the versions file
          set -a
          source .env.versions
          set +a
          
          echo "node_version=${NODE_VERSION}" >> "$GITHUB_OUTPUT"
          echo "go_version=${GO_VERSION}" >> "$GITHUB_OUTPUT"
          echo "hugo_version=${HUGO_VERSION}" >> "$GITHUB_OUTPUT"
          
          echo "Node: ${NODE_VERSION}"
          echo "Go: ${GO_VERSION}"
          echo "Hugo: ${HUGO_VERSION}"

      - name: Repository meta
        id: repository
        run: |
          registry=${{ github.server_url }}
          registry=${registry##http*://}
          echo "registry=${registry}" >> "$GITHUB_OUTPUT"
          echo "registry=${registry}"
          repository="$(echo "${{ github.repository }}" | tr '[:upper:]' '[:lower:]')"
          echo "repository=${repository}" >> "$GITHUB_OUTPUT"
          echo "repository=${repository}"

      - name: Docker meta
        uses: docker/metadata-action@v5
        id: docker
        with:
          images: ${{ steps.repository.outputs.registry }}/${{ steps.repository.outputs.repository }}
          tags: |
            type=sha,prefix=
            type=ref,event=tag
      -
        name: Login to registry
        uses: docker/login-action@v3
        with:
          registry: ${{ steps.repository.outputs.registry }}
          username: "${{ secrets.PACKAGES_USER }}"
          password: "${{ secrets.PACKAGES_TOKEN }}"
      -
        name: Set up Docker Buildx
        uses: docker/setup-buildx-action@v3
        with:
          buildkitd-flags: '--allow-insecure-entitlement network.host'
          driver-opts: network=host

      - name: Build and push
        uses: docker/build-push-action@v6
        with:
          context: .
          push: true
          allow: network.host
          network: host
          tags: ${{ steps.docker.outputs.tags }}
          labels: ${{ steps.docker.outputs.labels }}
          build-args: |
            NODE_VERSION=${{ steps.versions.outputs.node_version }}
            GO_VERSION=${{ steps.versions.outputs.go_version }}
            HUGO_VERSION=${{ steps.versions.outputs.hugo_version }}
