diff --git a/.github/actions/create-pr/action.yml b/.github/actions/create-pr/action.yml deleted file mode 100644 index 470262609e..0000000000 --- a/.github/actions/create-pr/action.yml +++ /dev/null @@ -1,92 +0,0 @@ -name: "Create PR custom action" -description: "Create a PR and a temporary branch, close duplicates" - -# PROCESS -# -# 1. Setup git client using Powertools for AWS Lambda bot username -# 2. Pushes staged files to a temporary branch -# 3. Creates a PR from temporary branch against a target branch (typically trunk: develop, main, etc.) -# 4. Searches for duplicate PRs with the same title -# 5. If duplicates are found, link to the most recent one, close and delete their branches so we keep a single PR -# 6. In the event of failure, we delete the now orphaned branch (if any), and propagate the failure - -# REQUIREMENTS -# You need to enable "Allow GitHub Actions to create and approve pull requests" in your repository settings -# You need to have "skip-changelog" label in your repository to skip changelog generation. - -# USAGE -# -# - name: Create PR -# id: create-pr -# uses: ./.github/actions/create-pr -# with: -# files: "CHANGELOG.md" -# temp_branch_prefix: "ci-changelog" -# pull_request_title: "chore(ci): changelog rebuild" -# github_token: ${{ secrets.GITHUB_TOKEN }} -# - name: Step to demonstrate how to access outputs (no need for this) -# run: | -# echo "PR number: ${PR_ID}" -# echo "Branch: ${BRANCH}" -# env: -# PR_ID: ${{ steps.create-pr.outputs.pull_request_id}} -# BRANCH: ${{ steps.create-pr.outputs.temp_branch}} - -inputs: - files: - description: "Files to add separated by space" - required: true - temp_branch_prefix: - description: "Prefix for temporary git branch to be created, e.g, ci-docs" - required: true - pull_request_title: - description: "Pull Request title to use" - required: true - github_token: - description: "GitHub token for GitHub CLI" - required: true - target_branch: - description: "Branch to target when creating a PR against (main, by default)" - required: false - default: main - -outputs: - pull_request_id: - description: "Pull request ID created" - value: ${{ steps.create-pr.outputs.pull_request_id }} - temp_branch: - description: "Temporary branch created with staged changed" - value: ${{ steps.create-pr.outputs.temp_branch }} - -runs: - using: "composite" - steps: - - id: adjust-path - run: echo "${{ github.action_path }}" >> $GITHUB_PATH - shell: bash - - id: setup-git - name: Git client setup and refresh tip - run: | - git config --global user.name 'aws-powertools-bot' - git config --global user.email '151832416+aws-powertools-bot@users.noreply.github.com' - git config pull.rebase true - git config remote.origin.url >&- - shell: bash - - id: create-pr - working-directory: ${{ env.GITHUB_WORKSPACE }} - run: create_pr_for_staged_changes.sh "${FILES}" - env: - FILES: ${{ inputs.files }} - TEMP_BRANCH_PREFIX: ${{ inputs.temp_branch_prefix }} - PR_TITLE: ${{ inputs.pull_request_title }} - BASE_BRANCH: ${{ inputs.target_branch }} - GH_TOKEN: ${{ inputs.github_token }} - shell: bash - - id: cleanup - name: Cleanup orphaned branch - if: failure() - run: git push origin --delete "${TEMP_BRANCH_PREFIX}-${GITHUB_RUN_ID}" || echo "Must have failed before creating temporary branch; no cleanup needed." - env: - TEMP_BRANCH_PREFIX: ${{ inputs.temp_branch_prefix }} - GITHUB_RUN_ID: ${{ github.run_id }} - shell: bash diff --git a/.github/actions/create-pr/create_pr_for_staged_changes.sh b/.github/actions/create-pr/create_pr_for_staged_changes.sh deleted file mode 100755 index 063a2e0b47..0000000000 --- a/.github/actions/create-pr/create_pr_for_staged_changes.sh +++ /dev/null @@ -1,148 +0,0 @@ -#!/bin/bash -set -uo pipefail # prevent accessing unset env vars, prevent masking pipeline errors to the next command - -#docs -#title :create_pr_for_staged_changes.sh -#description :This script will create a PR for staged changes, detect and close duplicate PRs. All PRs will be omitted from Release Notes and Changelogs -#author :@heitorlessa -#date :May 8th 2023 -#version :0.1 -#usage :bash create_pr_for_staged_changes.sh {git_staged_files_or_directories_separated_by_space} -#notes :Meant to use in GitHub Actions only. Temporary branch will be named $TEMP_BRANCH_PREFIX-$GITHUB_RUN_ID -#os_version :Ubuntu 22.04.2 LTS -#required_env_vars :PR_TITLE, TEMP_BRANCH_PREFIX, GH_TOKEN -#============================================================================== - -# Sets GitHub Action with error message to ease troubleshooting -function error() { - echo "::error file=${FILENAME}::$1" - exit 1 -} - -function debug() { - TIMESTAMP=$(date -u "+%FT%TZ") # 2023-05-10T07:53:59Z - echo ""${TIMESTAMP}" - $1" -} - -function notice() { - echo "::notice file=${FILENAME}::$1" -} - -function start_span() { - echo "::group::$1" -} - -function end_span() { - echo "::endgroup::" -} - -function has_required_config() { - start_span "Validating required config" - test -z "${TEMP_BRANCH_PREFIX}" && error "TEMP_BRANCH_PREFIX env must be set to create a PR" - test -z "${PR_TITLE}" && error "PR_TITLE env must be set" - test -z "${GH_TOKEN}" && error "GH_TOKEN env must be set for GitHub CLI" - - # Default GitHub Actions Env Vars: https://docs.github.com/en/actions/learn-github-actions/variables#default-environment-variables - debug "Are we running in GitHub Action environment?" - test -z "${GITHUB_RUN_ID}" && error "GITHUB_RUN_ID env must be set to trace Workflow Run ID back to PR" - test -z "${GITHUB_SERVER_URL}" && error "GITHUB_SERVER_URL env must be set to trace Workflow Run ID back to PR" - test -z "${GITHUB_REPOSITORY}" && error "GITHUB_REPOSITORY env must be set to trace Workflow Run ID back to PR" - - debug "Config validated successfully!" - set_environment_variables - end_span -} - -function set_environment_variables() { - start_span "Setting environment variables" - export readonly WORKFLOW_URL="${GITHUB_SERVER_URL}"/"${GITHUB_REPOSITORY}"/actions/runs/"${GITHUB_RUN_ID}" # e.g., heitorlessa/aws-lambda-powertools-test/actions/runs/4913570678 - export readonly TEMP_BRANCH="${TEMP_BRANCH_PREFIX}"-"${GITHUB_RUN_ID}" # e.g., ci-changelog-4894658712 - export readonly BASE_BRANCH="${BASE_BRANCH:-main}" # e.g., main, defaults to develop if missing - export readonly PR_BODY="This is an automated PR created from the following workflow" - export readonly FILENAME=".github/scripts/$(basename "$0")" - export readonly NO_DUPLICATES_MESSAGE="No duplicated PRs found" - export readonly SKIP_LABEL="skip-changelog" - - end_span -} - -function has_anything_changed() { - start_span "Validating git staged files" - HAS_ANY_SOURCE_CODE_CHANGED="$(git status --porcelain)" - - test -z "${HAS_ANY_SOURCE_CODE_CHANGED}" && debug "Nothing to update; exitting early" && exit 0 - end_span -} - -function create_temporary_branch_with_changes() { - start_span "Creating temporary branch: "${TEMP_BRANCH}"" - git checkout -b "${TEMP_BRANCH}" - - debug "Committing staged files: $*" - echo "$@" | xargs -n1 git add || error "Failed to add staged changes: "$@"" - git commit -m "${PR_TITLE}" - - git push origin "${TEMP_BRANCH}" || error "Failed to create new temporary branch" - end_span -} - -function create_pr() { - start_span "Creating PR against ${TEMP_BRANCH} branch" - # TODO: create label - NEW_PR_URL=$(gh pr create --title "${PR_TITLE}" --body "${PR_BODY}: ${WORKFLOW_URL}" --base "${BASE_BRANCH}" --label "${SKIP_LABEL}" || error "Failed to create PR") # e.g, https://github.com/aws-powertools/powertools-lambda-python/pull/13 - - # greedy remove any string until the last URL path, including the last '/'. https://opensource.com/article/17/6/bash-parameter-expansion - debug "Extracing PR Number from PR URL: "${NEW_PR_URL}"" - NEW_PR_ID="${NEW_PR_URL##*/}" # 13 - export NEW_PR_URL - export NEW_PR_ID - end_span -} - -function close_duplicate_prs() { - start_span "Searching for duplicate PRs" - DUPLICATE_PRS=$(gh pr list --search "${PR_TITLE}" --json number --jq ".[] | select(.number != ${NEW_PR_ID}) | .number") # e.g, 13\n14 - - if [ -z "${DUPLICATE_PRS}" ]; then - debug "No duplicate PRs found" - DUPLICATE_PRS="${NO_DUPLICATES_MESSAGE}" - else - debug "Closing duplicated PRs: "${DUPLICATE_PRS}"" - echo "${DUPLICATE_PRS}" | xargs -L1 gh pr close --delete-branch --comment "Superseded by #${NEW_PR_ID}" - fi - - export readonly DUPLICATE_PRS - end_span -} - -function report_job_output() { - start_span "Updating job outputs" - echo pull_request_id="${NEW_PR_ID}" >>"$GITHUB_OUTPUT" - echo temp_branch="${TEMP_BRANCH}" >>"$GITHUB_OUTPUT" - end_span -} - -function report_summary() { - start_span "Creating job summary" - echo "### Pull request created successfully :rocket: ${NEW_PR_URL}

