Skip to content

Deploy Layers

Deploy Layers #853

name: Deploy Layers
on:
push:
branches:
- master
schedule:
- cron: '0 0 * * *' # This will run the workflow daily at midnight
env:
AWS_REGIONS: "us-east-1 us-east-2 us-west-1 us-west-2 ca-central-1 eu-central-1 eu-west-1 eu-west-2 eu-west-3 eu-north-1 ap-northeast-1 ap-northeast-2 ap-southeast-1 ap-southeast-2 ap-south-1 sa-east-1"
S3_BUCKET_NAME: "shelf-lambda-layers"
jobs:
check_release:
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v2
- name: Setup AWS CLI
uses: aws-actions/configure-aws-credentials@v1
with:
aws-access-key-id: ${{ secrets.AWS_ACCESS_KEY_ID }}
aws-secret-access-key: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
aws-region: us-east-1
- name: Get Previous Tag Version
id: prev_tag_version
run: echo "::set-output name=tag::$(cat .tag_version || echo '')"
- name: Get Latest Release URL and Tag Version
id: latest_release
run: |
JSON_RESPONSE=$(curl -s https://api.github.com/repos/Sparticuz/chromium/releases/latest)
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."
echo "skip=true" >> $GITHUB_OUTPUT
exit 0
fi
echo "skip=false" >> $GITHUB_OUTPUT
echo "TAG_VERSION=$TAG_VERSION" >> $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.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.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
{
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-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-arm64 \
--statement-id sid1 \
--action lambda:GetLayerVersion \
--principal '*' \
--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 "[email protected]"
git config --local user.name "GitHub Action"
git add .tag_version
git commit -m "Update tag version to ${{ env.TAG_VERSION }}"
git push