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,