1+ name : Build and Publish TypeID Extension
2+
3+ permissions :
4+ contents : write
5+
6+ on :
7+ push :
8+ tags :
9+ - ' v*'
10+
11+ env :
12+ EXTENSION_NAME : typeid
13+ DOCKER_IMAGE : ghcr.io/blitss/typeid-pg
14+
15+ jobs :
16+ build-and-publish :
17+ strategy :
18+ fail-fast : false # We want all of them to run, even if one fails
19+ matrix :
20+ pg_version : [12, 13, 14, 15, 16]
21+ os : [ubuntu-latest, macos-latest]
22+ arch : [amd64, arm64]
23+ exclude :
24+ - os : macos-latest
25+ arch : amd64
26+
27+ runs-on : ${{ matrix.os }}
28+
29+ steps :
30+ - uses : actions/checkout@v4
31+
32+ - name : Set up Rust
33+ uses : actions-rs/toolchain@v1
34+ with :
35+ toolchain : stable
36+ override : true
37+
38+ - name : Install PostgreSQL (Linux)
39+ if : runner.os == 'Linux'
40+ run : |
41+ sudo apt-get install -y wget gnupg
42+ sudo sh -c 'echo "deb http://apt.postgresql.org/pub/repos/apt $(lsb_release -cs)-pgdg main" > /etc/apt/sources.list.d/pgdg.list'
43+ wget --quiet -O - https://www.postgresql.org/media/keys/ACCC4CF8.asc | sudo apt-key add -
44+ sudo apt-get update -y -qq --fix-missing
45+ sudo apt-get install -y postgresql-${{ matrix.pg_version }} postgresql-server-dev-${{ matrix.pg_version }}
46+
47+ sudo chmod a+rwx `/usr/lib/postgresql/${{ matrix.pg_version }}/bin/pg_config --pkglibdir` `/usr/lib/postgresql/${{ matrix.pg_version }}/bin/pg_config --sharedir`/extension /var/run/postgresql/
48+
49+ - name : Install PostgreSQL (macOS)
50+ if : runner.os == 'macOS'
51+ run : |
52+ brew install postgresql@${{ matrix.pg_version }}
53+ echo "/usr/local/opt/postgresql@${{ matrix.pg_version }}/bin" >> $GITHUB_PATH
54+
55+ - name : Install cargo-pgrx
56+ run : |
57+ if [ "${{ runner.os }}" == "Linux" ]; then
58+ PG_CONFIG_PATH="/usr/lib/postgresql/${{ matrix.pg_version }}/bin/pg_config"
59+ else
60+ PG_CONFIG_PATH="/opt/homebrew/opt/postgresql@${{ matrix.pg_version }}/bin/pg_config"
61+ fi
62+ PGRX_VERSION=$(cargo metadata --format-version 1 | jq -r '.packages[]|select(.name=="pgrx")|.version')
63+ cargo install --locked --version=$PGRX_VERSION cargo-pgrx --debug --force
64+ cargo pgrx init --pg${{ matrix.pg_version }} $PG_CONFIG_PATH
65+
66+ - name : Build
67+ run : |
68+ if [ "${{ runner.os }}" == "Linux" ]; then
69+ PG_CONFIG_PATH="/usr/lib/postgresql/${{ matrix.pg_version }}/bin/pg_config"
70+ else
71+ PG_CONFIG_PATH="/opt/homebrew/opt/postgresql@${{ matrix.pg_version }}/bin/pg_config"
72+ fi
73+ cargo pgrx package --features pg${{ matrix.pg_version }} --pg-config $PG_CONFIG_PATH
74+
75+ - name : Set lowercase OS name
76+ run : echo "LOWERCASE_OS=$(echo ${{ runner.os }} | tr '[:upper:]' '[:lower:]')" >> $GITHUB_ENV
77+
78+ - name : Package Extension
79+ run : |
80+ mkdir -p release
81+ tar -czvf release/${{ env.EXTENSION_NAME }}-pg${{ matrix.pg_version }}-${{ env.LOWERCASE_OS }}-${{ matrix.arch }}.tar.gz -C target/release/${{ env.EXTENSION_NAME }}-pg${{ matrix.pg_version }} .
82+
83+ - name : Upload Release Asset
84+ uses : softprops/action-gh-release@v1
85+ with :
86+ files : release/${{ env.EXTENSION_NAME }}-pg${{ matrix.pg_version }}-${{ env.LOWERCASE_OS }}-${{ matrix.arch }}.tar.gz
87+
88+ build-and-push-docker :
89+ needs : build-and-publish
90+ runs-on : ubuntu-latest
91+ steps :
92+ - uses : actions/checkout@v3
93+
94+ - name : Set up QEMU
95+ uses : docker/setup-qemu-action@v2
96+
97+ - name : Set up Docker Buildx
98+ uses : docker/setup-buildx-action@v2
99+
100+ - name : Login to GHCR
101+ uses : docker/login-action@v2
102+ with :
103+ registry : ghcr.io
104+ username : ${{ github.actor }}
105+ password : ${{ secrets.GITHUB_TOKEN }}
106+
107+ - name : Build and push Docker image
108+ uses : docker/build-push-action@v4
109+ with :
110+ context : .
111+ push : true
112+ platforms : linux/amd64,linux/arm64
113+ tags : |
114+ ${{ env.DOCKER_IMAGE }}:latest
115+ ${{ env.DOCKER_IMAGE }}:${{ github.ref_name }}
0 commit comments