name: Release
on:
  workflow_dispatch:
    inputs:
      desc:
        description: 'Description'
        required: false
        default: 'Manual release'
jobs:
  release:
    name: Release
    runs-on: ubuntu-latest    
    env:
      GH_PAT: ${{ secrets.GH_PAT }}
    steps:
      - name: Checkout
        uses: actions/checkout@v3.0.1
        with:
          fetch-depth: 0
          persist-credentials: false
      - name: Set Environment Variables
        uses: ./.github/actions/setvars
        with:
          varFilePath: ./.github/variables/node.env
      - name: Setup Node.js
        uses: actions/setup-node@v3.1.1
        with:
          node-version: ${{ env.NODE_VERSION }}
          cache: 'npm'
      - name: Install dependencies
        run: npm install --save=false --force semantic-release @commitlint/config-conventional @semantic-release/release-notes-generator @semantic-release/changelog @semantic-release/git @semantic-release/github @semantic-release/commit-analyzer @semantic-release/npm @semantic-release/exec
      - name: Run semantic release
        env:
          GITHUB_TOKEN: ${{ secrets.GH_PAT }}
        run: npx semantic-release
        id: ver
    outputs:
      version: ${{ steps.ver.outputs.nextVer }}

  publish:
    needs: release
    runs-on: ubuntu-latest
    env:
      GH_PAT: ${{ secrets.GH_PAT }}
    if: ${{ needs.release.outputs.version }}
    steps:
      - name: Checkout
        uses: actions/checkout@v3.0.1
        with:
          ref: ${{ github.event.inputs.branch }}
          fetch-depth: 0
          persist-credentials: false

      - name: Configure AWS Credentials
        uses: aws-actions/configure-aws-credentials@v1.6.1
        with:
          aws-access-key-id: ${{ secrets.DSS_AWS_ACCESS_KEY_ID }}
          aws-secret-access-key: ${{ secrets.DSS_AWS_SECRET_ACCESS_KEY }}
          aws-region: ap-southeast-1

      - name: Login to Amazon ECR
        id: login-ecr
        uses: aws-actions/amazon-ecr-login@v1.3.3

      - name: Build Docker image
        id: docker-build
        env:
          ECR_REGISTRY: ${{ steps.login-ecr.outputs.registry }}
        run: |
          repository_name=${{ github.event.repository.name }}
          service_version=v${{needs.release.outputs.version}}
          image=$ECR_REGISTRY/$repository_name:$service_version
          gh_pat=${{ secrets.GH_PAT }}
          docker build -t $image -f Dockerfile --build-arg GH_PAT=$gh_pat --build-arg SERVICE_VERSION=$service_version .
          echo "##[set-output name=image;]$image"

      - name: Push Docker image to Amazon ECR
        run: docker push ${{ steps.docker-build.outputs.image }}

      - name: Logout of Amazon ECR
        if: always()
        run: docker logout ${{ steps.login-ecr.outputs.registry }}
