name: Publish JSS

on:
  push:
    branches:
      - v5.9

env:
  NAMESPACE: ${{ vars.REGISTRY_NAMESPACE || github.repository_owner }}

jobs:
  publish-maven:
    if: vars.REGISTRY != ''
    name: Publishing Maven artifacts
    runs-on: ubuntu-latest
    steps:
      - name: Install dependencies
        run: |
          sudo apt-get update
          sudo apt-get -y install xmlstarlet

      - name: Clone repository
        uses: actions/checkout@v4

      - name: Set up Java
        uses: actions/setup-java@v4
        with:
          java-version: '17'
          distribution: 'adopt'

      - name: Configure settings.xml
        run: |
          xmlstarlet edit --inplace \
              -u "/_:settings/_:servers/_:server[_:id='github']/_:password" \
              -v "$REPO_TOKEN" \
              ~/.m2/settings.xml
          cat ~/.m2/settings.xml
        env:
          REPO_TOKEN: ${{ secrets.REPO_TOKEN }}

      - name: Configure pom.xml
        run: |
          xmlstarlet edit --inplace \
              -u "/_:project/_:build/_:plugins/_:plugin[_:artifactId='site-maven-plugin']/_:configuration/_:repositoryOwner" \
              -v "$NAMESPACE" \
              pom.xml
          cat pom.xml

      - name: Publish Maven artifacts
        run: |
          # TODO: Fix build issue in native and symkey modules.
          mvn \
              --batch-mode \
              --update-snapshots \
              -pl '!native,!symkey' \
              deploy

  wait-for-images:
    if: vars.REGISTRY != ''
    name: Waiting for container images
    runs-on: ubuntu-latest
    steps:
      - name: Wait for container images
        uses: lewagon/wait-on-check-action@v1.3.4
        with:
          ref: ${{ github.ref }}
          check-name: 'Building JSS'
          repo-token: ${{ secrets.GITHUB_TOKEN }}
          wait-interval: 30

  publish-images:
    name: Publishing container images
    needs: wait-for-images
    runs-on: ubuntu-latest
    steps:
      - name: Log in to GitHub Container Registry
        uses: docker/login-action@v3
        with:
          registry: ${{ vars.REGISTRY }}
          username: ${{ github.actor }}
          password: ${{ secrets.GITHUB_TOKEN }}
        if: vars.REGISTRY == 'ghcr.io'

      - name: Log in to other container registry
        uses: docker/login-action@v3
        with:
          registry: ${{ vars.REGISTRY }}
          username: ${{ secrets.REGISTRY_USERNAME }}
          password: ${{ secrets.REGISTRY_PASSWORD }}
        if: vars.REGISTRY != 'ghcr.io'

      - name: Retrieve JSS images
        uses: actions/cache@v4
        with:
          key: jss-images-${{ github.sha }}
          path: jss-images.tar

      - name: Load JSS images
        run: docker load --input jss-images.tar

      - name: Publish jss-dist image
        run: |
          docker tag jss-dist ${{ vars.REGISTRY }}/$NAMESPACE/jss-dist:5.9
          docker push ${{ vars.REGISTRY }}/$NAMESPACE/jss-dist:5.9
