name: Build micro-service Manual

on:
  workflow_dispatch:
    inputs:
      microService:
        description: "Name of the micro-service image to build"
        type: choice
        options:
          - "join-service"
          - "kmsserver"
          - "verification-service"
          - "qemu-metadata-api"
          - "filebeat-debugd"
          - "logstash-debugd"
        required: true
        default: "join-service"
      imageTag:
        description: "Container image tag"
        required: true
        default: "manual-build"
      version:
        description: "Version of the image to build"
        required: true
        default: "0.0.0"

jobs:
  build-micro-service:
    runs-on: ubuntu-22.04
    permissions:
      contents: read
      packages: write
    steps:
      - name: Check out repository
        id: checkout
        uses: actions/checkout@755da8c3cf115ac066823e79a1e1788f8940201b # v3.2.0
        with:
          ref: ${{ !github.event.pull_request.head.repo.fork && github.head_ref || '' }}

      - name: Setup Go environment
        uses: actions/setup-go@6edd4406fa81c3da01a34fa6f6343087c207a568 # v3.5.0
        with:
          go-version: "1.19.4"

      # choose the correct Dockerfile depending on what micro-service is being build
      - name: Set Dockerfile variable
        id: set-variable
        run: |
          case "${{ inputs.microService }}" in
            "join-service" )
              echo "microServiceDockerfile=joinservice/Dockerfile" >> "$GITHUB_ENV" ;;
            "kmsserver" )
              echo "microServiceDockerfile=kms/Dockerfile" >> "$GITHUB_ENV" ;;
            "verification-service" )
              echo "microServiceDockerfile=verify/Dockerfile" >> "$GITHUB_ENV" ;;
            "qemu-metadata-api" )
              echo "microServiceDockerfile=hack/qemu-metadata-api/Dockerfile" >> "$GITHUB_ENV" ;;
            "filebeat-debugd" )
              echo "microServiceDockerfile=debugd/internal/debugd/logcollector/filebeat/Dockerfile" >> "$GITHUB_ENV" ;;
            "logstash-debugd" )
              echo "microServiceDockerfile=debugd/internal/debugd/logcollector/logstash/Dockerfile" >> "$GITHUB_ENV" ;;
          esac

      - name: Build and upload container image
        id: build-and-upload
        uses: ./.github/actions/build_micro_service
        with:
          name: ${{ inputs.microService }}
          projectVersion: ${{ inputs.version }}
          dockerfile: ${{ env.microServiceDockerfile }}
          pushTag: ${{ inputs.imageTag }}
          githubToken: ${{ secrets.GITHUB_TOKEN }}
          cosignPublicKey: ${{ startsWith(github.ref, 'refs/heads/release/v') && secrets.COSIGN_PUBLIC_KEY || secrets.COSIGN_DEV_PUBLIC_KEY }}
          cosignPrivateKey: ${{ startsWith(github.ref, 'refs/heads/release/v') && secrets.COSIGN_PRIVATE_KEY || secrets.COSIGN_DEV_PRIVATE_KEY }}
          cosignPassword: ${{ startsWith(github.ref, 'refs/heads/release/v') && secrets.COSIGN_PASSWORD || secrets.COSIGN_DEV_PASSWORD }}
