supabase-postgres.git / summary / log / commit / refs
commit 45e80ac037cce9bfcd1c5a494c2b619a0cb975aa
Author: samrose <samuel@supabase.io>
Commit: GitHub <noreply@github.com>
Date: Mon Feb 10 21:06:57 2025 +0000
chore: create a workflow_dispatch only method with input, for docker … (#1440)
* chore: create a workflow_dispatch only method with input, for docker release
* chore: move file to correct dir
.github/workflows/manual-docker-release.yml | 250 ++++++++++++++++++++++++++++
1 file changed, 250 insertions(+)
diff --git a/.github/workflows/manual-docker-release.yml b/.github/workflows/manual-docker-release.yml
new file mode 100644
index 00000000..b9b66b30
--- /dev/null
+++ b/.github/workflows/manual-docker-release.yml
@@ -0,0 +1,250 @@
+name: Manual Docker Artifacts Release
+
+on:
+ workflow_dispatch:
+ inputs:
+ postgresVersion:
+ description: 'Optional. Postgres version to publish against, i.e. 15.1.1.78'
+ required: false
+
+jobs:
+ prepare:
+ runs-on: ubuntu-latest
+ outputs:
+ matrix_config: ${{ steps.set-matrix.outputs.matrix_config }}
+ steps:
+ - uses: DeterminateSystems/nix-installer-action@main
+ - name: Checkout Repo
+ uses: actions/checkout@v3
+ - name: Generate build matrix
+ id: set-matrix
+ run: |
+ nix run nixpkgs#nushell -- -c 'let versions = (open ansible/vars.yml | get postgres_major)
+ let matrix = ($versions | each { |ver|
+ let version = ($ver | str trim)
+ let dockerfile = $"Dockerfile-($version)"
+ if ($dockerfile | path exists) {
+ {
+ version: $version,
+ dockerfile: $dockerfile
+ }
+ } else {
+ null
+ }
+ } | compact)
+
+ let matrix_config = {
+ include: $matrix
+ }
+
+ $"matrix_config=($matrix_config | to json -r)" | save --append $env.GITHUB_OUTPUT'
+ build:
+ needs: prepare
+ strategy:
+ matrix: ${{ fromJson(needs.prepare.outputs.matrix_config) }}
+ runs-on: ubuntu-latest
+ outputs:
+ build_args: ${{ steps.args.outputs.result }}
+ steps:
+ - uses: actions/checkout@v3
+ - uses: DeterminateSystems/nix-installer-action@main
+ - name: Set PostgreSQL version environment variable
+ run: echo "POSTGRES_MAJOR_VERSION=${{ matrix.version }}" >> $GITHUB_ENV
+
+ - id: args
+ run: |
+ nix run nixpkgs#nushell -- -c '
+ open ansible/vars.yml
+ | items { |key value| {name: $key, item: $value} }
+ | where { |it| ($it.item | describe) == "string" }
+ | each { |it| $"($it.name)=($it.item)" }
+ | str join "\n"
+ | save --append $env.GITHUB_OUTPUT
+ '
+ build_release_image:
+ needs: [prepare, build]
+ strategy:
+ matrix:
+ postgres: ${{ fromJson(needs.prepare.outputs.matrix_config).include }}
+ arch: [amd64, arm64]
+ runs-on: ${{ matrix.arch == 'amd64' && 'ubuntu-latest' || 'arm-runner' }}
+ timeout-minutes: 180
+ steps:
+ - uses: actions/checkout@v3
+ - uses: DeterminateSystems/nix-installer-action@main
+ - run: docker context create builders
+ - uses: docker/setup-buildx-action@v3
+ with:
+ endpoint: builders
+ - uses: docker/login-action@v2
+ with:
+ username: ${{ secrets.DOCKER_USERNAME }}
+ password: ${{ secrets.DOCKER_PASSWORD }}
+ - name: Get image tag
+ id: image
+ run: |
+ if [[ "${{ matrix.arch }}" == "arm64" ]]; then
+ pg_version=$(sudo nix run nixpkgs#nushell -- -c '
+ let version = "${{ matrix.postgres.version }}"
+ let release_key = if ($version | str contains "orioledb") {
+ $"postgresorioledb-17"
+ } else {
+ $"postgres($version)"
+ }
+ let base_version = (open ansible/vars.yml | get postgres_release | get $release_key | str trim)
+ let final_version = if "${{ inputs.postgresVersion }}" != "" {
+ "${{ inputs.postgresVersion }}"
+ } else {
+ $base_version
+ }
+ $final_version | str trim
+ ')
+ echo "pg_version=supabase/postgres:$pg_version" >> $GITHUB_OUTPUT
+ else
+ pg_version=$(nix run nixpkgs#nushell -- -c '
+ let version = "${{ matrix.postgres.version }}"
+ let release_key = if ($version | str contains "orioledb") {
+ $"postgresorioledb-17"
+ } else {
+ $"postgres($version)"
+ }
+ let base_version = (open ansible/vars.yml | get postgres_release | get $release_key | str trim)
+ let final_version = if "${{ inputs.postgresVersion }}" != "" {
+ "${{ inputs.postgresVersion }}"
+ } else {
+ $base_version
+ }
+ $final_version | str trim
+ ')
+ echo "pg_version=supabase/postgres:$pg_version" >> $GITHUB_OUTPUT
+ fi
+ - id: build
+ uses: docker/build-push-action@v5
+ with:
+ push: true
+ build-args: |
+ ${{ needs.build.outputs.build_args }}
+ target: production
+ tags: ${{ steps.image.outputs.pg_version }}_${{ matrix.arch }}
+ platforms: linux/${{ matrix.arch }}
+ cache-from: type=gha,scope=${{ github.ref_name }}-latest-${{ matrix.arch }}
+ cache-to: type=gha,mode=max,scope=${{ github.ref_name }}-latest-${{ matrix.arch }}
+ file: ${{ matrix.postgres.dockerfile }}
+ merge_manifest:
+ needs: [prepare, build, build_release_image]
+ strategy:
+ matrix:
+ include: ${{ fromJson(needs.prepare.outputs.matrix_config).include }}
+ runs-on: ubuntu-latest
+ steps:
+ - uses: actions/checkout@v3
+ - uses: DeterminateSystems/nix-installer-action@main
+ - uses: docker/setup-buildx-action@v3
+ - uses: docker/login-action@v2
+ with:
+ username: ${{ secrets.DOCKER_USERNAME }}
+ password: ${{ secrets.DOCKER_PASSWORD }}
+ - name: Get image tag
+ id: get_version
+ run: |
+ nix run nixpkgs#nushell -- -c '
+ let version = "${{ matrix.version }}"
+ let release_key = if ($version | str contains "orioledb") {
+ $"postgresorioledb-17"
+ } else {
+ $"postgres($version)"
+ }
+ let pg_version = (open ansible/vars.yml | get postgres_release | get $release_key | str trim)
+ $"pg_version=supabase/postgres:($pg_version)" | save --append $env.GITHUB_OUTPUT
+ '
+ - name: Output version
+ id: output_version
+ run: |
+ echo "result=${{ steps.get_version.outputs.pg_version }}" >> $GITHUB_OUTPUT
+ - name: Collect versions
+ id: collect_versions
+ run: |
+ echo "${{ steps.output_version.outputs.result }}" >> results.txt # Append results
+ - name: Upload Results Artifact
+ uses: actions/upload-artifact@v4
+ with:
+ name: merge_results-${{ matrix.version }}
+ path: results.txt
+ if-no-files-found: warn
+ - name: Merge multi-arch manifests
+ run: |
+ docker buildx imagetools create -t ${{ steps.get_version.outputs.pg_version }} \
+ ${{ steps.get_version.outputs.pg_version }}_amd64 \
+ ${{ steps.get_version.outputs.pg_version }}_arm64
+ combine_results:
+ needs: [prepare, merge_manifest]
+ runs-on: ubuntu-latest
+ steps:
+ - uses: actions/checkout@v3
+ - uses: DeterminateSystems/nix-installer-action@main
+
+ - name: Debug Input from Prepare
+ run: |
+ echo "Raw matrix_config output:"
+ echo "${{ needs.prepare.outputs.matrix_config }}"
+ - name: Get Versions from Matrix Config
+ id: get_versions
+ run: |
+ nix run nixpkgs#nushell -- -c '
+ # Parse the matrix configuration directly
+ let matrix_config = (${{ toJson(needs.prepare.outputs.matrix_config) }} | from json)
+
+ # Get versions directly from include array
+ let versions = ($matrix_config.include | get version)
+
+ echo "Versions: $versions"
+
+ # Convert the versions to a comma-separated string
+ let versions_str = ($versions | str join ",")
+ $"versions=$versions_str" | save --append $env.GITHUB_ENV
+ '
+ - name: Download Results Artifacts
+ uses: actions/download-artifact@v4
+ with:
+ pattern: merge_results-*
+ - name: Combine Results
+ id: combine
+ run: |
+ nix run nixpkgs#nushell -- -c '
+ # Get all results files and process them in one go
+ let files = (ls **/results.txt | get name)
+ echo $"Found files: ($files)"
+
+ let matrix = {
+ include: (
+ $files
+ | each { |file| open $file } # Open each file
+ | each { |content| $content | lines } # Split into lines
+ | flatten # Flatten the nested lists
+ | where { |line| $line != "" } # Filter empty lines
+ | each { |line|
+ # Extract just the version part after the last colon
+ let version = ($line | parse "supabase/postgres:{version}" | get version.0)
+ {version: $version}
+ }
+ )
+ }
+
+ let json_output = ($matrix | to json -r) # -r for raw output
+ echo $"Debug output: ($json_output)"
+
+ $"matrix=($json_output)" | save --append $env.GITHUB_OUTPUT
+ '
+ - name: Debug Combined Results
+ run: |
+ echo "Combined Results: '${{ steps.combine.outputs.matrix }}'"
+ outputs:
+ matrix: ${{ steps.combine.outputs.matrix }}
+ publish:
+ needs: combine_results
+ strategy:
+ matrix: ${{ fromJson(needs.combine_results.outputs.matrix) }}
+ uses: ./.github/workflows/mirror.yml
+ with:
+ version: ${{ inputs.postgresVersion != '' && inputs.postgresVersion || matrix.version }}
+ secrets: inherit
[parent: 3cd81a22eff5]