# This workflow will perform a test whenever there
# is some change in code done to ensure that the changes
# are not buggy and we are getting the desired output.
name: Build
on:
  push:
  pull_request:
  workflow_dispatch:
  schedule:
    - cron: '0 0 * * *'  # every day at midnight

env:
  PROJECT_DIR: spring-petclinic
  IMAGE_NAME: spring-petclinic
  MVN_REPO_DIR: ~/.m2/repository

jobs:
  build:
    name: Build image using Buildah
    runs-on: ubuntu-20.04
    strategy:
      fail-fast: false
      matrix:
        install_latest: [ true, false ]

    steps:

      # Checkout buildah action github repository
      - name: Checkout Buildah action
        uses: actions/checkout@v3
        with:
          path: "buildah-build"

      - name: Install latest buildah
        if: matrix.install_latest
        run: |
          bash buildah-build/.github/install_latest_buildah.sh

      # Checkout spring-petclinic github repository
      - name: Checkout spring-petclinic project
        uses: actions/checkout@v3
        with:
          repository: "spring-projects/spring-petclinic"
          path: ${{ env.PROJECT_DIR }}

      # Setup java.
      - name: Setup Java
        uses: actions/setup-java@v3
        with:
          distribution: 'temurin'
          java-version: '17'
          cache: 'maven'

      # Run maven to build the project
      - name: Maven
        working-directory: ${{ env.PROJECT_DIR }}
        run: |
          mvn package -ntp -B

      # Build image using Buildah action
      - name: Build Image
        id: build_image
        uses: ./buildah-build/
        with:
          image: ${{ env.IMAGE_NAME }}
          tags: 'latest ${{ github.sha }}'
          base-image: 'registry.access.redhat.com/openjdk/openjdk-11-rhel7'
          # To avoid hardcoding a particular version of the binary.
          content: |
            ./spring-petclinic/target/spring-petclinic-*.jar
          entrypoint: |
            java
            -jar
            spring-petclinic-*.jar
          port: 8080
          arch: amd64
          workdir: "."

      - name: Echo Outputs
        run: |
          echo "Image: ${{ steps.build_image.outputs.image }}"
          echo "Tags: ${{ steps.build_image.outputs.tags }}"
          echo "Tagged Image: ${{ steps.build_image.outputs.image-with-tag }}"

      # Check if image is build
      - name: Check images created
        run: buildah images | grep '${{ env.IMAGE_NAME }}'