name: Update Go
"on":
    schedule:
        - cron: 57 2 * * 1
    workflow_dispatch: {}
jobs:
    update:
        name: Update Go
        runs-on:
            - ubuntu-latest
        steps:
            - uses: actions/setup-go@v5
              with:
                go-version: "1.23"
            - uses: actions/checkout@v4
            - name: Update Go Version & Modules
              id: update-go
              run: |
                #!/usr/bin/env bash

                set -euo pipefail

                if [ -z "${GO_VERSION:-}" ]; then
                    echo "No go version set"
                    exit 1
                fi

                OLD_GO_VERSION=$(grep -P '^go \d\.\d+' go.mod | cut -d ' ' -f 2 | cut -d '.' -f 1-2)

                go mod edit -go="$GO_VERSION"
                go mod tidy
                go get -u -t ./...
                go mod tidy

                git add go.mod go.sum
                git checkout -- .

                if [ "$OLD_GO_VERSION" == "$GO_VERSION" ]; then
                    COMMIT_TITLE="Bump Go Modules"
                    COMMIT_BODY="Bumps Go modules used by the project. See the commit for details on what modules were updated."
                    COMMIT_SEMVER="semver:patch"
                else
                    COMMIT_TITLE="Bump Go from ${OLD_GO_VERSION} to ${GO_VERSION}"
                    COMMIT_BODY="Bumps Go from ${OLD_GO_VERSION} to ${GO_VERSION} and update Go modules used by the project. See the commit for details on what modules were updated."
                    COMMIT_SEMVER="semver:minor"
                fi

                echo "commit-title=${COMMIT_TITLE}" >> "$GITHUB_OUTPUT"
                echo "commit-body=${COMMIT_BODY}" >> "$GITHUB_OUTPUT"
                echo "commit-semver=${COMMIT_SEMVER}" >> "$GITHUB_OUTPUT"
              env:
                GO_VERSION: "1.23"
            - uses: peter-evans/create-pull-request@v6
              with:
                author: ${{ secrets.JAVA_GITHUB_USERNAME }} <${{ secrets.JAVA_GITHUB_USERNAME }}@users.noreply.github.com>
                body: |-
                    ${{ steps.update-go.outputs.commit-body }}

                    <details>
                    <summary>Release Notes</summary>
                    ${{ steps.pipeline.outputs.release-notes }}
                    </details>
                branch: update/go
                commit-message: |-
                    ${{ steps.update-go.outputs.commit-title }}

                    ${{ steps.update-go.outputs.commit-body }}
                delete-branch: true
                labels: ${{ steps.update-go.outputs.commit-semver }}, type:task
                signoff: true
                title: ${{ steps.update-go.outputs.commit-title }}
                token: ${{ secrets.PAKETO_BOT_GITHUB_TOKEN }}