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
22 changes: 22 additions & 0 deletions .github/workflows/release.yml
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,28 @@ jobs:
run: |
pip install --constraint=.github/workflows/constraints.txt poetry poetry-dynamic-versioning
poetry --version

- name: Set up Go
uses: actions/setup-go@v4
with:
go-version: "1.23"

- name: Install dependencies
run: |
cd pg-compare && go mod tidy

- name: Build the project for all platforms
run: |
cd pg-compare && set -e \
&& go mod download \
&& for GOOS in linux darwin windows; do \
for GOARCH in amd64 arm64; do \
EXT="so"; \
[ "$GOOS" = "windows" ] && EXT="dll"; \
go build -o "pgcompare_${GOOS}_${GOARCH}.${EXT}" -buildmode=c-shared main.go; \
cp "pgcompare_${GOOS}_${GOARCH}.${EXT}" ./../pgbelt/
done; \
done;
- name: Build package
run: |
poetry build --ansi
Expand Down
7 changes: 6 additions & 1 deletion .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -12,9 +12,14 @@ venv
build/*
dist/*
logs/*
configs/testdc/*
schemas/*
tables/*
.python-version
.mypy_cache
__pycache__/
pg-compare/*.so
pg-compare/*.h
pg-compare/*.dll
pgbelt/*.so
pgbelt/*.h
pgbelt/*.dll
23 changes: 23 additions & 0 deletions Dockerfile
Original file line number Diff line number Diff line change
@@ -1,9 +1,32 @@
FROM golang:1.23 AS pgcompare-builder

WORKDIR /opt/pgcompare

COPY ./pg-compare /opt/pgcompare

RUN set -e \
&& go mod download \
&& for GOOS in linux darwin windows; do \
for GOARCH in amd64 arm64; do \
EXT="so"; \
[ "$GOOS" = "windows" ] && EXT="dll"; \
go build -o "pgcompare_${GOOS}_${GOARCH}.${EXT}" -buildmode=c-shared main.go; \
done; \
done

FROM python:3.11-slim
ENV VIRTUAL_ENV=/opt/venv
ENV PATH="$VIRTUAL_ENV/bin:$PATH"
COPY ./ /opt/pgbelt
WORKDIR /opt/pgbelt

COPY --from=pgcompare-builder /opt/pgcompare/pgcompare_linux_amd64.so /opt/pgbelt/pgcompare_linux_amd64.so
COPY --from=pgcompare-builder /opt/pgcompare/pgcompare_linux_arm64.so /opt/pgbelt/pgcompare_linux_arm64.so
COPY --from=pgcompare-builder /opt/pgcompare/pgcompare_darwin_amd64.so /opt/pgbelt/pgcompare_darwin_amd64.so
COPY --from=pgcompare-builder /opt/pgcompare/pgcompare_darwin_arm64.so /opt/pgbelt/pgcompare_darwin_arm64.so
COPY --from=pgcompare-builder /opt/pgcompare/pgcompare_windows_amd64.dll /opt/pgbelt/pgcompare_windows_amd64.dll
COPY --from=pgcompare-builder /opt/pgcompare/pgcompare_windows_arm64.dll /opt/pgbelt/pgcompare_windows_arm64.dll

RUN set -e \
&& apt-get -y update \
&& apt-get -y install postgresql-client \
Expand Down
24 changes: 24 additions & 0 deletions pg-compare/build-local.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
#!/bin/bash

set -e

for GOOS in linux darwin windows; do
for GOARCH in amd64 arm64; do
EXT="so"
[ "$GOOS" = "windows" ] && EXT="dll"
OUTPUT="pgcompare_${GOOS}_${GOARCH}.${EXT}"

if [ "$GOOS" = "linux" ]; then
docker run --rm -v "$PWD":/src -w /src golang:1.23 \
bash -c "GOOS=$GOOS GOARCH=$GOARCH go build -buildmode=c-shared -o $OUTPUT main.go" || {
echo "Docker build failed for $GOOS/$GOARCH"
}
else
GOOS=$GOOS GOARCH=$GOARCH go build -buildmode=c-shared -o $OUTPUT main.go || {
echo "build failed for $GOOS/$GOARCH"
}
fi
done
done
echo "Build completed successfully for all platforms."
cp pgcompare_*.so ./../pgbelt/
Loading
Loading