Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
12 changes: 9 additions & 3 deletions .dockerignore
Original file line number Diff line number Diff line change
@@ -1,9 +1,15 @@
.git
.github/
*.o
*.a
*.so
*.dylib
*.bc
*.pc
results/
regression.diffs
regression.out
.git
log/
tmp_check/
regression.*
packages/
benchmark/
docker-example/
9 changes: 8 additions & 1 deletion .github/workflows/build-test.yml
Original file line number Diff line number Diff line change
Expand Up @@ -2,12 +2,19 @@ name: Build and test
on:
push: # Run on any push
pull_request: # Run on PRs
merge_group:
permissions:
contents: read
# Source build + `make installcheck` (pgxn-tools resolves the newest PGDG
# build of each major, so PG 19 tracks the current beta). The pinned,
# authoritative builds and tests are in packages.yml.
jobs:
test:
runs-on: ubuntu-latest
strategy:
fail-fast: false
matrix:
pg: [17, 18]
pg: [17, 18, 19]
container:
image: pgxn/pgxn-tools
steps:
Expand Down
248 changes: 248 additions & 0 deletions .github/workflows/packages.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,248 @@
name: Packages

# Builds pg_roaringbitmap .debs against pinned PGDG packages for every
# consumed PG major x Debian x arch, tests each exact package in a clean
# image, and publishes them (with .sha256 sidecars) on v<version> tags.
# "Release inventory" is the single aggregate check that gates the release.

on:
push:
branches:
- master
tags:
- 'v*'
pull_request:
merge_group:
workflow_dispatch:

permissions:
contents: read

jobs:
version:
name: Package version
runs-on: ubuntu-latest
outputs:
version: ${{ steps.version.outputs.version }}
steps:
- name: Set package version
id: version
shell: bash
run: |
if [[ "$GITHUB_REF_TYPE" == tag ]]; then
# Same scheme as v1.2.0-1.pscale1; postgres-private downloads
# postgresql-<M>-roaringbitmap_<tag without v>-1_<arch>.deb.
if [[ ! "$GITHUB_REF_NAME" =~ ^v[0-9]+\.[0-9]+\.[0-9]+-[0-9]+\.pscale[0-9]+$ ]]; then
echo "invalid release tag: $GITHUB_REF_NAME" >&2
exit 1
fi
version="${GITHUB_REF_NAME#v}-1"
else
version="1.2.0-1.pscale0~ci${GITHUB_RUN_NUMBER}-1"
fi
echo "version=$version" >> "$GITHUB_OUTPUT"

