Skip to content

Commit 35eda28

Browse files
committed
ci: add new target to build and run the debug version for vscode and the standalone asan version
1 parent 51a12bd commit 35eda28

File tree

3 files changed

+96
-3
lines changed

3 files changed

+96
-3
lines changed

docker/Makefile.postgresql

Lines changed: 69 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -53,7 +53,8 @@ PG_EXTENSION_CONTROL = docker/postgresql/$(EXTENSION).control
5353
# ============================================================================
5454

5555
.PHONY: postgres-check postgres-build postgres-install postgres-clean postgres-test \
56-
postgres-docker-build postgres-docker-run postgres-docker-stop postgres-docker-rebuild \
56+
postgres-docker-build postgres-docker-build-asan postgres-docker-run postgres-docker-run-asan postgres-docker-stop postgres-docker-rebuild \
57+
postgres-docker-debug-build postgres-docker-debug-run postgres-docker-debug-rebuild \
5758
postgres-docker-shell postgres-dev-rebuild postgres-help unittest-pg
5859

5960
# Check if PostgreSQL is available
@@ -127,6 +128,22 @@ postgres-docker-build:
127128
@echo ""
128129
@echo "Docker image built successfully!"
129130

131+
# Build Docker image with AddressSanitizer enabled (override compose file)
132+
postgres-docker-build-asan:
133+
@echo "Building Docker image with ASAN via docker-compose..."
134+
# To force plaintext BuildKit logs, run: make postgres-docker-build-asan DOCKER_BUILD_ARGS=\"--progress=plain\"
135+
cd docker/postgresql && docker-compose -f docker-compose.debug.yml -f docker-compose.asan.yml build $(DOCKER_BUILD_ARGS)
136+
@echo ""
137+
@echo "ASAN Docker image built successfully!"
138+
139+
# Build Docker image using docker-compose.debug.yml
140+
postgres-docker-debug-build:
141+
@echo "Building debug Docker image via docker-compose..."
142+
# To force plaintext BuildKit logs, run: make postgres-docker-debug-build DOCKER_BUILD_ARGS=\"--progress=plain\"
143+
cd docker/postgresql && docker-compose -f docker-compose.debug.yml build $(DOCKER_BUILD_ARGS)
144+
@echo ""
145+
@echo "Debug Docker image built successfully!"
146+
130147
# Run PostgreSQL container with CloudSync
131148
postgres-docker-run:
132149
@echo "Starting PostgreSQL with CloudSync..."
@@ -144,6 +161,40 @@ postgres-docker-run:
144161
@echo " CREATE EXTENSION cloudsync;"
145162
@echo " SELECT cloudsync_version();"
146163

164+
# Run PostgreSQL container with CloudSync and AddressSanitizer enabled
165+
postgres-docker-run-asan:
166+
@echo "Starting PostgreSQL with CloudSync (ASAN enabled)..."
167+
cd docker/postgresql && docker-compose -f docker-compose.debug.yml -f docker-compose.asan.yml up -d --build
168+
@echo ""
169+
@echo "Container started successfully!"
170+
@echo ""
171+
@echo "Connect with psql:"
172+
@echo " docker exec -it cloudsync-postgres psql -U postgres -d cloudsync_test"
173+
@echo ""
174+
@echo "Or from host:"
175+
@echo " psql postgresql://postgres:postgres@localhost:5432/cloudsync_test"
176+
@echo ""
177+
@echo "Enable extension:"
178+
@echo " CREATE EXTENSION cloudsync;"
179+
@echo " SELECT cloudsync_version();"
180+
181+
# Run PostgreSQL container using docker-compose.debug.yml
182+
postgres-docker-debug-run:
183+
@echo "Starting PostgreSQL with CloudSync (debug compose)..."
184+
cd docker/postgresql && docker-compose -f docker-compose.debug.yml up -d --build
185+
@echo ""
186+
@echo "Container started successfully!"
187+
@echo ""
188+
@echo "Connect with psql:"
189+
@echo " docker exec -it cloudsync-postgres psql -U postgres -d cloudsync_test"
190+
@echo ""
191+
@echo "Or from host:"
192+
@echo " psql postgresql://postgres:postgres@localhost:5432/cloudsync_test"
193+
@echo ""
194+
@echo "Enable extension:"
195+
@echo " CREATE EXTENSION cloudsync;"
196+
@echo " SELECT cloudsync_version();"
197+
147198
# Stop PostgreSQL container
148199
postgres-docker-stop:
149200
@echo "Stopping PostgreSQL container..."
@@ -157,6 +208,13 @@ postgres-docker-rebuild: postgres-docker-build
157208
cd docker/postgresql && docker-compose up -d --build
158209
@echo "Container restarted with new image"
159210

