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
9 changes: 6 additions & 3 deletions .github/workflows/ci.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,7 @@ jobs:
- uses: pre-commit/action@v1.0.1

build-test-push:
if: github.ref == format('refs/heads/{0}', github.event.repository.default_branch) || (github.event_name == 'pull_request' && github.event.pull_request.head.repo.full_name == github.repository)
if: github.ref == format('refs/heads/{0}', github.event.repository.default_branch) || github.event_name == 'pull_request'
runs-on: ubuntu-latest
needs: pre-commit
permissions:
Expand Down Expand Up @@ -62,6 +62,8 @@ jobs:
# Github does not allow evaluating a secret in an if condition, so we need to set them as environment variables
DOCKERHUB_TOKEN: ${{ secrets.DOCKERHUB_TOKEN }}
DOCKERHUB_LOGIN: ${{ secrets.DOCKERHUB_LOGIN }}
BOT_TOKEN: ${{ secrets.BOT_TOKEN }}
BOT_LOGIN: ${{ secrets.BOT_LOGIN }}
steps:
# Image repo names have to be lowercase.
- name: Lowercase image repository name
Expand Down Expand Up @@ -98,8 +100,9 @@ jobs:
REGISTRY_USERNAME: ${{ env.DOCKERHUB_LOGIN }}
run: ./hooks/push
- name: Push Docker Image to GitHub Registry
if: github.event_name != 'pull_request' || github.event.pull_request.head.repo.full_name == github.repository || env.BOT_TOKEN && env.BOT_LOGIN
env:
REGISTRY_HOST: ghcr.io
REGISTRY_TOKEN: ${{ secrets.BOT_TOKEN || secrets.GITHUB_TOKEN }}
REGISTRY_USERNAME: ${{ secrets.BOT_LOGIN || github.repository_owner }}
REGISTRY_TOKEN: ${{ secrets.BOT_LOGIN && secrets.BOT_TOKEN || secrets.GITHUB_TOKEN }}
REGISTRY_USERNAME: ${{ secrets.BOT_TOKEN && secrets.BOT_LOGIN || github.repository_owner }}
run: ./hooks/push
9 changes: 6 additions & 3 deletions Dockerfile
Original file line number Diff line number Diff line change
Expand Up @@ -19,12 +19,15 @@ ENV CERTS="{}" \
WAN_USERS='["all"]' \
HBA_EXTRA_RULES=""
RUN apk add --no-cache python3 py3-netifaces \
&& if [ "${PG_MAJOR:-0}" -ge 12 ]; then \
apk add --no-cache --virtual .pgvector-build build-base clang19 llvm19 linux-headers ca-certificates; \
&& if [ "${PG_MAJOR:-0}" -ge 13 ]; then \
PG_CLANG="$(pg_config --configure | tr "'" "\n" | sed -n 's/^CLANG=clang-//p')"; \
PG_LLVM="$(pg_config --configure | tr "'" "\n" | sed -n 's#^LLVM_CONFIG=/usr/lib/llvm\([0-9][0-9]*\)/bin/llvm-config#\1#p')"; \
test -n "${PG_CLANG}" && test -n "${PG_LLVM}" && test "${PG_CLANG}" = "${PG_LLVM}"; \
apk add --no-cache --virtual .pgvector-build build-base linux-headers ca-certificates "clang${PG_CLANG}" "llvm${PG_LLVM}"; \
wget -qO- "https://github.com/pgvector/pgvector/archive/refs/tags/v${PGVECTOR_VERSION}.tar.gz" \
| tar -xz -C /tmp; \
cd "/tmp/pgvector-${PGVECTOR_VERSION}" \
&& make PG_CONFIG=/usr/local/bin/pg_config \
&& make $(if [ "$(uname -m)" = "x86_64" ]; then echo 'CFLAGS=-march=x86-64-v2'; fi) PG_CONFIG=/usr/local/bin/pg_config \
&& make install PG_CONFIG=/usr/local/bin/pg_config; \
cd / && rm -rf "/tmp/pgvector-${PGVECTOR_VERSION}"; \
apk del .pgvector-build; \
Expand Down
67 changes: 67 additions & 0 deletions tests/test.py
Original file line number Diff line number Diff line change
Expand Up @@ -356,6 +356,73 @@ def test_hba_extra_rules_added(self):
for rule in hba_extra_rules:
self.assertIn(rule, hba_conf)

def test_pgvector_extension(self):
"""Test that pgvector is installed and works."""
if float(local.env["DOCKER_TAG"].split("-")[0]) < 13:
self.skipTest("pgvector not built for PostgreSQL < 13")
self.postgres_container = docker(
"container",
"run",
"-d",
"--network",
"lan",
"-e",
"POSTGRES_DB=test_db",
"-e",
"POSTGRES_PASSWORD=test_password",
"-e",
"POSTGRES_USER=test_user",
CONF_EXTRA,
self.image,
).strip()
self._check_local_connection()
self.assertEqual(
"vector\n",
docker(
"container",
"exec",
self.postgres_container,
"psql",
"--command",
"SELECT name FROM pg_available_extensions WHERE name = 'vector';",
"--dbname",
"test_db",
"--no-align",
"--tuples-only",
"--username",
"test_user",
),
)
docker(
"container",
"exec",
self.postgres_container,
"psql",
"--command",
"CREATE EXTENSION vector;",
"--dbname",
"test_db",
"--username",
"test_user",
)
self.assertEqual(
"1\n",
docker(
"container",
"exec",
self.postgres_container,
"psql",
"--command",
"SELECT ('[1,2,3]'::vector <-> '[1,2,4]'::vector)::int;",
"--dbname",
"test_db",
"--no-align",
"--tuples-only",
"--username",
"test_user",
),
)


if __name__ == "__main__":
unittest.main()
Loading