Skip to content

Commit 4316e25

Browse files
committed
refactor releases to build all first
1 parent c0443a8 commit 4316e25

File tree

2 files changed

+372
-124
lines changed

2 files changed

+372
-124
lines changed

.github/workflows/release-build.yml

Lines changed: 125 additions & 124 deletions
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@ permissions:
2727
contents: write
2828

2929
jobs:
30-
build:
30+
build-sdk:
3131
environment: Release
3232
runs-on: ubuntu-latest
3333
steps:
@@ -62,23 +62,67 @@ jobs:
6262
gpg_private_key: ${{ secrets.GPG_PRIVATE_KEY }}
6363
gpg_password: ${{ secrets.GPG_PASSPHRASE }}
6464

65-
- name: Configure AWS Credentials
66-
uses: aws-actions/configure-aws-credentials@v4
65+
- name: Build release with Gradle
66+
uses: gradle/gradle-build-action@v3
6767
with:
68-
role-to-assume: ${{ secrets.AWS_ASSUME_ROLE_ARN }}
69-
aws-region: ${{ env.AWS_PUBLIC_ECR_REGION }}
68+
arguments: build integrationTests -PlocalDocker=true -Prelease.version=${{ github.event.inputs.version }} --stacktrace
7069

71-
- name: Log in to AWS ECR
72-
uses: docker/login-action@v3
70+
- name: Upload SDK artifact
71+
uses: actions/upload-artifact@v4
7372
with:
74-
registry: public.ecr.aws
73+
name: ${{ env.ARTIFACT_NAME }}
74+
path: otelagent/build/libs/aws-opentelemetry-agent-${{ github.event.inputs.version }}.jar
7575

76-
- name: Build release with Gradle
77-
uses: gradle/gradle-build-action@v3
76+
build-layer:
77+
needs: build-sdk
78+
runs-on: ubuntu-latest
79+
outputs:
80+
aws_regions_json: ${{ steps.set-matrix.outputs.aws_regions_json }}
81+
steps:
82+
- name: Set up regions matrix
83+
id: set-matrix
84+
run: |
85+
IFS=',' read -ra REGIONS <<< "${{ github.event.inputs.aws_region }}"
86+
MATRIX="["
87+
for region in "${REGIONS[@]}"; do
88+
trimmed_region=$(echo "$region" | xargs)
89+
MATRIX+="\"$trimmed_region\","
90+
done
91+
MATRIX="${MATRIX%,}]"
92+
echo ${MATRIX}
93+
echo "aws_regions_json=${MATRIX}" >> $GITHUB_OUTPUT
94+
95+
- name: Checkout Repo @ SHA - ${{ github.sha }}
96+
uses: actions/checkout@v5
97+
98+
- uses: actions/setup-java@dded0888837ed1f317902acf8a20df0ad188d165 # v5.0.0
7899
with:
79-
arguments: build integrationTests -PlocalDocker=true -Prelease.version=${{ github.event.inputs.version }} --stacktrace
100+
java-version-file: .java-version
101+
distribution: 'temurin'
102+
103+
- name: Build layers
104+
working-directory: lambda-layer
105+
run: |
106+
./build-layer.sh
80107
81-
- name: Configure AWS Credentials
108+
- name: Upload layer
109+
uses: actions/upload-artifact@v4
110+
with:
111+
name: layer.zip
112+
path: lambda-layer/build/distributions/aws-opentelemetry-java-layer.zip
113+
114+
publish-sdk:
115+
runs-on: ubuntu-latest
116+
needs: [build-sdk, build-layer]
117+
steps:
118+
- uses: actions/checkout@v5
119+
120+
- uses: actions/setup-java@dded0888837ed1f317902acf8a20df0ad188d165 # v5.0.0
121+
with:
122+
java-version-file: .java-version
123+
distribution: 'temurin'
124+
125+
- name: Configure AWS Credentials for public ECR
82126
uses: aws-actions/configure-aws-credentials@v4
83127
with:
84128
role-to-assume: ${{ secrets.AWS_ASSUME_ROLE_ARN_RELEASE }}
@@ -144,83 +188,9 @@ jobs:
144188
GPG_PRIVATE_KEY: ${{ secrets.GPG_PRIVATE_KEY }}
145189
GPG_PASSPHRASE: ${{ secrets.GPG_PASSPHRASE }}
146190

