-
-
Notifications
You must be signed in to change notification settings - Fork 114
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
Showing
2 changed files
with
322 additions
and
0 deletions.
There are no files selected for viewing
This file contains 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
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,60 @@ | ||
name: dockerhub | ||
|
||
on: | ||
workflow_dispatch: | ||
|
||
jobs: | ||
push_to_registry: | ||
strategy: | ||
fail-fast: true | ||
matrix: | ||
postgres: [16] | ||
compiler: [clang] | ||
alpine: [3.18] | ||
|
||
name: Push Docker image to Docker Hub | ||
runs-on: ubuntu-latest | ||
steps: | ||
- name: Check out the repo | ||
uses: actions/checkout@v3 | ||
|
||
- name: Get the required tag name | ||
shell: bash | ||
run: | | ||
echo "PGTAG=$(grep '^${{ matrix.postgres }}: ' .pgtags | cut -d' ' -f2-)" >> $GITHUB_ENV | ||
- name: Set up QEMU | ||
uses: docker/setup-qemu-action@v1 | ||
|
||
- name: Set up Docker Buildx | ||
uses: docker/setup-buildx-action@v1 | ||
|
||
- name: Log in to Docker Hub | ||
uses: docker/login-action@v1 | ||
with: | ||
username: ${{ secrets.DOCKERHUB_USERNAME }} | ||
password: ${{ secrets.DOCKERHUB_TOKEN }} | ||
|
||
- name: Extract metadata (tags, labels) for Docker | ||
id: meta | ||
uses: docker/metadata-action@v3 | ||
with: | ||
images: orioledb/orioledb | ||
flavor: | | ||
latest=auto | ||
prefix= | ||
suffix=-pg${{ matrix.postgres }},onlatest=true | ||
- name: Build and push Docker image | ||
uses: docker/build-push-action@v2 | ||
with: | ||
context: . | ||
file: Dockerfile.focal | ||
platforms: linux/amd64,linux/arm64 | ||
push: true | ||
tags: ${{ steps.meta.outputs.tags }} | ||
labels: ${{ steps.meta.outputs.labels }} | ||
build-args: | | ||
BUILD_CC_COMPILER=${{ matrix.compiler }} | ||
PGTAG=${{ env.PGTAG }} | ||
DOCKER_PG_LLVM_DEPS=${{ env.DOCKER_PG_LLVM_DEPS }} |
This file contains 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
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,262 @@ | ||
# This is modified Dockerfile from 16/bookworm in | ||
# https://github.com/docker-library/postgres | ||
|
||
FROM ubuntu:focal | ||
|
||
# Set PG_MAJOR = [16 15 14 13 ] | ||
ARG PG_MAJOR=14 | ||
ENV PG_MAJOR ${PG_MAJOR} | ||
|
||
# set compiler: [ clang gcc ] | ||
ARG BUILD_CC_COMPILER=clang | ||
ENV BUILD_CC_COMPILER ${BUILD_CC_COMPILER} | ||
|
||
# Define build dependencies for LLVM [ llvm-dev clang ] | ||
# These include the specific versions of 'llvm-dev' and 'clang' suitable for the current version of PostgreSQL. | ||
# They are useful for building downstream extensions using the same LLVM, like PostGIS alpine https://github.com/postgis/docker-postgis | ||
# Note: PostgreSQL does not support LLVM 16. Therefore, for Alpine >=3.18, please use "llvm15-dev clang15". | ||
# Reference: https://github.com/docker-library/postgres/pull/1077 | ||
ARG DOCKER_PG_LLVM_DEPS="llvm-dev clang" | ||
ENV DOCKER_PG_LLVM_DEPS ${DOCKER_PG_LLVM_DEPS} | ||
|
||
# explicitly set user/group IDs | ||
RUN set -eux; \ | ||
groupadd -r postgres --gid=999; \ | ||
# https://salsa.debian.org/postgresql/postgresql-common/blob/997d842ee744687d99a2b2d95c1083a2615c79e8/debian/postgresql-common.postinst#L32-35 | ||
useradd -r -g postgres --uid=999 --home-dir=/var/lib/postgresql --shell=/bin/bash postgres; \ | ||
# also create the postgres user's home directory with appropriate permissions | ||
# see https://github.com/docker-library/postgres/issues/274 | ||
mkdir -p /var/lib/postgresql; \ | ||
chown -R postgres:postgres /var/lib/postgresql | ||
|
||
RUN set -ex; \ | ||
apt-get update; \ | ||
apt-get install -y --no-install-recommends \ | ||
gnupg \ | ||
; \ | ||
rm -rf /var/lib/apt/lists/* | ||
|
||
# grab gosu for easy step-down from root | ||
# https://github.com/tianon/gosu/releases | ||
ENV GOSU_VERSION 1.16 | ||
RUN set -eux; \ | ||
savedAptMark="$(apt-mark showmanual)"; \ | ||
apt-get update; \ | ||
apt-get install -y --no-install-recommends ca-certificates wget; \ | ||
rm -rf /var/lib/apt/lists/*; \ | ||
dpkgArch="$(dpkg --print-architecture | awk -F- '{ print $NF }')"; \ | ||
wget -O /usr/local/bin/gosu "https://github.com/tianon/gosu/releases/download/$GOSU_VERSION/gosu-$dpkgArch"; \ | ||
wget -O /usr/local/bin/gosu.asc "https://github.com/tianon/gosu/releases/download/$GOSU_VERSION/gosu-$dpkgArch.asc"; \ | ||
export GNUPGHOME="$(mktemp -d)"; \ | ||
gpg --batch --keyserver hkps://keys.openpgp.org --recv-keys B42F6819007F00F88E364FD4036A9C25BF357DD4; \ | ||
gpg --batch --verify /usr/local/bin/gosu.asc /usr/local/bin/gosu; \ | ||
gpgconf --kill all; \ | ||
rm -rf "$GNUPGHOME" /usr/local/bin/gosu.asc; \ | ||
apt-mark auto '.*' > /dev/null; \ | ||
[ -z "$savedAptMark" ] || apt-mark manual $savedAptMark > /dev/null; \ | ||
apt-get purge -y --auto-remove -o APT::AutoRemove::RecommendsImportant=false; \ | ||
chmod +x /usr/local/bin/gosu; \ | ||
gosu --version; \ | ||
gosu nobody true | ||
|
||
RUN set -eux; \ | ||
apt-get update; \ | ||
DEBIAN_FRONTEND=noninteractive apt-get full-upgrade -y; \ | ||
DEBIAN_FRONTEND=noninteractive apt-get install -y --no-install-recommends \ | ||
locales \ | ||
tzdata \ | ||
curl \ | ||
ca-certificates \ | ||
; \ | ||
localedef -i en_US -c -f UTF-8 -A /usr/share/locale/locale.alias en_US.UTF-8; | ||
|
||
# make the "en_US.UTF-8" locale so postgres will be utf-8 enabled by default | ||
ENV LANG en_US.utf8 | ||
|
||
RUN mkdir -p /usr/src/postgresql/contrib/orioledb | ||
|
||
COPY . /usr/src/postgresql/contrib/orioledb | ||
|
||
RUN mkdir /docker-entrypoint-initdb.d | ||
|
||
ENV PATH $PATH:/usr/lib/postgresql/$PG_MAJOR/bin | ||
RUN set -eux; \ | ||
\ | ||
PGTAG=$(grep "^$PG_MAJOR: " /usr/src/postgresql/contrib/orioledb/.pgtags | cut -d' ' -f2-) ; \ | ||
ORIOLEDB_VERSION=$(grep "^#define ORIOLEDB_VERSION" /usr/src/postgresql/contrib/orioledb/include/orioledb.h | cut -d'"' -f2) ; \ | ||
ORIOLEDB_BUILDTIME=$(date -Iseconds) ; \ | ||
\ | ||
echo "PG_MAJOR=$PG_MAJOR" ; \ | ||
echo "PGTAG=$PGTAG" ; \ | ||
echo "BUILD_CC_COMPILER=$BUILD_CC_COMPILER" ; \ | ||
echo "ORIOLEDB_VERSION=$ORIOLEDB_VERSION" ; \ | ||
echo "ORIOLEDB_BUILDTIME=$ORIOLEDB_BUILDTIME" ; \ | ||
echo "DOCKER_PG_LLVM_DEPS=$DOCKER_PG_LLVM_DEPS" ; \ | ||
\ | ||
apt-get update; \ | ||
DEBIAN_FRONTEND=noninteractive apt-get -y install --no-install-recommends \ | ||
build-essential \ | ||
${DOCKER_PG_LLVM_DEPS} \ | ||
bison \ | ||
flex \ | ||
gdb \ | ||
git \ | ||
libicu-dev \ | ||
libipc-run-perl \ | ||
libkrb5-dev \ | ||
libldap-dev \ | ||
liblz4-1 \ | ||
liblz4-dev \ | ||
libperl-dev \ | ||
libssl-dev \ | ||
libreadline-dev \ | ||
libuuid1 \ | ||
libxml2 \ | ||
libxml2-dev \ | ||
libxslt-dev \ | ||
libzstd1 \ | ||
libzstd-dev \ | ||
make \ | ||
pkg-config \ | ||
python3 \ | ||
python3-dev \ | ||
python3-pip \ | ||
python3-setuptools \ | ||
python3-testresources \ | ||
tcl-dev \ | ||
uuid-dev \ | ||
wget \ | ||
; \ | ||
\ | ||
curl -o postgresql.tar.gz \ | ||
--header "Accept: application/vnd.github.v3.raw" \ | ||
--remote-name \ | ||
--location https://github.com/orioledb/postgres/tarball/$PGTAG; \ | ||
mkdir -p /usr/src/postgresql; \ | ||
tar \ | ||
--extract \ | ||
--file postgresql.tar.gz \ | ||
--directory /usr/src/postgresql \ | ||
--strip-components 1 \ | ||
; \ | ||
rm postgresql.tar.gz; \ | ||
\ | ||
cd /usr/src/postgresql; \ | ||
gnuArch="$(dpkg-architecture --query DEB_BUILD_GNU_TYPE)"; \ | ||
# explicitly update autoconf config.guess and config.sub so they support more arches/libcs | ||
wget -O config/config.guess 'https://git.savannah.gnu.org/cgit/config.git/plain/config.guess?id=7d3d27baf8107b630586c962c057e22149653deb'; \ | ||
wget -O config/config.sub 'https://git.savannah.gnu.org/cgit/config.git/plain/config.sub?id=7d3d27baf8107b630586c962c057e22149653deb'; \ | ||
# configure options taken from: | ||
# https://anonscm.debian.org/cgit/pkg-postgresql/postgresql.git/tree/debian/rules?h=9.5 | ||
( CC=${BUILD_CC_COMPILER} ./configure \ | ||
--build="$gnuArch" \ | ||
# "/usr/src/postgresql/src/backend/access/common/tupconvert.c:105: undefined reference to `libintl_gettext'" | ||
# --enable-nls \ | ||
--enable-integer-datetimes \ | ||
--enable-thread-safety \ | ||
--enable-tap-tests \ | ||
# skip debugging info -- we want tiny size instead | ||
# --enable-debug \ | ||
--disable-rpath \ | ||
--with-uuid=e2fs \ | ||
--with-gnu-ld \ | ||
--with-pgport=5432 \ | ||
--with-system-tzdata=/usr/share/zoneinfo \ | ||
--prefix=/usr/local \ | ||
--with-includes=/usr/local/include \ | ||
--with-libraries=/usr/local/lib \ | ||
--with-krb5 \ | ||
--with-gssapi \ | ||
--with-ldap \ | ||
--with-tcl \ | ||
--with-perl \ | ||
--with-python \ | ||
# --with-pam \ | ||
--with-openssl \ | ||
--with-libxml \ | ||
--with-libxslt \ | ||
--with-icu \ | ||
--with-llvm \ | ||
--with-lz4 \ | ||
--with-zstd \ | ||
--with-extra-version=" ${ORIOLEDB_VERSION} PGTAG=${PGTAG} ubuntu:focal+${BUILD_CC_COMPILER} build:${ORIOLEDB_BUILDTIME}" \ | ||
|| cat config.log ); \ | ||
echo "ORIOLEDB_PATCHSET_VERSION = `echo $PGTAG | cut -d'_' -f2`" >> src/Makefile.global; \ | ||
make -j "$(nproc)"; \ | ||
make -C contrib -j "$(nproc)"; \ | ||
make -C contrib/orioledb -j "$(nproc)"; \ | ||
make install; \ | ||
make -C contrib install; \ | ||
make -C contrib/orioledb install; \ | ||
\ | ||
apt-get -y remove \ | ||
build-essential flex bison pkg-config \ | ||
libreadline-dev libipc-run-perl \ | ||
libicu-dev python3-dev python3-pip \ | ||
libzstd-dev \ | ||
curl wget liblz4-dev uuid-dev \ | ||
; \ | ||
apt-get -y autoremove; \ | ||
rm -rf /var/cache/apt/archives /var/lib/apt/lists/*; \ | ||
apt-get clean; \ | ||
cd /; \ | ||
rm -rf \ | ||
/usr/src/postgresql \ | ||
/usr/local/share/doc \ | ||
/usr/local/share/man \ | ||
; \ | ||
\ | ||
postgres --version | ||
|
||
# make the sample config easier to munge (and "correct by default") | ||
RUN set -eux; \ | ||
cp -v /usr/local/share/postgresql/postgresql.conf.sample /usr/local/share/postgresql/postgresql.conf.sample.orig; \ | ||
sed -ri "s!^#?(listen_addresses)\s*=\s*\S+.*!\1 = '*'!" /usr/local/share/postgresql/postgresql.conf.sample; \ | ||
echo "shared_preload_libraries = 'orioledb'" >> /usr/local/share/postgresql/postgresql.conf.sample; \ | ||
echo "orioledb.shared_pool_size = 512MB" >> /usr/local/share/postgresql/postgresql.conf.sample; \ | ||
echo "orioledb.undo_size = 256MB" >> /usr/local/share/postgresql/postgresql.conf.sample; \ | ||
echo "max_wal_size=8GB" >> /usr/local/share/postgresql/postgresql.conf.sample; \ | ||
grep -F "listen_addresses = '*'" /usr/local/share/postgresql/postgresql.conf.sample | ||
|
||
RUN mkdir -p /var/run/postgresql && chown -R postgres:postgres /var/run/postgresql && chmod 2777 /var/run/postgresql | ||
|
||
ENV PGDATA /var/lib/postgresql/data | ||
# this 777 will be replaced by 700 at runtime (allows semi-arbitrary "--user" values) | ||
RUN mkdir -p "$PGDATA" && chown -R postgres:postgres "$PGDATA" && chmod 777 "$PGDATA" | ||
VOLUME /var/lib/postgresql/data | ||
|
||
COPY docker-entrypoint.sh /usr/local/bin/ | ||
ENTRYPOINT ["docker-entrypoint.sh"] | ||
|
||
# We set the default STOPSIGNAL to SIGINT, which corresponds to what PostgreSQL | ||
# calls "Fast Shutdown mode" wherein new connections are disallowed and any | ||
# in-progress transactions are aborted, allowing PostgreSQL to stop cleanly and | ||
# flush tables to disk, which is the best compromise available to avoid data | ||
# corruption. | ||
# | ||
# Users who know their applications do not keep open long-lived idle connections | ||
# may way to use a value of SIGTERM instead, which corresponds to "Smart | ||
# Shutdown mode" in which any existing sessions are allowed to finish and the | ||
# server stops when all sessions are terminated. | ||
# | ||
# See https://www.postgresql.org/docs/12/server-shutdown.html for more details | ||
# about available PostgreSQL server shutdown signals. | ||
# | ||
# See also https://www.postgresql.org/docs/12/server-start.html for further | ||
# justification of this as the default value, namely that the example (and | ||
# shipped) systemd service files use the "Fast Shutdown mode" for service | ||
# termination. | ||
# | ||
STOPSIGNAL SIGINT | ||
# | ||
# An additional setting that is recommended for all users regardless of this | ||
# value is the runtime "--stop-timeout" (or your orchestrator/runtime's | ||
# equivalent) for controlling how long to wait between sending the defined | ||
# STOPSIGNAL and sending SIGKILL (which is likely to cause data corruption). | ||
# | ||
# The default in most runtimes (such as Docker) is 10 seconds, and the | ||
# documentation at https://www.postgresql.org/docs/12/server-start.html notes | ||
# that even 90 seconds may not be long enough in many instances. | ||
|
||
EXPOSE 5432 | ||
CMD ["postgres"] |