supabase-postgres.git / summary / log / commit / refs
commit 75fd398748b6c802802aef449d25fae72355ec65
Author: Manuel Mendez <708570+mmlb@users.noreply.github.com>
Commit: GitHub <noreply@github.com>
Date: Tue Jun 09 19:33:33 2026 +0000
CI: Add amd64 to NixCI testinfra/build-ami (#2193)
* chore: Rename developmnet-{arm,x86}.vars.pkr.hcl to be {arm,amd}64 instead
This way it matches the naming scheme used in packer_template and all
throughout ansible files.
* nix/build-ami: Make arch agnostic (default to arm64)
Make this package arch agnostic so we can use it in CI and avoid
duplicating AMI builds all over the place (later). Next commit will make
arch a required arg but this way we get a smaller diff.
* testinfra/test_ami_nix: Make arch agnostic
Will be building x86_64 AMIs in CI in a following commit and thus will
test them so need be arch agnostic.
* gha/build-ami: Make arch agnostic
Lets make this action support both arches equally which means no more
defaults. I decided to swap arch for packer_template because it makes
for a better API. I could have parsed the arch from the packer_template
file name but I like doing it this way instead better.
Note: I changes testinfra-ami-builds's matrix definition slightly. I
dropped include in favor of adding another column/variable to the mix.
Include is a little weird to think about how sometimes it applies
partially vs full while adding a new variable to the matrix is always
just the cartesian product which is what we want here anyway.
* testinfra: Test x86_64 AMI builds
This way we avoid surprised post merge when running `Release AMI Nix`
workflow against both arches.
* Bump PG versions
.github/actions/build-ami/action.yml | 40 ++++++++++++----------
.github/workflows/ami-release-nix-single.yml | 12 +++----
.github/workflows/ami-release-nix.yml | 4 +--
.github/workflows/base-image-nightly.yml | 2 +-
.github/workflows/testinfra-ami-build.yml | 23 +++++++------
README.md | 2 +-
ansible/vars.yml | 6 ++--
development-amd64.vars.pkr.hcl | 0
development-arm64.vars.pkr.hcl | 0
nix/packages/build-ami.nix | 26 +++++++++-----
nix/packages/build-test-ami.nix | 4 +--
testinfra/README.md | 2 +-
testinfra/test_ami_nix.py | 2 +-
13 files changed, 68 insertions(+), 55 deletions(-)
diff --git a/.github/actions/build-ami/action.yml b/.github/actions/build-ami/action.yml
index c10bc406..1d5bb84e 100644
--- a/.github/actions/build-ami/action.yml
+++ b/.github/actions/build-ami/action.yml
@@ -2,30 +2,27 @@ name: Build AMI
description: Build both stage 1 and stage 2 AMIs
inputs:
- postgres_version:
- description: 'PostgreSQL major version (e.g., 15)'
- required: true
- region:
- description: 'AWS region'
+ ami_name_prefix:
+ description: 'Prefix for the AMI name'
required: true
ami_regions:
description: 'AMI regions as JSON array (e.g., ["us-east-1"])'
required: true
+ arch:
+ description: Architecture to build AMI for (amd64|arm64)
+ required: true
git_sha:
description: 'Git SHA for this build'
required: true
- ami_name_prefix:
- description: 'Prefix for the AMI name'
- required: false
- default: 'supabase-postgres'
- packer_template:
- description: 'Packer template for stage 1 (e.g., amazon-arm64-nix.pkr.hcl)'
- required: false
- default: 'amazon-arm64-nix.pkr.hcl'
instance_type:
description: 'EC2 instance type for the build'
- required: false
- default: 'c6g.4xlarge'
+ required: true
+ postgres_version:
+ description: 'PostgreSQL major version (e.g., 15)'
+ required: true
+ region:
+ description: 'AWS region'
+ required: true
outputs:
stage2_ami_id:
@@ -41,6 +38,13 @@ outputs:
runs:
using: "composite"
steps:
+ - name: Verify arch
+ shell: bash
+ run: |
+ case ${{ inputs.arch }} in
+ amd64 | arm64) ;;
+ *) echo "Unknown arch input, expected:(amd64|arm64) got:${{ inputs.arch }}" >&2 && exit 1 ;;
+ esac
- name: Set execution ID
id: set-execution-id
shell: bash
@@ -68,12 +72,12 @@ runs:
AWS_RETRY_MODE: adaptive
AWS_REGION: ${{ inputs.region }}
run: |
- nix run .#build-ami -- stage1 \
+ nix run .#build-ami -- stage1 ${{ inputs.arch }} \
-var "git-head-version=${{ inputs.git_sha }}" \
-var "packer-execution-id=${{ env.EXECUTION_ID }}" \
-var "ansible_arguments=-e postgresql_major=${{ inputs.postgres_version }}" \
-var 'ami_regions=${{ inputs.ami_regions }}' \
- ${{ inputs.packer_template }}
+ amazon-${{ inputs.arch }}-nix.pkr.hcl
- name: Build AMI stage 2
id: build-stage2
@@ -86,7 +90,7 @@ runs:
AWS_RETRY_MODE: adaptive
AWS_REGION: ${{ inputs.region }}
run: |
- nix run .#build-ami -- stage2 \
+ nix run .#build-ami -- stage2 ${{ inputs.arch }} \
-var "git-head-version=${{ inputs.git_sha }}" \
-var "packer-execution-id=${{ env.EXECUTION_ID }}" \
-var "postgres_major_version=${{ inputs.postgres_version }}" \
diff --git a/.github/workflows/ami-release-nix-single.yml b/.github/workflows/ami-release-nix-single.yml
index e5ef7399..73ff48c5 100644
--- a/.github/workflows/ami-release-nix-single.yml
+++ b/.github/workflows/ami-release-nix-single.yml
@@ -19,7 +19,6 @@ on:
options:
- arm64
- amd64
- default: arm64
permissions:
contents: write
@@ -53,19 +52,18 @@ jobs:
id: arch_vars
run: |
ARCH="${{ github.event.inputs.arch }}"
+ echo "arch=$ARCH" >>"$GITHUB_OUTPUT"
if [ "$ARCH" = "amd64" ]; then
{
- echo "packer_template=amazon-amd64-nix.pkr.hcl"
- echo "instance_type=c6i.4xlarge"
echo "ami_name_prefix=supabase-postgres-x86"
echo "arch_suffix=-x86"
+ echo "instance_type=c6i.4xlarge"
} >> "$GITHUB_OUTPUT"
else
{
- echo "packer_template=amazon-arm64-nix.pkr.hcl"
- echo "instance_type=c6g.4xlarge"
echo "ami_name_prefix=supabase-postgres"
echo "arch_suffix="
+ echo "instance_type=c6g.4xlarge"
} >> "$GITHUB_OUTPUT"
fi
@@ -83,11 +81,11 @@ jobs:
with:
postgres_version: ${{ github.event.inputs.postgres_version }}
region: us-east-1
+ ami_name_prefix: ${{ steps.arch_vars.outputs.ami_name_prefix }}
ami_regions: '["us-east-1"]'
+ arch: ${{ steps.arch_vars.outputs.arch }}
git_sha: ${{ steps.get_sha.outputs.sha }}
- packer_template: ${{ steps.arch_vars.outputs.packer_template }}
instance_type: ${{ steps.arch_vars.outputs.instance_type }}
- ami_name_prefix: ${{ steps.arch_vars.outputs.ami_name_prefix }}
- name: Grab release version
id: process_release_version
diff --git a/.github/workflows/ami-release-nix.yml b/.github/workflows/ami-release-nix.yml
index cf4e8301..fb34ef37 100644
--- a/.github/workflows/ami-release-nix.yml
+++ b/.github/workflows/ami-release-nix.yml
@@ -44,14 +44,14 @@ jobs:
- name: arm64
runner: blacksmith-2vcpu-ubuntu-2404-arm
packer_template: amazon-arm64-nix.pkr.hcl
- vars_file: development-arm.vars.pkr.hcl
+ vars_file: development-arm64.vars.pkr.hcl
instance_type: c6g.4xlarge
nix_system: aarch64-linux
ami_arch_filter: arm64
- name: amd64
runner: blacksmith-2vcpu-ubuntu-2404
packer_template: amazon-amd64-nix.pkr.hcl
- vars_file: development-x86.vars.pkr.hcl
+ vars_file: development-amd64.vars.pkr.hcl
instance_type: c6i.4xlarge
nix_system: x86_64-linux
ami_arch_filter: x86_64
diff --git a/.github/workflows/base-image-nightly.yml b/.github/workflows/base-image-nightly.yml
index 3bd22ab5..d6572836 100644
--- a/.github/workflows/base-image-nightly.yml
+++ b/.github/workflows/base-image-nightly.yml
@@ -49,7 +49,7 @@ jobs:
nix run github:supabase/postgres/${GIT_SHA}#packer -- build \
-var "git-head-version=${GIT_SHA}" \
-var "packer-execution-id=${EXECUTION_ID}" \
- -var-file="development-arm.vars.pkr.hcl" \
+ -var-file="development-arm64.vars.pkr.hcl" \
-var "base-image-nightly=true" \
-var "build-timestamp=${BUILD_TIMESTAMP}" \
-var "region=us-east-1" \
diff --git a/.github/workflows/testinfra-ami-build.yml b/.github/workflows/testinfra-ami-build.yml
index 52b4fbab..4dde6909 100644
--- a/.github/workflows/testinfra-ami-build.yml
+++ b/.github/workflows/testinfra-ami-build.yml
@@ -39,13 +39,14 @@ jobs:
fail-fast: false
matrix:
postgres_version: ${{ fromJson(needs.prepare.outputs.postgres_versions) }}
- include:
- - runner: blacksmith-2vcpu-ubuntu-2404-arm
- arch: arm64
- ubuntu_release: noble
- ubuntu_version: 24.04
- mcpu: neoverse-n1
- runs-on: ${{ matrix.runner }}
+ target:
+ - arch: amd64
+ instance_type: c6i.4xlarge
+ runner: blacksmith-2vcpu-ubuntu-2404
+ - arch: arm64
+ instance_type: c6g.4xlarge
+ runner: blacksmith-2vcpu-ubuntu-2404-arm
+ runs-on: ${{ matrix.target.runner }}
timeout-minutes: 150
steps:
@@ -93,11 +94,13 @@ jobs:
id: build-ami
uses: ./.github/actions/build-ami
with:
- postgres_version: ${{ matrix.postgres_version }}
- region: ap-southeast-1
+ ami_name_prefix: "supabase-postgres-${{ github.run_id }}-${{ matrix.target.arch }}"
ami_regions: '["ap-southeast-1"]'
+ arch: ${{ matrix.target.arch }}
git_sha: ${{ github.sha }}
- ami_name_prefix: "supabase-postgres-${{ github.run_id }}"
+ instance_type: ${{ matrix.target.instance_type }}
+ postgres_version: ${{ matrix.postgres_version }}
+ region: ap-southeast-1
- name: Run tests
timeout-minutes: 10
diff --git a/README.md b/README.md
index b509bddd..01a41357 100644
--- a/README.md
+++ b/README.md
@@ -87,7 +87,7 @@ Here's a comprehensive overview of the project's directory structure:
| ansible.cfg | Ansible configuration |
| amazon-arm64-nix.pkr.hcl | Packer configuration for AWS ARM64 builds |
| common-nix.vars.pkr.hcl | Common Packer variables |
-| development-arm.vars.pkr.hcl | ARM development environment variables |
+| development-arm64.vars.pkr.hcl | ARM development environment variables |
| CONTRIBUTING.md | Contribution guidelines |
| README.md | Main project documentation |
diff --git a/ansible/vars.yml b/ansible/vars.yml
index d783c45c..db757ae6 100644
--- a/ansible/vars.yml
+++ b/ansible/vars.yml
@@ -10,9 +10,9 @@ postgres_major:
# Full version strings for each major version
postgres_release:
- postgresorioledb-17: "17.6.0.090-orioledb"
- postgres17: "17.6.1.133"
- postgres15: "15.14.1.133"
+ postgresorioledb-17: "17.6.0.091-orioledb"
+ postgres17: "17.6.1.134"
+ postgres15: "15.14.1.134"
# Non Postgres Extensions
pgbouncer_release: 1.25.1
diff --git a/development-x86.vars.pkr.hcl b/development-amd64.vars.pkr.hcl
similarity index 100%
rename from development-x86.vars.pkr.hcl
rename to development-amd64.vars.pkr.hcl
diff --git a/development-arm.vars.pkr.hcl b/development-arm64.vars.pkr.hcl
similarity index 100%
rename from development-arm.vars.pkr.hcl
rename to development-arm64.vars.pkr.hcl
diff --git a/nix/packages/build-ami.nix b/nix/packages/build-ami.nix
index c847f47a..f6edd54d 100644
--- a/nix/packages/build-ami.nix
+++ b/nix/packages/build-ami.nix
@@ -21,7 +21,8 @@ let
(root + "/scripts")
(root + "/amazon-amd64-nix.pkr.hcl")
(root + "/amazon-arm64-nix.pkr.hcl")
- (root + "/development-arm.vars.pkr.hcl")
+ (root + "/development-amd64.vars.pkr.hcl")
+ (root + "/development-arm64.vars.pkr.hcl")
(lib.fileset.maybeMissing (root + "/common-nix.vars.pkr.hcl"))
];
};
@@ -50,9 +51,19 @@ writeShellApplication {
set -x
- # Parse stage parameter
- STAGE="''${1:-stage1}"
- shift || true # Remove first arg, ignore error if no args
+ # Parse required parameters
+ STAGE=''${1:-stage1}
+ case $STAGE in
+ stage1 | stage2) ;;
+ *) echo "Error: Invalid stage '$STAGE'. Must be 'stage1' or 'stage2'" >&2 && exit 1 ;;
+ esac
+
+ ARCH=$2
+ case $ARCH in
+ amd64 | arm64) ;;
+ *) echo "Error: Invalid arch '$ARCH'. Must be 'amd64' or 'arm64'" >&2 && exit 1 ;;
+ esac
+ shift 2
REGION="''${AWS_REGION:-ap-southeast-1}"
PACKER_SOURCES="${packerSources}"
@@ -114,7 +125,7 @@ writeShellApplication {
cd "$PACKER_SOURCES"
packer init "$@"
packer build \
- -var-file="development-arm.vars.pkr.hcl" \
+ -var-file="development-$ARCH.vars.pkr.hcl" \
-var "input-hash=$INPUT_HASH" \
-var "postgres-version=$POSTGRES_VERSION" \
-var "region=$REGION" \
@@ -147,7 +158,7 @@ writeShellApplication {
packer init stage2-nix-psql.pkr.hcl
packer build \
- -var-file="development-arm.vars.pkr.hcl" \
+ -var-file="development-$ARCH.vars.pkr.hcl" \
-var-file="common-nix.vars.pkr.hcl" \
-var "source_ami=$STAGE1_AMI_ID" \
-var "region=$REGION" \
@@ -181,9 +192,6 @@ writeShellApplication {
fi
fi
fi
- else
- echo "Error: Invalid stage '$STAGE'. Must be 'stage1' or 'stage2'"
- exit 1
fi
'';
diff --git a/nix/packages/build-test-ami.nix b/nix/packages/build-test-ami.nix
index 99a16869..27ad2d94 100644
--- a/nix/packages/build-test-ami.nix
+++ b/nix/packages/build-test-ami.nix
@@ -81,7 +81,7 @@ writeShellApplication {
packer build \
-var "git-head-version=$GIT_SHA" \
-var "packer-execution-id=$RUN_ID" \
- -var-file="development-arm.vars.pkr.hcl" \
+ -var-file="development-arm64.vars.pkr.hcl" \
-var-file="common-nix.vars.pkr.hcl" \
-var "ansible_arguments=" \
-var "postgres-version=$RANDOM_STRING" \
@@ -97,7 +97,7 @@ writeShellApplication {
-var "git-head-version=$GIT_SHA" \
-var "packer-execution-id=$RUN_ID" \
-var "postgres_major_version=$POSTGRES_VERSION" \
- -var-file="development-arm.vars.pkr.hcl" \
+ -var-file="development-arm64.vars.pkr.hcl" \
-var-file="common-nix.vars.pkr.hcl" \
-var "postgres-version=$RANDOM_STRING" \
-var "region=$REGION" \
diff --git a/testinfra/README.md b/testinfra/README.md
index e0f34644..f486c34a 100644
--- a/testinfra/README.md
+++ b/testinfra/README.md
@@ -52,7 +52,7 @@ done
# build AMI
AWS_PROFILE=supabase-dev packer build \
- -var-file=development-arm.vars.pkr.hcl \
+ -var-file=development-arm64.vars.pkr.hcl \
-var-file=common.vars.pkr.hcl \
-var "ansible_arguments=" \
-var "postgres-version=ci-ami-test" \
diff --git a/testinfra/test_ami_nix.py b/testinfra/test_ami_nix.py
index a81bddc1..30b64359 100644
--- a/testinfra/test_ami_nix.py
+++ b/testinfra/test_ami_nix.py
@@ -291,7 +291,7 @@ def host():
"HttpEndpoint": "enabled",
},
IamInstanceProfile={"Name": "pg-ap-southeast-1"},
- InstanceType="t4g.micro",
+ InstanceType="t4g.micro" if image.architecture == "arm64" else "t3.micro",
MinCount=1,
MaxCount=1,
ImageId=image.id,