147-
148-
- name: Get SHA256 checksum of release artifact
149-
id: get_sha256
150-
run: |
151-
cp "otelagent/build/libs/aws-opentelemetry-agent-${{ github.event.inputs.version }}.jar" ${{ env.ARTIFACT_NAME }}
152-
shasum -a 256 ${{ env.ARTIFACT_NAME }} > ${{ env.ARTIFACT_NAME }}.sha256
153-
154-
- name: Create release
155-
env:
156-
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} # This token is provided by Actions, you do not need to create your own token
157-
run: |
158-
# Extract versions from dependency files
159-
OTEL_INSTRUMENTATION_VERSION=$(grep "val otelVersion" dependencyManagement/build.gradle.kts | sed 's/.*= "\([^"]*\)".*/\1/')
160-
OTEL_CONTRIB_VERSION=$(grep "io.opentelemetry.contrib:opentelemetry-aws-xray" dependencyManagement/build.gradle.kts | sed 's/.*:\([^"]*\)".*/\1/')
161-
162-
# Create release notes
163-
cat > release_notes.md << EOF
164-
This release contains updates of the following upstream components:
165-
166-
OpenTelemetry Java - <opentelemetry-java version number - e.g. 1.45.0>
167-
OpenTelemetry Java Contrib - $OTEL_CONTRIB_VERSION
168-
Opentelemetry Instrumentation for Java - $OTEL_INSTRUMENTATION_VERSION
169-
170-
This release also publishes to public ECR and Maven Central.
171-
* See ADOT Java auto-instrumentation Docker image v${{ github.event.inputs.version }} in our public ECR repository:
172-
https://gallery.ecr.aws/aws-observability/adot-autoinstrumentation-java
173-
* See version ${{ github.event.inputs.version }} in our Maven Central repository:
174-
https://central.sonatype.com/artifact/software.amazon.opentelemetry/aws-opentelemetry-agent
175-
EOF
176-
177-
gh release create --target "$GITHUB_REF_NAME" \
178-
--title "Release v${{ github.event.inputs.version }}" \
179-
--notes-file release_notes.md \
180-
--draft \
181-
"v${{ github.event.inputs.version }}" \
182-
${{ env.ARTIFACT_NAME }} \
183-
${{ env.ARTIFACT_NAME }}.sha256
184-
build-layer:
185-
needs: build
186-
runs-on: ubuntu-latest
187-
outputs:
188-
aws_regions_json: ${{ steps.set-matrix.outputs.aws_regions_json }}
189-
steps:
190-
- name: Set up regions matrix
191-
id: set-matrix
192-
run: |
193-
IFS=',' read -ra REGIONS <<< "${{ github.event.inputs.aws_region }}"
194-
MATRIX="["
195-
for region in "${REGIONS[@]}"; do
196-
trimmed_region=$(echo "$region" | xargs)
197-
MATRIX+="\"$trimmed_region\","
198-
done
199-
MATRIX="${MATRIX%,}]"
200-
echo ${MATRIX}
201-
echo "aws_regions_json=${MATRIX}" >> $GITHUB_OUTPUT
202-
203-
- name: Checkout Repo @ SHA - ${{ github.sha }}
204-
uses: actions/checkout@v5
205-
206-
- uses: actions/setup-java@dded0888837ed1f317902acf8a20df0ad188d165 # v5.0.0
207-
with:
208-
java-version-file: .java-version
209-
distribution: 'temurin'
210-
211-
- name: Build layers
212-
working-directory: lambda-layer
213-
run: |
214-
./build-layer.sh
215-
216-
- name: Upload layer
217-
uses: actions/upload-artifact@v4
218-
with:
219-
name: aws-opentelemetry-java-layer.zip
220-
path: lambda-layer/build/distributions/aws-opentelemetry-java-layer.zip
221191
publish-layer-prod:
222192
runs-on: ubuntu-latest
223-
needs: build-layer
193+
needs: [build-layer, publish-sdk]
224194
strategy:
225195
matrix:
226196
aws_region: ${{ fromJson(needs.build-layer.outputs.aws_regions_json) }}
@@ -260,7 +230,7 @@ jobs:
260230
- name: download layer.zip
261231
uses: actions/download-artifact@v5
262232
with:
263-
name: aws-opentelemetry-java-layer.zip
233+
name: layer.zip
264234