package:
name: PG ${{ matrix.pg }} / Debian ${{ matrix.debian }} / ${{ matrix.asset_arch }}
needs: version
runs-on: ${{ matrix.runner }}
strategy:
fail-fast: false
matrix:
# pg_package_version pins exact PGDG builds, and PGDG drops superseded
# ones (19~beta4 first). The renovate comments use postgres-private's
# deb-datasource form so Renovate can propose bumps as PRs; they are
# inert until Renovate is enabled here with a manager for this file.
include:
- pg: 17
# renovate: datasource=deb depName=postgresql-17 registryUrl=https://apt.postgresql.org/pub/repos/apt?suite=bookworm-pgdg&binaryArch=amd64&components=main
pg_package_version: 17.11-1.pgdg12+2
debian: 12
codename: bookworm
base_image: debian:bookworm-slim@sha256:98f4b71de414932439ac6ac690d7060df1f27161073c5036a7553723881bffbe
asset_arch: x86_64
runner: ubuntu-latest
- pg: 17
# renovate: datasource=deb depName=postgresql-17 registryUrl=https://apt.postgresql.org/pub/repos/apt?suite=bookworm-pgdg&binaryArch=arm64&components=main
pg_package_version: 17.11-1.pgdg12+2
debian: 12
codename: bookworm
base_image: debian:bookworm-slim@sha256:98f4b71de414932439ac6ac690d7060df1f27161073c5036a7553723881bffbe
asset_arch: arm64
runner: ubuntu-24.04-arm
- pg: 18
# renovate: datasource=deb depName=postgresql-18 registryUrl=https://apt.postgresql.org/pub/repos/apt?suite=bookworm-pgdg&binaryArch=amd64&components=main
pg_package_version: 18.6-1.pgdg12+2
debian: 12
codename: bookworm
base_image: debian:bookworm-slim@sha256:98f4b71de414932439ac6ac690d7060df1f27161073c5036a7553723881bffbe
asset_arch: x86_64
runner: ubuntu-latest
- pg: 18
# renovate: datasource=deb depName=postgresql-18 registryUrl=https://apt.postgresql.org/pub/repos/apt?suite=bookworm-pgdg&binaryArch=arm64&components=main
pg_package_version: 18.6-1.pgdg12+2
debian: 12
codename: bookworm
base_image: debian:bookworm-slim@sha256:98f4b71de414932439ac6ac690d7060df1f27161073c5036a7553723881bffbe
asset_arch: arm64
runner: ubuntu-24.04-arm
- pg: 18
# renovate: datasource=deb depName=postgresql-18 registryUrl=https://apt.postgresql.org/pub/repos/apt?suite=trixie-pgdg&binaryArch=amd64&components=main
pg_package_version: 18.6-1.pgdg13+2
debian: 13
codename: trixie
base_image: debian:trixie-slim@sha256:28de0877c2189802884ccd20f15ee41c203573bd87bb6b883f5f46362d24c5c2
asset_arch: x86_64
runner: ubuntu-latest
- pg: 18
# renovate: datasource=deb depName=postgresql-18 registryUrl=https://apt.postgresql.org/pub/repos/apt?suite=trixie-pgdg&binaryArch=arm64&components=main
pg_package_version: 18.6-1.pgdg13+2
debian: 13
codename: trixie
base_image: debian:trixie-slim@sha256:28de0877c2189802884ccd20f15ee41c203573bd87bb6b883f5f46362d24c5c2
asset_arch: arm64
runner: ubuntu-24.04-arm
- pg: 19
# renovate: datasource=deb depName=postgresql-19 registryUrl=https://apt.postgresql.org/pub/repos/apt?suite=bookworm-pgdg&binaryArch=amd64&components=19
pg_package_version: 19~beta4-1.pgdg12+1
debian: 12
codename: bookworm
base_image: debian:bookworm-slim@sha256:98f4b71de414932439ac6ac690d7060df1f27161073c5036a7553723881bffbe
asset_arch: x86_64
runner: ubuntu-latest
- pg: 19
# renovate: datasource=deb depName=postgresql-19 registryUrl=https://apt.postgresql.org/pub/repos/apt?suite=bookworm-pgdg&binaryArch=arm64&components=19
pg_package_version: 19~beta4-1.pgdg12+1
debian: 12
codename: bookworm
base_image: debian:bookworm-slim@sha256:98f4b71de414932439ac6ac690d7060df1f27161073c5036a7553723881bffbe
asset_arch: arm64
runner: ubuntu-24.04-arm
- pg: 19
# renovate: datasource=deb depName=postgresql-19 registryUrl=https://apt.postgresql.org/pub/repos/apt?suite=trixie-pgdg&binaryArch=amd64&components=19
pg_package_version: 19~beta4-1.pgdg13+1
debian: 13
codename: trixie
base_image: debian:trixie-slim@sha256:28de0877c2189802884ccd20f15ee41c203573bd87bb6b883f5f46362d24c5c2
asset_arch: x86_64
runner: ubuntu-latest
- pg: 19
# renovate: datasource=deb depName=postgresql-19 registryUrl=https://apt.postgresql.org/pub/repos/apt?suite=trixie-pgdg&binaryArch=arm64&components=19
pg_package_version: 19~beta4-1.pgdg13+1
debian: 13
codename: trixie
base_image: debian:trixie-slim@sha256:28de0877c2189802884ccd20f15ee41c203573bd87bb6b883f5f46362d24c5c2
asset_arch: arm64
runner: ubuntu-24.04-arm
steps:
- name: Checkout code
uses: actions/checkout@34e114876b0b11c390a56381ad16ebd13914f8d5 # v4

