From 4799cdbd6f0dac3f876fe3454fa3d3e4dc9c3dae Mon Sep 17 00:00:00 2001 From: Harry Date: Fri, 1 Nov 2024 14:52:06 -0700 Subject: [PATCH] Add metafile.json to track version and checksum of artifacts --- .../workflows/post_release_version_bump.yml | 136 ++++++++++++++++++ .../javaagent/providers/ArtifactVersion.java | 20 +++ checksum.txt | 0 release-build-metadata.json | 13 ++ version.txt | 0 5 files changed, 169 insertions(+) create mode 100644 .github/workflows/post_release_version_bump.yml create mode 100644 awsagentprovider/src/main/java/software/amazon/opentelemetry/javaagent/providers/ArtifactVersion.java create mode 100644 checksum.txt create mode 100644 release-build-metadata.json create mode 100644 version.txt diff --git a/.github/workflows/post_release_version_bump.yml b/.github/workflows/post_release_version_bump.yml new file mode 100644 index 000000000..7df498d1c --- /dev/null +++ b/.github/workflows/post_release_version_bump.yml @@ -0,0 +1,136 @@ +name: Post Release - Prepare Main for Next Development Cycle + +on: + workflow_dispatch: + inputs: + version: + description: 'Version number (e.g., 1.0.1)' + required: true + +env: + AWS_DEFAULT_REGION: us-east-1 + +permissions: + id-token: write + contents: write + pull-requests: write + +jobs: + check-version: + runs-on: ubuntu-latest + steps: + - name: Checkout main + uses: actions/checkout@v2 + with: + ref: main + fetch-depth: 0 + + - name: Extract Major.Minor Version and setup Env variable + run: | + echo "VERSION=${{ github.event.inputs.version }}" >> $GITHUB_ENV + echo "MAJOR_MINOR=$(echo ${{ github.event.inputs.version }} | sed -E 's/([0-9]+\.[0-9]+)\.[0-9]+/\1/')" >> $GITHUB_ENV + + - name: Get current major.minor version from main branch + id: get_version + run: | + CURRENT_VERSION=$(grep 'public final String VERSION' awsagentprovider/src/main/java/software/amazon/opentelemetry/javaagent/providers/ArtifactVersion.java | sed -E 's/ public final String VERSION = "([0-9]+\.[0-9]+)\.[0-9]+.*";/\1/') + echo "CURRENT_MAJOR_MINOR_VERSION=$CURRENT_VERSION" >> $GITHUB_ENV + + - name: Set major and minor for current version + run: | + echo "CURRENT_MAJOR=$(echo $CURRENT_MAJOR_MINOR_VERSION | cut -d. -f1)" >> $GITHUB_ENV + echo "CURRENT_MINOR=$(echo $CURRENT_MAJOR_MINOR_VERSION | cut -d. -f2)" >> $GITHUB_ENV + + - name: Set major and minor for input version + run: | + echo "INPUT_MAJOR=$(echo $MAJOR_MINOR | cut -d. -f1)" >> $GITHUB_ENV + echo "INPUT_MINOR=$(echo $MAJOR_MINOR | cut -d. -f2)" >> $GITHUB_ENV + + - name: Compare major.minor version and skip if behind + run: | + if [ "$CURRENT_MAJOR" -gt "$INPUT_MAJOR" ] || { [ "$CURRENT_MAJOR" -eq "$INPUT_MAJOR" ] && [ "$CURRENT_MINOR" -gt "$INPUT_MINOR" ]; }; then + echo "Input version is behind main's current major.minor version, don't need to update major version" + exit 1 + fi + + prepare-main: + runs-on: ubuntu-latest + needs: check-version + steps: + - name: Configure AWS credentials for BOT secrets + uses: aws-actions/configure-aws-credentials@v4 + with: + role-to-assume: ${{ secrets.AWS_ROLE_ARN_SECRETS_MANAGER }} + aws-region: ${{ env.AWS_DEFAULT_REGION }} + + - name: Get Bot secrets + uses: aws-actions/aws-secretsmanager-get-secrets@v1 + id: bot_secrets + with: + secret-ids: | + BOT_TOKEN ,${{ secrets.BOT_TOKEN_SECRET_ARN }} + parse-json-secrets: true + + - name: Setup Git + uses: actions/checkout@v2 + with: + fetch-depth: 0 + token: ${{ env.BOT_TOKEN_GITHUB_RW_PATOKEN }} + + - name: Configure Git + run: | + git config user.name "github-actions" + git config user.email "github-actions@github.com" + + - name: Extract Major.Minor Version and setup Env variable + run: | + echo "VERSION=${{ github.event.inputs.version }}" >> $GITHUB_ENV + echo "MAJOR_MINOR=$(echo ${{ github.event.inputs.version }} | sed -E 's/([0-9]+\.[0-9]+)\.[0-9]+/\1/')" >> $GITHUB_ENV + + - name: Determine release branch and checkout + run: | + RELEASE_BRANCH="release/v${MAJOR_MINOR}.x" + git fetch origin $RELEASE_BRANCH + git checkout -b "prepare-main-for-next-dev-cycle-${VERSION}" origin/$RELEASE_BRANCH + + - name: Update version to next development version in main + run: | + DEV_VERSION="${{ github.event.inputs.version }}.dev0" + sed -i "s/public final String VERSION = \".*\";/public final String VERSION = \"${DEV_VERSION}\";/" awsagentprovider/src/main/java/software/amazon/opentelemetry/javaagent/providers/ArtifactVersion.java + VERSION="${{ github.event.inputs.version }}" + git add awsagentprovider/src/main/java/software/amazon/opentelemetry/javaagent/providers/ArtifactVersion.java + + - name: Append latest release checksum to release-build-metadata.json + run: | + ARTIFACT_NAME="aws-opentelemetry-agent.jar" + curl -L -o $ARTIFACT_NAME https://github.com/aws-observability/aws-otel-java-instrumentation/releases/download/v${{ github.event.inputs.version }}/$ARTIFACT_NAME + + CHECKSUM=$(shasum -a 256 $ARTIFACT_NAME | awk '{ print $1 }') + + FILE="release-build-metadata.json" + UPDATED_JSON=$(jq --arg version "${{ env.VERSION }}" \ + --arg name "$ARTIFACT_NAME" \ + --arg checksum "$CHECKSUM" \ + '.release += [{"version": $version, "checksum": [{"name": $name, "checksum": $checksum}]}]' "$FILE") + + echo "$UPDATED_JSON" > "$FILE" + git add release-build-metadata.json + + - name: Push changes to Github + run: | + git commit -m "Prepare main for next development cycle: Update version to ${{ github.event.inputs.version }}" + git push --set-upstream origin "prepare-main-for-next-dev-cycle-${{ github.event.inputs.version }}" + + - name: Create Pull Request to main + env: + GITHUB_TOKEN: ${{ env.BOT_TOKEN_GITHUB_RW_PATOKEN }} + run: | + DEV_VERSION="${{ github.event.inputs.version }}.dev0" + gh pr create --title "Post release $VERSION: Update version to $DEV_VERSION" \ + --body "This PR prepares the main branch for the next development cycle by updating the version to $DEV_VERSION and updating the image version to be scanned to the latest released. + + This PR should only be merge when release for version v$VERSION is success. + + By submitting this pull request, I confirm that you can use, modify, copy, and redistribute this contribution, under the terms of your choice." \ + --head prepare-main-for-next-dev-cycle-${VERSION} \ + --base main \ No newline at end of file diff --git a/awsagentprovider/src/main/java/software/amazon/opentelemetry/javaagent/providers/ArtifactVersion.java b/awsagentprovider/src/main/java/software/amazon/opentelemetry/javaagent/providers/ArtifactVersion.java new file mode 100644 index 000000000..ef93b91cc --- /dev/null +++ b/awsagentprovider/src/main/java/software/amazon/opentelemetry/javaagent/providers/ArtifactVersion.java @@ -0,0 +1,20 @@ +/* + * Copyright Amazon.com, Inc. or its affiliates. + * + * Licensed under the Apache License, Version 2.0 (the "License"). + * You may not use this file except in compliance with the License. + * A copy of the License is located at + * + * http://aws.amazon.com/apache2.0 + * + * or in the "license" file accompanying this file. This file is distributed + * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either + * express or implied. See the License for the specific language governing + * permissions and limitations under the License. + */ + +package software.amazon.opentelemetry.javaagent.providers; + +public final class ArtifactVersion { + public final String VERSION = "1.32.5.dev0"; +} \ No newline at end of file diff --git a/checksum.txt b/checksum.txt new file mode 100644 index 000000000..e69de29bb diff --git a/release-build-metadata.json b/release-build-metadata.json new file mode 100644 index 000000000..fe46d3c6d --- /dev/null +++ b/release-build-metadata.json @@ -0,0 +1,13 @@ +{ + "release": [ + { + "version": "1.32.5", + "checksum": [ + { + "name": "aws-opentelemetry-agent.jar", + "checksum": "1644b11c2c90747c99934c3c52d800e95bfb854e459ba9f50054b21233c65c37" + } + ] + } + ] +} \ No newline at end of file diff --git a/version.txt b/version.txt new file mode 100644 index 000000000..e69de29bb