name: ๐Ÿš€ Docker Build and Push on: push: branches: - main jobs: build-and-push: runs-on: ubuntu-latest strategy: matrix: pg_version: [15, 16, 17, 18] steps: - name: ๐Ÿ“ฅ Checkout code uses: actions/checkout@v4 - name: ๐Ÿ› ๏ธ Set up Docker Buildx uses: docker/setup-buildx-action@v3 - name: ๐Ÿ” Login to Gitea Registry uses: docker/login-action@v3 with: registry: gitea.killinger.fr username: maxime.killinger password: ${{ secrets.DOCKER_TOKEN }} - name: ๐Ÿ“ฆ Build Docker image uses: docker/build-push-action@v5 with: context: . load: true build-args: | PG_VERSION=${{ matrix.pg_version }} tags: | postgres-ts-vectors:pg${{ matrix.pg_version }}-test - name: ๐Ÿงช Test image - Start container run: | docker run -d --name test-pg${{ matrix.pg_version }} \ -e POSTGRES_PASSWORD=testpass \ postgres-ts-vectors:pg${{ matrix.pg_version }}-test # Wait for PostgreSQL to be ready echo "Waiting for PostgreSQL to start..." for i in {1..30}; do if docker exec test-pg${{ matrix.pg_version }} pg_isready -U postgres > /dev/null 2>&1; then echo "PostgreSQL is ready!" break fi sleep 2 done - name: ๐Ÿงช Test image - Verify extensions run: | # Wait a bit more for init scripts to complete sleep 5 # Check extensions are installed RESULT=$(docker exec test-pg${{ matrix.pg_version }} psql -U postgres -t -c \ "SELECT count(*) FROM pg_extension WHERE extname IN ('timescaledb', 'vector', 'vchord');") EXTENSIONS=$(echo $RESULT | tr -d ' ') echo "Found $EXTENSIONS extensions" if [ "$EXTENSIONS" -eq "3" ]; then echo "โœ… All 3 extensions are installed!" else echo "โŒ Expected 3 extensions, found $EXTENSIONS" docker exec test-pg${{ matrix.pg_version }} psql -U postgres -c \ "SELECT extname, extversion FROM pg_extension;" exit 1 fi # Show extension versions docker exec test-pg${{ matrix.pg_version }} psql -U postgres -c \ "SELECT extname, extversion FROM pg_extension WHERE extname IN ('timescaledb', 'vector', 'vchord');" - name: ๐Ÿงน Cleanup test container if: always() run: docker rm -f test-pg${{ matrix.pg_version }} || true - name: ๐Ÿš€ Push Docker image uses: docker/build-push-action@v5 with: context: . push: true build-args: | PG_VERSION=${{ matrix.pg_version }} tags: | gitea.killinger.fr/maxime.killinger/postgres-ts-vectors:pg${{ matrix.pg_version }} - name: ๐Ÿท๏ธ Tag latest (PG18 only) if: matrix.pg_version == 18 uses: docker/build-push-action@v5 with: context: . push: true build-args: | PG_VERSION=18 tags: | gitea.killinger.fr/maxime.killinger/postgres-ts-vectors:latest