name: Build operator
description: Build and upload a container image for a Constellation operator
inputs:
  name:
    description: 'Name of the operator'
    required: true
  sourceDir:
    description: 'Path to the operators source directory'
    required: true
  pushTag:
    description: 'Use this image tag'
    required: false
  githubToken:
    description: 'GitHub authorization token'
    required: true


runs:
  using: "composite"
  steps:
    - name: Determine pseudo version
      id: pseudo-version
      uses: ./.github/actions/pseudo_version

    - name: Install operator-sdk
      uses: ./.github/actions/install_operator_sdk
      with:
        version: v1.22.2

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

    - name: Log in to the Container registry
      id: docker-login
      uses: docker/login-action@dd4fa0671be5250ee6f50aedf4cb05514abda2c7
      with:
        registry: ghcr.io
        username: ${{ github.actor }}
        password: ${{ inputs.githubToken }}

    - name: Docker metadata
      id: meta
      uses: docker/metadata-action@b2391d37b4157fa4aa2e118d643f417910ff3242
      with:
        images: |
          ghcr.io/${{ github.repository }}/${{ inputs.name }}
        tags: |
          type=raw,value=latest,enable={{is_default_branch}}
          type=raw,value=${{ inputs.pushTag }},enable=${{ '' != inputs.pushTag }}
          type=raw,value=${{ steps.pseudo-version.outputs.pseudoVersion }},enable=${{ '' != steps.pseudo-version.outputs.pseudoVersion }}
          type=ref,event=branch


    - name: Build and push container image
      uses: docker/build-push-action@ac9327eae2b366085ac7f6a2d02df8aa8ead720a
      with:
        context: ${{ inputs.sourceDir }}
        file: ${{ inputs.sourceDir }}/Dockerfile
        push: true
        tags: ${{ steps.meta.outputs.tags }}

    - name: Bundle for pseudo version
      if: ${{ steps.pseudo-version.outputs.pseudoVersion != '' && inputs.pushTag == '' }}
      shell: bash
      run: make bundle VERSION=${VERSION#v}
      working-directory: ${{ inputs.sourceDir }}
      env:
        VERSION: ${{ steps.pseudo-version.outputs.pseudoVersion }}

    - name: Bundle for semantic version
      if: ${{ inputs.pushTag != '' }}
      shell: bash
      run: make bundle VERSION=${VERSION#v}
      working-directory: ${{ inputs.sourceDir }}
      env:
        VERSION: ${{ inputs.pushTag }}

    - name: Docker metadata for bundle
      id: bundle-meta
      uses: docker/metadata-action@b2391d37b4157fa4aa2e118d643f417910ff3242
      with:
        images: |
          ghcr.io/${{ github.repository }}/${{ inputs.name }}-bundle
        tags: |
          type=raw,value=latest,enable={{is_default_branch}}
          type=raw,value=${{ inputs.pushTag }},enable=${{ '' != inputs.pushTag }}
          type=raw,value=${{ steps.pseudo-version.outputs.pseudoVersion }},enable=${{ '' != steps.pseudo-version.outputs.pseudoVersion }}
          type=ref,event=branch

    - name: Build and push bundle image
      uses: docker/build-push-action@ac9327eae2b366085ac7f6a2d02df8aa8ead720a
      with:
        context: ${{ inputs.sourceDir }}
        file: ${{ inputs.sourceDir }}/bundle.Dockerfile
        push: true
        tags: ${{ steps.bundle-meta.outputs.tags }}

    - name: Build and push catalog for pseudo versions
      if: ${{ steps.pseudo-version.outputs.pseudoVersion != '' && inputs.pushTag == '' }}
      shell: bash
      run: make VERSION=${VERSION#v} catalog-build catalog-push
      working-directory: ${{ inputs.sourceDir }}
      env:
        VERSION: ${{ steps.pseudo-version.outputs.pseudoVersion }}

    - name: Build and push catalog for releases
      if: ${{ inputs.pushTag != '' }}
      shell: bash
      run: make VERSION=${VERSION#v} catalog-build catalog-push
      working-directory: ${{ inputs.sourceDir }}
      env:
        VERSION: ${{ inputs.pushTag }}
