Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
59 changes: 42 additions & 17 deletions .github/workflows/layers_dispatch.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -34,65 +34,90 @@ jobs:
id: latest_release
run: |
JSON_RESPONSE=$(curl -s https://api.github.com/repos/Sparticuz/chromium/releases/latest)
LATEST_RELEASE_URL=$(echo $JSON_RESPONSE | grep -Po '"browser_download_url": "\K[^"]+' | awk 'NR==1')
TAG_VERSION=$(echo $JSON_RESPONSE | grep -Po '"tag_name": "\K[^"]+')
if [[ "$TAG_VERSION" == "${{ steps.prev_tag_version.outputs.tag }}" ]]; then
echo "Skipping as the tag version is the same as the previous run."
exit 78
echo "skip=true" >> $GITHUB_OUTPUT
exit 0
fi
echo "LATEST_RELEASE_URL=$LATEST_RELEASE_URL" >> $GITHUB_ENV
echo "skip=false" >> $GITHUB_OUTPUT
echo "TAG_VERSION=$TAG_VERSION" >> $GITHUB_ENV
echo "FILENAME=chromium-$TAG_VERSION.zip" >> $GITHUB_ENV
echo "X64_URL=https://github.com/Sparticuz/chromium/releases/download/$TAG_VERSION/chromium-$TAG_VERSION-layer.x64.zip" >> $GITHUB_ENV
echo "ARM64_URL=https://github.com/Sparticuz/chromium/releases/download/$TAG_VERSION/chromium-$TAG_VERSION-layer.arm64.zip" >> $GITHUB_ENV
echo "X64_FILENAME=chromium-$TAG_VERSION-layer.x64.zip" >> $GITHUB_ENV
echo "ARM64_FILENAME=chromium-$TAG_VERSION-layer.arm64.zip" >> $GITHUB_ENV

- name: Update Tag Version
if: steps.latest_release.outputs.skip == 'false'
run: echo ${{ env.TAG_VERSION }} > .tag_version

- name: Download Latest Release
if: steps.latest_release.outputs.skip == 'false'
run: |
curl -LO ${{ env.LATEST_RELEASE_URL }}
FILEPATH=$(basename ${{ env.LATEST_RELEASE_URL }})
echo "FILEPATH=$FILEPATH" >> $GITHUB_ENV
curl -LO ${{ env.X64_URL }}
curl -LO ${{ env.ARM64_URL }}

- name: Upload to S3
if: steps.latest_release.outputs.skip == 'false'
run: |
for REGION in ${{ env.AWS_REGIONS }}; do
BUCKET_NAME="${{ env.S3_BUCKET_NAME }}-$REGION"
aws configure set region $REGION
aws s3 cp ${{ env.FILEPATH }} s3://$BUCKET_NAME/${{ env.FILENAME }} &
aws s3 cp ${{ env.X64_FILENAME }} s3://$BUCKET_NAME/${{ env.X64_FILENAME }} &
aws s3 cp ${{ env.ARM64_FILENAME }} s3://$BUCKET_NAME/${{ env.ARM64_FILENAME }} &
done
wait

- name: Publish to AWS Regions with Permissions
if: steps.latest_release.outputs.skip == 'false'
run: |
for REGION in ${{ env.AWS_REGIONS }}; do
BUCKET_NAME="${{ env.S3_BUCKET_NAME }}-$REGION"

aws configure set region $REGION

{
NEW_VERSION_NUMBER=$(aws lambda publish-layer-version \
--layer-name chrome-aws-lambda \
--content S3Bucket=$BUCKET_NAME,S3Key=${{ env.FILENAME }} \
X64_VERSION=$(aws lambda publish-layer-version \
--layer-name chrome-aws-lambda-x64 \
--content S3Bucket=$BUCKET_NAME,S3Key=${{ env.X64_FILENAME }} \
--region $REGION \
--compatible-architectures x86_64 \
--description "@sparticuz/chromium v${{ env.TAG_VERSION }} x64" \
--query Version \
--output text)

aws lambda add-layer-version-permission \
--region "$REGION" \
--layer-name chrome-aws-lambda-x64 \
--statement-id sid1 \
--action lambda:GetLayerVersion \
--principal '*' \
--version-number $X64_VERSION

ARM64_VERSION=$(aws lambda publish-layer-version \
--layer-name chrome-aws-lambda-arm64 \
--content S3Bucket=$BUCKET_NAME,S3Key=${{ env.ARM64_FILENAME }} \
--region $REGION \
--compatible-architecture x86_64 \
--description "@sparticuz/chromium v${{ env.TAG_VERSION }} & Chromium v${{ env.TAG_VERSION }}" \
--compatible-architectures arm64 \
--description "@sparticuz/chromium v${{ env.TAG_VERSION }} arm64" \
--query Version \
--output text)

aws lambda add-layer-version-permission \
--region "$REGION" \
--layer-name chrome-aws-lambda \
--layer-name chrome-aws-lambda-arm64 \
--statement-id sid1 \
--action lambda:GetLayerVersion \
--principal '*' \
--version-number $NEW_VERSION_NUMBER
echo "Published and permissions added for ${{ env.FILENAME }} in $REGION"
--version-number $ARM64_VERSION

echo "Published x64:$X64_VERSION and arm64:$ARM64_VERSION for $REGION"
} &
done
wait


- name: Commit Tag Version
if: steps.latest_release.outputs.skip == 'false'
run: |
git config --local user.email "action@github.com"
git config --local user.name "GitHub Action"
Expand Down
24 changes: 17 additions & 7 deletions .github/workflows/update_readme.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -37,20 +37,30 @@ jobs:
run: |
TAG_VERSION=${{ env.TAG_VERSION }}
ARN_BASE="arn:aws:lambda:"
ARN_SUFFIX=":764866452798:layer:chrome-aws-lambda:"
ACCOUNT_ID="764866452798"

sed -i -e "s|Has Chromium v[0-9\.]*|Has Chromium $TAG_VERSION|g" readme.md

for REGION in ${{ env.AWS_REGIONS }}; do
LAYER_VERSION=$(aws lambda list-layer-versions --layer-name chrome-aws-lambda --region $REGION --query 'LayerVersions[0].LayerVersionArn' --output text | grep -oE '[0-9]+$')
ARN="$ARN_BASE$REGION$ARN_SUFFIX$LAYER_VERSION"
sed -i -e "s|arn:aws:lambda:$REGION:[0-9]*:layer:chrome-aws-lambda:[0-9]*|$ARN|g" readme.md
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")
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")

X64_ARN="$ARN_BASE$REGION:$ACCOUNT_ID:layer:chrome-aws-lambda-x64:$X64_VERSION"
ARM64_ARN="$ARN_BASE$REGION:$ACCOUNT_ID:layer:chrome-aws-lambda-arm64:$ARM64_VERSION"

sed -i -e "s|arn:aws:lambda:$REGION:[0-9]*:layer:chrome-aws-lambda-x64:[0-9]*|$X64_ARN|g" readme.md
sed -i -e "s|arn:aws:lambda:$REGION:[0-9]*:layer:chrome-aws-lambda-arm64:[0-9]*|$ARM64_ARN|g" readme.md
done

- name: Commit and Push

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P1 Badge README workflow now fails whenever no new release is published

The deploy workflow now exits with code 0 even when the tag is unchanged, so the Update README workflow is triggered on every scheduled run. When there is no new release, the sed commands leave readme.md untouched but this step still executes git commit unconditionally, which exits with a non‑zero status (nothing to commit). That means the README workflow will start failing on every day without a new release. Consider skipping the commit when git diff --quiet shows no changes or short‑circuiting the job based on the skip flag emitted from the deploy workflow.

Useful? React with 👍 / 👎.

run: |
git config --local user.email "action@github.com"
git config --local user.name "GitHub Action"
git add readme.md
git commit -m "Update README with new version details [ci skip]"
git push
if ! git diff --quiet readme.md; then
git add readme.md
git commit -m "Update README with new version details [ci skip]"
git push
echo "README updated and pushed"
else
echo "No changes to README, skipping commit"
fi
83 changes: 58 additions & 25 deletions readme.md
Original file line number Diff line number Diff line change
Expand Up @@ -4,15 +4,20 @@

[Sparticuz/chromium](https://github.com/Sparticuz/chromium) published as a Lambda Layer.

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

## Getting Started

Click on Layers and choose "Add a layer", and "Provide a layer version
ARN" and enter the following ARN.
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.

**For x86_64 (Intel/AMD)**:
```
arn:aws:lambda:us-east-1:764866452798:layer:chrome-aws-lambda:50
arn:aws:lambda:us-east-1:764866452798:layer:chrome-aws-lambda-x64:1
```

**For arm64 (Graviton2)**:
```
arn:aws:lambda:us-east-1:764866452798:layer:chrome-aws-lambda-arm64:1
```

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

**lambda container settings**:

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

**For x86_64**:
```ts
layers: [LayerVersion.fromLayerVersionArn(this, 'chromium-lambda-layer',
'arn:aws:lambda:us-east-1:764866452798:layer:chrome-aws-lambda-x64:1'
)]
```

**For arm64**:
```ts
layers: [LayerVersion.fromLayerVersionArn(this, 'chromium-lambda-layer',
'arn:aws:lambda:us-east-1:764866452798:layer:chrome-aws-lambda:50'
'arn:aws:lambda:us-east-1:764866452798:layer:chrome-aws-lambda-arm64:1'
)]
```

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

## Available regions

* ap-northeast-1: `arn:aws:lambda:ap-northeast-1:764866452798:layer:chrome-aws-lambda:50`
* ap-northeast-2: `arn:aws:lambda:ap-northeast-2:764866452798:layer:chrome-aws-lambda:49`
* ap-south-1: `arn:aws:lambda:ap-south-1:764866452798:layer:chrome-aws-lambda:50`
* ap-southeast-1: `arn:aws:lambda:ap-southeast-1:764866452798:layer:chrome-aws-lambda:50`
* ap-southeast-2: `arn:aws:lambda:ap-southeast-2:764866452798:layer:chrome-aws-lambda:50`
* ca-central-1: `arn:aws:lambda:ca-central-1:764866452798:layer:chrome-aws-lambda:50`
* eu-north-1: `arn:aws:lambda:eu-north-1:764866452798:layer:chrome-aws-lambda:50`
* eu-central-1: `arn:aws:lambda:eu-central-1:764866452798:layer:chrome-aws-lambda:50`
* eu-west-1: `arn:aws:lambda:eu-west-1:764866452798:layer:chrome-aws-lambda:50`
* eu-west-2: `arn:aws:lambda:eu-west-2:764866452798:layer:chrome-aws-lambda:50`
* eu-west-3: `arn:aws:lambda:eu-west-3:764866452798:layer:chrome-aws-lambda:50`
* sa-east-1: `arn:aws:lambda:sa-east-1:764866452798:layer:chrome-aws-lambda:50`
* us-east-1: `arn:aws:lambda:us-east-1:764866452798:layer:chrome-aws-lambda:50`
* us-east-2: `arn:aws:lambda:us-east-2:764866452798:layer:chrome-aws-lambda:50`
* us-west-1: `arn:aws:lambda:us-west-1:764866452798:layer:chrome-aws-lambda:50`
* us-west-2: `arn:aws:lambda:us-west-2:764866452798:layer:chrome-aws-lambda:50`
### x86_64 (Intel/AMD)

* ap-northeast-1: `arn:aws:lambda:ap-northeast-1:764866452798:layer:chrome-aws-lambda-x64:1`
* ap-northeast-2: `arn:aws:lambda:ap-northeast-2:764866452798:layer:chrome-aws-lambda-x64:1`
* ap-south-1: `arn:aws:lambda:ap-south-1:764866452798:layer:chrome-aws-lambda-x64:1`
* ap-southeast-1: `arn:aws:lambda:ap-southeast-1:764866452798:layer:chrome-aws-lambda-x64:1`
* ap-southeast-2: `arn:aws:lambda:ap-southeast-2:764866452798:layer:chrome-aws-lambda-x64:1`
* ca-central-1: `arn:aws:lambda:ca-central-1:764866452798:layer:chrome-aws-lambda-x64:1`
* eu-north-1: `arn:aws:lambda:eu-north-1:764866452798:layer:chrome-aws-lambda-x64:1`
* eu-central-1: `arn:aws:lambda:eu-central-1:764866452798:layer:chrome-aws-lambda-x64:1`
* eu-west-1: `arn:aws:lambda:eu-west-1:764866452798:layer:chrome-aws-lambda-x64:1`
* eu-west-2: `arn:aws:lambda:eu-west-2:764866452798:layer:chrome-aws-lambda-x64:1`
* eu-west-3: `arn:aws:lambda:eu-west-3:764866452798:layer:chrome-aws-lambda-x64:1`
* sa-east-1: `arn:aws:lambda:sa-east-1:764866452798:layer:chrome-aws-lambda-x64:1`
* us-east-1: `arn:aws:lambda:us-east-1:764866452798:layer:chrome-aws-lambda-x64:1`
* us-east-2: `arn:aws:lambda:us-east-2:764866452798:layer:chrome-aws-lambda-x64:1`
* us-west-1: `arn:aws:lambda:us-west-1:764866452798:layer:chrome-aws-lambda-x64:1`
* us-west-2: `arn:aws:lambda:us-west-2:764866452798:layer:chrome-aws-lambda-x64:1`

### arm64 (Graviton2)

* ap-northeast-1: `arn:aws:lambda:ap-northeast-1:764866452798:layer:chrome-aws-lambda-arm64:1`
* ap-northeast-2: `arn:aws:lambda:ap-northeast-2:764866452798:layer:chrome-aws-lambda-arm64:1`
* ap-south-1: `arn:aws:lambda:ap-south-1:764866452798:layer:chrome-aws-lambda-arm64:1`
* ap-southeast-1: `arn:aws:lambda:ap-southeast-1:764866452798:layer:chrome-aws-lambda-arm64:1`
* ap-southeast-2: `arn:aws:lambda:ap-southeast-2:764866452798:layer:chrome-aws-lambda-arm64:1`
* ca-central-1: `arn:aws:lambda:ca-central-1:764866452798:layer:chrome-aws-lambda-arm64:1`
* eu-north-1: `arn:aws:lambda:eu-north-1:764866452798:layer:chrome-aws-lambda-arm64:1`
* eu-central-1: `arn:aws:lambda:eu-central-1:764866452798:layer:chrome-aws-lambda-arm64:1`
* eu-west-1: `arn:aws:lambda:eu-west-1:764866452798:layer:chrome-aws-lambda-arm64:1`
* eu-west-2: `arn:aws:lambda:eu-west-2:764866452798:layer:chrome-aws-lambda-arm64:1`
* eu-west-3: `arn:aws:lambda:eu-west-3:764866452798:layer:chrome-aws-lambda-arm64:1`
* sa-east-1: `arn:aws:lambda:sa-east-1:764866452798:layer:chrome-aws-lambda-arm64:1`
* us-east-1: `arn:aws:lambda:us-east-1:764866452798:layer:chrome-aws-lambda-arm64:1`
* us-east-2: `arn:aws:lambda:us-east-2:764866452798:layer:chrome-aws-lambda-arm64:1`
* us-west-1: `arn:aws:lambda:us-west-1:764866452798:layer:chrome-aws-lambda-arm64:1`
* us-west-2: `arn:aws:lambda:us-west-2:764866452798:layer:chrome-aws-lambda-arm64:1`

## License

Expand Down