Closed duplicated PRs: ${DUPLICATE_PRS}" >>"$GITHUB_STEP_SUMMARY" - - notice "PR_URL is: ${NEW_PR_URL}" - notice "PR_BRANCH is: ${TEMP_BRANCH}" - notice "PR_DUPLICATES are: ${DUPLICATE_PRS}" - end_span -} - -function main() { - # Sanity check - has_anything_changed - has_required_config - - create_temporary_branch_with_changes "$@" - create_pr - close_duplicate_prs - - report_job_output - report_summary -} - -main "$@" diff --git a/.github/workflows/make-version.yml b/.github/workflows/make-version.yml index cbb268a43e..fd1c1e75b6 100644 --- a/.github/workflows/make-version.yml +++ b/.github/workflows/make-version.yml @@ -34,12 +34,13 @@ jobs: node-version: ${{ env.NODE_VERSION }} cache: "npm" - name: Setup dependencies - uses: aws-powertools/actions/.github/actions/cached-node-modules@b8e12f37991bb03672113b65cae09d52d494bbef # v1.0.0 + uses: aws-powertools/actions/.github/actions/cached-node-modules@5ae7c190d6b51491bb14f593c3509c1bcbf7a3c1 # v1.1.0 with: node-version: ${{ env.NODE_VERSION }} + build: "false" - name: Version and changelog id: version-n-changelog - uses: aws-powertools/actions/.github/actions/version-n-changelog@b8e12f37991bb03672113b65cae09d52d494bbef # v1.0.0 + uses: aws-powertools/actions/.github/actions/version-n-changelog@5ae7c190d6b51491bb14f593c3509c1bcbf7a3c1 # v1.1.0 with: release-type: ${{ github.event.inputs.release-type }} - name: Update user agent version @@ -50,7 +51,7 @@ jobs: run: git add . - name: Create PR id: create-pr - uses: ./.github/actions/create-pr + uses: aws-powertools/actions/.github/actions/create-pr@5ae7c190d6b51491bb14f593c3509c1bcbf7a3c1 # v1.1.0 with: temp_branch_prefix: "ci-bump" pull_request_title: "chore(ci): bump version to ${{ steps.version-n-changelog.outputs.new-version }}" diff --git a/.github/workflows/publish_layer.yml b/.github/workflows/publish_layer.yml index 2692350f45..cdddff55bd 100644 --- a/.github/workflows/publish_layer.yml +++ b/.github/workflows/publish_layer.yml @@ -106,11 +106,12 @@ jobs: - name: Replace layer versions in documentation run: | ./.github/scripts/update_layer_arn.sh ${{ inputs.layer_documentation_version }} + - name: Stage changes + run: git add . - name: Create PR id: create-pr - uses: ./.github/actions/create-pr + uses: aws-powertools/actions/.github/actions/create-pr@5ae7c190d6b51491bb14f593c3509c1bcbf7a3c1 # v1.1.0 with: - files: 'docs/getting-started/lambda-layers.md' temp_branch_prefix: 'ci-layer-docs' pull_request_title: 'chore(ci): update layer ARN on documentation' github_token: ${{ secrets.GITHUB_TOKEN }}