name: IBM MQ docker image (make)

on:
  push:
    branches:
      - 'main'
    paths:
      - '.github/workflows/ibm-mq-make.yaml'
  pull_request:
    paths:
      - '.github/workflows/ibm-mq-make.yaml'
  
env:
  REGISTRY_IMAGE: pivotalrabbitmq/ibm-mqadvanced-server-dev
  IBM_MQ_REPOSITORY: ibm-messaging/mq-container
  IBM_MQ_BRANCH_NAME: 9.4.0
  IMAGE_TAG: 9.4.0.5-amd64
jobs:
  docker:
    runs-on: ubuntu-latest
    steps:
      
      - name: Docker meta
        id: meta
        uses: docker/metadata-action@v5
        with:
          images: ${{ env.REGISTRY_IMAGE }}
          
      -
        name: Set up QEMU
        uses: docker/setup-qemu-action@v3
      -
        name: Set up Docker Buildx
        uses: docker/setup-buildx-action@v3

      - name: Checkout ibm-mqadvanced-server-dev
        uses: actions/checkout@v4
        with:
          repository: ${{ env.IBM_MQ_REPOSITORY }}
          ref: ${{ env.IBM_MQ_BRANCH_NAME }}

      - name: Prepare image        
        run: |
          ls        
          echo "Enabling AMQP capability"
          sed -i -e 's/genmqpkg_incamqp=0/genmqpkg_incamqp=1/g' Dockerfile-server
          echo "AMQP Bootstrap instructions"
          cat << EOF >> incubating/mqadvanced-server-dev/10-dev.mqsc.tpl
          SET AUTHREC PRINCIPAL('app') OBJTYPE(QMGR) AUTHADD(CONNECT,INQ,ALTUSR)
          SET CHLAUTH('SYSTEM.DEF.AMQP') TYPE(ADDRESSMAP) ADDRESS('*') USERSRC(CHANNEL) CHCKCLNT({{ .ChckClnt }}) DESCR('Allows connection via APP channel') ACTION(REPLACE)
          SET AUTHREC PROFILE('SYSTEM.BASE.TOPIC') PRINCIPAL('app') OBJTYPE(TOPIC) AUTHADD(PUB,SUB)
          SET AUTHREC PROFILE('SYSTEM.DEFAULT.MODEL.QUEUE') PRINCIPAL('app') OBJTYPE(QUEUE) AUTHADD(PUT,DSP)
          ALTER CHANNEL(SYSTEM.DEF.AMQP) CHLTYPE(AMQP) MCAUSER('app')
          START SERVICE(SYSTEM.AMQP.SERVICE)
          START CHANNEL(SYSTEM.DEF.AMQP)
          EOF
          make build-devserver    
          docker tag ibm-mqadvanced-server-dev:${{ env.IMAGE_TAG }} ${{ env.REGISTRY_IMAGE }}:${{ env.IMAGE_TAG }} 
      -
        name: Login to Docker Hub
        uses: docker/login-action@v3
        with:
          username: ${{ secrets.DOCKERHUB_USERNAME }}
          password: ${{ secrets.DOCKERHUB_PASSWORD }}
      - name: Push
        run: |
          docker push ${{ env.REGISTRY_IMAGE }}:${{ env.IMAGE_TAG }}