Skip to content

Commit 2425c86

Browse files
Merge pull request #76 from iwaduarte/feat/improve-layers
feat/improve layers
2 parents 63aa55f + cc87f83 commit 2425c86

File tree

3 files changed

+117
-49
lines changed

3 files changed

+117
-49
lines changed

.github/workflows/layers_dispatch.yaml

Lines changed: 42 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -34,65 +34,90 @@ jobs:
3434
id: latest_release
3535
run: |
3636
JSON_RESPONSE=$(curl -s https://api.github.com/repos/Sparticuz/chromium/releases/latest)
37-
LATEST_RELEASE_URL=$(echo $JSON_RESPONSE | grep -Po '"browser_download_url": "\K[^"]+' | awk 'NR==1')
3837
TAG_VERSION=$(echo $JSON_RESPONSE | grep -Po '"tag_name": "\K[^"]+')
3938
if [[ "$TAG_VERSION" == "${{ steps.prev_tag_version.outputs.tag }}" ]]; then
4039
echo "Skipping as the tag version is the same as the previous run."
41-
exit 78
40+
echo "skip=true" >> $GITHUB_OUTPUT
41+
exit 0
4242
fi
43-
echo "LATEST_RELEASE_URL=$LATEST_RELEASE_URL" >> $GITHUB_ENV
43+
echo "skip=false" >> $GITHUB_OUTPUT
4444
echo "TAG_VERSION=$TAG_VERSION" >> $GITHUB_ENV
45-
echo "FILENAME=chromium-$TAG_VERSION.zip" >> $GITHUB_ENV
45+
echo "X64_URL=https://github.com/Sparticuz/chromium/releases/download/$TAG_VERSION/chromium-$TAG_VERSION-layer.x64.zip" >> $GITHUB_ENV
46+
echo "ARM64_URL=https://github.com/Sparticuz/chromium/releases/download/$TAG_VERSION/chromium-$TAG_VERSION-layer.arm64.zip" >> $GITHUB_ENV
47+
echo "X64_FILENAME=chromium-$TAG_VERSION-layer.x64.zip" >> $GITHUB_ENV
48+
echo "ARM64_FILENAME=chromium-$TAG_VERSION-layer.arm64.zip" >> $GITHUB_ENV
4649
4750
- name: Update Tag Version
51+
if: steps.latest_release.outputs.skip == 'false'
4852
run: echo ${{ env.TAG_VERSION }} > .tag_version
4953

5054
- name: Download Latest Release
55+
if: steps.latest_release.outputs.skip == 'false'
5156
run: |
52-
curl -LO ${{ env.LATEST_RELEASE_URL }}
53-
FILEPATH=$(basename ${{ env.LATEST_RELEASE_URL }})
54-
echo "FILEPATH=$FILEPATH" >> $GITHUB_ENV
57+
curl -LO ${{ env.X64_URL }}
58+
curl -LO ${{ env.ARM64_URL }}
5559
5660
- name: Upload to S3
61+
if: steps.latest_release.outputs.skip == 'false'
5762
run: |
5863
for REGION in ${{ env.AWS_REGIONS }}; do
5964
BUCKET_NAME="${{ env.S3_BUCKET_NAME }}-$REGION"
6065
aws configure set region $REGION
61-
aws s3 cp ${{ env.FILEPATH }} s3://$BUCKET_NAME/${{ env.FILENAME }} &
66+
aws s3 cp ${{ env.X64_FILENAME }} s3://$BUCKET_NAME/${{ env.X64_FILENAME }} &
67+
aws s3 cp ${{ env.ARM64_FILENAME }} s3://$BUCKET_NAME/${{ env.ARM64_FILENAME }} &
6268
done
6369
wait
6470
6571
- name: Publish to AWS Regions with Permissions
72+
if: steps.latest_release.outputs.skip == 'false'
6673
run: |
6774
for REGION in ${{ env.AWS_REGIONS }}; do
6875
BUCKET_NAME="${{ env.S3_BUCKET_NAME }}-$REGION"
69-
7076
aws configure set region $REGION
7177
7278
{
73-
NEW_VERSION_NUMBER=$(aws lambda publish-layer-version \
74-
--layer-name chrome-aws-lambda \
75-
--content S3Bucket=$BUCKET_NAME,S3Key=${{ env.FILENAME }} \
79+
X64_VERSION=$(aws lambda publish-layer-version \
80+
--layer-name chrome-aws-lambda-x64 \
81+
--content S3Bucket=$BUCKET_NAME,S3Key=${{ env.X64_FILENAME }} \
82+
--region $REGION \
83+
--compatible-architectures x86_64 \
84+
--description "@sparticuz/chromium v${{ env.TAG_VERSION }} x64" \
85+
--query Version \
86+
--output text)
87+
88+
aws lambda add-layer-version-permission \
89+
--region "$REGION" \
90+
--layer-name chrome-aws-lambda-x64 \
91+
--statement-id sid1 \
92+
--action lambda:GetLayerVersion \
93+
--principal '*' \
94+
--version-number $X64_VERSION
95+
96+
ARM64_VERSION=$(aws lambda publish-layer-version \
97+
--layer-name chrome-aws-lambda-arm64 \
98+
--content S3Bucket=$BUCKET_NAME,S3Key=${{ env.ARM64_FILENAME }} \
7699
--region $REGION \
77-
--compatible-architecture x86_64 \
78-
--description "@sparticuz/chromium v${{ env.TAG_VERSION }} & Chromium v${{ env.TAG_VERSION }}" \
100+
--compatible-architectures arm64 \
101+
--description "@sparticuz/chromium v${{ env.TAG_VERSION }} arm64" \
79102
--query Version \
80103
--output text)
81104
82105
aws lambda add-layer-version-permission \
83106
--region "$REGION" \
84-
--layer-name chrome-aws-lambda \
107+
--layer-name chrome-aws-lambda-arm64 \
85108
--statement-id sid1 \
86109
--action lambda:GetLayerVersion \
87110
--principal '*' \
88-
--version-number $NEW_VERSION_NUMBER
89-
echo "Published and permissions added for ${{ env.FILENAME }} in $REGION"
111+
--version-number $ARM64_VERSION
112+
113+
echo "Published x64:$X64_VERSION and arm64:$ARM64_VERSION for $REGION"
90114
} &
91115
done
92116
wait
93117
94118
95119
- name: Commit Tag Version
120+
if: steps.latest_release.outputs.skip == 'false'
96121
run: |
97122
git config --local user.email "[email protected]"
98123
git config --local user.name "GitHub Action"

.github/workflows/update_readme.yaml

Lines changed: 17 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -37,20 +37,30 @@ jobs:
3737
run: |
3838
TAG_VERSION=${{ env.TAG_VERSION }}
3939
ARN_BASE="arn:aws:lambda:"
40-
ARN_SUFFIX=":764866452798:layer:chrome-aws-lambda:"
40+
ACCOUNT_ID="764866452798"
4141
4242
sed -i -e "s|Has Chromium v[0-9\.]*|Has Chromium $TAG_VERSION|g" readme.md
4343
4444
for REGION in ${{ env.AWS_REGIONS }}; do
45-
LAYER_VERSION=$(aws lambda list-layer-versions --layer-name chrome-aws-lambda --region $REGION --query 'LayerVersions[0].LayerVersionArn' --output text | grep -oE '[0-9]+$')
46-
ARN="$ARN_BASE$REGION$ARN_SUFFIX$LAYER_VERSION"
47-
sed -i -e "s|arn:aws:lambda:$REGION:[0-9]*:layer:chrome-aws-lambda:[0-9]*|$ARN|g" readme.md
45+
X64_VERSION=$(aws lambda list-layer-versions --layer-name chrome-aws-lambda-x64 --region $REGION --query 'LayerVersions[0].Version' --output text 2>/dev/null || echo "1")
46+
ARM64_VERSION=$(aws lambda list-layer-versions --layer-name chrome-aws-lambda-arm64 --region $REGION --query 'LayerVersions[0].Version' --output text 2>/dev/null || echo "1")
47+
48+
X64_ARN="$ARN_BASE$REGION:$ACCOUNT_ID:layer:chrome-aws-lambda-x64:$X64_VERSION"
49+
ARM64_ARN="$ARN_BASE$REGION:$ACCOUNT_ID:layer:chrome-aws-lambda-arm64:$ARM64_VERSION"
50+
51+
sed -i -e "s|arn:aws:lambda:$REGION:[0-9]*:layer:chrome-aws-lambda-x64:[0-9]*|$X64_ARN|g" readme.md
52+
sed -i -e "s|arn:aws:lambda:$REGION:[0-9]*:layer:chrome-aws-lambda-arm64:[0-9]*|$ARM64_ARN|g" readme.md
4853
done
4954
5055
- name: Commit and Push
5156
run: |
5257
git config --local user.email "[email protected]"
5358
git config --local user.name "GitHub Action"
54-
git add readme.md
55-
git commit -m "Update README with new version details [ci skip]"
56-
git push
59+
if ! git diff --quiet readme.md; then
60+
git add readme.md
61+
git commit -m "Update README with new version details [ci skip]"
62+
git push
63+
echo "README updated and pushed"
64+
else
65+
echo "No changes to README, skipping commit"
66+
fi

readme.md

Lines changed: 58 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -4,15 +4,20 @@
44
55
[Sparticuz/chromium](https://github.com/Sparticuz/chromium) published as a Lambda Layer.
66

7-
Tested with Node.js 16x/18x. Compatible with x86_64 only. Has Chromium v131.0.0
7+
Tested with Node.js 16x/18x/20x. Compatible with x86_64 and arm64 architectures. Has Chromium v133.0.0
88

99
## Getting Started
1010

11-
Click on Layers and choose "Add a layer", and "Provide a layer version
12-
ARN" and enter the following ARN.
11+
Click on Layers and choose "Add a layer", and "Provide a layer version ARN" and enter one of the ARNs below based on your Lambda architecture.
1312

13+
**For x86_64 (Intel/AMD)**:
1414
```
15-
arn:aws:lambda:us-east-1:764866452798:layer:chrome-aws-lambda:50
15+
arn:aws:lambda:us-east-1:764866452798:layer:chrome-aws-lambda-x64:1
16+
```
17+
18+
**For arm64 (Graviton2)**:
19+
```
20+
arn:aws:lambda:us-east-1:764866452798:layer:chrome-aws-lambda-arm64:1
1621
```
1722

1823
When importing the module within lambda, make sure you import `@sparticuz/chromium` not `chrome-aws-lambda`
@@ -28,39 +33,67 @@ const chromium = require('@sparticuz/chromium');
2833

2934
**lambda container settings**:
3035

31-
- x86_64 architecture
32-
- > =1024mb memory
36+
- x86_64 or arm64 architecture
37+
- >=1024mb memory
3338
- `@sparticuz/chromium` marked as an externalModule in the bundling settings
3439
- A lambda layer marked like so (this is CDK code, but convert to SAM or whatever at will):
3540

41+
**For x86_64**:
42+
```ts
43+
layers: [LayerVersion.fromLayerVersionArn(this, 'chromium-lambda-layer',
44+
'arn:aws:lambda:us-east-1:764866452798:layer:chrome-aws-lambda-x64:1'
45+
)]
46+
```
47+
48+
**For arm64**:
3649
```ts
3750
layers: [LayerVersion.fromLayerVersionArn(this, 'chromium-lambda-layer',
38-
'arn:aws:lambda:us-east-1:764866452798:layer:chrome-aws-lambda:50'
51+
'arn:aws:lambda:us-east-1:764866452798:layer:chrome-aws-lambda-arm64:1'
3952
)]
4053
```
4154

4255
**In the deployed lambda code**
43-
You can just use a regular ES6 or CommonJS import statement for `@sparticuz/chrome-aws-lambda`, and just use as
44-
indicated.
56+
You can just use a regular ES6 or CommonJS import statement for `@sparticuz/chromium`, and just use as indicated.
4557

4658
## Available regions
4759

48-
* ap-northeast-1: `arn:aws:lambda:ap-northeast-1:764866452798:layer:chrome-aws-lambda:50`
49-
* ap-northeast-2: `arn:aws:lambda:ap-northeast-2:764866452798:layer:chrome-aws-lambda:49`
50-
* ap-south-1: `arn:aws:lambda:ap-south-1:764866452798:layer:chrome-aws-lambda:50`
51-
* ap-southeast-1: `arn:aws:lambda:ap-southeast-1:764866452798:layer:chrome-aws-lambda:50`
52-
* ap-southeast-2: `arn:aws:lambda:ap-southeast-2:764866452798:layer:chrome-aws-lambda:50`
53-
* ca-central-1: `arn:aws:lambda:ca-central-1:764866452798:layer:chrome-aws-lambda:50`
54-
* eu-north-1: `arn:aws:lambda:eu-north-1:764866452798:layer:chrome-aws-lambda:50`
55-
* eu-central-1: `arn:aws:lambda:eu-central-1:764866452798:layer:chrome-aws-lambda:50`
56-
* eu-west-1: `arn:aws:lambda:eu-west-1:764866452798:layer:chrome-aws-lambda:50`
57-
* eu-west-2: `arn:aws:lambda:eu-west-2:764866452798:layer:chrome-aws-lambda:50`
58-
* eu-west-3: `arn:aws:lambda:eu-west-3:764866452798:layer:chrome-aws-lambda:50`
59-
* sa-east-1: `arn:aws:lambda:sa-east-1:764866452798:layer:chrome-aws-lambda:50`
60-
* us-east-1: `arn:aws:lambda:us-east-1:764866452798:layer:chrome-aws-lambda:50`
61-
* us-east-2: `arn:aws:lambda:us-east-2:764866452798:layer:chrome-aws-lambda:50`
62-
* us-west-1: `arn:aws:lambda:us-west-1:764866452798:layer:chrome-aws-lambda:50`
63-
* us-west-2: `arn:aws:lambda:us-west-2:764866452798:layer:chrome-aws-lambda:50`
60+
### x86_64 (Intel/AMD)
61+
62+
* ap-northeast-1: `arn:aws:lambda:ap-northeast-1:764866452798:layer:chrome-aws-lambda-x64:1`
63+
* ap-northeast-2: `arn:aws:lambda:ap-northeast-2:764866452798:layer:chrome-aws-lambda-x64:1`
64+
* ap-south-1: `arn:aws:lambda:ap-south-1:764866452798:layer:chrome-aws-lambda-x64:1`
65+
* ap-southeast-1: `arn:aws:lambda:ap-southeast-1:764866452798:layer:chrome-aws-lambda-x64:1`
66+
* ap-southeast-2: `arn:aws:lambda:ap-southeast-2:764866452798:layer:chrome-aws-lambda-x64:1`
67+
* ca-central-1: `arn:aws:lambda:ca-central-1:764866452798:layer:chrome-aws-lambda-x64:1`
68+
* eu-north-1: `arn:aws:lambda:eu-north-1:764866452798:layer:chrome-aws-lambda-x64:1`
69+
* eu-central-1: `arn:aws:lambda:eu-central-1:764866452798:layer:chrome-aws-lambda-x64:1`
70+
* eu-west-1: `arn:aws:lambda:eu-west-1:764866452798:layer:chrome-aws-lambda-x64:1`
71+
* eu-west-2: `arn:aws:lambda:eu-west-2:764866452798:layer:chrome-aws-lambda-x64:1`
72+
* eu-west-3: `arn:aws:lambda:eu-west-3:764866452798:layer:chrome-aws-lambda-x64:1`
73+
* sa-east-1: `arn:aws:lambda:sa-east-1:764866452798:layer:chrome-aws-lambda-x64:1`
74+
* us-east-1: `arn:aws:lambda:us-east-1:764866452798:layer:chrome-aws-lambda-x64:1`
75+
* us-east-2: `arn:aws:lambda:us-east-2:764866452798:layer:chrome-aws-lambda-x64:1`
76+
* us-west-1: `arn:aws:lambda:us-west-1:764866452798:layer:chrome-aws-lambda-x64:1`
77+
* us-west-2: `arn:aws:lambda:us-west-2:764866452798:layer:chrome-aws-lambda-x64:1`
78+
79+
### arm64 (Graviton2)
80+
81+
* ap-northeast-1: `arn:aws:lambda:ap-northeast-1:764866452798:layer:chrome-aws-lambda-arm64:1`
82+
* ap-northeast-2: `arn:aws:lambda:ap-northeast-2:764866452798:layer:chrome-aws-lambda-arm64:1`
83+
* ap-south-1: `arn:aws:lambda:ap-south-1:764866452798:layer:chrome-aws-lambda-arm64:1`
84+
* ap-southeast-1: `arn:aws:lambda:ap-southeast-1:764866452798:layer:chrome-aws-lambda-arm64:1`
85+
* ap-southeast-2: `arn:aws:lambda:ap-southeast-2:764866452798:layer:chrome-aws-lambda-arm64:1`
86+
* ca-central-1: `arn:aws:lambda:ca-central-1:764866452798:layer:chrome-aws-lambda-arm64:1`
87+
* eu-north-1: `arn:aws:lambda:eu-north-1:764866452798:layer:chrome-aws-lambda-arm64:1`
88+
* eu-central-1: `arn:aws:lambda:eu-central-1:764866452798:layer:chrome-aws-lambda-arm64:1`
89+
* eu-west-1: `arn:aws:lambda:eu-west-1:764866452798:layer:chrome-aws-lambda-arm64:1`
90+
* eu-west-2: `arn:aws:lambda:eu-west-2:764866452798:layer:chrome-aws-lambda-arm64:1`
91+
* eu-west-3: `arn:aws:lambda:eu-west-3:764866452798:layer:chrome-aws-lambda-arm64:1`
92+
* sa-east-1: `arn:aws:lambda:sa-east-1:764866452798:layer:chrome-aws-lambda-arm64:1`
93+
* us-east-1: `arn:aws:lambda:us-east-1:764866452798:layer:chrome-aws-lambda-arm64:1`
94+
* us-east-2: `arn:aws:lambda:us-east-2:764866452798:layer:chrome-aws-lambda-arm64:1`
95+
* us-west-1: `arn:aws:lambda:us-west-1:764866452798:layer:chrome-aws-lambda-arm64:1`
96+
* us-west-2: `arn:aws:lambda:us-west-2:764866452798:layer:chrome-aws-lambda-arm64:1`
6497

6598
## License
6699

0 commit comments

Comments
 (0)