name: Release Builds

on:
  push:
    tags: [ v* ]

jobs:
  create_frontend_docker_image:
    runs-on: ubuntu-latest
    env:
      REGISTRY: ghcr.io
      IMAGE_NAME: sartography/spiffworkflow-frontend
    permissions:
      contents: read
      packages: write
    steps:
      - name: Check out the repository
        uses: actions/checkout@v3.3.0
      - name: Log in to the Container registry
        uses: docker/login-action@v2.1.0
        with:
          registry: ${{ env.REGISTRY }}
          username: ${{ github.actor }}
          password: ${{ secrets.GITHUB_TOKEN }}

      - name: Extract metadata (tags, labels) for Docker
        id: meta
        uses: docker/metadata-action@v4.4.0
        with:
          images: ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}

      - name: Build and push Frontend Docker image
        uses: docker/build-push-action@v4.0.0
        with:
          # this action doesn't seem to respect working-directory so set context
          context: spiffworkflow-frontend
          push: true
          tags: ${{ steps.meta.outputs.tags }}
          labels: ${{ steps.meta.outputs.labels }}

  create_backend_docker_image:
    runs-on: ubuntu-latest
    env:
      REGISTRY: ghcr.io
      IMAGE_NAME: sartography/spiffworkflow-backend
    permissions:
      contents: read
      packages: write
    steps:
      - name: Check out the repository
        uses: actions/checkout@v3.3.0
      - name: Log in to the Container registry
        uses: docker/login-action@v2.1.0
        with:
          registry: ${{ env.REGISTRY }}
          username: ${{ github.actor }}
          password: ${{ secrets.GITHUB_TOKEN }}

      - name: Extract metadata (tags, labels) for Docker
        id: meta
        uses: docker/metadata-action@v4.4.0
        with:
          images: ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}

      - name: Build and push Backend Docker image
        uses: docker/build-push-action@v4.0.0
        with:
          # this action doesn't seem to respect working-directory so set context
          context: spiffworkflow-backend
          push: true
          tags: ${{ steps.meta.outputs.tags }}
          labels: ${{ steps.meta.outputs.labels }}
# Is this getting updated, I wonder?
  create_demo-proxy:
    runs-on: ubuntu-latest
    env:
      REGISTRY: ghcr.io
      IMAGE_NAME: sartography/connector-proxy-demo

    permissions:
      contents: read
      packages: write
    steps:
      - name: Check out the repository
        uses: actions/checkout@v3.3.0
      - name: Log in to the Container registry
        uses: docker/login-action@v2.1.0
        with:
          registry: ${{ env.REGISTRY }}
          username: ${{ github.actor }}
          password: ${{ secrets.GITHUB_TOKEN }}

      - name: Extract metadata (tags, labels) for Docker
        id: meta
        uses: docker/metadata-action@v4.4.0
        with:
          images: ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}

      - name: Build and push the connector proxy
        uses: docker/build-push-action@v4.0.0
        with:
          # this action doesn't seem to respect working-directory so set context
          context: connector-proxy-demo
          push: true
          tags: ${{ steps.meta.outputs.tags }}
          labels: ${{ steps.meta.outputs.labels }}

  quickstart-guide-test:
    runs-on: ubuntu-latest
    needs: [create_frontend_docker_image, create_backend_docker_image, create_demo-proxy]
    steps:
      - name: Checkout
        uses: actions/checkout@v3
      - name: Setup Apps
        run: ./bin/run_arena_with_docker_compose
      - name: wait_for_backend
        working-directory: ./spiffworkflow-backend
        run: ./bin/wait_for_server_to_be_up 5 8000
      - name: wait_for_frontend
        working-directory: ./spiffworkflow-frontend
        run: ./bin/wait_for_frontend_to_be_up 5 8001
      - name: Cypress run
        uses: cypress-io/github-action@v5
        with:
          working-directory: ./spiffworkflow-frontend
          browser: chrome
          # just run one test to make sure we didn't completely break it
          spec: cypress/e2e/process_groups.cy.js
        env:
          # pass GitHub token to allow accurately detecting a build vs a re-run build
          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
          CYPRESS_SPIFFWORKFLOW_FRONTEND_AUTH_WITH_KEYCLOAK: "false"
          CYPRESS_SPIFFWORKFLOW_FRONTEND_USERNAME: "admin"
          CYPRESS_SPIFFWORKFLOW_FRONTEND_PASSWORD: "admin"
          SPIFFWORKFLOW_FRONTEND_PORT: 8001