name: Update Pipeline
"on":
    push:
        branches:
            - main
        paths:
            - .github/pipeline-descriptor.yml
    schedule:
        - cron: 0 5 * * 1-5
    workflow_dispatch: {}
jobs:
    update:
        name: Update Pipeline
        runs-on:
            - ubuntu-latest
        steps:
            - uses: actions/setup-go@v5
              with:
                go-version: "1.23"
            - name: Install octo
              run: |
                #!/usr/bin/env bash

                set -euo pipefail

                go install -ldflags="-s -w" github.com/paketo-buildpacks/pipeline-builder/cmd/octo@latest
            - uses: actions/checkout@v4
            - name: Update Pipeline
              id: pipeline
              run: |
                #!/usr/bin/env bash

                set -euo pipefail

                if [[ -f .github/pipeline-version ]]; then
                  OLD_VERSION=$(cat .github/pipeline-version)
                else
                  OLD_VERSION="0.0.0"
                fi

                rm .github/workflows/pb-*.yml || true
                octo --descriptor "${DESCRIPTOR}"

                PAYLOAD=$(gh api /repos/paketo-buildpacks/pipeline-builder/releases/latest)

                NEW_VERSION=$(jq -n -r --argjson PAYLOAD "${PAYLOAD}" '$PAYLOAD.name')
                echo "${NEW_VERSION}" > .github/pipeline-version

                RELEASE_NOTES=$(
                  gh api \
                    -F text="$(jq -n -r --argjson PAYLOAD "${PAYLOAD}" '$PAYLOAD.body')" \
                    -F mode="gfm" \
                    -F context="paketo-buildpacks/pipeline-builder" \
                    -X POST /markdown
                )

                git add .github/
                git add .gitignore

                if [ -f scripts/build.sh ]; then
                  git add scripts/build.sh
                fi

                git checkout -- .

                echo "old-version=${OLD_VERSION}" >> "$GITHUB_OUTPUT"
                echo "new-version=${NEW_VERSION}" >> "$GITHUB_OUTPUT"

                DELIMITER=$(openssl rand -hex 16) # roughly the same entropy as uuid v4 used in https://github.com/actions/toolkit/blob/b36e70495fbee083eb20f600eafa9091d832577d/packages/core/src/file-command.ts#L28
                printf "release-notes<<%s\n%s\n%s\n" "${DELIMITER}" "${RELEASE_NOTES}" "${DELIMITER}" >> "${GITHUB_OUTPUT}" # see https://docs.github.com/en/actions/using-workflows/workflow-commands-for-github-actions#multiline-strings
              env:
                DESCRIPTOR: .github/pipeline-descriptor.yml
                GITHUB_TOKEN: ${{ secrets.PAKETO_BOT_GITHUB_TOKEN }}
            - uses: peter-evans/create-pull-request@v6
              with:
                author: ${{ secrets.JAVA_GITHUB_USERNAME }} <${{ secrets.JAVA_GITHUB_USERNAME }}@users.noreply.github.com>
                body: |-
                    Bumps pipeline from `${{ steps.pipeline.outputs.old-version }}` to `${{ steps.pipeline.outputs.new-version }}`.

                    <details>
                    <summary>Release Notes</summary>
                    ${{ steps.pipeline.outputs.release-notes }}
                    </details>
                branch: update/pipeline
                commit-message: |-
                    Bump pipeline from ${{ steps.pipeline.outputs.old-version }} to ${{ steps.pipeline.outputs.new-version }}

                    Bumps pipeline from ${{ steps.pipeline.outputs.old-version }} to ${{ steps.pipeline.outputs.new-version }}.
                delete-branch: true
                labels: semver:patch, type:task
                signoff: true
                title: Bump pipeline from ${{ steps.pipeline.outputs.old-version }} to ${{ steps.pipeline.outputs.new-version }}
                token: ${{ secrets.PAKETO_BOT_GITHUB_TOKEN }}