name: Release (Production)

on:
  workflow_dispatch: {}
  release:
    types:
      - created
    tags:
      - 'v[0-9]+.[0-9]+.[0-9]+'
      - '**/v[0-9]+.[0-9]+.[0-9]+'

jobs:
  lint:
    name: Lint
    runs-on: ubuntu-latest
    steps:
      - name: Checkout
        uses: actions/checkout@v4
        with:
          fetch-depth: 0
      - name: Set up Go
        uses: actions/setup-go@v4
        with:
          go-version: 1.18.x
      - uses: dominikh/staticcheck-action@ba605356b4b29a60e87ab9404b712f3461e566dc #v1.3.0
        with:
          version: "2022.1.1"
          install-go: "false" # StaticCheck uses go v1.17 which does not support `any`

  test:
    name: Test
    strategy:
      matrix:
        go-version:
          - 1.18.x
        platform:
          - ubuntu-latest
          - macos-latest
          - windows-latest
    runs-on: ${{ matrix.platform }}
    steps:
      - name: Checkout
        uses: actions/checkout@v4
        with:
          fetch-depth: 0
      - name: Set up Go
        uses: actions/setup-go@v4
        with:
          go-version: 1.18.x
      - name: Run tests
        run: |
          go test ./... -coverprofile coverage.out

  build:
    name: Build
    runs-on: ubuntu-latest
    needs: 
      - test
      - lint
    env:
      CGO_ENABLED: 0
      TAG: ${{ github.event.release.tag_name }}
    steps:
      - name: Checkout
        uses: actions/checkout@v4
        with:
          fetch-depth: 0
      - name: Set up Go
        uses: actions/setup-go@v4
        with:
          go-version: 1.18.x
      - name: Login to Docker Hub
        uses: docker/login-action@465a07811f14bebb1938fbed4728c6a1ff8901fc #v2
        with:
          username: ${{ secrets.DOCKERHUB_USERNAME }}
          password: ${{ secrets.DOCKERHUB_TOKEN }}
      - name: Login to GHCR
        uses: docker/login-action@465a07811f14bebb1938fbed4728c6a1ff8901fc #v2
        with:
          username: ${{ secrets.BOT_USERNAME }}
          password: ${{ secrets.BOT_GHCR_PAT }}
          registry: ghcr.io
      - name: Build
        uses: goreleaser/goreleaser-action@7ec5c2b0c6cdda6e8bbb49444bc797dd33d74dd8 #v3
        with:
          version: v0.155.0
          args: --debug
        env:
          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
      - name: Enable experimental docker features
        run: |
          mkdir -p ~/.docker/ && \
          echo '{"experimental": "enabled"}' > ~/.docker/config.json
      - name: Create manifest for version
        run: |
          export DH_TAG=$(echo $TAG | sed 's/^v*//')
          docker manifest create \
            containrrr/watchtower:$DH_TAG \
            containrrr/watchtower:amd64-$DH_TAG \
            containrrr/watchtower:i386-$DH_TAG \
            containrrr/watchtower:armhf-$DH_TAG \
            containrrr/watchtower:arm64v8-$DH_TAG
          docker manifest create \
            ghcr.io/containrrr/watchtower:$DH_TAG \
            ghcr.io/containrrr/watchtower:amd64-$DH_TAG \
            ghcr.io/containrrr/watchtower:i386-$DH_TAG \
            ghcr.io/containrrr/watchtower:armhf-$DH_TAG \
            ghcr.io/containrrr/watchtower:arm64v8-$DH_TAG
      - name: Annotate manifest for version
        run: |
          for REPO in '' ghcr.io/ ; do
          
          docker manifest annotate \
            ${REPO}containrrr/watchtower:$(echo $TAG | sed 's/^v*//') \
            ${REPO}containrrr/watchtower:i386-$(echo $TAG | sed 's/^v*//') \
            --os linux \
            --arch 386
          
          docker manifest annotate \
            ${REPO}containrrr/watchtower:$(echo $TAG | sed 's/^v*//') \
            ${REPO}containrrr/watchtower:armhf-$(echo $TAG | sed 's/^v*//') \
            --os linux \
            --arch arm
      
          docker manifest annotate \
            ${REPO}containrrr/watchtower:$(echo $TAG | sed 's/^v*//') \
            ${REPO}containrrr/watchtower:arm64v8-$(echo $TAG | sed 's/^v*//') \
            --os linux \
            --arch arm64 \
            --variant v8
            
            done
      - name: Create manifest for latest
        run: |
          docker manifest create \
            containrrr/watchtower:latest \
            containrrr/watchtower:amd64-latest \
            containrrr/watchtower:i386-latest \
            containrrr/watchtower:armhf-latest \
            containrrr/watchtower:arm64v8-latest
          docker manifest create \
            ghcr.io/containrrr/watchtower:latest \
            ghcr.io/containrrr/watchtower:amd64-latest \
            ghcr.io/containrrr/watchtower:i386-latest \
            ghcr.io/containrrr/watchtower:armhf-latest \
            ghcr.io/containrrr/watchtower:arm64v8-latest
      - name: Annotate manifest for latest
        run: |
          for REPO in '' ghcr.io/ ; do

          docker manifest annotate \
            ${REPO}containrrr/watchtower:latest \
            ${REPO}containrrr/watchtower:i386-latest \
            --os linux \
            --arch 386
      
          docker manifest annotate \
            ${REPO}containrrr/watchtower:latest \
            ${REPO}containrrr/watchtower:armhf-latest \
            --os linux \
            --arch arm
            
          docker manifest annotate \
            ${REPO}containrrr/watchtower:latest \
            ${REPO}containrrr/watchtower:arm64v8-latest \
            --os linux \
            --arch arm64 \
            --variant v8

          done
      - name: Push manifests to Dockerhub
        env:
          DOCKER_USER: ${{ secrets.DOCKERHUB_USERNAME }}
          DOCKER_TOKEN: ${{ secrets.DOCKERHUB_TOKEN }}
        run: |
          docker login -u $DOCKER_USER -p $DOCKER_TOKEN && \
            docker manifest push containrrr/watchtower:$(echo $TAG | sed 's/^v*//') && \
            docker manifest push containrrr/watchtower:latest
      - name: Push manifests to GitHub Container Registry
        env:
          DOCKER_USER: ${{ secrets.BOT_USERNAME }}
          DOCKER_TOKEN: ${{ secrets.BOT_GHCR_PAT }}
        run: |
          docker login -u $DOCKER_USER -p $DOCKER_TOKEN ghcr.io && \
            docker manifest push ghcr.io/containrrr/watchtower:$(echo $TAG | sed 's/^v*//') && \
            docker manifest push ghcr.io/containrrr/watchtower:latest

  renew-docs:
    name: Refresh pkg.go.dev
    needs: build
    runs-on: ubuntu-latest
    steps:
    - name: Pull new module version
      uses: andrewslotin/go-proxy-pull-action@50fea06a976087614babb9508e5c528b464f4645 #master@2022-10-14

  
  

  