211+
# Rebuild and restart container using docker-compose.debug.yml
212+
postgres-docker-debug-rebuild: postgres-docker-debug-build
213+
@echo "Rebuilding and restarting debug container..."
214+
cd docker/postgresql && docker-compose -f docker-compose.debug.yml down
215+
cd docker/postgresql && docker-compose -f docker-compose.debug.yml up -d --build
216+
@echo "Debug container restarted with new image"
217+
160218
# Interactive shell in container
161219
postgres-docker-shell:
162220
@echo "Opening shell in PostgreSQL container..."
@@ -192,6 +250,11 @@ postgres-help:
192250
@echo ""
193251
@echo "Docker Targets:"
194252
@echo " postgres-docker-build - Build Docker image with pre-installed extension"
253+
@echo " postgres-docker-build-asan - Build Docker image with ASAN enabled"
254+
@echo " postgres-docker-run-asan - Run container with ASAN enabled"
255+
@echo " postgres-docker-debug-build - Build image via docker-compose.debug.yml"
256+
@echo " postgres-docker-debug-run - Run container via docker-compose.debug.yml"
257+
@echo " postgres-docker-debug-rebuild - Rebuild and run docker-compose.debug.yml"
195258
@echo " postgres-docker-run - Start PostgreSQL container"
196259
@echo " postgres-docker-stop - Stop PostgreSQL container"
197260
@echo " postgres-docker-rebuild - Rebuild image and restart container"
@@ -203,6 +266,11 @@ postgres-help:
203266
@echo ""
204267
@echo "Examples:"
205268
@echo " make postgres-docker-build # Build image"
269+
@echo " make postgres-docker-build-asan # Build image with ASAN"
270+
@echo " make postgres-docker-run-asan # Run container with ASAN"
271+
@echo " make postgres-docker-debug-build # Build debug compose image"
272+
@echo " make postgres-docker-debug-run # Run debug compose container"
273+
@echo " make postgres-docker-debug-rebuild # Rebuild debug compose container"
206274
@echo " make postgres-docker-run # Start container"
207275
@echo " make postgres-docker-shell # Open shell"
208276
@echo " make postgres-dev-rebuild # Rebuild after code changes"

docker/postgresql/Dockerfile.debug

Lines changed: 19 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,9 @@
11
# PostgreSQL Docker image with CloudSync extension (debug build)
22
FROM postgres:16
33

4+
# Enable ASAN build flags when requested (used by docker-compose.asan.yml).
5+
ARG ENABLE_ASAN=0
6+
47
# Install build dependencies and debug symbols
58
RUN apt-get update && apt-get install -y \
69
ca-certificates \
@@ -16,6 +19,7 @@ RUN apt-get update && apt-get install -y \
1619
build-essential \
1720
dpkg-dev \
1821
gdb \
22+
libasan8 \
1923
postgresql-server-dev-16 \
2024
postgresql-16-dbgsym \
2125
git \
@@ -35,8 +39,21 @@ COPY docker/ ./docker/
3539
COPY Makefile .
3640

3741
# Build and install the CloudSync extension with debug flags
38-
RUN make postgres-build PG_DEBUG=1 && \
39-
make postgres-install PG_DEBUG=1 && \
42+
RUN set -eux; \
43+
ASAN_CFLAGS=""; \
44+
ASAN_LDFLAGS=""; \
45+
if [ "${ENABLE_ASAN}" = "1" ]; then \
46+
ASAN_CFLAGS="-fsanitize=address"; \
47+
ASAN_LDFLAGS="-fsanitize=address"; \
48+
fi; \
49+
make postgres-build PG_DEBUG=1 \
50+
PG_CFLAGS="-fPIC -Wall -Wextra -Wno-unused-parameter -std=c11 -g -O0 -fno-omit-frame-pointer ${ASAN_CFLAGS}" \
51+
PG_LDFLAGS="-shared ${ASAN_LDFLAGS}" \
52+
PG_CPPFLAGS="-I$(pg_config --includedir-server) -Isrc -Isrc/postgresql -DCLOUDSYNC_POSTGRESQL_BUILD -D_POSIX_C_SOURCE=200809L -D_GNU_SOURCE -DMEMORY_CONTEXT_CHECKING" && \
53+
make postgres-install PG_DEBUG=1 \
54+
PG_CFLAGS="-fPIC -Wall -Wextra -Wno-unused-parameter -std=c11 -g -O0 -fno-omit-frame-pointer ${ASAN_CFLAGS}" \
55+
PG_LDFLAGS="-shared ${ASAN_LDFLAGS}" \
56+
PG_CPPFLAGS="-I$(pg_config --includedir-server) -Isrc -Isrc/postgresql -DCLOUDSYNC_POSTGRESQL_BUILD -D_POSIX_C_SOURCE=200809L -D_GNU_SOURCE -DMEMORY_CONTEXT_CHECKING" && \
4057
make postgres-clean
4158

4259
# Verify installation
Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
services:
2+
postgres:
3+
build:
4+
args:
5+
ENABLE_ASAN: "1"
6+
environment:
7+
LD_PRELOAD: /usr/lib/aarch64-linux-gnu/libasan.so.8
8+
ASAN_OPTIONS: detect_leaks=0,abort_on_error=1,allocator_may_return_null=1

0 commit comments

Comments
 (0)