265235
- name: publish
266236
run: |
@@ -308,9 +278,12 @@ jobs:
308278
if: always()
309279
run: |
310280
aws s3 rb --force s3://${{ env.BUCKET_NAME }}
281+
311282
generate-lambda-release-note:
312283
runs-on: ubuntu-latest
313284
needs: publish-layer-prod
285+
outputs:
286+
layer-note: ${{ steps.layer-note.outputs.layer-note }}
314287
steps:
315288
- name: Checkout Repo @ SHA - ${{ github.sha }}
316289
uses: actions/checkout@v5
@@ -329,6 +302,7 @@ jobs:
329302
cat $file
330303
done
331304
- name: generate layer-note
305+
id: layer-note
332306
working-directory: ${{ env.LAYER_NAME }}
333307
run: |
334308
echo "| Region | Layer ARN |" >> ../layer-note
@@ -338,7 +312,13 @@ jobs:
338312
read arn < $file
339313
echo "| " $file " | " $arn " |" >> ../layer-note
340314
done
341-
cat ../layer-note
315+
cd ..
316+
{
317+
echo "layer-note<<EOF"
318+
cat layer-note
319+
echo "EOF"
320+
} >> $GITHUB_OUTPUT
321+
cat layer-note
342322
- name: generate tf layer
343323
working-directory: ${{ env.LAYER_NAME }}
344324
run: |
@@ -364,46 +344,67 @@ jobs:
364344
done
365345
echo "}" >> ../layer_cdk
366346
cat ../layer_cdk
367-
- name: download layer.zip
347+
348+
publish-github:
349+
needs: generate-lambda-release-note
350+
runs-on: ubuntu-latest
351+
steps:
352+
- name: Checkout Repo @ SHA - ${{ github.sha }}
353+
uses: actions/checkout@v5
354+
355+
- name: Download SDK artifact
368356
uses: actions/download-artifact@v5
369357
with:
370-
name: aws-opentelemetry-java-layer.zip
371-
- name: Rename layer file
358+
name: ${{ env.ARTIFACT_NAME }}
359+
360+
- name: Download layer.zip artifact
361+
uses: actions/download-artifact@v5
362+
with:
363+
name: layer.zip
364+
365+
- name: Rename artifacts
372366
run: |
367+
cp "aws-opentelemetry-agent-${{ github.event.inputs.version }}.jar" ${{ env.ARTIFACT_NAME }}
373368
cp aws-opentelemetry-java-layer.zip layer.zip
374-
- name: Get commit hash
375-
id: commit
376-
run: echo "sha_short=$(git rev-parse --short HEAD)" >> $GITHUB_OUTPUT
377-
- name: Update GH release
369+
370+
# Publish to GitHub releases
371+
- name: Create GH release
372+
id: create_release
378373
env:
379374
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
380375
run: |
381-
TAG="v${{ github.event.inputs.version }}"
382-
# Generate SHA-256 checksum for layer.zip
376+
# Extract versions from dependency files
377+
OTEL_INSTRUMENTATION_VERSION=$(grep "val otelVersion" dependencyManagement/build.gradle.kts | sed 's/.*= "\([^"]*\)".*/\1/')
378+
OTEL_CONTRIB_VERSION=$(grep "io.opentelemetry.contrib:opentelemetry-aws-xray" dependencyManagement/build.gradle.kts | sed 's/.*:\([^"]*\)".*/\1/')
379+
380+
# Create release notes
381+
cat > release_notes.md << EOF
382+
This release contains updates of the following upstream components:
383+
384+
OpenTelemetry Java Contrib - $OTEL_CONTRIB_VERSION
385+
Opentelemetry Instrumentation for Java - $OTEL_INSTRUMENTATION_VERSION
386+
387+
This release also publishes to public ECR and Maven Central.
388+
* See ADOT Java auto-instrumentation Docker image v${{ github.event.inputs.version }} in our public ECR repository:
389+
https://gallery.ecr.aws/aws-observability/adot-autoinstrumentation-java
390+
* See version ${{ github.event.inputs.version }} in our Maven Central repository:
391+
https://central.sonatype.com/artifact/software.amazon.opentelemetry/aws-opentelemetry-agent
392+
393+
This release also includes the AWS OpenTelemetry Lambda Layer for Java version ${{ github.event.inputs.version }}-$(echo $GITHUB_SHA | cut -c1-7).
394+
395+
Lambda Layer ARNs:
396+
${{ needs.generate-lambda-release-note.outputs.layer-note }}
397+
EOF
398+
399+
shasum -a 256 ${{ env.ARTIFACT_NAME }} > ${{ env.ARTIFACT_NAME }}.sha256
383400
shasum -a 256 layer.zip > layer.zip.sha256
384-
gh release upload $TAG \
385-
layer.zip \
386-
layer.zip.sha256 \
387-
layer_arns.tf \
388-
--clobber
389-
- name: Update Release Notes
390-
env:
391-
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
392-
run: |
393-
TAG="v${{ github.event.inputs.version }}"
394-
# Get current release notes
395-
current_notes=$(gh release view $TAG --json body -q .body)
396-
echo "This release also includes the AWS OpenTelemetry Lambda Layer for Java version ${{ github.event.inputs.version }}-${{ steps.commit.outputs.sha_short }}." >> lambda_notes.md
397-
echo "" >> lambda_notes.md
398-
echo "Lambda Layer ARNs:" >> lambda_notes.md
399-
echo "" >> lambda_notes.md
400-
cat layer-note >> lambda_notes.md
401-
echo "" >> lambda_notes.md
402-
echo "Notes:" >> lambda_notes.md
403-
{
404-
echo "$current_notes"
405-
echo ""
406-
cat lambda_notes.md
407-
} > updated_notes.md
408-
# Update release notes
409-
gh release edit $TAG --notes-file updated_notes.md
401+
402+
gh release create --target "$GITHUB_REF_NAME" \
403+
--title "Release v${{ github.event.inputs.version }}" \
404+
--notes-file release_notes.md \
405+
--draft \
406+
"v${{ github.event.inputs.version }}" \
407+
${{ env.ARTIFACT_NAME }} \
408+
${{ env.ARTIFACT_NAME }}.sha256 \
409+
layer.zip \
410+
layer.zip.sha256

0 commit comments

Comments
 (0)