9191 with :
9292 endpoint : builders
9393
94- - name : Generate random string
95- id : random
96- run : echo "random_string=$(openssl rand -hex 8)" >> $GITHUB_OUTPUT
97-
9894 - name : Set PostgreSQL version environment variable
9995 run : |
10096 echo "POSTGRES_MAJOR_VERSION=${{ matrix.postgres_version }}" >> $GITHUB_ENV
@@ -107,29 +103,48 @@ jobs:
107103 echo 'postgres-version = "'$PG_VERSION'"' > common-nix.vars.pkr.hcl
108104 # Ensure there's a newline at the end of the file
109105 echo "" >> common-nix.vars.pkr.hcl
106+ git add -f common-nix.vars.pkr.hcl
110107
111108 - name : Build AMI stage 1
112109 env :
113110 AWS_MAX_ATTEMPTS : 10
114111 AWS_RETRY_MODE : adaptive
115112 run : |
116113 GIT_SHA=${{github.sha}}
117- nix run github:supabase/postgres/${GIT_SHA}#packer -- init amazon-arm64-nix.pkr.hcl
118- 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="common-nix.vars.pkr.hcl" -var "ansible_arguments=" -var "postgres-version=${{ steps.random.outputs.random_string }}" -var "region=ap-southeast-1" -var 'ami_regions=["ap-southeast-1"]' -var "force-deregister=true" -var "ansible_arguments=-e postgresql_major=${POSTGRES_MAJOR_VERSION}" amazon-arm64-nix.pkr.hcl
114+ nix run .#build-ami -- stage1 \
115+ -var "git-head-version=${GIT_SHA}" \
116+ -var "packer-execution-id=${EXECUTION_ID}" \
117+ -var "ansible_arguments=-e postgresql_major=${POSTGRES_MAJOR_VERSION}" \
118+ -var "region=ap-southeast-1" \
119+ -var 'ami_regions=["ap-southeast-1"]' \
120+ -var-file="development-arm.vars.pkr.hcl" \
121+ -var-file="common-nix.vars.pkr.hcl" \
122+ amazon-arm64-nix.pkr.hcl
119123
120124 - name : Build AMI stage 2
125+ id : build-stage2
121126 env :
122127 AWS_MAX_ATTEMPTS : 10
123128 AWS_RETRY_MODE : adaptive
129+ PACKER_EXECUTION_ID : ${{ env.EXECUTION_ID }}
124130 run : |
125131 GIT_SHA=${{github.sha}}
126- nix run github:supabase/postgres/${GIT_SHA}#packer -- init stage2-nix-psql.pkr.hcl
127- nix run github:supabase/postgres/${GIT_SHA}#packer -- build -var "git-head-version=${GIT_SHA}" -var "packer-execution-id=${EXECUTION_ID}" -var "postgres_major_version=${POSTGRES_MAJOR_VERSION}" -var-file="development-arm.vars.pkr.hcl" -var-file="common-nix.vars.pkr.hcl" -var "postgres-version=${{ steps.random.outputs.random_string }}" -var "region=ap-southeast-1" -var 'ami_regions=["ap-southeast-1"]' -var "force-deregister=true" -var "git_sha=${GITHUB_SHA}" stage2-nix-psql.pkr.hcl
132+ nix run .#build-ami -- stage2 \
133+ -var "git-head-version=${GIT_SHA}" \
134+ -var "packer-execution-id=${EXECUTION_ID}" \
135+ -var "postgres_major_version=${POSTGRES_MAJOR_VERSION}" \
136+ -var-file="development-arm.vars.pkr.hcl" \
137+ -var-file="common-nix.vars.pkr.hcl" \
138+ -var "postgres-version=${EXECUTION_ID}" \
139+ -var 'ami_regions=["ap-southeast-1"]' \
140+ -var "force-deregister=true" \
141+ -var "git_sha=${GITHUB_SHA}" \
142+ stage2-nix-psql.pkr.hcl
128143
129144 - name : Run tests
130145 timeout-minutes : 10
131146 env :
132- AMI_NAME : " supabase-postgres- ${{ steps.random .outputs.random_string }}"
147+ AMI_NAME : ${{ steps.build-stage2 .outputs.stage2_ami_id }}
133148 run : |
134149 # TODO: use poetry for pkg mgmt
135150 pip3 install boto3 boto3-stubs[essential] docker ec2instanceconnectcli pytest pytest-testinfra[paramiko,docker] requests
@@ -138,30 +153,40 @@ jobs:
138153 - name : Cleanup resources on build cancellation
139154 if : ${{ cancelled() }}
140155 run : |
141- aws ec2 --region ap-southeast-1 describe-instances --filters "Name=tag:packerExecutionId,Values=${EXECUTION_ID}" --query "Reservations[].Instances[].InstanceId" --output text | xargs -r aws ec2 terminate-instances --region ap-southeast-1 --instance-ids
156+ INSTANCE_IDS=$(aws ec2 --region ap-southeast-1 describe-instances --filters "Name=tag:packerExecutionId,Values=${EXECUTION_ID}" --query "Reservations[].Instances[].InstanceId" --output text)
157+ if [ -n "$INSTANCE_IDS" ]; then
158+ echo "Terminating packer build instances: $INSTANCE_IDS"
159+ echo "$INSTANCE_IDS" | xargs -r aws ec2 terminate-instances --region ap-southeast-1 --instance-ids
160+ else
161+ echo "No packer build instances to clean up"
162+ fi
142163
143164 - name : Cleanup resources after build
144165 if : ${{ always() }}
145166 run : |
146- aws ec2 --region ap-southeast-1 describe-instances --filters "Name=tag:testinfra-run-id,Values=${EXECUTION_ID}" --query "Reservations[].Instances[].InstanceId" --output text | xargs -r aws ec2 terminate-instances --region ap-southeast-1 --instance-ids || true
167+ INSTANCE_IDS=$(aws ec2 --region ap-southeast-1 describe-instances --filters "Name=tag:testinfra-run-id,Values=${EXECUTION_ID}" --query "Reservations[].Instances[].InstanceId" --output text)
168+ if [ -n "$INSTANCE_IDS" ]; then
169+ echo "Terminating testinfra instances: $INSTANCE_IDS"
170+ echo "$INSTANCE_IDS" | xargs -r aws ec2 terminate-instances --region ap-southeast-1 --instance-ids || true
171+ else
172+ echo "No testinfra instances to clean up"
173+ fi
147174
148- - name : Cleanup AMIs
175+ - name : Cleanup stage 2 AMI
149176 if : always()
150177 run : |
151- # Define AMI name patterns
152- STAGE1_AMI_NAME="supabase-postgres-ci-ami-test-stage-1"
153- STAGE2_AMI_NAME="${{ steps.random.outputs.random_string }}"
154-
155- # Function to deregister AMIs by name pattern
156- deregister_ami_by_name() {
157- local ami_name_pattern=$1
158- local ami_ids=$(aws ec2 describe-images --region ap-southeast-1 --owners self --filters "Name=name,Values=${ami_name_pattern}" --query 'Images[*].ImageId' --output text)
159- for ami_id in $ami_ids ; do
160- echo "Deregistering AMI: $ami_id"
161- aws ec2 deregister-image --region ap-southeast-1 --image-id $ami_id
178+ STAGE2_AMI_IDS=$(aws ec2 describe-images \
179+ --region ap-southeast-1 \
180+ --owners self \
181+ --filters "Name=tag:packerExecutionId,Values=${EXECUTION_ID}" \
182+ --query 'Images[*].ImageId' \
183+ --output text)
184+
185+ if [ -n "$STAGE2_AMI_IDS" ]; then
186+ for ami_id in $STAGE2_AMI_IDS ; do
187+ echo "Deregistering stage 2 AMI: $ami_id"
188+ aws ec2 deregister-image --region ap-southeast-1 --image-id $ami_id || true
162189 done
163- }
164-
165- # Deregister AMIs
166- deregister_ami_by_name "$STAGE1_AMI_NAME"
167- deregister_ami_by_name "$STAGE2_AMI_NAME"
190+ else
191+ echo "No stage 2 AMI to clean up"
192+ fi
0 commit comments