Skip to content

Commit

Permalink
build deb package (#210)
Browse files Browse the repository at this point in the history
 build deb package
  • Loading branch information
ChuckHend authored May 14, 2024
1 parent 19f9a6f commit efca9b0
Showing 1 changed file with 109 additions and 0 deletions.
109 changes: 109 additions & 0 deletions .github/workflows/build_extension_deb.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,109 @@
name: Build Extension .deb

defaults:
run:
shell: bash
working-directory: ./

on:
release:
types:
- created

jobs:
build-deb:
# source: https://github.com/supabase/pg_jsonschema/blob/29fcd5b23abe3dd6a78a490082f34113de7813a1/.github/workflows/release.yml
name: release .deb
if: github.event_name == 'release'
strategy:
matrix:
extension_name:
- pgmq
package_name:
- pgmq
pgrx_version:
- 0.11.3
postgres:
- 14
- 15
- 16
box:
- { runner: ubuntu-20.04, arch: amd64 }
- { runner: arm-runner, arch: arm64 }
runs-on: ${{ matrix.box.runner }}
timeout-minutes: 90
steps:
- uses: actions/checkout@v4

- name: build release artifacts
run: |
# Add postgres package repo
sudo sh -c 'echo "deb http://apt.postgresql.org/pub/repos/apt $(lsb_release -cs)-pgdg main" > /etc/apt/sources.list.d/pgdg.list'
wget -qO- https://www.postgresql.org/media/keys/ACCC4CF8.asc | sudo tee /etc/apt/trusted.gpg.d/pgdg.asc &>/dev/null
sudo apt-get update
sudo apt-get install -y --no-install-recommends git build-essential libpq-dev curl libreadline6-dev zlib1g-dev pkg-config cmake
sudo apt-get install -y --no-install-recommends libreadline-dev zlib1g-dev flex bison libxml2-dev libxslt-dev libssl-dev libxml2-utils xsltproc ccache
sudo apt-get install -y --no-install-recommends clang libclang-dev gcc tree
sudo apt install -y postgresql-${{ matrix.postgres }} postgresql-server-dev-${{ matrix.postgres }} -y
export PATH=$PATH:/usr/lib/postgresql/${{ matrix.postgres }}/bin
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh -s -- -y --no-modify-path --profile minimal --default-toolchain stable && \
rustup --version && \
rustc --version && \
cargo --version
source "$HOME/.cargo/env"
pgrx_ver=$(grep '^pgrx' Cargo.toml | head -1 | awk -F '"' '{print $2}')
cargo install cargo-pgrx --version ${pgrx_ver} --locked
cargo pgrx init --pg${{ matrix.postgres }}=/usr/lib/postgresql/${{ matrix.postgres }}/bin/pg_config
cargo pgrx package --pg-config $(cargo pgrx info pg-config ${{ matrix.postgres }})
# Create installable package
mkdir archive
cp `find target/release -type f -name "${{ matrix.extension_name }}*"` archive
# name of the package directory before packaging
package_dir=${{ matrix.extension_name }}-${{ github.ref_name }}-pg${{ matrix.postgres }}-${{ matrix.box.arch }}-linux-gnu
# Copy files into directory structure
mkdir -p ${package_dir}/usr/lib/postgresql/lib
mkdir -p ${package_dir}/var/lib/postgresql/extension
cp archive/*.so ${package_dir}/usr/lib/postgresql/lib
cp archive/*.control ${package_dir}/var/lib/postgresql/extension
cp archive/*.sql ${package_dir}/var/lib/postgresql/extension
deb_version=$(grep '^version' Cargo.toml | head -1 | awk -F '"' '{print $2}')
mkdir -p ${package_dir}/DEBIAN
touch ${package_dir}/DEBIAN/control
echo 'Package: ${{ matrix.package_name }}' >> ${package_dir}/DEBIAN/control
echo 'Version:' ${deb_version} >> ${package_dir}/DEBIAN/control
echo 'Architecture: ${{ matrix.box.arch }}' >> ${package_dir}/DEBIAN/control
echo 'Maintainer: tembo' >> ${package_dir}/DEBIAN/control
echo 'Description: A PostgreSQL queue extension' >> ${package_dir}/DEBIAN/control
# Create deb package
sudo chown -R root:root ${package_dir}
sudo chmod -R 00755 ${package_dir}
sudo dpkg-deb --build --root-owner-group ${package_dir}
- name: Prepare release
run: |
deb_version=$(grep '^version' Cargo.toml | head -1 | awk -F '"' '{print $2}')
echo UPLOAD_URL=$(curl --silent https://api.github.com/repos/${{ github.repository }}/releases/tags/v${deb_version} | jq .upload_url --raw-output) >> $GITHUB_ENV
echo ASSET_NAME=${{ matrix.extension_name }}-${deb_version}-pg${{ matrix.postgres }}-${{ matrix.box.arch }}-linux-gnu.deb >> $GITHUB_ENV
- name: Upload deb to github release
uses: actions/upload-release-asset@v1
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
with:
upload_url: ${{ env.UPLOAD_URL }}
asset_path: ./${{ env.ASSET_NAME }}
asset_name: ${{ env.ASSET_NAME }}
asset_content_type: application/vnd.debian.binary-package

0 comments on commit efca9b0

Please sign in to comment.