name: Main

on:
  push:
    tags:
      - "v*"

jobs:
  build-jdk11:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v3
        with:
          fetch-depth: 0

      - uses: actions/setup-java@v3
        with:
          distribution: "zulu"
          java-version: 11
          check-latest: true
          cache: "maven"

      - name: get tag name
        id: version
        run: echo "VERSION=${GITHUB_REF#refs/*/}" >> $GITHUB_OUTPUT

      - name: build with maven
        run: mvn --batch-mode --define java.net.useSystemProxies=true package

      - name: create renamed build
        run: cp target/plantuml.war target/plantuml-${{ steps.version.outputs.VERSION }}.war

      - name: build with maven (including the apache-jsp artifact)
        run: mvn --batch-mode --define java.net.useSystemProxies=true -Dapache-jsp.scope=compile package

      - name: create renamed build (including the apache-jsp artifact)
        run: cp target/plantuml.war target/plantuml-jsp-${{ steps.version.outputs.VERSION }}.war

      - name: temporarily save generated war files
        uses: actions/upload-artifact@v3
        with:
          name: war-jre11
          path: target/plantuml*-${{ steps.version.outputs.VERSION }}.war

  build-jdk8:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v3
        with:
          fetch-depth: 0

      - uses: actions/setup-java@v3
        with:
          distribution: "zulu"
          java-version: 8
          check-latest: true
          cache: "maven"

      - name: get tag name
        id: version
        run: echo "VERSION=${GITHUB_REF#refs/*/}" >> $GITHUB_OUTPUT

      - name: Remove test code (not java 8 compatible)
        run: rm -rf src/test

      - name: build with maven
        run: mvn --batch-mode -f pom.jdk8.xml --define java.net.useSystemProxies=true package

      - name: create renamed build
        run: cp target/plantuml.war target/plantuml-jre8-${{ steps.version.outputs.VERSION }}.war

      - name: build with maven (including the apache-jsp artifact)
        run: mvn --batch-mode -f pom.jdk8.xml --define java.net.useSystemProxies=true -Dapache-jsp.scope=compile package

      - name: create renamed build (including the apache-jsp artifact)
        run: cp target/plantuml.war target/plantuml-jre8-jsp-${{ steps.version.outputs.VERSION }}.war

      - name: temporarily save generated war files
        uses: actions/upload-artifact@v3
        with:
          name: war-jre8
          path: target/plantuml*-${{ steps.version.outputs.VERSION }}.war

  publish-releases:
    runs-on: ubuntu-latest
    needs:
      - build-jdk11
      - build-jdk8
    steps:
      - name: retrieve generated war files (jre8)
        uses: actions/download-artifact@v3
        with:
          name: war-jre8
          path: artifacts

      - name: retrieve generated war files (jre11)
        uses: actions/download-artifact@v3
        with:
          name: war-jre11
          path: artifacts

      - name: display structure of downloaded files
        run: ls -lah artifacts

      - name: upload binaries to release
        uses: svenstaro/upload-release-action@v2
        with:
          repo_token: ${{ secrets.GITHUB_TOKEN }}
          file: artifacts/plantuml*.war
          tag: ${{ github.ref }}
          overwrite: true
          file_glob: true

  publish-docker:
    runs-on: ubuntu-latest
    needs:
      - publish-releases
    steps:
      - uses: actions/checkout@v3
        with:
          fetch-depth: 0

      - name: Docker tomcat meta
        id: docker_meta_tomcat
        uses: crazy-max/ghaction-docker-meta@v3
        with:
          flavor: |
            latest=false
            prefix=
            suffix=
          images: plantuml/plantuml-server
          tags: |
            type=semver,pattern=tomcat-{{raw}}
            type=raw,value=tomcat

      - name: Docker jetty meta
        id: docker_meta_jetty
        uses: crazy-max/ghaction-docker-meta@v3
        with:
          flavor: |
            latest=true
            prefix=
            suffix=
          images: plantuml/plantuml-server
          tags: |
            type=semver,pattern={{raw}}
            type=semver,pattern=jetty-{{raw}}
            type=raw,value=jetty

      - name: Set up QEMU
        uses: docker/setup-qemu-action@v1

      - name: Set up Docker Buildx
        uses: docker/setup-buildx-action@v1

      - name: Login to DockerHub
        uses: docker/login-action@v1
        with:
          username: ${{ secrets.DOCKERHUB_USERNAME }}
          password: ${{ secrets.DOCKERHUB_TOKEN }}

      - name: Build & push tomcat
        id: docker_build_tomcat
        uses: docker/build-push-action@v2
        with:
          context: .
          file: ./Dockerfile.tomcat
          platforms: linux/amd64, linux/arm64
          push: true
          tags: ${{ steps.docker_meta_tomcat.outputs.tags }}
          labels: ${{ steps.docker_meta_tomcat.outputs.labels }}

      - name: Build & push jetty
        id: docker_build_jetty
        uses: docker/build-push-action@v2
        with:
          context: .
          file: ./Dockerfile.jetty
          platforms: linux/amd64, linux/arm64
          push: true
          tags: ${{ steps.docker_meta_jetty.outputs.tags }}
          labels: ${{ steps.docker_meta_jetty.outputs.labels }}

  publish-pages:
    runs-on: ubuntu-latest
    needs:
      - publish-releases
    steps:
      - uses: actions/checkout@v3
        with:
          fetch-depth: 0

      - uses: actions/setup-java@v3
        with:
          distribution: "zulu"
          java-version: 11
          check-latest: true
          cache: "maven"

      - name: Create GitHub Pages
        run: mvn site

      - name: Deploy GitHub Pages
        uses: peaceiris/actions-gh-pages@v3
        with:
          github_token: ${{ secrets.GITHUB_TOKEN }}
          publish_dir: ./target/site
