name: "Release Pipeline"
on:
  push:
    tags:
      - v*
jobs:
  release:
    if: github.repository == 'WebGoat/WebGoat'
    name: Release WebGoat
    runs-on: ubuntu-latest
    permissions:
        contents: write
    environment:
      name: release
    steps:
      - uses: actions/checkout@v4

      - name: Set up JDK 23
        uses: actions/setup-java@v4
        with:
          distribution: 'temurin'
          java-version: 23
          architecture: x64
          cache: 'maven'

      - name: "Set labels for ${{ github.ref }}"
        run: |
          echo "WEBGOAT_TAG_VERSION=${{ github.ref_name }}" >> $GITHUB_ENV
          WEBGOAT_MAVEN_VERSION=${{ github.ref_name }}
          echo "WEBGOAT_MAVEN_VERSION=${WEBGOAT_MAVEN_VERSION:1}" >> $GITHUB_ENV
      - name: Build with Maven
        run: |
          mvn --no-transfer-progress versions:set -DnewVersion=${{ env.WEBGOAT_MAVEN_VERSION }}
          mvn --no-transfer-progress install -DskipTests

      - name: "Create release"
        uses: softprops/action-gh-release@v1
        with:
          draft: false
          files: |
            target/webgoat-${{ env.WEBGOAT_MAVEN_VERSION }}.jar
          body: |
           ## Version ${{ github.ref_name }}

            ### New functionality

            - test

            ### Bug fixes

            - [#743 - Character encoding errors](https://github.com/WebGoat/WebGoat/issues/743)

            Full change log: https://github.com/WebGoat/WebGoat/compare/${{ github.ref_name }}...${{ github.ref_name }}


            ## Contributors

            Special thanks to the following contributors providing us with a pull request:

            - Person 1
            - Person 2

            And everyone who provided feedback through Github.


            Team WebGoat
        env:
          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}

      - name: "Set up QEMU"
        uses: docker/setup-qemu-action@v3.6.0
        with:
          platforms: all

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

      - name: "Login to dockerhub"
        uses: docker/login-action@v3.4.0
        with:
          username: ${{ secrets.DOCKERHUB_USERNAME }}
          password: ${{ secrets.DOCKERHUB_TOKEN }}

      - name: "Build and push WebGoat"
        uses: docker/build-push-action@v6.16.0
        with:
          context: ./
          file: ./Dockerfile
          push: true
          platforms: linux/amd64, linux/arm64
          tags: |
            webgoat/webgoat:${{ env.WEBGOAT_TAG_VERSION }}
            webgoat/webgoat:latest
          build-args: |
            webgoat_version=${{ env.WEBGOAT_MAVEN_VERSION }}

      - name: "Build and push WebGoat desktop"
        uses: docker/build-push-action@v6.16.0
        with:
          context: ./
          file: ./Dockerfile_desktop
          push: true
          platforms: linux/amd64, linux/arm64
          tags: |
            webgoat/webgoat-desktop:${{ env.WEBGOAT_TAG_VERSION }}
            webgoat/webgoat-desktop:latest
          build-args: |
            webgoat_version=${{ env.WEBGOAT_MAVEN_VERSION }}
  new_version:
    if: github.repository == 'WebGoat/WebGoat'
    name: Update to next SNAPSHOT version
    needs: [ release ]
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
        with:
          fetch-depth: 0

      - name: Set up JDK 23
        uses: actions/setup-java@v4
        with:
          distribution: 'temurin'
          java-version: 23
          architecture: x64

      - name: Set version to next snapshot
        run: |
          mvn build-helper:parse-version versions:set -DnewVersion=\${parsedVersion.majorVersion}.\${parsedVersion.minorVersion}-SNAPSHOT versions:commit

      - name: Push the changes to new branch
        uses: devops-infra/action-commit-push@v0.10.0
        with:
            github_token: "${{ secrets.GITHUB_TOKEN }}"
            add_timestamp: true
            commit_message: "Updating to the new development version"
            force: false

      - name: Create PR
        uses: devops-infra/action-pull-request@v0.6.0
        with:
            github_token: "${{ secrets.GITHUB_TOKEN }}"
            title: ${{ github.event.commits[0].message }}
            target_branch: main