Skip to content

Add multi-arch build for lambda-directly-optmized #9

Add multi-arch build for lambda-directly-optmized

Add multi-arch build for lambda-directly-optmized #9

name: "Build: bootstrap"
on:
push:
paths:
- "lambda-with-server/**"
- "lambda-directly/**"
- "lambda-directly-optimized/**"
- ".github/workflows/build-and-release.yml"
defaults:
run:
shell: bash # Set the default shell to bash.
jobs:
build-with-server:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: docker/setup-qemu-action@v3
- uses: docker/setup-buildx-action@v3
# TODO: Build ARM_64 version.
- name: Build Apollo Router Lambda
uses: docker/build-push-action@v5
with:
context: lambda-with-server
load: true
tags: lambda
cache-from: type=gha
cache-to: type=gha,mode=max
- name: Extract x86 bootstrap file
working-directory: lambda-with-server
run: |
export TMP_IMAGE_ID=$(docker create lambda)
docker cp $TMP_IMAGE_ID:/dist/apollo-router-lambda/target/lambda/apollo-router-lambda/bootstrap bootstrap
docker rm -v $TMP_IMAGE_ID
- uses: actions/upload-artifact@v3
with:
name: with-server-x86-64
path: lambda-with-server/bootstrap
if-no-files-found: error
retention-days: 1
build-directly:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: docker/setup-buildx-action@v3
# TODO: Build ARM_64 version.
- name: Build Apollo Router Lambda
uses: docker/build-push-action@v5
with:
context: lambda-directly
load: true
tags: lambda
cache-from: type=gha
cache-to: type=gha,mode=max
- name: Extract bootstrap file
working-directory: lambda-directly
run: |
export TMP_IMAGE_ID=$(docker create lambda)
docker cp $TMP_IMAGE_ID:/dist/apollo-router-lambda/target/lambda/apollo-router-lambda/bootstrap bootstrap
docker rm -v $TMP_IMAGE_ID
- uses: actions/upload-artifact@v3
with:
name: directly-x86-64
path: lambda-directly/bootstrap
if-no-files-found: error
retention-days: 1
build-directly-optimized:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: docker/setup-buildx-action@v3
- name: Build Apollo Router Lambda
uses: docker/build-push-action@v5
with:
context: lambda-directly-optimized
load: true
tags: lambda
platforms: linux/amd64,linux/arm64
cache-from: type=gha
cache-to: type=gha,mode=max
- name: Extract ARM bootstrap file
working-directory: lambda-directly-optimized
run: |
mkdir -p arm
export TMP_IMAGE_ID=$(docker create --platform linux/arm64 lambda)
docker cp $TMP_IMAGE_ID:/dist/apollo-router-lambda/target/lambda/apollo-router-lambda/bootstrap arm/bootstrap
docker rm -v $TMP_IMAGE_ID
- name: Extract x86 bootstrap file
working-directory: lambda-directly-optimized
run: |
mkdir -p x86
export TMP_IMAGE_ID=$(docker create --platform linux/amd64 lambda)
docker cp $TMP_IMAGE_ID:/dist/apollo-router-lambda/target/lambda/apollo-router-lambda/bootstrap x86/bootstrap
docker rm -v $TMP_IMAGE_ID
- uses: actions/upload-artifact@v3
with:
name: directly-optimized-x86-64
path: lambda-directly-optimized/x86/bootstrap
if-no-files-found: error
retention-days: 1
- uses: actions/upload-artifact@v3
with:
name: directly-optimized-arm
path: lambda-directly-optimized/arm/bootstrap
if-no-files-found: error
retention-days: 1
release:
runs-on: ubuntu-latest
needs: [build-with-server, build-directly, build-directly-optimized]
steps:
- uses: actions/checkout@v4
- name: Setup artifact directory
run: mkdir -p ./release-artifacts
# Download all artifacts from previous jobs.
- uses: actions/download-artifact@v3
with:
path: ./release-artifacts/
- name: Rename release artifacts
run: |
mv release-artifacts/with-server-x86-64/bootstrap release-artifacts/bootstrap-with-server-x86-64
mv release-artifacts/directly-x86-64/bootstrap release-artifacts/bootstrap-directly-x86-64
mv release-artifacts/directly-optimized-x86-64/bootstrap release-artifacts/bootstrap-directly-optimized-x86-64
mv release-artifacts/directly-optimized-arm/bootstrap release-artifacts/bootstrap-directly-optimized-arm
- name: Set release info
id: info
run: |
echo "git-sha=${GITHUB_SHA::10}" >> $GITHUB_OUTPUT
echo "tag-name=$(date +"%Y-%m-%d-at-%H-%M")" >> $GITHUB_OUTPUT
- uses: ncipollo/[email protected]
with:
artifacts: "release-artifacts/bootstrap-with-server-x86-64,release-artifacts/bootstrap-directly-x86-64,release-artifacts/bootstrap-directly-optimized-x86-64,release-artifacts/bootstrap-directly-optimized-arm"
# Automatically create the tag from the commit if it doesn't exist.
tag: ${{ steps.info.outputs.tag-name }}
commit: ${{ github.sha }}
name: "Release ${{ steps.info.outputs.git-sha }}"
# Automatically generate the release notes, which can be configured. See more here
generateReleaseNotes: true
# Mark the deployment as the latest.
makeLatest: true