name: Build Test and Publish a Testing Release

on:
  workflow_dispatch:
    inputs: {}

jobs:
  prep:
    runs-on: ubuntu-latest
    outputs:
      branch: ${{ steps.whichver.outputs.branch }}

    steps:
    - uses: actions/checkout@v4

    - name: Determine package version
      shell: bash
      run: |
        branch=${GITHUB_REF#refs/heads/}
        echo branch="${branch}" >> $GITHUB_OUTPUT
      id: whichver

  build-debian-buster-x86_64:
    runs-on: ['package-builder', 'self-hosted', 'linux', 'x64']
    needs: prep

    steps:
    - name: Build
      uses: edgedb/edgedb-pkg/integration/linux/build/debian-buster@master
      env:
        SRC_REF: "${{ needs.prep.outputs.branch }}"
        PKG_REVISION: "<current-date>"
        PKG_SUBDIST: "testing"
        PKG_PLATFORM: "debian"
        PKG_PLATFORM_VERSION: "buster"
        EXTRA_OPTIMIZATIONS: "true"
        BUILD_IS_RELEASE: "true"
        METAPKG_GIT_CACHE: disabled

    - uses: actions/upload-artifact@v4
      with:
        name: builds-debian-buster-x86_64
        path: artifacts/debian-buster

  build-debian-buster-aarch64:
    runs-on: ['package-builder', 'self-hosted', 'linux', 'arm64']
    needs: prep

    steps:
    - name: Build
      uses: edgedb/edgedb-pkg/integration/linux/build/debian-buster@master
      env:
        SRC_REF: "${{ needs.prep.outputs.branch }}"
        PKG_REVISION: "<current-date>"
        PKG_SUBDIST: "testing"
        PKG_PLATFORM: "debian"
        PKG_PLATFORM_VERSION: "buster"
        EXTRA_OPTIMIZATIONS: "true"
        BUILD_IS_RELEASE: "true"
        METAPKG_GIT_CACHE: disabled

    - uses: actions/upload-artifact@v4
      with:
        name: builds-debian-buster-aarch64
        path: artifacts/debian-buster

  build-debian-bullseye-x86_64:
    runs-on: ['package-builder', 'self-hosted', 'linux', 'x64']
    needs: prep

    steps:
    - name: Build
      uses: edgedb/edgedb-pkg/integration/linux/build/debian-bullseye@master
      env:
        SRC_REF: "${{ needs.prep.outputs.branch }}"
        PKG_REVISION: "<current-date>"
        PKG_SUBDIST: "testing"
        PKG_PLATFORM: "debian"
        PKG_PLATFORM_VERSION: "bullseye"
        EXTRA_OPTIMIZATIONS: "true"
        BUILD_IS_RELEASE: "true"
        METAPKG_GIT_CACHE: disabled

    - uses: actions/upload-artifact@v4
      with:
        name: builds-debian-bullseye-x86_64
        path: artifacts/debian-bullseye

  build-debian-bullseye-aarch64:
    runs-on: ['package-builder', 'self-hosted', 'linux', 'arm64']
    needs: prep

    steps:
    - name: Build
      uses: edgedb/edgedb-pkg/integration/linux/build/debian-bullseye@master
      env:
        SRC_REF: "${{ needs.prep.outputs.branch }}"
        PKG_REVISION: "<current-date>"
        PKG_SUBDIST: "testing"
        PKG_PLATFORM: "debian"
        PKG_PLATFORM_VERSION: "bullseye"
        EXTRA_OPTIMIZATIONS: "true"
        BUILD_IS_RELEASE: "true"
        METAPKG_GIT_CACHE: disabled

    - uses: actions/upload-artifact@v4
      with:
        name: builds-debian-bullseye-aarch64
        path: artifacts/debian-bullseye

  build-debian-bookworm-x86_64:
    runs-on: ['package-builder', 'self-hosted', 'linux', 'x64']
    needs: prep

    steps:
    - name: Build
      uses: edgedb/edgedb-pkg/integration/linux/build/debian-bookworm@master
      env:
        SRC_REF: "${{ needs.prep.outputs.branch }}"
        PKG_REVISION: "<current-date>"
        PKG_SUBDIST: "testing"
        PKG_PLATFORM: "debian"
        PKG_PLATFORM_VERSION: "bookworm"
        EXTRA_OPTIMIZATIONS: "true"
        BUILD_IS_RELEASE: "true"
        METAPKG_GIT_CACHE: disabled

    - uses: actions/upload-artifact@v4
      with:
        name: builds-debian-bookworm-x86_64
        path: artifacts/debian-bookworm

  build-debian-bookworm-aarch64:
    runs-on: ['package-builder', 'self-hosted', 'linux', 'arm64']
    needs: prep

    steps:
    - name: Build
      uses: edgedb/edgedb-pkg/integration/linux/build/debian-bookworm@master
      env:
        SRC_REF: "${{ needs.prep.outputs.branch }}"
        PKG_REVISION: "<current-date>"
        PKG_SUBDIST: "testing"
        PKG_PLATFORM: "debian"
        PKG_PLATFORM_VERSION: "bookworm"
        EXTRA_OPTIMIZATIONS: "true"
        BUILD_IS_RELEASE: "true"
        METAPKG_GIT_CACHE: disabled

    - uses: actions/upload-artifact@v4
      with:
        name: builds-debian-bookworm-aarch64
        path: artifacts/debian-bookworm

  build-ubuntu-bionic-x86_64:
    runs-on: ['package-builder', 'self-hosted', 'linux', 'x64']
    needs: prep

    steps:
    - name: Build
      uses: edgedb/edgedb-pkg/integration/linux/build/ubuntu-bionic@master
      env:
        SRC_REF: "${{ needs.prep.outputs.branch }}"
        PKG_REVISION: "<current-date>"
        PKG_SUBDIST: "testing"
        PKG_PLATFORM: "ubuntu"
        PKG_PLATFORM_VERSION: "bionic"
        EXTRA_OPTIMIZATIONS: "true"
        BUILD_IS_RELEASE: "true"
        METAPKG_GIT_CACHE: disabled

    - uses: actions/upload-artifact@v4
      with:
        name: builds-ubuntu-bionic-x86_64
        path: artifacts/ubuntu-bionic

  build-ubuntu-bionic-aarch64:
    runs-on: ['package-builder', 'self-hosted', 'linux', 'arm64']
    needs: prep

    steps:
    - name: Build
      uses: edgedb/edgedb-pkg/integration/linux/build/ubuntu-bionic@master
      env:
        SRC_REF: "${{ needs.prep.outputs.branch }}"
        PKG_REVISION: "<current-date>"
        PKG_SUBDIST: "testing"
        PKG_PLATFORM: "ubuntu"
        PKG_PLATFORM_VERSION: "bionic"
        EXTRA_OPTIMIZATIONS: "true"
        BUILD_IS_RELEASE: "true"
        METAPKG_GIT_CACHE: disabled

    - uses: actions/upload-artifact@v4
      with:
        name: builds-ubuntu-bionic-aarch64
        path: artifacts/ubuntu-bionic

  build-ubuntu-focal-x86_64:
    runs-on: ['package-builder', 'self-hosted', 'linux', 'x64']
    needs: prep

    steps:
    - name: Build
      uses: edgedb/edgedb-pkg/integration/linux/build/ubuntu-focal@master
      env:
        SRC_REF: "${{ needs.prep.outputs.branch }}"
        PKG_REVISION: "<current-date>"
        PKG_SUBDIST: "testing"
        PKG_PLATFORM: "ubuntu"
        PKG_PLATFORM_VERSION: "focal"
        EXTRA_OPTIMIZATIONS: "true"
        BUILD_IS_RELEASE: "true"
        METAPKG_GIT_CACHE: disabled

    - uses: actions/upload-artifact@v4
      with:
        name: builds-ubuntu-focal-x86_64
        path: artifacts/ubuntu-focal

  build-ubuntu-focal-aarch64:
    runs-on: ['package-builder', 'self-hosted', 'linux', 'arm64']
    needs: prep

    steps:
    - name: Build
      uses: edgedb/edgedb-pkg/integration/linux/build/ubuntu-focal@master
      env:
        SRC_REF: "${{ needs.prep.outputs.branch }}"
        PKG_REVISION: "<current-date>"
        PKG_SUBDIST: "testing"
        PKG_PLATFORM: "ubuntu"
        PKG_PLATFORM_VERSION: "focal"
        EXTRA_OPTIMIZATIONS: "true"
        BUILD_IS_RELEASE: "true"
        METAPKG_GIT_CACHE: disabled

    - uses: actions/upload-artifact@v4
      with:
        name: builds-ubuntu-focal-aarch64
        path: artifacts/ubuntu-focal

  build-ubuntu-jammy-x86_64:
    runs-on: ['package-builder', 'self-hosted', 'linux', 'x64']
    needs: prep

    steps:
    - name: Build
      uses: edgedb/edgedb-pkg/integration/linux/build/ubuntu-jammy@master
      env:
        SRC_REF: "${{ needs.prep.outputs.branch }}"
        PKG_REVISION: "<current-date>"
        PKG_SUBDIST: "testing"
        PKG_PLATFORM: "ubuntu"
        PKG_PLATFORM_VERSION: "jammy"
        EXTRA_OPTIMIZATIONS: "true"
        BUILD_IS_RELEASE: "true"
        METAPKG_GIT_CACHE: disabled

    - uses: actions/upload-artifact@v4
      with:
        name: builds-ubuntu-jammy-x86_64
        path: artifacts/ubuntu-jammy

  build-ubuntu-jammy-aarch64:
    runs-on: ['package-builder', 'self-hosted', 'linux', 'arm64']
    needs: prep

    steps:
    - name: Build
      uses: edgedb/edgedb-pkg/integration/linux/build/ubuntu-jammy@master
      env:
        SRC_REF: "${{ needs.prep.outputs.branch }}"
        PKG_REVISION: "<current-date>"
        PKG_SUBDIST: "testing"
        PKG_PLATFORM: "ubuntu"
        PKG_PLATFORM_VERSION: "jammy"
        EXTRA_OPTIMIZATIONS: "true"
        BUILD_IS_RELEASE: "true"
        METAPKG_GIT_CACHE: disabled

    - uses: actions/upload-artifact@v4
      with:
        name: builds-ubuntu-jammy-aarch64
        path: artifacts/ubuntu-jammy

  build-centos-8-x86_64:
    runs-on: ['package-builder', 'self-hosted', 'linux', 'x64']
    needs: prep

    steps:
    - name: Build
      uses: edgedb/edgedb-pkg/integration/linux/build/centos-8@master
      env:
        SRC_REF: "${{ needs.prep.outputs.branch }}"
        PKG_REVISION: "<current-date>"
        PKG_SUBDIST: "testing"
        PKG_PLATFORM: "centos"
        PKG_PLATFORM_VERSION: "8"
        EXTRA_OPTIMIZATIONS: "true"
        BUILD_IS_RELEASE: "true"
        METAPKG_GIT_CACHE: disabled

    - uses: actions/upload-artifact@v4
      with:
        name: builds-centos-8-x86_64
        path: artifacts/centos-8

  build-centos-8-aarch64:
    runs-on: ['package-builder', 'self-hosted', 'linux', 'arm64']
    needs: prep

    steps:
    - name: Build
      uses: edgedb/edgedb-pkg/integration/linux/build/centos-8@master
      env:
        SRC_REF: "${{ needs.prep.outputs.branch }}"
        PKG_REVISION: "<current-date>"
        PKG_SUBDIST: "testing"
        PKG_PLATFORM: "centos"
        PKG_PLATFORM_VERSION: "8"
        EXTRA_OPTIMIZATIONS: "true"
        BUILD_IS_RELEASE: "true"
        METAPKG_GIT_CACHE: disabled

    - uses: actions/upload-artifact@v4
      with:
        name: builds-centos-8-aarch64
        path: artifacts/centos-8

  build-rockylinux-9-x86_64:
    runs-on: ['package-builder', 'self-hosted', 'linux', 'x64']
    needs: prep

    steps:
    - name: Build
      uses: edgedb/edgedb-pkg/integration/linux/build/rockylinux-9@master
      env:
        SRC_REF: "${{ needs.prep.outputs.branch }}"
        PKG_REVISION: "<current-date>"
        PKG_SUBDIST: "testing"
        PKG_PLATFORM: "rockylinux"
        PKG_PLATFORM_VERSION: "9"
        EXTRA_OPTIMIZATIONS: "true"
        BUILD_IS_RELEASE: "true"
        METAPKG_GIT_CACHE: disabled

    - uses: actions/upload-artifact@v4
      with:
        name: builds-rockylinux-9-x86_64
        path: artifacts/rockylinux-9

  build-rockylinux-9-aarch64:
    runs-on: ['package-builder', 'self-hosted', 'linux', 'arm64']
    needs: prep

    steps:
    - name: Build
      uses: edgedb/edgedb-pkg/integration/linux/build/rockylinux-9@master
      env:
        SRC_REF: "${{ needs.prep.outputs.branch }}"
        PKG_REVISION: "<current-date>"
        PKG_SUBDIST: "testing"
        PKG_PLATFORM: "rockylinux"
        PKG_PLATFORM_VERSION: "9"
        EXTRA_OPTIMIZATIONS: "true"
        BUILD_IS_RELEASE: "true"
        METAPKG_GIT_CACHE: disabled

    - uses: actions/upload-artifact@v4
      with:
        name: builds-rockylinux-9-aarch64
        path: artifacts/rockylinux-9

  build-linux-x86_64:
    runs-on: ['package-builder', 'self-hosted', 'linux', 'x64']
    needs: prep

    steps:
    - name: Build
      uses: edgedb/edgedb-pkg/integration/linux/build/linux-x86_64@master
      env:
        SRC_REF: "${{ needs.prep.outputs.branch }}"
        PKG_REVISION: "<current-date>"
        PKG_SUBDIST: "testing"
        PKG_PLATFORM: "linux"
        PKG_PLATFORM_VERSION: "x86_64"
        EXTRA_OPTIMIZATIONS: "true"
        BUILD_IS_RELEASE: "true"
        BUILD_GENERIC: true
        METAPKG_GIT_CACHE: disabled

    - uses: actions/upload-artifact@v4
      with:
        name: builds-linux-x86_64
        path: artifacts/linux-x86_64

  build-linux-aarch64:
    runs-on: ['package-builder', 'self-hosted', 'linux', 'arm64']
    needs: prep

    steps:
    - name: Build
      uses: edgedb/edgedb-pkg/integration/linux/build/linux-aarch64@master
      env:
        SRC_REF: "${{ needs.prep.outputs.branch }}"
        PKG_REVISION: "<current-date>"
        PKG_SUBDIST: "testing"
        PKG_PLATFORM: "linux"
        PKG_PLATFORM_VERSION: "aarch64"
        EXTRA_OPTIMIZATIONS: "true"
        BUILD_IS_RELEASE: "true"
        BUILD_GENERIC: true
        METAPKG_GIT_CACHE: disabled

    - uses: actions/upload-artifact@v4
      with:
        name: builds-linux-aarch64
        path: artifacts/linux-aarch64

  build-linuxmusl-x86_64:
    runs-on: ['package-builder', 'self-hosted', 'linux', 'x64']
    needs: prep

    steps:
    - name: Build
      uses: edgedb/edgedb-pkg/integration/linux/build/linuxmusl-x86_64@master
      env:
        SRC_REF: "${{ needs.prep.outputs.branch }}"
        PKG_REVISION: "<current-date>"
        PKG_SUBDIST: "testing"
        PKG_PLATFORM: "linux"
        PKG_PLATFORM_VERSION: "x86_64"
        EXTRA_OPTIMIZATIONS: "true"
        BUILD_IS_RELEASE: "true"
        BUILD_GENERIC: true
        PKG_PLATFORM_LIBC: "musl"
        METAPKG_GIT_CACHE: disabled

    - uses: actions/upload-artifact@v4
      with:
        name: builds-linuxmusl-x86_64
        path: artifacts/linuxmusl-x86_64

  build-linuxmusl-aarch64:
    runs-on: ['package-builder', 'self-hosted', 'linux', 'arm64']
    needs: prep

    steps:
    - name: Build
      uses: edgedb/edgedb-pkg/integration/linux/build/linuxmusl-aarch64@master
      env:
        SRC_REF: "${{ needs.prep.outputs.branch }}"
        PKG_REVISION: "<current-date>"
        PKG_SUBDIST: "testing"
        PKG_PLATFORM: "linux"
        PKG_PLATFORM_VERSION: "aarch64"
        EXTRA_OPTIMIZATIONS: "true"
        BUILD_IS_RELEASE: "true"
        BUILD_GENERIC: true
        PKG_PLATFORM_LIBC: "musl"
        METAPKG_GIT_CACHE: disabled

    - uses: actions/upload-artifact@v4
      with:
        name: builds-linuxmusl-aarch64
        path: artifacts/linuxmusl-aarch64

  build-macos-x86_64:
    runs-on: ['macos-13']
    needs: prep

    steps:
    - uses: actions/checkout@v4
      with:
        repository: edgedb/edgedb-pkg
        ref: master
        path: edgedb-pkg

    - name: Install Rust toolchain
      uses: dtolnay/rust-toolchain@be73d7920c329f220ce78e0234b8f96b7ae60248
      if: true
      with:
        components: "cargo,rustc,rust-std"
        toolchain: "stable"
        targets: "x86_64-apple-darwin"

    - name: Set up Python
      uses: actions/setup-python@v5
      if: true
      with:
        python-version: "3.x"

    - name: Set up NodeJS
      uses: actions/setup-node@v4
      if: true
      with:
        node-version: '20'

    - name: Install dependencies
      if: true
      run: |
        env HOMEBREW_NO_AUTO_UPDATE=1 brew install libmagic

    - name: Build
      env:
        SRC_REF: "${{ needs.prep.outputs.branch }}"
        BUILD_IS_RELEASE: "true"
        PKG_REVISION: "<current-date>"
        PKG_SUBDIST: "testing"
        PKG_PLATFORM: "macos"
        PKG_PLATFORM_VERSION: "x86_64"
        PKG_PLATFORM_ARCH: "x86_64"
        EXTRA_OPTIMIZATIONS: "true"
        METAPKG_GIT_CACHE: disabled
        BUILD_GENERIC: true
      run: |
        edgedb-pkg/integration/macos/build.sh

    - uses: actions/upload-artifact@v4
      with:
        name: builds-macos-x86_64
        path: artifacts/macos-x86_64

  build-macos-aarch64:
    runs-on: ['macos-14']
    needs: prep

    steps:
    - uses: actions/checkout@v4
      with:
        repository: edgedb/edgedb-pkg
        ref: master
        path: edgedb-pkg

    - name: Install Rust toolchain
      uses: dtolnay/rust-toolchain@be73d7920c329f220ce78e0234b8f96b7ae60248
      if: true
      with:
        components: "cargo,rustc,rust-std"
        toolchain: "stable"
        targets: "aarch64-apple-darwin"

    - name: Set up Python
      uses: actions/setup-python@v5
      if: true
      with:
        python-version: "3.x"

    - name: Set up NodeJS
      uses: actions/setup-node@v4
      if: true
      with:
        node-version: '20'

    - name: Install dependencies
      if: true
      run: |
        env HOMEBREW_NO_AUTO_UPDATE=1 brew install libmagic

    - name: Build
      env:
        SRC_REF: "${{ needs.prep.outputs.branch }}"
        BUILD_IS_RELEASE: "true"
        PKG_REVISION: "<current-date>"
        PKG_SUBDIST: "testing"
        PKG_PLATFORM: "macos"
        PKG_PLATFORM_VERSION: "aarch64"
        PKG_PLATFORM_ARCH: "aarch64"
        EXTRA_OPTIMIZATIONS: "true"
        METAPKG_GIT_CACHE: disabled
        BUILD_GENERIC: true
      run: |
        edgedb-pkg/integration/macos/build.sh

    - uses: actions/upload-artifact@v4
      with:
        name: builds-macos-aarch64
        path: artifacts/macos-aarch64

  test-debian-buster-x86_64:
    needs: [build-debian-buster-x86_64]
    runs-on: ['package-builder', 'self-hosted', 'linux', 'x64']

    steps:
    - uses: actions/download-artifact@v4
      with:
        name: builds-debian-buster-x86_64
        path: artifacts/debian-buster

    - name: Test
      uses: edgedb/edgedb-pkg/integration/linux/test/debian-buster@master
      env:
        PKG_SUBDIST: "testing"
        PKG_PLATFORM: "debian"
        PKG_PLATFORM_VERSION: "buster"
        PKG_PLATFORM_LIBC: ""
        # edb test with -j higher than 1 seems to result in workflow
        # jobs getting killed arbitrarily by Github.
        PKG_TEST_JOBS: 0

  test-debian-buster-aarch64:
    needs: [build-debian-buster-aarch64]
    runs-on: ['package-builder', 'self-hosted', 'linux', 'arm64']

    steps:
    - uses: actions/download-artifact@v4
      with:
        name: builds-debian-buster-aarch64
        path: artifacts/debian-buster

    - name: Test
      uses: edgedb/edgedb-pkg/integration/linux/test/debian-buster@master
      env:
        PKG_SUBDIST: "testing"
        PKG_PLATFORM: "debian"
        PKG_PLATFORM_VERSION: "buster"
        PKG_PLATFORM_LIBC: ""
        # edb test with -j higher than 1 seems to result in workflow
        # jobs getting killed arbitrarily by Github.
        PKG_TEST_JOBS: 0

  test-debian-bullseye-x86_64:
    needs: [build-debian-bullseye-x86_64]
    runs-on: ['package-builder', 'self-hosted', 'linux', 'x64']

    steps:
    - uses: actions/download-artifact@v4
      with:
        name: builds-debian-bullseye-x86_64
        path: artifacts/debian-bullseye

    - name: Test
      uses: edgedb/edgedb-pkg/integration/linux/test/debian-bullseye@master
      env:
        PKG_SUBDIST: "testing"
        PKG_PLATFORM: "debian"
        PKG_PLATFORM_VERSION: "bullseye"
        PKG_PLATFORM_LIBC: ""
        # edb test with -j higher than 1 seems to result in workflow
        # jobs getting killed arbitrarily by Github.
        PKG_TEST_JOBS: 0

  test-debian-bullseye-aarch64:
    needs: [build-debian-bullseye-aarch64]
    runs-on: ['package-builder', 'self-hosted', 'linux', 'arm64']

    steps:
    - uses: actions/download-artifact@v4
      with:
        name: builds-debian-bullseye-aarch64
        path: artifacts/debian-bullseye

    - name: Test
      uses: edgedb/edgedb-pkg/integration/linux/test/debian-bullseye@master
      env:
        PKG_SUBDIST: "testing"
        PKG_PLATFORM: "debian"
        PKG_PLATFORM_VERSION: "bullseye"
        PKG_PLATFORM_LIBC: ""
        # edb test with -j higher than 1 seems to result in workflow
        # jobs getting killed arbitrarily by Github.
        PKG_TEST_JOBS: 0

  test-debian-bookworm-x86_64:
    needs: [build-debian-bookworm-x86_64]
    runs-on: ['package-builder', 'self-hosted', 'linux', 'x64']

    steps:
    - uses: actions/download-artifact@v4
      with:
        name: builds-debian-bookworm-x86_64
        path: artifacts/debian-bookworm

    - name: Test
      uses: edgedb/edgedb-pkg/integration/linux/test/debian-bookworm@master
      env:
        PKG_SUBDIST: "testing"
        PKG_PLATFORM: "debian"
        PKG_PLATFORM_VERSION: "bookworm"
        PKG_PLATFORM_LIBC: ""
        # edb test with -j higher than 1 seems to result in workflow
        # jobs getting killed arbitrarily by Github.
        PKG_TEST_JOBS: 0

  test-debian-bookworm-aarch64:
    needs: [build-debian-bookworm-aarch64]
    runs-on: ['package-builder', 'self-hosted', 'linux', 'arm64']

    steps:
    - uses: actions/download-artifact@v4
      with:
        name: builds-debian-bookworm-aarch64
        path: artifacts/debian-bookworm

    - name: Test
      uses: edgedb/edgedb-pkg/integration/linux/test/debian-bookworm@master
      env:
        PKG_SUBDIST: "testing"
        PKG_PLATFORM: "debian"
        PKG_PLATFORM_VERSION: "bookworm"
        PKG_PLATFORM_LIBC: ""
        # edb test with -j higher than 1 seems to result in workflow
        # jobs getting killed arbitrarily by Github.
        PKG_TEST_JOBS: 0

  test-ubuntu-bionic-x86_64:
    needs: [build-ubuntu-bionic-x86_64]
    runs-on: ['package-builder', 'self-hosted', 'linux', 'x64']

    steps:
    - uses: actions/download-artifact@v4
      with:
        name: builds-ubuntu-bionic-x86_64
        path: artifacts/ubuntu-bionic

    - name: Test
      uses: edgedb/edgedb-pkg/integration/linux/test/ubuntu-bionic@master
      env:
        PKG_SUBDIST: "testing"
        PKG_PLATFORM: "ubuntu"
        PKG_PLATFORM_VERSION: "bionic"
        PKG_PLATFORM_LIBC: ""
        # edb test with -j higher than 1 seems to result in workflow
        # jobs getting killed arbitrarily by Github.
        PKG_TEST_JOBS: 0

  test-ubuntu-bionic-aarch64:
    needs: [build-ubuntu-bionic-aarch64]
    runs-on: ['package-builder', 'self-hosted', 'linux', 'arm64']

    steps:
    - uses: actions/download-artifact@v4
      with:
        name: builds-ubuntu-bionic-aarch64
        path: artifacts/ubuntu-bionic

    - name: Test
      uses: edgedb/edgedb-pkg/integration/linux/test/ubuntu-bionic@master
      env:
        PKG_SUBDIST: "testing"
        PKG_PLATFORM: "ubuntu"
        PKG_PLATFORM_VERSION: "bionic"
        PKG_PLATFORM_LIBC: ""
        # edb test with -j higher than 1 seems to result in workflow
        # jobs getting killed arbitrarily by Github.
        PKG_TEST_JOBS: 0

  test-ubuntu-focal-x86_64:
    needs: [build-ubuntu-focal-x86_64]
    runs-on: ['package-builder', 'self-hosted', 'linux', 'x64']

    steps:
    - uses: actions/download-artifact@v4
      with:
        name: builds-ubuntu-focal-x86_64
        path: artifacts/ubuntu-focal

    - name: Test
      uses: edgedb/edgedb-pkg/integration/linux/test/ubuntu-focal@master
      env:
        PKG_SUBDIST: "testing"
        PKG_PLATFORM: "ubuntu"
        PKG_PLATFORM_VERSION: "focal"
        PKG_PLATFORM_LIBC: ""
        # edb test with -j higher than 1 seems to result in workflow
        # jobs getting killed arbitrarily by Github.
        PKG_TEST_JOBS: 0

  test-ubuntu-focal-aarch64:
    needs: [build-ubuntu-focal-aarch64]
    runs-on: ['package-builder', 'self-hosted', 'linux', 'arm64']

    steps:
    - uses: actions/download-artifact@v4
      with:
        name: builds-ubuntu-focal-aarch64
        path: artifacts/ubuntu-focal

    - name: Test
      uses: edgedb/edgedb-pkg/integration/linux/test/ubuntu-focal@master
      env:
        PKG_SUBDIST: "testing"
        PKG_PLATFORM: "ubuntu"
        PKG_PLATFORM_VERSION: "focal"
        PKG_PLATFORM_LIBC: ""
        # edb test with -j higher than 1 seems to result in workflow
        # jobs getting killed arbitrarily by Github.
        PKG_TEST_JOBS: 0

  test-ubuntu-jammy-x86_64:
    needs: [build-ubuntu-jammy-x86_64]
    runs-on: ['package-builder', 'self-hosted', 'linux', 'x64']

    steps:
    - uses: actions/download-artifact@v4
      with:
        name: builds-ubuntu-jammy-x86_64
        path: artifacts/ubuntu-jammy

    - name: Test
      uses: edgedb/edgedb-pkg/integration/linux/test/ubuntu-jammy@master
      env:
        PKG_SUBDIST: "testing"
        PKG_PLATFORM: "ubuntu"
        PKG_PLATFORM_VERSION: "jammy"
        PKG_PLATFORM_LIBC: ""
        # edb test with -j higher than 1 seems to result in workflow
        # jobs getting killed arbitrarily by Github.
        PKG_TEST_JOBS: 0

  test-ubuntu-jammy-aarch64:
    needs: [build-ubuntu-jammy-aarch64]
    runs-on: ['package-builder', 'self-hosted', 'linux', 'arm64']

    steps:
    - uses: actions/download-artifact@v4
      with:
        name: builds-ubuntu-jammy-aarch64
        path: artifacts/ubuntu-jammy

    - name: Test
      uses: edgedb/edgedb-pkg/integration/linux/test/ubuntu-jammy@master
      env:
        PKG_SUBDIST: "testing"
        PKG_PLATFORM: "ubuntu"
        PKG_PLATFORM_VERSION: "jammy"
        PKG_PLATFORM_LIBC: ""
        # edb test with -j higher than 1 seems to result in workflow
        # jobs getting killed arbitrarily by Github.
        PKG_TEST_JOBS: 0

  test-centos-8-x86_64:
    needs: [build-centos-8-x86_64]
    runs-on: ['package-builder', 'self-hosted', 'linux', 'x64']

    steps:
    - uses: actions/download-artifact@v4
      with:
        name: builds-centos-8-x86_64
        path: artifacts/centos-8

    - name: Test
      uses: edgedb/edgedb-pkg/integration/linux/test/centos-8@master
      env:
        PKG_SUBDIST: "testing"
        PKG_PLATFORM: "centos"
        PKG_PLATFORM_VERSION: "8"
        PKG_PLATFORM_LIBC: ""
        # edb test with -j higher than 1 seems to result in workflow
        # jobs getting killed arbitrarily by Github.
        PKG_TEST_JOBS: 0

  test-centos-8-aarch64:
    needs: [build-centos-8-aarch64]
    runs-on: ['package-builder', 'self-hosted', 'linux', 'arm64']

    steps:
    - uses: actions/download-artifact@v4
      with:
        name: builds-centos-8-aarch64
        path: artifacts/centos-8

    - name: Test
      uses: edgedb/edgedb-pkg/integration/linux/test/centos-8@master
      env:
        PKG_SUBDIST: "testing"
        PKG_PLATFORM: "centos"
        PKG_PLATFORM_VERSION: "8"
        PKG_PLATFORM_LIBC: ""
        # edb test with -j higher than 1 seems to result in workflow
        # jobs getting killed arbitrarily by Github.
        PKG_TEST_JOBS: 0

  test-rockylinux-9-x86_64:
    needs: [build-rockylinux-9-x86_64]
    runs-on: ['package-builder', 'self-hosted', 'linux', 'x64']

    steps:
    - uses: actions/download-artifact@v4
      with:
        name: builds-rockylinux-9-x86_64
        path: artifacts/rockylinux-9

    - name: Test
      uses: edgedb/edgedb-pkg/integration/linux/test/rockylinux-9@master
      env:
        PKG_SUBDIST: "testing"
        PKG_PLATFORM: "rockylinux"
        PKG_PLATFORM_VERSION: "9"
        PKG_PLATFORM_LIBC: ""
        # edb test with -j higher than 1 seems to result in workflow
        # jobs getting killed arbitrarily by Github.
        PKG_TEST_JOBS: 0

  test-rockylinux-9-aarch64:
    needs: [build-rockylinux-9-aarch64]
    runs-on: ['package-builder', 'self-hosted', 'linux', 'arm64']

    steps:
    - uses: actions/download-artifact@v4
      with:
        name: builds-rockylinux-9-aarch64
        path: artifacts/rockylinux-9

    - name: Test
      uses: edgedb/edgedb-pkg/integration/linux/test/rockylinux-9@master
      env:
        PKG_SUBDIST: "testing"
        PKG_PLATFORM: "rockylinux"
        PKG_PLATFORM_VERSION: "9"
        PKG_PLATFORM_LIBC: ""
        # edb test with -j higher than 1 seems to result in workflow
        # jobs getting killed arbitrarily by Github.
        PKG_TEST_JOBS: 0

  test-linux-x86_64:
    needs: [build-linux-x86_64]
    runs-on: ['package-builder', 'self-hosted', 'linux', 'x64']

    steps:
    - uses: actions/download-artifact@v4
      with:
        name: builds-linux-x86_64
        path: artifacts/linux-x86_64

    - name: Test
      uses: edgedb/edgedb-pkg/integration/linux/test/linux-x86_64@master
      env:
        PKG_SUBDIST: "testing"
        PKG_PLATFORM: "linux"
        PKG_PLATFORM_VERSION: "x86_64"
        PKG_PLATFORM_LIBC: ""
        # edb test with -j higher than 1 seems to result in workflow
        # jobs getting killed arbitrarily by Github.
        PKG_TEST_JOBS: 0

  test-linux-aarch64:
    needs: [build-linux-aarch64]
    runs-on: ['package-builder', 'self-hosted', 'linux', 'arm64']

    steps:
    - uses: actions/download-artifact@v4
      with:
        name: builds-linux-aarch64
        path: artifacts/linux-aarch64

    - name: Test
      uses: edgedb/edgedb-pkg/integration/linux/test/linux-aarch64@master
      env:
        PKG_SUBDIST: "testing"
        PKG_PLATFORM: "linux"
        PKG_PLATFORM_VERSION: "aarch64"
        PKG_PLATFORM_LIBC: ""
        # edb test with -j higher than 1 seems to result in workflow
        # jobs getting killed arbitrarily by Github.
        PKG_TEST_JOBS: 0

  test-linuxmusl-x86_64:
    needs: [build-linuxmusl-x86_64]
    runs-on: ['package-builder', 'self-hosted', 'linux', 'x64']

    steps:
    - uses: actions/download-artifact@v4
      with:
        name: builds-linuxmusl-x86_64
        path: artifacts/linuxmusl-x86_64

    - name: Test
      uses: edgedb/edgedb-pkg/integration/linux/test/linuxmusl-x86_64@master
      env:
        PKG_SUBDIST: "testing"
        PKG_PLATFORM: "linux"
        PKG_PLATFORM_VERSION: "x86_64"
        PKG_PLATFORM_LIBC: "musl"
        # edb test with -j higher than 1 seems to result in workflow
        # jobs getting killed arbitrarily by Github.
        PKG_TEST_JOBS: 0

  test-linuxmusl-aarch64:
    needs: [build-linuxmusl-aarch64]
    runs-on: ['package-builder', 'self-hosted', 'linux', 'arm64']

    steps:
    - uses: actions/download-artifact@v4
      with:
        name: builds-linuxmusl-aarch64
        path: artifacts/linuxmusl-aarch64

    - name: Test
      uses: edgedb/edgedb-pkg/integration/linux/test/linuxmusl-aarch64@master
      env:
        PKG_SUBDIST: "testing"
        PKG_PLATFORM: "linux"
        PKG_PLATFORM_VERSION: "aarch64"
        PKG_PLATFORM_LIBC: "musl"
        # edb test with -j higher than 1 seems to result in workflow
        # jobs getting killed arbitrarily by Github.
        PKG_TEST_JOBS: 0

  test-macos-x86_64:
    needs: [build-macos-x86_64]
    runs-on: ['macos-13']

    steps:
    - uses: actions/checkout@v4
      with:
        repository: edgedb/edgedb-pkg
        ref: master
        path: edgedb-pkg

    - uses: actions/download-artifact@v4
      with:
        name: builds-macos-x86_64
        path: artifacts/macos-x86_64

    - name: Test
      env:
        PKG_SUBDIST: "testing"
        PKG_PLATFORM: "macos"
        PKG_PLATFORM_VERSION: "x86_64"
        # Run fewer tests on x86_64, since the test runner is very slow.
        PKG_TEST_FILES: "test_dump*.py test_backend_*.py test_database.py test_server_*.py test_edgeql_ddl.py test_session.py"
      run: |
        # Bump shmmax and shmall to avoid test failures.
        sudo sysctl -w kern.sysv.shmmax=12582912
        sudo sysctl -w kern.sysv.shmall=12582912
        edgedb-pkg/integration/macos/test.sh

  test-macos-aarch64:
    needs: [build-macos-aarch64]
    runs-on: ['macos-14']

    steps:
    - uses: actions/checkout@v4
      with:
        repository: edgedb/edgedb-pkg
        ref: master
        path: edgedb-pkg

    - uses: actions/download-artifact@v4
      with:
        name: builds-macos-aarch64
        path: artifacts/macos-aarch64

    - name: Test
      env:
        PKG_SUBDIST: "testing"
        PKG_PLATFORM: "macos"
        PKG_PLATFORM_VERSION: "aarch64"
      run: |
        edgedb-pkg/integration/macos/test.sh
  collect:
    needs:
    - test-debian-buster-x86_64
    - test-debian-buster-aarch64
    - test-debian-bullseye-x86_64
    - test-debian-bullseye-aarch64
    - test-debian-bookworm-x86_64
    - test-debian-bookworm-aarch64
    - test-ubuntu-bionic-x86_64
    - test-ubuntu-bionic-aarch64
    - test-ubuntu-focal-x86_64
    - test-ubuntu-focal-aarch64
    - test-ubuntu-jammy-x86_64
    - test-ubuntu-jammy-aarch64
    - test-centos-8-x86_64
    - test-centos-8-aarch64
    - test-rockylinux-9-x86_64
    - test-rockylinux-9-aarch64
    - test-linux-x86_64
    - test-linux-aarch64
    - test-linuxmusl-x86_64
    - test-linuxmusl-aarch64
    - test-macos-x86_64
    - test-macos-aarch64
    runs-on: ubuntu-latest
    steps:
      - run: echo 'All build+tests passed, ready to publish now!'

  publish-debian-buster-x86_64:
    needs: [collect]
    runs-on: ubuntu-latest

    steps:
    - uses: actions/download-artifact@v4
      with:
        name: builds-debian-buster-x86_64
        path: artifacts/debian-buster

    - name: Publish
      uses: edgedb/edgedb-pkg/integration/linux/upload/linux-x86_64@master
      env:
        PKG_SUBDIST: "testing"
        PACKAGE_SERVER: sftp://uploader@package-upload.edgedb.net:22/
        PKG_PLATFORM: "debian"
        PKG_PLATFORM_VERSION: "buster"
        PKG_PLATFORM_LIBC: ""
        PACKAGE_UPLOAD_SSH_KEY: "${{ secrets.PACKAGE_UPLOAD_SSH_KEY }}"

  check-published-debian-buster-x86_64:
    needs: [publish-debian-buster-x86_64]
    runs-on: ['package-builder', 'self-hosted', 'linux', 'x64']

    steps:
    - uses: actions/download-artifact@v4
      with:
        name: builds-debian-buster-x86_64
        path: artifacts/debian-buster

    - name: Describe
      id: describe
      uses: edgedb/edgedb-pkg/integration/actions/describe-artifact@master
      with:
        target: debian-buster

    - name: Test Published
      uses: edgedb/edgedb-pkg/integration/linux/testpublished/debian-buster@master
      env:
        PKG_NAME: "${{ steps.describe.outputs.name }}"
        PKG_SUBDIST: "testing"
        PACKAGE_SERVER: sftp://uploader@package-upload.edgedb.net:22/
        PKG_PLATFORM: "debian"
        PKG_PLATFORM_VERSION: "buster"
        PKG_INSTALL_REF: "${{ steps.describe.outputs.install-ref }}"
        PKG_VERSION_SLOT: "${{ steps.describe.outputs.version-slot }}"

    outputs:
      version-slot: ${{ steps.describe.outputs.version-slot }}
      version-core: ${{ steps.describe.outputs.version-core }}
      catalog-version: ${{ steps.describe.outputs.catalog-version }}

  publish-debian-buster-aarch64:
    needs: [collect]
    runs-on: ubuntu-latest

    steps:
    - uses: actions/download-artifact@v4
      with:
        name: builds-debian-buster-aarch64
        path: artifacts/debian-buster

    - name: Publish
      uses: edgedb/edgedb-pkg/integration/linux/upload/linux-x86_64@master
      env:
        PKG_SUBDIST: "testing"
        PACKAGE_SERVER: sftp://uploader@package-upload.edgedb.net:22/
        PKG_PLATFORM: "debian"
        PKG_PLATFORM_VERSION: "buster"
        PKG_PLATFORM_LIBC: ""
        PACKAGE_UPLOAD_SSH_KEY: "${{ secrets.PACKAGE_UPLOAD_SSH_KEY }}"

  check-published-debian-buster-aarch64:
    needs: [publish-debian-buster-aarch64]
    runs-on: ['package-builder', 'self-hosted', 'linux', 'arm64']

    steps:
    - uses: actions/download-artifact@v4
      with:
        name: builds-debian-buster-aarch64
        path: artifacts/debian-buster

    - name: Describe
      id: describe
      uses: edgedb/edgedb-pkg/integration/actions/describe-artifact@master
      with:
        target: debian-buster

    - name: Test Published
      uses: edgedb/edgedb-pkg/integration/linux/testpublished/debian-buster@master
      env:
        PKG_NAME: "${{ steps.describe.outputs.name }}"
        PKG_SUBDIST: "testing"
        PACKAGE_SERVER: sftp://uploader@package-upload.edgedb.net:22/
        PKG_PLATFORM: "debian"
        PKG_PLATFORM_VERSION: "buster"
        PKG_INSTALL_REF: "${{ steps.describe.outputs.install-ref }}"
        PKG_VERSION_SLOT: "${{ steps.describe.outputs.version-slot }}"

    outputs:
      version-slot: ${{ steps.describe.outputs.version-slot }}
      version-core: ${{ steps.describe.outputs.version-core }}
      catalog-version: ${{ steps.describe.outputs.catalog-version }}

  publish-debian-bullseye-x86_64:
    needs: [collect]
    runs-on: ubuntu-latest

    steps:
    - uses: actions/download-artifact@v4
      with:
        name: builds-debian-bullseye-x86_64
        path: artifacts/debian-bullseye

    - name: Publish
      uses: edgedb/edgedb-pkg/integration/linux/upload/linux-x86_64@master
      env:
        PKG_SUBDIST: "testing"
        PACKAGE_SERVER: sftp://uploader@package-upload.edgedb.net:22/
        PKG_PLATFORM: "debian"
        PKG_PLATFORM_VERSION: "bullseye"
        PKG_PLATFORM_LIBC: ""
        PACKAGE_UPLOAD_SSH_KEY: "${{ secrets.PACKAGE_UPLOAD_SSH_KEY }}"

  check-published-debian-bullseye-x86_64:
    needs: [publish-debian-bullseye-x86_64]
    runs-on: ['package-builder', 'self-hosted', 'linux', 'x64']

    steps:
    - uses: actions/download-artifact@v4
      with:
        name: builds-debian-bullseye-x86_64
        path: artifacts/debian-bullseye

    - name: Describe
      id: describe
      uses: edgedb/edgedb-pkg/integration/actions/describe-artifact@master
      with:
        target: debian-bullseye

    - name: Test Published
      uses: edgedb/edgedb-pkg/integration/linux/testpublished/debian-bullseye@master
      env:
        PKG_NAME: "${{ steps.describe.outputs.name }}"
        PKG_SUBDIST: "testing"
        PACKAGE_SERVER: sftp://uploader@package-upload.edgedb.net:22/
        PKG_PLATFORM: "debian"
        PKG_PLATFORM_VERSION: "bullseye"
        PKG_INSTALL_REF: "${{ steps.describe.outputs.install-ref }}"
        PKG_VERSION_SLOT: "${{ steps.describe.outputs.version-slot }}"

    outputs:
      version-slot: ${{ steps.describe.outputs.version-slot }}
      version-core: ${{ steps.describe.outputs.version-core }}
      catalog-version: ${{ steps.describe.outputs.catalog-version }}

  publish-debian-bullseye-aarch64:
    needs: [collect]
    runs-on: ubuntu-latest

    steps:
    - uses: actions/download-artifact@v4
      with:
        name: builds-debian-bullseye-aarch64
        path: artifacts/debian-bullseye

    - name: Publish
      uses: edgedb/edgedb-pkg/integration/linux/upload/linux-x86_64@master
      env:
        PKG_SUBDIST: "testing"
        PACKAGE_SERVER: sftp://uploader@package-upload.edgedb.net:22/
        PKG_PLATFORM: "debian"
        PKG_PLATFORM_VERSION: "bullseye"
        PKG_PLATFORM_LIBC: ""
        PACKAGE_UPLOAD_SSH_KEY: "${{ secrets.PACKAGE_UPLOAD_SSH_KEY }}"

  check-published-debian-bullseye-aarch64:
    needs: [publish-debian-bullseye-aarch64]
    runs-on: ['package-builder', 'self-hosted', 'linux', 'arm64']

    steps:
    - uses: actions/download-artifact@v4
      with:
        name: builds-debian-bullseye-aarch64
        path: artifacts/debian-bullseye

    - name: Describe
      id: describe
      uses: edgedb/edgedb-pkg/integration/actions/describe-artifact@master
      with:
        target: debian-bullseye

    - name: Test Published
      uses: edgedb/edgedb-pkg/integration/linux/testpublished/debian-bullseye@master
      env:
        PKG_NAME: "${{ steps.describe.outputs.name }}"
        PKG_SUBDIST: "testing"
        PACKAGE_SERVER: sftp://uploader@package-upload.edgedb.net:22/
        PKG_PLATFORM: "debian"
        PKG_PLATFORM_VERSION: "bullseye"
        PKG_INSTALL_REF: "${{ steps.describe.outputs.install-ref }}"
        PKG_VERSION_SLOT: "${{ steps.describe.outputs.version-slot }}"

    outputs:
      version-slot: ${{ steps.describe.outputs.version-slot }}
      version-core: ${{ steps.describe.outputs.version-core }}
      catalog-version: ${{ steps.describe.outputs.catalog-version }}

  publish-debian-bookworm-x86_64:
    needs: [collect]
    runs-on: ubuntu-latest

    steps:
    - uses: actions/download-artifact@v4
      with:
        name: builds-debian-bookworm-x86_64
        path: artifacts/debian-bookworm

    - name: Publish
      uses: edgedb/edgedb-pkg/integration/linux/upload/linux-x86_64@master
      env:
        PKG_SUBDIST: "testing"
        PACKAGE_SERVER: sftp://uploader@package-upload.edgedb.net:22/
        PKG_PLATFORM: "debian"
        PKG_PLATFORM_VERSION: "bookworm"
        PKG_PLATFORM_LIBC: ""
        PACKAGE_UPLOAD_SSH_KEY: "${{ secrets.PACKAGE_UPLOAD_SSH_KEY }}"

  check-published-debian-bookworm-x86_64:
    needs: [publish-debian-bookworm-x86_64]
    runs-on: ['package-builder', 'self-hosted', 'linux', 'x64']

    steps:
    - uses: actions/download-artifact@v4
      with:
        name: builds-debian-bookworm-x86_64
        path: artifacts/debian-bookworm

    - name: Describe
      id: describe
      uses: edgedb/edgedb-pkg/integration/actions/describe-artifact@master
      with:
        target: debian-bookworm

    - name: Test Published
      uses: edgedb/edgedb-pkg/integration/linux/testpublished/debian-bookworm@master
      env:
        PKG_NAME: "${{ steps.describe.outputs.name }}"
        PKG_SUBDIST: "testing"
        PACKAGE_SERVER: sftp://uploader@package-upload.edgedb.net:22/
        PKG_PLATFORM: "debian"
        PKG_PLATFORM_VERSION: "bookworm"
        PKG_INSTALL_REF: "${{ steps.describe.outputs.install-ref }}"
        PKG_VERSION_SLOT: "${{ steps.describe.outputs.version-slot }}"

    outputs:
      version-slot: ${{ steps.describe.outputs.version-slot }}
      version-core: ${{ steps.describe.outputs.version-core }}
      catalog-version: ${{ steps.describe.outputs.catalog-version }}

  publish-debian-bookworm-aarch64:
    needs: [collect]
    runs-on: ubuntu-latest

    steps:
    - uses: actions/download-artifact@v4
      with:
        name: builds-debian-bookworm-aarch64
        path: artifacts/debian-bookworm

    - name: Publish
      uses: edgedb/edgedb-pkg/integration/linux/upload/linux-x86_64@master
      env:
        PKG_SUBDIST: "testing"
        PACKAGE_SERVER: sftp://uploader@package-upload.edgedb.net:22/
        PKG_PLATFORM: "debian"
        PKG_PLATFORM_VERSION: "bookworm"
        PKG_PLATFORM_LIBC: ""
        PACKAGE_UPLOAD_SSH_KEY: "${{ secrets.PACKAGE_UPLOAD_SSH_KEY }}"

  check-published-debian-bookworm-aarch64:
    needs: [publish-debian-bookworm-aarch64]
    runs-on: ['package-builder', 'self-hosted', 'linux', 'arm64']

    steps:
    - uses: actions/download-artifact@v4
      with:
        name: builds-debian-bookworm-aarch64
        path: artifacts/debian-bookworm

    - name: Describe
      id: describe
      uses: edgedb/edgedb-pkg/integration/actions/describe-artifact@master
      with:
        target: debian-bookworm

    - name: Test Published
      uses: edgedb/edgedb-pkg/integration/linux/testpublished/debian-bookworm@master
      env:
        PKG_NAME: "${{ steps.describe.outputs.name }}"
        PKG_SUBDIST: "testing"
        PACKAGE_SERVER: sftp://uploader@package-upload.edgedb.net:22/
        PKG_PLATFORM: "debian"
        PKG_PLATFORM_VERSION: "bookworm"
        PKG_INSTALL_REF: "${{ steps.describe.outputs.install-ref }}"
        PKG_VERSION_SLOT: "${{ steps.describe.outputs.version-slot }}"

    outputs:
      version-slot: ${{ steps.describe.outputs.version-slot }}
      version-core: ${{ steps.describe.outputs.version-core }}
      catalog-version: ${{ steps.describe.outputs.catalog-version }}

  publish-ubuntu-bionic-x86_64:
    needs: [collect]
    runs-on: ubuntu-latest

    steps:
    - uses: actions/download-artifact@v4
      with:
        name: builds-ubuntu-bionic-x86_64
        path: artifacts/ubuntu-bionic

    - name: Publish
      uses: edgedb/edgedb-pkg/integration/linux/upload/linux-x86_64@master
      env:
        PKG_SUBDIST: "testing"
        PACKAGE_SERVER: sftp://uploader@package-upload.edgedb.net:22/
        PKG_PLATFORM: "ubuntu"
        PKG_PLATFORM_VERSION: "bionic"
        PKG_PLATFORM_LIBC: ""
        PACKAGE_UPLOAD_SSH_KEY: "${{ secrets.PACKAGE_UPLOAD_SSH_KEY }}"

  check-published-ubuntu-bionic-x86_64:
    needs: [publish-ubuntu-bionic-x86_64]
    runs-on: ['package-builder', 'self-hosted', 'linux', 'x64']

    steps:
    - uses: actions/download-artifact@v4
      with:
        name: builds-ubuntu-bionic-x86_64
        path: artifacts/ubuntu-bionic

    - name: Describe
      id: describe
      uses: edgedb/edgedb-pkg/integration/actions/describe-artifact@master
      with:
        target: ubuntu-bionic

    - name: Test Published
      uses: edgedb/edgedb-pkg/integration/linux/testpublished/ubuntu-bionic@master
      env:
        PKG_NAME: "${{ steps.describe.outputs.name }}"
        PKG_SUBDIST: "testing"
        PACKAGE_SERVER: sftp://uploader@package-upload.edgedb.net:22/
        PKG_PLATFORM: "ubuntu"
        PKG_PLATFORM_VERSION: "bionic"
        PKG_INSTALL_REF: "${{ steps.describe.outputs.install-ref }}"
        PKG_VERSION_SLOT: "${{ steps.describe.outputs.version-slot }}"

    outputs:
      version-slot: ${{ steps.describe.outputs.version-slot }}
      version-core: ${{ steps.describe.outputs.version-core }}
      catalog-version: ${{ steps.describe.outputs.catalog-version }}

  publish-ubuntu-bionic-aarch64:
    needs: [collect]
    runs-on: ubuntu-latest

    steps:
    - uses: actions/download-artifact@v4
      with:
        name: builds-ubuntu-bionic-aarch64
        path: artifacts/ubuntu-bionic

    - name: Publish
      uses: edgedb/edgedb-pkg/integration/linux/upload/linux-x86_64@master
      env:
        PKG_SUBDIST: "testing"
        PACKAGE_SERVER: sftp://uploader@package-upload.edgedb.net:22/
        PKG_PLATFORM: "ubuntu"
        PKG_PLATFORM_VERSION: "bionic"
        PKG_PLATFORM_LIBC: ""
        PACKAGE_UPLOAD_SSH_KEY: "${{ secrets.PACKAGE_UPLOAD_SSH_KEY }}"

  check-published-ubuntu-bionic-aarch64:
    needs: [publish-ubuntu-bionic-aarch64]
    runs-on: ['package-builder', 'self-hosted', 'linux', 'arm64']

    steps:
    - uses: actions/download-artifact@v4
      with:
        name: builds-ubuntu-bionic-aarch64
        path: artifacts/ubuntu-bionic

    - name: Describe
      id: describe
      uses: edgedb/edgedb-pkg/integration/actions/describe-artifact@master
      with:
        target: ubuntu-bionic

    - name: Test Published
      uses: edgedb/edgedb-pkg/integration/linux/testpublished/ubuntu-bionic@master
      env:
        PKG_NAME: "${{ steps.describe.outputs.name }}"
        PKG_SUBDIST: "testing"
        PACKAGE_SERVER: sftp://uploader@package-upload.edgedb.net:22/
        PKG_PLATFORM: "ubuntu"
        PKG_PLATFORM_VERSION: "bionic"
        PKG_INSTALL_REF: "${{ steps.describe.outputs.install-ref }}"
        PKG_VERSION_SLOT: "${{ steps.describe.outputs.version-slot }}"

    outputs:
      version-slot: ${{ steps.describe.outputs.version-slot }}
      version-core: ${{ steps.describe.outputs.version-core }}
      catalog-version: ${{ steps.describe.outputs.catalog-version }}

  publish-ubuntu-focal-x86_64:
    needs: [collect]
    runs-on: ubuntu-latest

    steps:
    - uses: actions/download-artifact@v4
      with:
        name: builds-ubuntu-focal-x86_64
        path: artifacts/ubuntu-focal

    - name: Publish
      uses: edgedb/edgedb-pkg/integration/linux/upload/linux-x86_64@master
      env:
        PKG_SUBDIST: "testing"
        PACKAGE_SERVER: sftp://uploader@package-upload.edgedb.net:22/
        PKG_PLATFORM: "ubuntu"
        PKG_PLATFORM_VERSION: "focal"
        PKG_PLATFORM_LIBC: ""
        PACKAGE_UPLOAD_SSH_KEY: "${{ secrets.PACKAGE_UPLOAD_SSH_KEY }}"

  check-published-ubuntu-focal-x86_64:
    needs: [publish-ubuntu-focal-x86_64]
    runs-on: ['package-builder', 'self-hosted', 'linux', 'x64']

    steps:
    - uses: actions/download-artifact@v4
      with:
        name: builds-ubuntu-focal-x86_64
        path: artifacts/ubuntu-focal

    - name: Describe
      id: describe
      uses: edgedb/edgedb-pkg/integration/actions/describe-artifact@master
      with:
        target: ubuntu-focal

    - name: Test Published
      uses: edgedb/edgedb-pkg/integration/linux/testpublished/ubuntu-focal@master
      env:
        PKG_NAME: "${{ steps.describe.outputs.name }}"
        PKG_SUBDIST: "testing"
        PACKAGE_SERVER: sftp://uploader@package-upload.edgedb.net:22/
        PKG_PLATFORM: "ubuntu"
        PKG_PLATFORM_VERSION: "focal"
        PKG_INSTALL_REF: "${{ steps.describe.outputs.install-ref }}"
        PKG_VERSION_SLOT: "${{ steps.describe.outputs.version-slot }}"

    outputs:
      version-slot: ${{ steps.describe.outputs.version-slot }}
      version-core: ${{ steps.describe.outputs.version-core }}
      catalog-version: ${{ steps.describe.outputs.catalog-version }}

  publish-ubuntu-focal-aarch64:
    needs: [collect]
    runs-on: ubuntu-latest

    steps:
    - uses: actions/download-artifact@v4
      with:
        name: builds-ubuntu-focal-aarch64
        path: artifacts/ubuntu-focal

    - name: Publish
      uses: edgedb/edgedb-pkg/integration/linux/upload/linux-x86_64@master
      env:
        PKG_SUBDIST: "testing"
        PACKAGE_SERVER: sftp://uploader@package-upload.edgedb.net:22/
        PKG_PLATFORM: "ubuntu"
        PKG_PLATFORM_VERSION: "focal"
        PKG_PLATFORM_LIBC: ""
        PACKAGE_UPLOAD_SSH_KEY: "${{ secrets.PACKAGE_UPLOAD_SSH_KEY }}"

  check-published-ubuntu-focal-aarch64:
    needs: [publish-ubuntu-focal-aarch64]
    runs-on: ['package-builder', 'self-hosted', 'linux', 'arm64']

    steps:
    - uses: actions/download-artifact@v4
      with:
        name: builds-ubuntu-focal-aarch64
        path: artifacts/ubuntu-focal

    - name: Describe
      id: describe
      uses: edgedb/edgedb-pkg/integration/actions/describe-artifact@master
      with:
        target: ubuntu-focal

    - name: Test Published
      uses: edgedb/edgedb-pkg/integration/linux/testpublished/ubuntu-focal@master
      env:
        PKG_NAME: "${{ steps.describe.outputs.name }}"
        PKG_SUBDIST: "testing"
        PACKAGE_SERVER: sftp://uploader@package-upload.edgedb.net:22/
        PKG_PLATFORM: "ubuntu"
        PKG_PLATFORM_VERSION: "focal"
        PKG_INSTALL_REF: "${{ steps.describe.outputs.install-ref }}"
        PKG_VERSION_SLOT: "${{ steps.describe.outputs.version-slot }}"

    outputs:
      version-slot: ${{ steps.describe.outputs.version-slot }}
      version-core: ${{ steps.describe.outputs.version-core }}
      catalog-version: ${{ steps.describe.outputs.catalog-version }}

  publish-ubuntu-jammy-x86_64:
    needs: [collect]
    runs-on: ubuntu-latest

    steps:
    - uses: actions/download-artifact@v4
      with:
        name: builds-ubuntu-jammy-x86_64
        path: artifacts/ubuntu-jammy

    - name: Publish
      uses: edgedb/edgedb-pkg/integration/linux/upload/linux-x86_64@master
      env:
        PKG_SUBDIST: "testing"
        PACKAGE_SERVER: sftp://uploader@package-upload.edgedb.net:22/
        PKG_PLATFORM: "ubuntu"
        PKG_PLATFORM_VERSION: "jammy"
        PKG_PLATFORM_LIBC: ""
        PACKAGE_UPLOAD_SSH_KEY: "${{ secrets.PACKAGE_UPLOAD_SSH_KEY }}"

  check-published-ubuntu-jammy-x86_64:
    needs: [publish-ubuntu-jammy-x86_64]
    runs-on: ['package-builder', 'self-hosted', 'linux', 'x64']

    steps:
    - uses: actions/download-artifact@v4
      with:
        name: builds-ubuntu-jammy-x86_64
        path: artifacts/ubuntu-jammy

    - name: Describe
      id: describe
      uses: edgedb/edgedb-pkg/integration/actions/describe-artifact@master
      with:
        target: ubuntu-jammy

    - name: Test Published
      uses: edgedb/edgedb-pkg/integration/linux/testpublished/ubuntu-jammy@master
      env:
        PKG_NAME: "${{ steps.describe.outputs.name }}"
        PKG_SUBDIST: "testing"
        PACKAGE_SERVER: sftp://uploader@package-upload.edgedb.net:22/
        PKG_PLATFORM: "ubuntu"
        PKG_PLATFORM_VERSION: "jammy"
        PKG_INSTALL_REF: "${{ steps.describe.outputs.install-ref }}"
        PKG_VERSION_SLOT: "${{ steps.describe.outputs.version-slot }}"

    outputs:
      version-slot: ${{ steps.describe.outputs.version-slot }}
      version-core: ${{ steps.describe.outputs.version-core }}
      catalog-version: ${{ steps.describe.outputs.catalog-version }}

  publish-ubuntu-jammy-aarch64:
    needs: [collect]
    runs-on: ubuntu-latest

    steps:
    - uses: actions/download-artifact@v4
      with:
        name: builds-ubuntu-jammy-aarch64
        path: artifacts/ubuntu-jammy

    - name: Publish
      uses: edgedb/edgedb-pkg/integration/linux/upload/linux-x86_64@master
      env:
        PKG_SUBDIST: "testing"
        PACKAGE_SERVER: sftp://uploader@package-upload.edgedb.net:22/
        PKG_PLATFORM: "ubuntu"
        PKG_PLATFORM_VERSION: "jammy"
        PKG_PLATFORM_LIBC: ""
        PACKAGE_UPLOAD_SSH_KEY: "${{ secrets.PACKAGE_UPLOAD_SSH_KEY }}"

  check-published-ubuntu-jammy-aarch64:
    needs: [publish-ubuntu-jammy-aarch64]
    runs-on: ['package-builder', 'self-hosted', 'linux', 'arm64']

    steps:
    - uses: actions/download-artifact@v4
      with:
        name: builds-ubuntu-jammy-aarch64
        path: artifacts/ubuntu-jammy

    - name: Describe
      id: describe
      uses: edgedb/edgedb-pkg/integration/actions/describe-artifact@master
      with:
        target: ubuntu-jammy

    - name: Test Published
      uses: edgedb/edgedb-pkg/integration/linux/testpublished/ubuntu-jammy@master
      env:
        PKG_NAME: "${{ steps.describe.outputs.name }}"
        PKG_SUBDIST: "testing"
        PACKAGE_SERVER: sftp://uploader@package-upload.edgedb.net:22/
        PKG_PLATFORM: "ubuntu"
        PKG_PLATFORM_VERSION: "jammy"
        PKG_INSTALL_REF: "${{ steps.describe.outputs.install-ref }}"
        PKG_VERSION_SLOT: "${{ steps.describe.outputs.version-slot }}"

    outputs:
      version-slot: ${{ steps.describe.outputs.version-slot }}
      version-core: ${{ steps.describe.outputs.version-core }}
      catalog-version: ${{ steps.describe.outputs.catalog-version }}

  publish-centos-8-x86_64:
    needs: [collect]
    runs-on: ubuntu-latest

    steps:
    - uses: actions/download-artifact@v4
      with:
        name: builds-centos-8-x86_64
        path: artifacts/centos-8

    - name: Publish
      uses: edgedb/edgedb-pkg/integration/linux/upload/linux-x86_64@master
      env:
        PKG_SUBDIST: "testing"
        PACKAGE_SERVER: sftp://uploader@package-upload.edgedb.net:22/
        PKG_PLATFORM: "centos"
        PKG_PLATFORM_VERSION: "8"
        PKG_PLATFORM_LIBC: ""
        PACKAGE_UPLOAD_SSH_KEY: "${{ secrets.PACKAGE_UPLOAD_SSH_KEY }}"

  check-published-centos-8-x86_64:
    needs: [publish-centos-8-x86_64]
    runs-on: ['package-builder', 'self-hosted', 'linux', 'x64']

    steps:
    - uses: actions/download-artifact@v4
      with:
        name: builds-centos-8-x86_64
        path: artifacts/centos-8

    - name: Describe
      id: describe
      uses: edgedb/edgedb-pkg/integration/actions/describe-artifact@master
      with:
        target: centos-8

    - name: Test Published
      uses: edgedb/edgedb-pkg/integration/linux/testpublished/centos-8@master
      env:
        PKG_NAME: "${{ steps.describe.outputs.name }}"
        PKG_SUBDIST: "testing"
        PACKAGE_SERVER: sftp://uploader@package-upload.edgedb.net:22/
        PKG_PLATFORM: "centos"
        PKG_PLATFORM_VERSION: "8"
        PKG_INSTALL_REF: "${{ steps.describe.outputs.install-ref }}"
        PKG_VERSION_SLOT: "${{ steps.describe.outputs.version-slot }}"

    outputs:
      version-slot: ${{ steps.describe.outputs.version-slot }}
      version-core: ${{ steps.describe.outputs.version-core }}
      catalog-version: ${{ steps.describe.outputs.catalog-version }}

  publish-centos-8-aarch64:
    needs: [collect]
    runs-on: ubuntu-latest

    steps:
    - uses: actions/download-artifact@v4
      with:
        name: builds-centos-8-aarch64
        path: artifacts/centos-8

    - name: Publish
      uses: edgedb/edgedb-pkg/integration/linux/upload/linux-x86_64@master
      env:
        PKG_SUBDIST: "testing"
        PACKAGE_SERVER: sftp://uploader@package-upload.edgedb.net:22/
        PKG_PLATFORM: "centos"
        PKG_PLATFORM_VERSION: "8"
        PKG_PLATFORM_LIBC: ""
        PACKAGE_UPLOAD_SSH_KEY: "${{ secrets.PACKAGE_UPLOAD_SSH_KEY }}"

  check-published-centos-8-aarch64:
    needs: [publish-centos-8-aarch64]
    runs-on: ['package-builder', 'self-hosted', 'linux', 'arm64']

    steps:
    - uses: actions/download-artifact@v4
      with:
        name: builds-centos-8-aarch64
        path: artifacts/centos-8

    - name: Describe
      id: describe
      uses: edgedb/edgedb-pkg/integration/actions/describe-artifact@master
      with:
        target: centos-8

    - name: Test Published
      uses: edgedb/edgedb-pkg/integration/linux/testpublished/centos-8@master
      env:
        PKG_NAME: "${{ steps.describe.outputs.name }}"
        PKG_SUBDIST: "testing"
        PACKAGE_SERVER: sftp://uploader@package-upload.edgedb.net:22/
        PKG_PLATFORM: "centos"
        PKG_PLATFORM_VERSION: "8"
        PKG_INSTALL_REF: "${{ steps.describe.outputs.install-ref }}"
        PKG_VERSION_SLOT: "${{ steps.describe.outputs.version-slot }}"

    outputs:
      version-slot: ${{ steps.describe.outputs.version-slot }}
      version-core: ${{ steps.describe.outputs.version-core }}
      catalog-version: ${{ steps.describe.outputs.catalog-version }}

  publish-rockylinux-9-x86_64:
    needs: [collect]
    runs-on: ubuntu-latest

    steps:
    - uses: actions/download-artifact@v4
      with:
        name: builds-rockylinux-9-x86_64
        path: artifacts/rockylinux-9

    - name: Publish
      uses: edgedb/edgedb-pkg/integration/linux/upload/linux-x86_64@master
      env:
        PKG_SUBDIST: "testing"
        PACKAGE_SERVER: sftp://uploader@package-upload.edgedb.net:22/
        PKG_PLATFORM: "rockylinux"
        PKG_PLATFORM_VERSION: "9"
        PKG_PLATFORM_LIBC: ""
        PACKAGE_UPLOAD_SSH_KEY: "${{ secrets.PACKAGE_UPLOAD_SSH_KEY }}"

  check-published-rockylinux-9-x86_64:
    needs: [publish-rockylinux-9-x86_64]
    runs-on: ['package-builder', 'self-hosted', 'linux', 'x64']

    steps:
    - uses: actions/download-artifact@v4
      with:
        name: builds-rockylinux-9-x86_64
        path: artifacts/rockylinux-9

    - name: Describe
      id: describe
      uses: edgedb/edgedb-pkg/integration/actions/describe-artifact@master
      with:
        target: rockylinux-9

    - name: Test Published
      uses: edgedb/edgedb-pkg/integration/linux/testpublished/rockylinux-9@master
      env:
        PKG_NAME: "${{ steps.describe.outputs.name }}"
        PKG_SUBDIST: "testing"
        PACKAGE_SERVER: sftp://uploader@package-upload.edgedb.net:22/
        PKG_PLATFORM: "rockylinux"
        PKG_PLATFORM_VERSION: "9"
        PKG_INSTALL_REF: "${{ steps.describe.outputs.install-ref }}"
        PKG_VERSION_SLOT: "${{ steps.describe.outputs.version-slot }}"

    outputs:
      version-slot: ${{ steps.describe.outputs.version-slot }}
      version-core: ${{ steps.describe.outputs.version-core }}
      catalog-version: ${{ steps.describe.outputs.catalog-version }}

  publish-rockylinux-9-aarch64:
    needs: [collect]
    runs-on: ubuntu-latest

    steps:
    - uses: actions/download-artifact@v4
      with:
        name: builds-rockylinux-9-aarch64
        path: artifacts/rockylinux-9

    - name: Publish
      uses: edgedb/edgedb-pkg/integration/linux/upload/linux-x86_64@master
      env:
        PKG_SUBDIST: "testing"
        PACKAGE_SERVER: sftp://uploader@package-upload.edgedb.net:22/
        PKG_PLATFORM: "rockylinux"
        PKG_PLATFORM_VERSION: "9"
        PKG_PLATFORM_LIBC: ""
        PACKAGE_UPLOAD_SSH_KEY: "${{ secrets.PACKAGE_UPLOAD_SSH_KEY }}"

  check-published-rockylinux-9-aarch64:
    needs: [publish-rockylinux-9-aarch64]
    runs-on: ['package-builder', 'self-hosted', 'linux', 'arm64']

    steps:
    - uses: actions/download-artifact@v4
      with:
        name: builds-rockylinux-9-aarch64
        path: artifacts/rockylinux-9

    - name: Describe
      id: describe
      uses: edgedb/edgedb-pkg/integration/actions/describe-artifact@master
      with:
        target: rockylinux-9

    - name: Test Published
      uses: edgedb/edgedb-pkg/integration/linux/testpublished/rockylinux-9@master
      env:
        PKG_NAME: "${{ steps.describe.outputs.name }}"
        PKG_SUBDIST: "testing"
        PACKAGE_SERVER: sftp://uploader@package-upload.edgedb.net:22/
        PKG_PLATFORM: "rockylinux"
        PKG_PLATFORM_VERSION: "9"
        PKG_INSTALL_REF: "${{ steps.describe.outputs.install-ref }}"
        PKG_VERSION_SLOT: "${{ steps.describe.outputs.version-slot }}"

    outputs:
      version-slot: ${{ steps.describe.outputs.version-slot }}
      version-core: ${{ steps.describe.outputs.version-core }}
      catalog-version: ${{ steps.describe.outputs.catalog-version }}

  publish-linux-x86_64:
    needs: [collect]
    runs-on: ubuntu-latest

    steps:
    - uses: actions/download-artifact@v4
      with:
        name: builds-linux-x86_64
        path: artifacts/linux-x86_64

    - name: Publish
      uses: edgedb/edgedb-pkg/integration/linux/upload/linux-x86_64@master
      env:
        PKG_SUBDIST: "testing"
        PACKAGE_SERVER: sftp://uploader@package-upload.edgedb.net:22/
        PKG_PLATFORM: "linux"
        PKG_PLATFORM_VERSION: "x86_64"
        PKG_PLATFORM_LIBC: ""
        PACKAGE_UPLOAD_SSH_KEY: "${{ secrets.PACKAGE_UPLOAD_SSH_KEY }}"

  check-published-linux-x86_64:
    needs: [publish-linux-x86_64]
    runs-on: ['package-builder', 'self-hosted', 'linux', 'x64']

    steps:
    - uses: actions/download-artifact@v4
      with:
        name: builds-linux-x86_64
        path: artifacts/linux-x86_64

    - name: Describe
      id: describe
      uses: edgedb/edgedb-pkg/integration/actions/describe-artifact@master
      with:
        target: linux-x86_64

    - name: Test Published
      uses: edgedb/edgedb-pkg/integration/linux/testpublished/linux-x86_64@master
      env:
        PKG_NAME: "${{ steps.describe.outputs.name }}"
        PKG_SUBDIST: "testing"
        PACKAGE_SERVER: sftp://uploader@package-upload.edgedb.net:22/
        PKG_PLATFORM: "linux"
        PKG_PLATFORM_VERSION: "x86_64"
        PKG_INSTALL_REF: "${{ steps.describe.outputs.install-ref }}"
        PKG_VERSION_SLOT: "${{ steps.describe.outputs.version-slot }}"

    outputs:
      version-slot: ${{ steps.describe.outputs.version-slot }}
      version-core: ${{ steps.describe.outputs.version-core }}
      catalog-version: ${{ steps.describe.outputs.catalog-version }}

  publish-linux-aarch64:
    needs: [collect]
    runs-on: ubuntu-latest

    steps:
    - uses: actions/download-artifact@v4
      with:
        name: builds-linux-aarch64
        path: artifacts/linux-aarch64

    - name: Publish
      uses: edgedb/edgedb-pkg/integration/linux/upload/linux-x86_64@master
      env:
        PKG_SUBDIST: "testing"
        PACKAGE_SERVER: sftp://uploader@package-upload.edgedb.net:22/
        PKG_PLATFORM: "linux"
        PKG_PLATFORM_VERSION: "aarch64"
        PKG_PLATFORM_LIBC: ""
        PACKAGE_UPLOAD_SSH_KEY: "${{ secrets.PACKAGE_UPLOAD_SSH_KEY }}"

  check-published-linux-aarch64:
    needs: [publish-linux-aarch64]
    runs-on: ['package-builder', 'self-hosted', 'linux', 'arm64']

    steps:
    - uses: actions/download-artifact@v4
      with:
        name: builds-linux-aarch64
        path: artifacts/linux-aarch64

    - name: Describe
      id: describe
      uses: edgedb/edgedb-pkg/integration/actions/describe-artifact@master
      with:
        target: linux-aarch64

    - name: Test Published
      uses: edgedb/edgedb-pkg/integration/linux/testpublished/linux-aarch64@master
      env:
        PKG_NAME: "${{ steps.describe.outputs.name }}"
        PKG_SUBDIST: "testing"
        PACKAGE_SERVER: sftp://uploader@package-upload.edgedb.net:22/
        PKG_PLATFORM: "linux"
        PKG_PLATFORM_VERSION: "aarch64"
        PKG_INSTALL_REF: "${{ steps.describe.outputs.install-ref }}"
        PKG_VERSION_SLOT: "${{ steps.describe.outputs.version-slot }}"

    outputs:
      version-slot: ${{ steps.describe.outputs.version-slot }}
      version-core: ${{ steps.describe.outputs.version-core }}
      catalog-version: ${{ steps.describe.outputs.catalog-version }}

  publish-linuxmusl-x86_64:
    needs: [collect]
    runs-on: ubuntu-latest

    steps:
    - uses: actions/download-artifact@v4
      with:
        name: builds-linuxmusl-x86_64
        path: artifacts/linuxmusl-x86_64

    - name: Publish
      uses: edgedb/edgedb-pkg/integration/linux/upload/linux-x86_64@master
      env:
        PKG_SUBDIST: "testing"
        PACKAGE_SERVER: sftp://uploader@package-upload.edgedb.net:22/
        PKG_PLATFORM: "linux"
        PKG_PLATFORM_VERSION: "x86_64"
        PKG_PLATFORM_LIBC: "musl"
        PACKAGE_UPLOAD_SSH_KEY: "${{ secrets.PACKAGE_UPLOAD_SSH_KEY }}"

  check-published-linuxmusl-x86_64:
    needs: [publish-linuxmusl-x86_64]
    runs-on: ['package-builder', 'self-hosted', 'linux', 'x64']

    steps:
    - uses: actions/download-artifact@v4
      with:
        name: builds-linuxmusl-x86_64
        path: artifacts/linuxmusl-x86_64

    - name: Describe
      id: describe
      uses: edgedb/edgedb-pkg/integration/actions/describe-artifact@master
      with:
        target: linuxmusl-x86_64

    - name: Test Published
      uses: edgedb/edgedb-pkg/integration/linux/testpublished/linuxmusl-x86_64@master
      env:
        PKG_NAME: "${{ steps.describe.outputs.name }}"
        PKG_SUBDIST: "testing"
        PACKAGE_SERVER: sftp://uploader@package-upload.edgedb.net:22/
        PKG_PLATFORM: "linux"
        PKG_PLATFORM_VERSION: "x86_64"
        PKG_INSTALL_REF: "${{ steps.describe.outputs.install-ref }}"
        PKG_VERSION_SLOT: "${{ steps.describe.outputs.version-slot }}"

    outputs:
      version-slot: ${{ steps.describe.outputs.version-slot }}
      version-core: ${{ steps.describe.outputs.version-core }}
      catalog-version: ${{ steps.describe.outputs.catalog-version }}

  publish-linuxmusl-aarch64:
    needs: [collect]
    runs-on: ubuntu-latest

    steps:
    - uses: actions/download-artifact@v4
      with:
        name: builds-linuxmusl-aarch64
        path: artifacts/linuxmusl-aarch64

    - name: Publish
      uses: edgedb/edgedb-pkg/integration/linux/upload/linux-x86_64@master
      env:
        PKG_SUBDIST: "testing"
        PACKAGE_SERVER: sftp://uploader@package-upload.edgedb.net:22/
        PKG_PLATFORM: "linux"
        PKG_PLATFORM_VERSION: "aarch64"
        PKG_PLATFORM_LIBC: "musl"
        PACKAGE_UPLOAD_SSH_KEY: "${{ secrets.PACKAGE_UPLOAD_SSH_KEY }}"

  check-published-linuxmusl-aarch64:
    needs: [publish-linuxmusl-aarch64]
    runs-on: ['package-builder', 'self-hosted', 'linux', 'arm64']

    steps:
    - uses: actions/download-artifact@v4
      with:
        name: builds-linuxmusl-aarch64
        path: artifacts/linuxmusl-aarch64

    - name: Describe
      id: describe
      uses: edgedb/edgedb-pkg/integration/actions/describe-artifact@master
      with:
        target: linuxmusl-aarch64

    - name: Test Published
      uses: edgedb/edgedb-pkg/integration/linux/testpublished/linuxmusl-aarch64@master
      env:
        PKG_NAME: "${{ steps.describe.outputs.name }}"
        PKG_SUBDIST: "testing"
        PACKAGE_SERVER: sftp://uploader@package-upload.edgedb.net:22/
        PKG_PLATFORM: "linux"
        PKG_PLATFORM_VERSION: "aarch64"
        PKG_INSTALL_REF: "${{ steps.describe.outputs.install-ref }}"
        PKG_VERSION_SLOT: "${{ steps.describe.outputs.version-slot }}"

    outputs:
      version-slot: ${{ steps.describe.outputs.version-slot }}
      version-core: ${{ steps.describe.outputs.version-core }}
      catalog-version: ${{ steps.describe.outputs.catalog-version }}

  publish-macos-x86_64:
    needs: [collect]
    runs-on: ubuntu-latest

    steps:
    - uses: actions/download-artifact@v4
      with:
        name: builds-macos-x86_64
        path: artifacts/macos-x86_64

    - uses: actions/checkout@v4
      with:
        repository: edgedb/edgedb-pkg
        ref: master
        path: edgedb-pkg

    - name: Describe
      id: describe
      uses: edgedb/edgedb-pkg/integration/actions/describe-artifact@master
      with:
        target: macos-x86_64

    - name: Publish
      uses: edgedb/edgedb-pkg/integration/linux/upload/linux-x86_64@master
      env:
        PKG_SUBDIST: "testing"
        PKG_PLATFORM: "macos"
        PKG_PLATFORM_VERSION: "x86_64"
        PACKAGE_UPLOAD_SSH_KEY: "${{ secrets.PACKAGE_UPLOAD_SSH_KEY }}"

  publish-macos-aarch64:
    needs: [collect]
    runs-on: ubuntu-latest

    steps:
    - uses: actions/download-artifact@v4
      with:
        name: builds-macos-aarch64
        path: artifacts/macos-aarch64

    - uses: actions/checkout@v4
      with:
        repository: edgedb/edgedb-pkg
        ref: master
        path: edgedb-pkg

    - name: Describe
      id: describe
      uses: edgedb/edgedb-pkg/integration/actions/describe-artifact@master
      with:
        target: macos-aarch64

    - name: Publish
      uses: edgedb/edgedb-pkg/integration/linux/upload/linux-x86_64@master
      env:
        PKG_SUBDIST: "testing"
        PKG_PLATFORM: "macos"
        PKG_PLATFORM_VERSION: "aarch64"
        PACKAGE_UPLOAD_SSH_KEY: "${{ secrets.PACKAGE_UPLOAD_SSH_KEY }}"

  publish-docker:
    needs:
      - check-published-debian-buster-x86_64
      - check-published-debian-buster-aarch64
    runs-on: ubuntu-latest

    steps:
    - uses: actions/checkout@v4
      with:
        repository: edgedb/edgedb-docker
        ref: master
        path: dockerfile

    - env:
        VERSION_SLOT: "${{ needs.check-published-debian-buster-x86_64.outputs.version-slot }}"
        VERSION_CORE: "${{ needs.check-published-debian-buster-x86_64.outputs.version-core }}"
        PKG_SUBDIST: "testing"
      id: tags
      run: |
        set -e

        url='https://registry.hub.docker.com/v2/repositories/edgedb/edgedb/tags?page_size=100'
        repo_tags=$(
          while [ -n "$url" ]; do
            resp=$(curl -L -s "$url")
            url=$(echo "$resp" | jq -r ".next")
            if [ "$url" = "null" ] || [ -z "$url" ]; then
              break
            fi
            echo "$resp" | jq -r '."results"[]["name"]'
          done | grep "^[[:digit:]]\+.*" | grep -v "alpha\|beta\|rc" || :
        )

        tags=( "$VERSION_CORE" )

        top=$(printf "%s\n%s\n" "$VERSION_CORE" "$repo_tags" \
              | grep "^${VERSION_SLOT}[\.-]" \
              | sort --version-sort --reverse | head -n 1)
        if [ "$top" == "$VERSION_CORE" ]; then
          tags+=( "$VERSION_SLOT" )
        fi

        if [ -z "$PKG_SUBDIST" ]; then
          top=$(printf "%s\n%s\n" "$VERSION_CORE" "$repo_tags" \
                | sort --version-sort --reverse | head -n 1)
          if [ "$top" == "$VERSION_CORE" ]; then
            tags+=( "latest" )
          fi
        fi

        IFS=,
        echo "tags=${tags[*]}" >> $GITHUB_OUTPUT

    - name: Set up QEMU
      uses: docker/setup-qemu-action@v2

    - name: Set up Docker Buildx
      uses: docker/setup-buildx-action@edfb0fe6204400c56fbfd3feba3fe9ad1adfa345  # v3

    - name: Publish Docker Image (docker.io)
      uses: elgohr/Publish-Docker-Github-Action@43dc228e327224b2eda11c8883232afd5b34943b  # v5
      with:
        name: edgedb/edgedb
        username: ${{ secrets.DOCKER_USERNAME }}
        password: ${{ secrets.DOCKER_PASSWORD }}
        tags: "${{ steps.tags.outputs.tags }}"
        workdir: dockerfile
        buildargs: version=${{ needs.check-published-debian-buster-x86_64.outputs.version-slot }},exact_version=${{ needs.check-published-debian-buster-x86_64.outputs.version-core }},subdist=testing
        platforms: linux/amd64,linux/arm64

    - name: Publish Docker Image (ghcr.io)
      uses: elgohr/Publish-Docker-Github-Action@43dc228e327224b2eda11c8883232afd5b34943b  # v5
      with:
        registry: ghcr.io
        name: ${{ github.repository }}
        username: "edgedb-ci"
        password: ${{ secrets.GITHUB_CI_BOT_TOKEN }}
        tags: "${{ steps.tags.outputs.tags }}"
        workdir: dockerfile
        buildargs: version=${{ needs.check-published-debian-buster-x86_64.outputs.version-slot }},exact_version=${{ needs.check-published-debian-buster-x86_64.outputs.version-core }},subdist=testing
        platforms: linux/amd64,linux/arm64

  workflow-notifications:
    if: failure() && github.event_name != 'pull_request'
    name: Notify in Slack on failures

    needs:
      - prep
      - collect
      - build-debian-buster-x86_64
      - test-debian-buster-x86_64
      - publish-debian-buster-x86_64
      - check-published-debian-buster-x86_64
      - build-debian-buster-aarch64
      - test-debian-buster-aarch64
      - publish-debian-buster-aarch64
      - check-published-debian-buster-aarch64
      - build-debian-bullseye-x86_64
      - test-debian-bullseye-x86_64
      - publish-debian-bullseye-x86_64
      - check-published-debian-bullseye-x86_64
      - build-debian-bullseye-aarch64
      - test-debian-bullseye-aarch64
      - publish-debian-bullseye-aarch64
      - check-published-debian-bullseye-aarch64
      - build-debian-bookworm-x86_64
      - test-debian-bookworm-x86_64
      - publish-debian-bookworm-x86_64
      - check-published-debian-bookworm-x86_64
      - build-debian-bookworm-aarch64
      - test-debian-bookworm-aarch64
      - publish-debian-bookworm-aarch64
      - check-published-debian-bookworm-aarch64
      - build-ubuntu-bionic-x86_64
      - test-ubuntu-bionic-x86_64
      - publish-ubuntu-bionic-x86_64
      - check-published-ubuntu-bionic-x86_64
      - build-ubuntu-bionic-aarch64
      - test-ubuntu-bionic-aarch64
      - publish-ubuntu-bionic-aarch64
      - check-published-ubuntu-bionic-aarch64
      - build-ubuntu-focal-x86_64
      - test-ubuntu-focal-x86_64
      - publish-ubuntu-focal-x86_64
      - check-published-ubuntu-focal-x86_64
      - build-ubuntu-focal-aarch64
      - test-ubuntu-focal-aarch64
      - publish-ubuntu-focal-aarch64
      - check-published-ubuntu-focal-aarch64
      - build-ubuntu-jammy-x86_64
      - test-ubuntu-jammy-x86_64
      - publish-ubuntu-jammy-x86_64
      - check-published-ubuntu-jammy-x86_64
      - build-ubuntu-jammy-aarch64
      - test-ubuntu-jammy-aarch64
      - publish-ubuntu-jammy-aarch64
      - check-published-ubuntu-jammy-aarch64
      - build-centos-8-x86_64
      - test-centos-8-x86_64
      - publish-centos-8-x86_64
      - check-published-centos-8-x86_64
      - build-centos-8-aarch64
      - test-centos-8-aarch64
      - publish-centos-8-aarch64
      - check-published-centos-8-aarch64
      - build-rockylinux-9-x86_64
      - test-rockylinux-9-x86_64
      - publish-rockylinux-9-x86_64
      - check-published-rockylinux-9-x86_64
      - build-rockylinux-9-aarch64
      - test-rockylinux-9-aarch64
      - publish-rockylinux-9-aarch64
      - check-published-rockylinux-9-aarch64
      - build-linux-x86_64
      - test-linux-x86_64
      - publish-linux-x86_64
      - check-published-linux-x86_64
      - build-linux-aarch64
      - test-linux-aarch64
      - publish-linux-aarch64
      - check-published-linux-aarch64
      - build-linuxmusl-x86_64
      - test-linuxmusl-x86_64
      - publish-linuxmusl-x86_64
      - check-published-linuxmusl-x86_64
      - build-linuxmusl-aarch64
      - test-linuxmusl-aarch64
      - publish-linuxmusl-aarch64
      - check-published-linuxmusl-aarch64
      - build-macos-x86_64
      - test-macos-x86_64
      - publish-macos-x86_64
      - build-macos-aarch64
      - test-macos-aarch64
      - publish-macos-aarch64
      - publish-docker
    runs-on: ubuntu-latest
    permissions:
      actions: 'read'
    steps:
      - name: Slack Workflow Notification
        uses: Gamesight/slack-workflow-status@26a36836c887f260477432e4314ec3490a84f309
        with:
          repo_token: ${{secrets.GITHUB_TOKEN}}
          slack_webhook_url: ${{secrets.ACTIONS_SLACK_WEBHOOK_URL}}
          name: 'Workflow notifications'
          icon_emoji: ':hammer:'
          include_jobs: 'on-failure'


High Availability Tests

name: High Availability Tests

on:
  workflow_dispatch:
    inputs: {}
  workflow_run:
    workflows: ["Tests"]
    types:
      - completed

jobs:
  build:
    runs-on: ubuntu-latest
    if: github.event.workflow_run.conclusion == 'success' || github.event_name == 'workflow_dispatch'

    steps:
    - uses: actions/checkout@v4
      with:
        fetch-depth: 0
        submodules: false

    - uses: actions/checkout@v4
      with:
        fetch-depth: 50
        submodules: true

    - name: Set up Python
      uses: actions/setup-python@v5
      id: setup-python
      with:
        python-version: '3.12.2'
        cache: 'pip'
        cache-dependency-path: |
          pyproject.toml

    # The below is technically a lie as we are technically not
    # inside a virtual env, but there is really no reason to bother
    # actually creating and activating one as below works just fine.
    - name: Export $VIRTUAL_ENV
      run: |
        venv="$(python -c 'import sys; sys.stdout.write(sys.prefix)')"
        echo "VIRTUAL_ENV=${venv}" >> $GITHUB_ENV

    - name: Set up uv cache
      uses: actions/cache@v4
      with:
        path: ~/.cache/uv
        key: uv-cache-${{ runner.os }}-py-${{ steps.setup-python.outputs.python-version }}-${{ hashFiles('pyproject.toml') }}

    - name: Cached requirements.txt
      uses: actions/cache@v4
      id: requirements-cache
      with:
        path: requirements.txt
        key: edb-requirements-${{ hashFiles('pyproject.toml') }}

    - name: Compute requirements.txt
      if: steps.requirements-cache.outputs.cache-hit != 'true'
      run: |
        python -m pip install pip-tools
        pip-compile --no-strip-extras --all-build-deps \
          --extra test,language-server \
          --output-file requirements.txt pyproject.toml

    - name: Install Python dependencies
      run: |
        python -c "import sys; print(sys.prefix)"
        python -m pip install uv~=0.1.0 && uv pip install -U -r requirements.txt

    # Our HA tests currently only work on Postgres 14 (see #6332),
    # so check it out before we compute our build cache keys.
    - name: Switch back to Postgres 14
      shell: bash
      run: |
        set -e
        cd postgres
        # Fetch postgres 14, since the clone was shallow
        git fetch origin REL_14_8 --depth=1
        # For whatever reason the tag doesn't get fetched, so find it
        # at FETCH_HEAD
        git checkout FETCH_HEAD

    - name: Compute cache keys
      env:
        GIST_TOKEN: ${{ secrets.CI_BOT_GIST_TOKEN }}
      run: |
        mkdir -p .tmp
        python setup.py -q ci_helper --type cli > .tmp/edgedbcli_git_rev.txt
        python setup.py -q ci_helper --type rust >.tmp/rust_cache_key.txt
        python setup.py -q ci_helper --type ext >.tmp/ext_cache_key.txt
        python setup.py -q ci_helper --type parsers >.tmp/parsers_cache_key.txt
        python setup.py -q ci_helper --type postgres >.tmp/postgres_git_rev.txt
        python setup.py -q ci_helper --type libpg_query >.tmp/libpg_query_git_rev.txt
        echo 'f8cd94309eaccbfba5dea7835b88c78377608a37' >.tmp/stolon_git_rev.txt
        python setup.py -q ci_helper --type bootstrap >.tmp/bootstrap_cache_key.txt
        echo EDGEDBCLI_GIT_REV=$(cat .tmp/edgedbcli_git_rev.txt) >> $GITHUB_ENV
        echo POSTGRES_GIT_REV=$(cat .tmp/postgres_git_rev.txt) >> $GITHUB_ENV
        echo LIBPG_QUERY_GIT_REV=$(cat .tmp/libpg_query_git_rev.txt) >> $GITHUB_ENV
        echo STOLON_GIT_REV=$(cat .tmp/stolon_git_rev.txt) >> $GITHUB_ENV
        echo BUILD_LIB=$(python setup.py -q ci_helper --type build_lib) >> $GITHUB_ENV
        echo BUILD_TEMP=$(python setup.py -q ci_helper --type build_temp) >> $GITHUB_ENV

    - name: Upload shared artifacts
      uses: actions/upload-artifact@v4
      with:
        name: shared-artifacts
        path: .tmp
        retention-days: 1

    # Restore binary cache

    - name: Handle cached EdgeDB CLI binaries
      uses: actions/cache@v4
      id: cli-cache
      with:
        path: build/cli
        key: edb-cli-v3-${{ env.EDGEDBCLI_GIT_REV }}

    - name: Handle cached Rust extensions
      uses: actions/cache@v4
      id: rust-cache
      with:
        path: build/rust_extensions
        key: edb-rust-v3-${{ hashFiles('.tmp/rust_cache_key.txt') }}
        restore-keys: |
          edb-rust-v3-

    - name: Handle cached Cython extensions
      uses: actions/cache@v4
      id: ext-cache
      with:
        path: build/extensions
        key: edb-ext-v5-${{ hashFiles('.tmp/ext_cache_key.txt') }}

    - name: Handle cached PostgreSQL build
      uses: actions/cache@v4
      id: postgres-cache
      with:
        path: build/postgres/install
        key: edb-postgres-v2-${{ env.POSTGRES_GIT_REV }}

    - name: Handle cached Stolon build
      uses: actions/cache@v4
      id: stolon-cache
      with:
        path: build/stolon/bin
        key: edb-stolon-v2-${{ env.STOLON_GIT_REV }}

    - name: Handle cached libpg_query build
      uses: actions/cache@v4
      id: libpg-query-cache
      with:
        path: edb/pgsql/parser/libpg_query/libpg_query.a
        key: edb-libpg_query-v1-${{ env.LIBPG_QUERY_GIT_REV }}

    # Install system dependencies for building

    - name: Install system deps
      if: |
        steps.cli-cache.outputs.cache-hit != 'true' ||
        steps.rust-cache.outputs.cache-hit != 'true' ||
        steps.ext-cache.outputs.cache-hit != 'true' ||
        steps.stolon-cache.outputs.cache-hit != 'true' ||
        steps.postgres-cache.outputs.cache-hit != 'true'
      run: |
        sudo apt-get update
        sudo apt-get install -y uuid-dev libreadline-dev bison flex

    - name: Install rust toolchain
      if: |
        steps.cli-cache.outputs.cache-hit != 'true' ||
        steps.rust-cache.outputs.cache-hit != 'true'
      uses: dtolnay/rust-toolchain@be73d7920c329f220ce78e0234b8f96b7ae60248
      with:
        components: "cargo,rustc,rust-std"
        toolchain: "stable"

    # Build EdgeDB CLI

    - name: Handle EdgeDB CLI build cache
      uses: actions/cache@v4
      if: steps.cli-cache.outputs.cache-hit != 'true'
      with:
        path: ${{ env.BUILD_TEMP }}/rust/cli
        key: edb-cli-build-v7-${{ env.EDGEDBCLI_GIT_REV }}
        restore-keys: |
          edb-cli-build-v7-

    - name: Build EdgeDB CLI
      env:
        CARGO_HOME: ${{ env.BUILD_TEMP }}/rust/cli/cargo_home
        CACHE_HIT: ${{ steps.cli-cache.outputs.cache-hit }}
      run: |
        if [[ "$CACHE_HIT" == "true" ]]; then
          cp -v build/cli/bin/edgedb edb/cli/edgedb
        else
          python setup.py -v build_cli
        fi

    # Build Rust extensions

    - name: Handle Rust extensions build cache
      uses: actions/cache@v4
      if: steps.rust-cache.outputs.cache-hit != 'true'
      with:
        path: ${{ env.BUILD_TEMP }}/rust/extensions
        key: edb-rust-build-v1-${{ hashFiles('.tmp/rust_cache_key.txt') }}
        restore-keys: |
          edb-rust-build-v1-

    - name: Build Rust extensions
      env:
        CARGO_HOME: ${{ env.BUILD_TEMP }}/rust/extensions/cargo_home
        CACHE_HIT: ${{ steps.rust-cache.outputs.cache-hit }}
      run: |
        if [[ "$CACHE_HIT" != "true" ]]; then
          rm -rf ${BUILD_LIB}
          mkdir -p build/rust_extensions
          rsync -av ./build/rust_extensions/ ${BUILD_LIB}/
          python setup.py -v build_rust
          rsync -av ${BUILD_LIB}/ build/rust_extensions/
          rm -rf ${BUILD_LIB}
        fi
        rsync -av ./build/rust_extensions/edb/ ./edb/

    # Build libpg_query

    - name: Build libpg_query
      if: |
        steps.libpg-query-cache.outputs.cache-hit != 'true' &&
        steps.ext-cache.outputs.cache-hit != 'true'
      run: |
        python setup.py build_libpg_query

    # Build extensions

    - name: Handle Cython extensions build cache
      uses: actions/cache@v4
      if: steps.ext-cache.outputs.cache-hit != 'true'
      with:
        path: ${{ env.BUILD_TEMP }}/edb
        key: edb-ext-build-v3-${{ hashFiles('.tmp/ext_cache_key.txt') }}

    - name: Build Cython extensions
      env:
        CACHE_HIT: ${{ steps.ext-cache.outputs.cache-hit }}
        BUILD_EXT_MODE: py-only
      run: |
        if [[ "$CACHE_HIT" != "true" ]]; then
          rm -rf ${BUILD_LIB}
          mkdir -p ./build/extensions
          rsync -av ./build/extensions/ ${BUILD_LIB}/
          BUILD_EXT_MODE=py-only python setup.py -v build_ext
          rsync -av ${BUILD_LIB}/ ./build/extensions/
          rm -rf ${BUILD_LIB}
        fi
        rsync -av ./build/extensions/edb/ ./edb/

    # Build parsers

    - name: Handle compiled parsers cache
      uses: actions/cache@v4
      id: parsers-cache
      with:
        path: build/lib
        key: edb-parsers-v3-${{ hashFiles('.tmp/parsers_cache_key.txt') }}
        restore-keys: |
          edb-parsers-v3-

    - name: Build parsers
      env:
        CACHE_HIT: ${{ steps.parsers-cache.outputs.cache-hit }}
      run: |
        if [[ "$CACHE_HIT" != "true" ]]; then
          rm -rf ${BUILD_LIB}
          mkdir -p ./build/lib
          rsync -av ./build/lib/ ${BUILD_LIB}/
          python setup.py -v build_parsers
          rsync -av ${BUILD_LIB}/ ./build/lib/
          rm -rf ${BUILD_LIB}
        fi
        rsync -av ./build/lib/edb/ ./edb/

    # Build PostgreSQL

    - name: Build PostgreSQL
      env:
        CACHE_HIT: ${{ steps.postgres-cache.outputs.cache-hit }}
      run: |
        if [[ "$CACHE_HIT" == "true" ]]; then
          cp build/postgres/install/stamp build/postgres/
        else
          python setup.py build_postgres
          cp build/postgres/stamp build/postgres/install/
        fi

    # Build Stolon

    - name: Set up Go
      if: steps.stolon-cache.outputs.cache-hit != 'true'
      uses: actions/setup-go@v2
      with:
        go-version: 1.16

    - uses: actions/checkout@v4
      if: steps.stolon-cache.outputs.cache-hit != 'true'
      with:
        repository: edgedb/stolon
        path: build/stolon
        ref: ${{ env.STOLON_GIT_REV }}
        fetch-depth: 0
        submodules: false

    - name: Build Stolon
      if: steps.stolon-cache.outputs.cache-hit != 'true'
      run: |
        mkdir -p build/stolon/bin/
        curl -fsSL https://releases.hashicorp.com/consul/1.10.1/consul_1.10.1_linux_amd64.zip | zcat > build/stolon/bin/consul
        chmod +x build/stolon/bin/consul
        cd build/stolon && make

    # Install edgedb-server and populate egg-info

    - name: Install edgedb-server
      env:
        BUILD_EXT_MODE: skip
      run: |
        # --no-build-isolation because we have explicitly installed all deps
        # and don't want them to be reinstalled in an "isolated env".
        pip install --no-build-isolation --no-deps -e .[test,docs]

    # Refresh the bootstrap cache

    - name: Handle bootstrap cache
      uses: actions/cache@v4
      id: bootstrap-cache
      with:
        path: build/cache
        key: edb-bootstrap-v2-${{ hashFiles('.tmp/bootstrap_cache_key.txt') }}
        restore-keys: |
          edb-bootstrap-v2-

    - name: Bootstrap EdgeDB Server
      if: steps.bootstrap-cache.outputs.cache-hit != 'true'
      run: |
        edb server --bootstrap-only

  ha-test:
    needs: build
    runs-on: ubuntu-latest

    steps:
    - uses: actions/checkout@v4
      with:
        fetch-depth: 0
        submodules: false

    - uses: actions/checkout@v4
      with:
        fetch-depth: 50
        submodules: true

    - name: Set up Python
      uses: actions/setup-python@v5
      id: setup-python
      with:
        python-version: '3.12.2'
        cache: 'pip'
        cache-dependency-path: |
          pyproject.toml

    # The below is technically a lie as we are technically not
    # inside a virtual env, but there is really no reason to bother
    # actually creating and activating one as below works just fine.
    - name: Export $VIRTUAL_ENV
      run: |
        venv="$(python -c 'import sys; sys.stdout.write(sys.prefix)')"
        echo "VIRTUAL_ENV=${venv}" >> $GITHUB_ENV

    - name: Set up uv cache
      uses: actions/cache@v4
      with:
        path: ~/.cache/uv
        key: uv-cache-${{ runner.os }}-py-${{ steps.setup-python.outputs.python-version }}-${{ hashFiles('pyproject.toml') }}

    - name: Download requirements.txt
      uses: actions/cache@v4
      with:
        path: requirements.txt
        key: edb-requirements-${{ hashFiles('pyproject.toml') }}

    - name: Install Python dependencies
      run: python -m pip install uv~=0.1.0 && uv pip install -U -r requirements.txt

    # Restore the artifacts and environment variables

    - name: Download shared artifacts
      uses: actions/download-artifact@v4
      with:
        name: shared-artifacts
        path: .tmp

    - name: Set environment variables
      run: |
        echo EDGEDBCLI_GIT_REV=$(cat .tmp/edgedbcli_git_rev.txt) >> $GITHUB_ENV
        echo POSTGRES_GIT_REV=$(cat .tmp/postgres_git_rev.txt) >> $GITHUB_ENV
        echo STOLON_GIT_REV=$(cat .tmp/stolon_git_rev.txt) >> $GITHUB_ENV
        echo BUILD_LIB=$(python setup.py -q ci_helper --type build_lib) >> $GITHUB_ENV
        echo BUILD_TEMP=$(python setup.py -q ci_helper --type build_temp) >> $GITHUB_ENV

    # Restore build cache

    - name: Restore cached EdgeDB CLI binaries
      uses: actions/cache@v4
      id: cli-cache
      with:
        path: build/cli
        key: edb-cli-v3-${{ env.EDGEDBCLI_GIT_REV }}

    - name: Restore cached Rust extensions
      uses: actions/cache@v4
      id: rust-cache
      with:
        path: build/rust_extensions
        key: edb-rust-v3-${{ hashFiles('.tmp/rust_cache_key.txt') }}

    - name: Restore cached Cython extensions
      uses: actions/cache@v4
      id: ext-cache
      with:
        path: build/extensions
        key: edb-ext-v5-${{ hashFiles('.tmp/ext_cache_key.txt') }}

    - name: Restore compiled parsers cache
      uses: actions/cache@v4
      id: parsers-cache
      with:
        path: build/lib
        key: edb-parsers-v3-${{ hashFiles('.tmp/parsers_cache_key.txt') }}

    - name: Restore cached PostgreSQL build
      uses: actions/cache@v4
      id: postgres-cache
      with:
        path: build/postgres/install
        key: edb-postgres-v2-${{ env.POSTGRES_GIT_REV }}

    - name: Restore cached Stolon build
      uses: actions/cache@v4
      id: stolon-cache
      with:
        path: build/stolon/bin
        key: edb-stolon-v2-${{ env.STOLON_GIT_REV }}

    - name: Restore bootstrap cache
      uses: actions/cache@v4
      id: bootstrap-cache
      with:
        path: build/cache
        key: edb-bootstrap-v2-${{ hashFiles('.tmp/bootstrap_cache_key.txt') }}

    - name: Stop if we cannot retrieve the cache
      if: |
        steps.cli-cache.outputs.cache-hit != 'true' ||
        steps.rust-cache.outputs.cache-hit != 'true' ||
        steps.ext-cache.outputs.cache-hit != 'true' ||
        steps.parsers-cache.outputs.cache-hit != 'true' ||
        steps.postgres-cache.outputs.cache-hit != 'true' ||
        steps.stolon-cache.outputs.cache-hit != 'true' ||
        steps.bootstrap-cache.outputs.cache-hit != 'true'
      run: |
        echo ::error::Cannot retrieve build cache.
        exit 1

    - name: Restore cache into the source tree
      run: |
        cp -v build/cli/bin/edgedb edb/cli/edgedb
        rsync -av ./build/rust_extensions/edb/ ./edb/
        rsync -av ./build/extensions/edb/ ./edb/
        rsync -av ./build/lib/edb/ ./edb/
        cp build/postgres/install/stamp build/postgres/

    - name: Install edgedb-server
      env:
        BUILD_EXT_MODE: skip
      run: |
        # --no-build-isolation because we have explicitly installed all deps
        # and don't want them to be reinstalled in an "isolated env".
        pip install --no-build-isolation --no-deps -e .[test,docs]

    # Run the test

    - name: Test
      env:
        SHARD: ${{ matrix.shard }}
        EDGEDB_TEST_HA: 1
        EDGEDB_TEST_CONSUL_PATH: build/stolon/bin/consul
        EDGEDB_TEST_STOLON_CTL: build/stolon/bin/stolonctl
        EDGEDB_TEST_STOLON_SENTINEL: build/stolon/bin/stolon-sentinel
        EDGEDB_TEST_STOLON_KEEPER: build/stolon/bin/stolon-keeper
      run: |
        edb test -j1 -v -k test_ha_

  workflow-notifications:
    if: failure() && github.event_name != 'pull_request'
    name: Notify in Slack on failures
    needs:
      - build
      - ha-test
    runs-on: ubuntu-latest
    permissions:
      actions: 'read'
    steps:
      - name: Slack Workflow Notification
        uses: Gamesight/slack-workflow-status@26a36836c887f260477432e4314ec3490a84f309
        with:
          repo_token: ${{secrets.GITHUB_TOKEN}}
          slack_webhook_url: ${{secrets.ACTIONS_SLACK_WEBHOOK_URL}}
          name: 'Workflow notifications'
          icon_emoji: ':hammer:'
          include_jobs: 'on-failure'