- name: Build packages
shell: bash
env:
PACKAGE_VERSION: ${{ needs.version.outputs.version }}
run: |
docker build --target test \
--build-arg BASE_IMAGE=${{ matrix.base_image }} \
--build-arg DEBIAN_CODENAME=${{ matrix.codename }} \
--build-arg DEBIAN_VERSION=${{ matrix.debian }} \
--build-arg PACKAGE_VERSION="$PACKAGE_VERSION" \
--build-arg PG_MAJOR=${{ matrix.pg }} \
--build-arg PG_PACKAGE_VERSION=${{ matrix.pg_package_version }} \
-t pg-roaringbitmap-test -f Dockerfile.package .

- name: Test exact packages
shell: bash
env:
PACKAGE_VERSION: ${{ needs.version.outputs.version }}
run: |
docker run --rm pg-roaringbitmap-test \
--pg ${{ matrix.pg }} \
--debian ${{ matrix.debian }} \
--asset-arch ${{ matrix.asset_arch }} \
--version "$PACKAGE_VERSION"

- name: Extract packages
shell: bash
run: |
container=$(docker create pg-roaringbitmap-test)
mkdir packages
docker cp "$container:/packages/." packages/
docker rm "$container"
ls -l packages

- name: Upload packages
uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4
with:
name: pg_roaringbitmap-pg${{ matrix.pg }}-debian${{ matrix.debian }}-${{ matrix.asset_arch }}
path: packages/*
if-no-files-found: error
retention-days: 30

inventory:
name: Release inventory
# Always report, so a failed or skipped package row fails this aggregate
# check instead of skipping it (a skipped required check counts as passed).
if: always()
needs: [version, package]
runs-on: ubuntu-latest
steps:
- name: Require every package row to succeed
shell: bash
env:
NEEDS: ${{ toJSON(needs) }}
run: |
failed=$(jq -r 'to_entries[] | select(.value.result != "success") | "\(.key)=\(.value.result)"' <<<"$NEEDS")
if [[ -n "$failed" ]]; then
echo "required jobs did not succeed: $(xargs <<<"$failed")" >&2
exit 1
fi

- name: Checkout code
uses: actions/checkout@34e114876b0b11c390a56381ad16ebd13914f8d5 # v4

- name: Download packages
uses: actions/download-artifact@d3f86a106a0bac45b974a628896c90dbdf5c8093 # v4
with:
pattern: pg_roaringbitmap-pg*
path: packages
merge-multiple: true

- name: Self-test the verifier
run: scripts/test-verify-release-assets

- name: Verify release assets
run: scripts/verify-release-assets --version "${{ needs.version.outputs.version }}" packages

release:
if: github.ref_type == 'tag'
needs: [version, inventory]
runs-on: ubuntu-latest
permissions:
contents: write
steps:
- name: Checkout code
uses: actions/checkout@34e114876b0b11c390a56381ad16ebd13914f8d5 # v4

- name: Download packages
uses: actions/download-artifact@d3f86a106a0bac45b974a628896c90dbdf5c8093 # v4
with:
pattern: pg_roaringbitmap-pg*
path: packages
merge-multiple: true

- name: Verify release assets
run: scripts/verify-release-assets --version "${{ needs.version.outputs.version }}" packages

- name: Upload .deb packages and checksums to release
uses: softprops/action-gh-release@3bb12739c298aeb8a4eeaf626c5b8d85266b0e65 # v2
with:
tag_name: ${{ github.ref_name }}
name: ${{ github.ref_name }}
draft: false
prerelease: false
generate_release_notes: true
files: packages/*
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
Loading
Loading