name: Release Image

on:
  push:
    tags:
      - "[0-9]*"

concurrency:
  group: ${{ github.workflow }}-${{ github.ref }}
  cancel-in-progress: true

jobs:
  build_and_push_image:
    name: build image and push to Docker Hub
    if: github.repository_owner == 'neodb-social'
    runs-on: ubuntu-latest
    steps:
      - name: Check out the repo
        uses: actions/checkout@v4
        with:
          submodules: 'true'

      - name: Check git version
        id: version
        run: |
          echo "neodb=$(git rev-parse --short HEAD)" >> $GITHUB_OUTPUT
          cd neodb-takahe
          echo "takahe=$(git rev-parse --short HEAD)" >> $GITHUB_OUTPUT

      - name: Overwrite version in code
        env:
          REF_NAME: ${{ github.ref_name }}
        run: |
          echo '__version__ = "'$REF_NAME'"' > boofilsic/__init__.py
          echo '__version__ = "'$REF_NAME'"' > neodb-takahe/takahe/neodb.py

      - uses: svenstaro/upload-release-action@v2
        with:
          repo_token: ${{ secrets.GITHUB_TOKEN }}
          file: compose.yml
          tag: ${{ github.ref }}

      - uses: svenstaro/upload-release-action@v2
        with:
          repo_token: ${{ secrets.GITHUB_TOKEN }}
          file: neodb.env.example
          tag: ${{ github.ref }}

      - name: snapshot code
        run: zip -r /tmp/neodb-source-${{ github.ref_name }}.zip . -x '.git'

      - uses: svenstaro/upload-release-action@v2
        with:
          repo_token: ${{ secrets.GITHUB_TOKEN }}
          file: /tmp/neodb-source-${{ github.ref_name }}.zip
          tag: ${{ github.ref }}

      - name: Send Discord notification
        uses: appleboy/discord-action@master
        with:
          webhook_id: ${{ secrets.DISCORD_WEBHOOK_ID }}
          webhook_token: ${{ secrets.DISCORD_WEBHOOK_TOKEN }}
          color: "#1857a4"
          message: Building release image ${{ github.ref_name }}-${{ steps.version.outputs.neodb }}-${{ steps.version.outputs.takahe }}

      - name: Set up QEMU
        uses: docker/setup-qemu-action@v2

      - name: Set up Docker Buildx
        uses: docker/setup-buildx-action@v2

      - name: Docker metadata
        id: meta
        uses: docker/metadata-action@v4
        with:
          images: neodb/neodb
          tags: |
            type=raw,value=latest
            type=pep440,pattern={{version}}
            type=pep440,pattern={{major}}.{{minor}}
            # type=raw,value=${{ steps.version.outputs.version }}-${{ steps.version.outputs.neodb }}-${{ steps.version.outputs.takahe }}

      - name: Login to DockerHub
        if: github.event_name != 'pull_request'
        uses: docker/login-action@v2
        with:
          username: ${{ secrets.DOCKERHUB_USERNAME }}
          password: ${{ secrets.DOCKERHUB_TOKEN }}

      - name: Build and push
        uses: docker/build-push-action@v4
        with:
          context: .
          platforms: "linux/amd64,linux/arm64"
          push: ${{ github.event_name != 'pull_request' }}
          tags: ${{ steps.meta.outputs.tags }}
          labels: ${{ steps.meta.outputs.labels }}

      - name: Send Discord notification complete
        uses: appleboy/discord-action@master
        with:
          webhook_id: ${{ secrets.DISCORD_WEBHOOK_ID }}
          webhook_token: ${{ secrets.DISCORD_WEBHOOK_TOKEN }}
          color: "#1857a4"
          message: Published release image ${{ github.ref_name }}-${{ steps.version.outputs.neodb }}-${{ steps.version.outputs.takahe }}
