name: release

on:
  workflow_dispatch:
  push:
    tags:
      - v*.*.*

env:
  # Common versions
  GO_VERSION: "1.19"

jobs:
  dockerize-server:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v3
        with:
          fetch-depth: 0

      - name: Use Node
        uses: actions/setup-node@v3
        with:
          node-version: 18.x

      - name: Install Package
        working-directory: server
        run: npm cache clean --force && npm install

      - name: Build Packages
        working-directory: server
        run: npm run build

      - name: Docker meta
        id: meta
        uses: docker/metadata-action@v4
        with:
          images: |
            ghcr.io/${{ github.repository_owner }}/laf-server
            docker.io/${{ secrets.DOCKER_USERNAME }}/laf-server
          # https://github.com/docker/metadata-action#typesemver
          tags: |
            type=semver,pattern={{version}}
            type=sha,enable=true,format=short

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

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

      - name: Login to DockerHub
        uses: docker/login-action@v2
        with:
          username: ${{ secrets.DOCKER_USERNAME }}
          password: ${{ secrets.DOCKER_PASSWORD }}

      - name: Login to Github Container Hub
        uses: docker/login-action@v2
        with:
          registry: ghcr.io
          username: ${{ github.repository_owner }}
          password: ${{ secrets.GITHUB_TOKEN }}

      - name: Build and push
        uses: docker/build-push-action@v3
        with:
          context: ./server
          file: ./server/Dockerfile
          push: true
          tags: ${{ steps.meta.outputs.tags }}
          labels: ${{ steps.meta.outputs.labels }}
          platforms: linux/amd64, linux/arm64

  dockerize-web:
    runs-on: ubuntu-latest

    steps:
      - uses: actions/checkout@v3
        with:
          fetch-depth: 0

      - name: Use Node
        uses: actions/setup-node@v3
        with:
          node-version: 18.x

      - name: Install Package
        working-directory: web
        run: npm cache clean --force && npm install

      - name: Build web
        working-directory: web
        run: npm run build

      - name: Docker meta
        id: meta
        uses: docker/metadata-action@v4
        with:
          images: |
            ghcr.io/${{ github.repository_owner }}/laf-web
            docker.io/${{ secrets.DOCKER_USERNAME }}/laf-web
          # https://github.com/docker/metadata-action#typesemver
          tags: |
            type=semver,pattern={{version}}
            type=sha,enable=true,format=short

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

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

      - name: Login to DockerHub
        uses: docker/login-action@v2
        with:
          username: ${{ secrets.DOCKER_USERNAME }}
          password: ${{ secrets.DOCKER_PASSWORD }}

      - name: Login to Github Container Hub
        uses: docker/login-action@v2
        with:
          registry: ghcr.io
          username: ${{ github.repository_owner }}
          password: ${{ secrets.GITHUB_TOKEN }}

      - name: Build and push
        uses: docker/build-push-action@v3
        with:
          context: ./web
          file: ./web/Dockerfile
          push: true
          tags: ${{ steps.meta.outputs.tags }}
          labels: ${{ steps.meta.outputs.labels }}
          platforms: linux/amd64, linux/arm64

  trigger-workflow-build-cluster-image:
    needs: [dockerize-server, dockerize-web]
    runs-on: ubuntu-latest
    steps:
      - name: Set env
        run: echo "RELEASE_VERSION=${GITHUB_REF#refs/*/}" >> $GITHUB_ENV
      - name: Trigger cluster image workflow
        uses: peter-evans/repository-dispatch@v2
        with:
          event-type: docker_build_success
          client-payload: '{"ref": "${{ github.ref }}", "sha": "${{ github.sha }}", "version": "${{ env.RELEASE_VERSION }}"}'
