Skip to content

Commit d463605

Browse files
authored
Revert "Merge SDK and Lambda Releases (#253)" (#260)
This reverts commit ba05c23 (#253). We will merge again after our release process is finalized. *Issue #, if available:* *Description of changes:* By submitting this pull request, I confirm that you can use, modify, copy, and redistribute this contribution, under the terms of your choice.
1 parent ba05c23 commit d463605

File tree

2 files changed

+267
-268
lines changed

2 files changed

+267
-268
lines changed

.github/workflows/release-build.yml

Lines changed: 26 additions & 268 deletions
Original file line numberDiff line numberDiff line change
@@ -5,10 +5,6 @@ on:
55
version:
66
description: The version to tag the release with, e.g., 1.2.0
77
required: true
8-
aws_region:
9-
description: 'Deploy lambda layer to aws regions'
10-
required: true
11-
default: 'us-east-1, us-east-2, us-west-1, us-west-2, ap-south-1, ap-northeast-3, ap-northeast-2, ap-southeast-1, ap-southeast-2, ap-northeast-1, ca-central-1, eu-central-1, eu-west-1, eu-west-2, eu-west-3, eu-north-1, sa-east-1, af-south-1, ap-east-1, ap-south-2, ap-southeast-3, ap-southeast-4, eu-central-2, eu-south-1, eu-south-2, il-central-1, me-central-1, me-south-1, ap-southeast-5, ap-southeast-7, mx-central-1, ca-west-1, cn-north-1, cn-northwest-1'
128

139
env:
1410
AWS_DEFAULT_REGION: us-east-1
@@ -18,21 +14,18 @@ env:
1814
RELEASE_PRIVATE_REPOSITORY: 020628701572.dkr.ecr.us-west-2.amazonaws.com/adot-autoinstrumentation-node
1915
RELEASE_PRIVATE_REGISTRY: 020628701572.dkr.ecr.us-west-2.amazonaws.com
2016
PACKAGE_NAME: aws-distro-opentelemetry-node-autoinstrumentation
21-
ARTIFACT_NAME: aws-aws-distro-opentelemetry-node-autoinstrumentation-${{ github.event.inputs.version }}.tgz
22-
# Legacy list of commercial regions to deploy to. New regions should NOT be added here, and instead should be added to the `aws_region` default input to the workflow.
23-
LEGACY_COMMERCIAL_REGIONS: us-east-1, us-east-2, us-west-1, us-west-2, ap-south-1, ap-northeast-3, ap-northeast-2, ap-southeast-1, ap-southeast-2, ap-northeast-1, ca-central-1, eu-central-1, eu-west-1, eu-west-2, eu-west-3, eu-north-1, sa-east-1
24-
LAYER_NAME: AWSOpenTelemetryDistroJs
17+
ARTIFACT_NAME: aws-aws-distro-opentelemetry-node-autoinstrumentation-${{ github.event.inputs.version }}.tgz
2518

2619
permissions:
2720
id-token: write
2821
contents: write
2922

3023
jobs:
31-
build-sdk:
24+
build:
3225
environment: Release
3326
runs-on: ubuntu-latest
3427
steps:
35-
- name: Checkout Repo @ SHA - ${{ github.sha }}
28+
- name: Checkout Contrib Repo @ SHA - ${{ github.sha }}
3629
uses: actions/checkout@v4
3730

3831
- name: Check main build status
@@ -63,59 +56,9 @@ jobs:
6356
package_name: aws-distro-opentelemetry-node-autoinstrumentation
6457
os: ubuntu-latest
6558

66-
- name: Upload SDK Tarball
67-
uses: actions/upload-artifact@v4
68-
with:
69-
name: ${{ env.ARTIFACT_NAME }}
70-
path: aws-distro-opentelemetry-node-autoinstrumentation/${{ env.ARTIFACT_NAME }}
71-
7259
# TODO: Add some sort of smoke/integration testing before we go
7360
# release the artifacts. adot java for reference:
7461
# https://github.com/aws-observability/aws-otel-java-instrumentation/tree/93870a550ac30988fbdd5d3bf1e8f9f1b37916f5/smoke-tests
75-
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-
- name: Checkout Repo @ SHA - ${{ github.sha }}
95-
uses: actions/checkout@v4
96-
- name: Setup Node
97-
uses: actions/setup-node@v4
98-
with:
99-
node-version: 22
100-
- name: NPM Clean Install
101-
# https://docs.npmjs.com/cli/v10/commands/npm-ci
102-
run: npm ci
103-
- name: Compile all NPM projects
104-
run: npm run compile
105-
- name: Build Lambda Layer
106-
run: npm run build-lambda
107-
- name: upload layer
108-
uses: actions/upload-artifact@v4
109-
with:
110-
name: layer.zip
111-
path: lambda-layer/packages/layer/build/layer.zip
112-
113-
publish-sdk:
114-
needs: [build-sdk, build-layer]
115-
runs-on: ubuntu-latest
116-
steps:
117-
- name: Checkout Repo @ SHA - ${{ github.sha }}
118-
uses: actions/checkout@v4
11962

12063
- name: Configure AWS credentials for private ECR
12164
uses: aws-actions/configure-aws-credentials@v4
@@ -139,6 +82,7 @@ jobs:
13982
with:
14083
registry: public.ecr.aws
14184

85+
14286
# Publish to public ECR
14387
- name: Build and push public ECR image
14488
uses: docker/build-push-action@v5
@@ -161,223 +105,37 @@ jobs:
161105
tags: |
162106
${{ env.RELEASE_PRIVATE_REPOSITORY }}:v${{ github.event.inputs.version }}
163107
164-
# Publish '@aws/aws-distro-opentelemetry-node-autoinstrumentation' to npm
165-
- name: Publish autoinstrumentation to npm
166-
working-directory: aws-distro-opentelemetry-node-autoinstrumentation
167-
env:
168-
NODE_AUTH_TOKEN: ${{secrets.NPM_TOKEN}}
169-
NPM_CONFIG_PROVENANCE: true
170-
run: npm publish
171-
172-
publish-layer-prod:
173-
runs-on: ubuntu-latest
174-
needs: [build-layer, publish-sdk]
175-
strategy:
176-
matrix:
177-
aws_region: ${{ fromJson(needs.build-layer.outputs.aws_regions_json) }}
178-
steps:
179-
- name: role arn
180-
env:
181-
LEGACY_COMMERCIAL_REGIONS: ${{ env.LEGACY_COMMERCIAL_REGIONS }}
182-
run: |
183-
LEGACY_COMMERCIAL_REGIONS_ARRAY=(${LEGACY_COMMERCIAL_REGIONS//,/ })
184-
FOUND=false
185-
for REGION in "${LEGACY_COMMERCIAL_REGIONS_ARRAY[@]}"; do
186-
if [[ "$REGION" == "${{ matrix.aws_region }}" ]]; then
187-
FOUND=true
188-
break
189-
fi
190-
done
191-
if [ "$FOUND" = true ]; then
192-
echo "Found ${{ matrix.aws_region }} in LEGACY_COMMERCIAL_REGIONS"
193-
SECRET_KEY="LAMBDA_LAYER_RELEASE"
194-
else
195-
echo "Not found ${{ matrix.aws_region }} in LEGACY_COMMERCIAL_REGIONS"
196-
SECRET_KEY="${{ matrix.aws_region }}_LAMBDA_LAYER_RELEASE"
197-
fi
198-
SECRET_KEY=${SECRET_KEY//-/_}
199-
echo "SECRET_KEY=${SECRET_KEY}" >> $GITHUB_ENV
200-
- uses: aws-actions/[email protected]
201-
with:
202-
role-to-assume: ${{ secrets[env.SECRET_KEY] }}
203-
role-duration-seconds: 1200
204-
aws-region: ${{ matrix.aws_region }}
205-
- name: Get s3 bucket name for release
206-
run: |
207-
echo BUCKET_NAME=nodejs-lambda-layer-${{ github.run_id }}-${{ matrix.aws_region }} | tee --append $GITHUB_ENV
208-
- name: download layer.zip
209-
uses: actions/download-artifact@v4
210-
with:
211-
name: layer.zip
212-
- name: publish
213-
run: |
214-
aws s3 mb s3://${{ env.BUCKET_NAME }}
215-
aws s3 cp layer.zip s3://${{ env.BUCKET_NAME }}
216-
layerARN=$(
217-
aws lambda publish-layer-version \
218-
--layer-name ${{ env.LAYER_NAME }} \
219-
--content S3Bucket=${{ env.BUCKET_NAME }},S3Key=layer.zip \
220-
--compatible-runtimes nodejs18.x nodejs20.x nodejs22.x \
221-
--compatible-architectures "arm64" "x86_64" \
222-
--license-info "Apache-2.0" \
223-
--description "AWS Distro of OpenTelemetry Lambda Layer for NodeJs Runtime" \
224-
--query 'LayerVersionArn' \
225-
--output text
226-
)
227-
echo $layerARN
228-
echo "LAYER_ARN=${layerARN}" >> $GITHUB_ENV
229-
mkdir ${{ env.LAYER_NAME }}
230-
echo $layerARN > ${{ env.LAYER_NAME }}/${{ matrix.aws_region }}
231-
cat ${{ env.LAYER_NAME }}/${{ matrix.aws_region }}
232-
- name: public layer
233-
run: |
234-
layerVersion=$(
235-
aws lambda list-layer-versions \
236-
--layer-name ${{ env.LAYER_NAME }} \
237-
--query 'max_by(LayerVersions, &Version).Version'
238-
)
239-
aws lambda add-layer-version-permission \
240-
--layer-name ${{ env.LAYER_NAME }} \
241-
--version-number $layerVersion \
242-
--principal "*" \
243-
--statement-id publish \
244-
--action lambda:GetLayerVersion
245-
- name: upload layer arn artifact
246-
if: ${{ success() }}
247-
uses: actions/upload-artifact@v4
248-
with:
249-
name: ${{ env.LAYER_NAME }}-${{ matrix.aws_region }}
250-
path: ${{ env.LAYER_NAME }}/${{ matrix.aws_region }}
251-
- name: clean s3
252-
if: always()
253-
run: |
254-
aws s3 rb --force s3://${{ env.BUCKET_NAME }}
255-
256-
generate-lambda-release-note:
257-
runs-on: ubuntu-latest
258-
needs: publish-layer-prod
259-
outputs:
260-
layer-note: ${{ steps.layer-note.outputs.layer-note }}
261-
steps:
262-
- name: Checkout Repo @ SHA - ${{ github.sha }}
263-
uses: actions/checkout@v4
264-
- uses: hashicorp/setup-terraform@v2
265-
- name: download layerARNs
266-
uses: actions/download-artifact@v4
267-
with:
268-
pattern: ${{ env.LAYER_NAME }}-*
269-
path: ${{ env.LAYER_NAME }}
270-
merge-multiple: true
271-
- name: show layerARNs
272-
run: |
273-
for file in ${{ env.LAYER_NAME }}/*
274-
do
275-
echo $file
276-
cat $file
277-
done
278-
- name: generate layer-note
279-
id: layer-note
280-
working-directory: ${{ env.LAYER_NAME }}
108+
- name: Get SHA256 checksum of release artifact
109+
id: get_sha256
281110
run: |
282-
echo "| Region | Layer ARN |" >> ../layer-note
283-
echo "| ---- | ---- |" >> ../layer-note
284-
for file in *
285-
do
286-
read arn < $file
287-
echo "| " $file " | " $arn " |" >> ../layer-note
288-
done
289-
cd ..
290-
{
291-
echo "layer-note<<EOF"
292-
cat layer-note
293-
echo "EOF"
294-
} >> $GITHUB_OUTPUT
295-
cat layer-note
296-
- name: generate tf layer
297-
working-directory: ${{ env.LAYER_NAME }}
298-
run: |
299-
echo "locals {" >> ../layer_arns.tf
300-
echo " sdk_layer_arns = {" >> ../layer_arns.tf
301-
for file in *
302-
do
303-
read arn < $file
304-
echo " \""$file"\" = \""$arn"\"" >> ../layer_arns.tf
305-
done
306-
cd ..
307-
echo " }" >> layer_arns.tf
308-
echo "}" >> layer_arns.tf
309-
terraform fmt layer_arns.tf
310-
cat layer_arns.tf
311-
- name: generate layer ARN constants for CDK
312-
working-directory: ${{ env.LAYER_NAME }}
313-
run: |
314-
echo "{" > ../layer_cdk
315-
for file in *; do
316-
read arn < "$file"
317-
echo " \"$file\": \"$arn\"," >> ../layer_cdk
318-
done
319-
echo "}" >> ../layer_cdk
320-
cat ../layer_cdk
321-
322-
publish-github:
323-
needs: generate-lambda-release-note
324-
runs-on: ubuntu-latest
325-
steps:
326-
- name: Checkout Repo @ SHA - ${{ github.sha }}
327-
uses: actions/checkout@v4
328-
329-
- name: Download SDK artifact
330-
uses: actions/download-artifact@v4
331-
with:
332-
name: ${{ env.ARTIFACT_NAME }}
333-
334-
- name: Download layer.zip artifact
335-
uses: actions/download-artifact@v4
336-
with:
337-
name: layer.zip
338-
111+
shasum -a 256 aws-distro-opentelemetry-node-autoinstrumentation/${{ env.ARTIFACT_NAME }} | sed "s|aws-distro-opentelemetry-node-autoinstrumentation/||" > ${{ env.ARTIFACT_NAME }}.sha256
112+
339113
# Publish to GitHub releases
340114
- name: Create GH release
341115
id: create_release
342116
env:
343-
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
117+
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} # This token is provided by Actions, you do not need to create your own token
344118
run: |
345-
# Generate dependency versions from package.json
346-
DEPS=$(node -e "
347-
const pkg = require('./aws-distro-opentelemetry-node-autoinstrumentation/package.json');
348-
const deps = Object.entries(pkg.dependencies || {})
349-
.map(([name, version]) => \`- \\\`\${name}\\\` - \${version}\`)
350-
.join('\n');
351-
console.log(deps);
352-
")
353-
354-
# Create release notes
355-
cat > release_notes.md << EOF
356-
This release contains the following upstream components:
357-
358-
$DEPS
359-
360-
This release also publishes to public ECR and NPM.
361-
* See ADOT node auto-instrumentation Docker image v${{ github.event.inputs.version }} in our public ECR repository:
362-
https://gallery.ecr.aws/aws-observability/adot-autoinstrumentation-node
363-
* See version ${{ github.event.inputs.version }} in our NPM repository:
364-
https://www.npmjs.com/package/@aws/aws-distro-opentelemetry-node-autoinstrumentation
365-
366-
This release also includes the AWS OpenTelemetry Lambda Layer for JavaScript version ${{ github.event.inputs.version }}-$(echo $GITHUB_SHA | cut -c1-7).
367-
368-
Lambda Layer ARNs:
369-
${{ needs.generate-lambda-release-note.outputs.layer-note }}
370-
EOF
371-
372-
shasum -a 256 ${{ env.ARTIFACT_NAME }} > ${{ env.ARTIFACT_NAME }}.sha256
373-
shasum -a 256 layer.zip > layer.zip.sha256
119+
# Download layer.zip from existing latest tagged SDK release note
120+
LATEST_SDK_VERSION=$(gh release list --repo "aws-observability/aws-otel-js-instrumentation" --json tagName,isLatest -q 'map(select(.isLatest==true)) | .[0].tagName')
121+
mkdir -p layer_artifact
122+
gh release download "$LATEST_SDK_VERSION" --repo "aws-observability/aws-otel-js-instrumentation" --pattern "layer.zip" --dir layer_artifact
123+
shasum -a 256 layer_artifact/layer.zip > layer_artifact/layer.zip.sha256
374124
375125
gh release create --target "$GITHUB_REF_NAME" \
376126
--title "Release v${{ github.event.inputs.version }}" \
377-
--notes-file release_notes.md \
378127
--draft \
379128
"v${{ github.event.inputs.version }}" \
380-
${{ env.ARTIFACT_NAME }} \
129+
aws-distro-opentelemetry-node-autoinstrumentation/${{ env.ARTIFACT_NAME }} \
381130
${{ env.ARTIFACT_NAME }}.sha256 \
382-
layer.zip \
383-
layer.zip.sha256
131+
layer_artifact/layer.zip \
132+
layer_artifact/layer.zip.sha256
133+
134+
# Publish '@aws/aws-distro-opentelemetry-node-autoinstrumentation' to npm
135+
- name: Publish autoinstrumentation to npm
136+
working-directory: aws-distro-opentelemetry-node-autoinstrumentation
137+
env:
138+
NODE_AUTH_TOKEN: ${{secrets.NPM_TOKEN}}
139+
NPM_CONFIG_PROVENANCE: true
140+
run: npm publish
141+

0 commit comments

Comments
 (0)