name: ASF-docker-publish-released

on:
  push:
    tags:
    - '*'

env:
  ASF_PRIVATE_SNK: ${{ secrets.ASF_PRIVATE_SNK }}
  PLATFORMS: linux/amd64,linux/arm,linux/arm64
  TAG: released

permissions:
  packages: write

jobs:
  main:
    runs-on: ubuntu-latest

    steps:
    - name: Checkout code
      uses: actions/checkout@v4.1.1
      with:
        show-progress: false
        submodules: recursive

    - name: Set up Docker Buildx
      uses: docker/setup-buildx-action@v3.3.0

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

    - name: Login to DockerHub
      uses: docker/login-action@v3.1.0
      with:
        username: ${{ secrets.DOCKERHUB_USERNAME }}
        password: ${{ secrets.DOCKERHUB_TOKEN }}

    - name: Prepare private key for signing
      shell: sh
      run: |
        set -eu

        if [ -n "${ASF_PRIVATE_SNK-}" ]; then
            echo "$ASF_PRIVATE_SNK" | base64 -d > "resources/ArchiSteamFarm.snk"
        fi

    - name: Prepare environment outputs
      shell: sh
      run: |
        set -eu

        echo "FIXED_TAG=$(echo ${{ github.ref }} | cut -d '/' -f 3)" >> "$GITHUB_ENV"
        echo "DATE_ISO8601=$(date --iso-8601=seconds --utc)" >> "$GITHUB_ENV"
        echo "GHCR_REPOSITORY=$(echo ${{ github.repository }} | tr '[:upper:]' '[:lower:]')" >> "$GITHUB_ENV"
        echo "DH_REPOSITORY=$(echo ${{ secrets.DOCKERHUB_USERNAME }}/${{ github.event.repository.name }} | tr '[:upper:]' '[:lower:]')" >> "$GITHUB_ENV"

    - name: Build and publish Docker image from Dockerfile
      uses: docker/build-push-action@v5.3.0
      with:
        context: .
        platforms: ${{ env.PLATFORMS }}
        build-args: STEAM_TOKEN_DUMPER_TOKEN=${{ secrets.STEAM_TOKEN_DUMPER_TOKEN }}
        labels: |
          org.opencontainers.image.created=${{ env.DATE_ISO8601 }}
          org.opencontainers.image.version=${{ env.FIXED_TAG }}
          org.opencontainers.image.revision=${{ github.sha }}
        tags: |
          ghcr.io/${{ env.GHCR_REPOSITORY }}:${{ env.TAG }}
          ghcr.io/${{ env.GHCR_REPOSITORY }}:${{ env.FIXED_TAG }}
          ${{ env.DH_REPOSITORY }}:${{ env.TAG }}
          ${{ env.DH_REPOSITORY }}:${{ env.FIXED_TAG }}
        push: true
