From e7c9149f0331db4d56c7a1662d2a19f9f63b27c0 Mon Sep 17 00:00:00 2001 From: lispking Date: Sun, 14 Jan 2024 15:31:20 +0800 Subject: [PATCH] issue(#4): CI/CD workflows with Github Actions --- .github/pipeline-descriptor.yml | 13 ++++ .github/workflows/pb-update-pipeline.yml | 87 ++++++++++++++++++++++++ 2 files changed, 100 insertions(+) create mode 100644 .github/pipeline-descriptor.yml create mode 100644 .github/workflows/pb-update-pipeline.yml diff --git a/.github/pipeline-descriptor.yml b/.github/pipeline-descriptor.yml new file mode 100644 index 0000000..4d23837 --- /dev/null +++ b/.github/pipeline-descriptor.yml @@ -0,0 +1,13 @@ +github: + username: ${{ github.actor }} + token: ${{ secrets.AMP_BUILDPACKS_BOT_GITHUB_TOKEN }} + +package: + repositories: ["ghcr.io/amp-buildpacks/solc"] + register: false + registry_token: ${{ secrets.AMP_BUILDPACKS_BOT_GITHUB_TOKEN }} + +docker_credentials: + - registry: ghcr.io + username: ${{ github.actor }} + password: ${{ secrets.AMP_BUILDPACKS_BOT_GITHUB_TOKEN }} diff --git a/.github/workflows/pb-update-pipeline.yml b/.github/workflows/pb-update-pipeline.yml new file mode 100644 index 0000000..fc2fe65 --- /dev/null +++ b/.github/workflows/pb-update-pipeline.yml @@ -0,0 +1,87 @@ +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@v4 + with: + go-version: "1.20" + - 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@v3 + - 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 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.AMP_BUILDPACKS_BOT_GITHUB_TOKEN }} + - uses: peter-evans/create-pull-request@v5 + with: + author: ${{ github.actor }} <${{ github.actor }}@users.noreply.github.com> + body: |- + Bumps pipeline from `${{ steps.pipeline.outputs.old-version }}` to `${{ steps.pipeline.outputs.new-version }}`. + +
+ Release Notes + ${{ steps.pipeline.outputs.release-notes }} +
+ 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.AMP_BUILDPACKS_BOT_GITHUB_TOKEN }}