Ubuntu packages and Docker image #63
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
name: Ubuntu packages and Docker image | |
on: | |
workflow_dispatch: | |
inputs: | |
packageVersion: | |
default: "2.10.0" | |
jobs: | |
# | |
# PostgresML extension. | |
# | |
postgresml-pgml: | |
strategy: | |
fail-fast: false # Let the other job finish | |
matrix: | |
os: ["buildjet-4vcpu-ubuntu-2204", "buildjet-8vcpu-ubuntu-2204-arm"] | |
ubuntu_version: ["20.04", "22.04", "24.04"] | |
runs-on: ${{ matrix.os }} | |
steps: | |
- uses: actions/checkout@v3 | |
- uses: actions-rs/toolchain@v1 | |
with: | |
toolchain: stable | |
- name: Validate cargo is working | |
uses: postgresml/gh-actions-cargo@master | |
with: | |
working-directory: pgml-extension | |
command: version | |
- name: Cache artifacts | |
uses: buildjet/cache@v3 | |
with: | |
path: pgml-extension/target | |
key: buildjet-pgml-extension-artifacts-1-${{ runner.arch }} # Change this when dependencies change | |
- name: Cache pgrx | |
uses: buildjet/cache@v3 | |
with: | |
path: ~/.cargo | |
key: buildjet-pgml-extension-pgrx-2-${{ runner.arch }} # Change this when dependencies change | |
- name: Install dependencies | |
env: | |
DEBIAN_FRONTEND: noninteractive | |
TZ: Etc/UTC | |
run: | | |
git submodule update --init --recursive | |
git fetch --tags | |
git fetch --depth 1 origin tag v${{ inputs.packageVersion }} | |
git checkout v${{ inputs.packageVersion }} | |
# PostgreSQL apt | |
curl https://www.postgresql.org/media/keys/ACCC4CF8.asc | gpg --dearmor | sudo tee /etc/apt/trusted.gpg.d/apt.postgresql.org.gpg >/dev/null | |
sudo sudo sh -c 'echo "deb http://apt.postgresql.org/pub/repos/apt $(lsb_release -cs)-pgdg main" > /etc/apt/sources.list.d/pgdg.list' | |
sudo apt-get install -y software-properties-common | |
sudo add-apt-repository ppa:apt-fast/stable --yes | |
sudo add-apt-repository ppa:deadsnakes/ppa --yes | |
sudo apt update | |
sudo apt-get install -y apt-fast | |
sudo apt-get update && sudo apt-fast install -y \ | |
libopenblas-dev \ | |
libssl-dev \ | |
bison \ | |
flex \ | |
pkg-config \ | |
cmake \ | |
libreadline-dev \ | |
libz-dev \ | |
curl \ | |
lsb-release \ | |
tzdata \ | |
sudo \ | |
cmake \ | |
libpq-dev \ | |
libclang-dev \ | |
wget \ | |
postgresql-17 \ | |
postgresql-16 \ | |
postgresql-15 \ | |
postgresql-14 \ | |
postgresql-13 \ | |
postgresql-12 \ | |
postgresql-server-dev-17 \ | |
postgresql-server-dev-16 \ | |
postgresql-server-dev-15 \ | |
postgresql-server-dev-14 \ | |
postgresql-server-dev-13 \ | |
postgresql-server-dev-12 \ | |
lsb-release \ | |
python3.10 \ | |
python3-pip \ | |
libpython3.10-dev \ | |
python3.10-dev \ | |
ruby \ | |
lld | |
curl -sLO https://github.com/deb-s3/deb-s3/releases/download/0.11.4/deb-s3-0.11.4.gem | |
sudo gem install deb-s3-0.11.4.gem | |
dpkg-deb --version | |
- name: Install pgrx | |
uses: postgresml/gh-actions-cargo@master | |
with: | |
working-directory: pgml-extension | |
command: install | |
args: cargo-pgrx --version "0.12.9" --locked | |
- name: pgrx init | |
uses: postgresml/gh-actions-cargo@master | |
with: | |
working-directory: pgml-extension | |
command: pgrx | |
args: init --pg12=/usr/lib/postgresql/12/bin/pg_config --pg13=/usr/lib/postgresql/13/bin/pg_config --pg14=/usr/lib/postgresql/14/bin/pg_config --pg15=/usr/lib/postgresql/15/bin/pg_config --pg16=/usr/lib/postgresql/16/bin/pg_config --pg17=/usr/lib/postgresql/17/bin/pg_config | |
- name: Build Postgres 12 | |
uses: postgresml/gh-actions-cargo@master | |
with: | |
working-directory: pgml-extension | |
command: pgrx | |
args: package --pg-config /usr/lib/postgresql/12/bin/pg_config | |
- name: Build Postgres 13 | |
uses: postgresml/gh-actions-cargo@master | |
with: | |
working-directory: pgml-extension | |
command: pgrx | |
args: package --pg-config /usr/lib/postgresql/13/bin/pg_config | |
- name: Build Postgres 14 | |
uses: postgresml/gh-actions-cargo@master | |
with: | |
working-directory: pgml-extension | |
command: pgrx | |
args: package --pg-config /usr/lib/postgresql/14/bin/pg_config | |
- name: Build Postgres 15 | |
uses: postgresml/gh-actions-cargo@master | |
with: | |
working-directory: pgml-extension | |
command: pgrx | |
args: package --pg-config /usr/lib/postgresql/15/bin/pg_config | |
- name: Build Postgres 16 | |
uses: postgresml/gh-actions-cargo@master | |
with: | |
working-directory: pgml-extension | |
command: pgrx | |
args: package --pg-config /usr/lib/postgresql/16/bin/pg_config | |
- name: Build Postgres 17 | |
uses: postgresml/gh-actions-cargo@master | |
with: | |
working-directory: pgml-extension | |
command: pgrx | |
args: package --pg-config /usr/lib/postgresql/17/bin/pg_config | |
- name: Build debs | |
env: | |
AWS_ACCESS_KEY_ID: ${{ vars.AWS_ACCESS_KEY_ID }} | |
AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_SECRET_ACCESS_KEY }} | |
AWS_DEFAULT_REGION: ${{ vars.AWS_DEFAULT_REGION }} | |
run: | | |
bash packages/postgresql-pgml/release.sh ${{ inputs.packageVersion }} ${{ matrix.ubuntu_version }} | |
# | |
# PostgresML meta package which installs | |
# all the necessary dependencies. | |
# | |
postgresml: | |
needs: postgresml-pgml | |
strategy: | |
fail-fast: false # Let the other job finish | |
matrix: | |
os: ["ubuntu-22.04"] | |
ubuntu_version: ["20.04", "22.04", "24.04"] | |
runs-on: ${{ matrix.os }} | |
steps: | |
- uses: actions/checkout@v3 | |
- name: Build and release package | |
env: | |
AWS_ACCESS_KEY_ID: ${{ vars.AWS_ACCESS_KEY_ID }} | |
AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_SECRET_ACCESS_KEY }} | |
AWS_DEFAULT_REGION: ${{ vars.AWS_DEFAULT_REGION }} | |
run: | | |
bash packages/postgresml/release.sh ${{ inputs.packageVersion }} ${{ matrix.ubuntu_version }} | |
# | |
# PostgresML dashboard. | |
# | |
postgresml-dashboard: | |
needs: postgresml | |
strategy: | |
fail-fast: false # Let the other job finish | |
matrix: | |
os: ["ubuntu-22.04", "buildjet-4vcpu-ubuntu-2204-arm"] | |
ubuntu_version: ["20.04", "22.04", "24.04"] | |
runs-on: ${{ matrix.os }} | |
steps: | |
- uses: actions/checkout@v3 | |
- uses: actions-rs/toolchain@v1 | |
with: | |
toolchain: stable | |
- name: Build and release package | |
env: | |
AWS_ACCESS_KEY_ID: ${{ vars.AWS_ACCESS_KEY_ID }} | |
AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_SECRET_ACCESS_KEY }} | |
AWS_DEFAULT_REGION: ${{ vars.AWS_DEFAULT_REGION }} | |
run: | | |
cargo install cargo-pgml-components | |
bash packages/postgresml-dashboard/release.sh ${{ inputs.packageVersion }} ${{ matrix.ubuntu_version }} | |
# | |
# PostgresML Docker image. | |
# | |
publish-extension-docker-image: | |
needs: | |
- postgresml | |
- postgresml-dashboard | |
strategy: | |
fail-fast: false # Let the other job finish | |
matrix: | |
os: ["buildjet-4vcpu-ubuntu-2204"] | |
runs-on: ${{ matrix.os }} | |
defaults: | |
run: | |
working-directory: docker | |
steps: | |
- uses: actions/checkout@v2 | |
- name: Login to GitHub Container Registry | |
uses: docker/login-action@v1 | |
with: | |
registry: ghcr.io | |
username: ${{ github.actor }} | |
password: ${{ secrets.GITHUB_TOKEN }} | |
- name: Build and push Docker image | |
run: | | |
docker run --privileged --rm tonistiigi/binfmt --install all | |
docker buildx create --use --name mybuilder | |
docker buildx build \ | |
--platform linux/amd64,linux/arm64 \ | |
--tag ghcr.io/postgresml/postgresml:${{ inputs.packageVersion }} \ | |
--push . |