From 010024e62543924f01625125f1c6030fa6046a31 Mon Sep 17 00:00:00 2001 From: David Rotermund Date: Thu, 22 Oct 2026 02:28:58 +0200 Subject: [PATCH] Missing git-bridge build files --- services/git-bridge/Dockerfile | 54 +++++++++++++++++++++ services/git-bridge/Makefile | 89 ++++++++++++++++++++++++++++++++++ 2 files changed, 143 insertions(+) create mode 100644 services/git-bridge/Dockerfile create mode 100644 services/git-bridge/Makefile diff --git a/services/git-bridge/Dockerfile b/services/git-bridge/Dockerfile new file mode 100644 index 0000000000..e1309125a7 --- /dev/null +++ b/services/git-bridge/Dockerfile @@ -0,0 +1,54 @@ +# Build the a8m/envsubst binary, as it supports default values, +# which the gnu envsubst (from gettext-base) does not. +FROM golang:1.25.5-alpine AS envsubst_builder + +WORKDIR /build + +RUN go install github.com/a8m/envsubst/cmd/envsubst@latest + +FROM maven:3-amazoncorretto-21-debian AS base + +RUN apt-get update && apt-get install -y make git sqlite3 curl \ + && rm -rf /var/lib/apt/lists + +COPY --from=envsubst_builder /go/bin/envsubst /opt/envsubst +RUN chmod +x /opt/envsubst + +RUN useradd --create-home node + +FROM base AS builder + +COPY . /app + +WORKDIR /app + +RUN make package \ +# The name of the created jar contains the current version tag. +# Rename it to a static path that can be used for copying. +&& find /app/target \ + -name 'writelatex-git-bridge*jar-with-dependencies.jar' \ + -exec mv {} /git-bridge.jar \; + +FROM amazoncorretto:21-alpine + +RUN apk add --update --no-cache bash git sqlite procps htop net-tools jemalloc util-linux + +ENV LD_PRELOAD=/usr/lib/libjemalloc.so.2 + +RUN adduser -D node + +COPY --from=builder /git-bridge.jar / + +COPY --from=envsubst_builder /go/bin/envsubst /opt/envsubst +RUN chmod +x /opt/envsubst + +COPY conf/envsubst_template.json envsubst_template.json +COPY start.sh start.sh +COPY server-pro-start.sh server-pro-start.sh + +RUN mkdir conf +RUN chown node:node conf + +USER node + +CMD ["/start.sh"] diff --git a/services/git-bridge/Makefile b/services/git-bridge/Makefile new file mode 100644 index 0000000000..3e489866c5 --- /dev/null +++ b/services/git-bridge/Makefile @@ -0,0 +1,89 @@ +# git-bridge makefile + +MVN_OPTS := --no-transfer-progress +MVN_TARGET := target/writelatex-git-bridge-1.0-SNAPSHOT-jar-with-dependencies.jar + +export BUILD_NUMBER ?= local +export BRANCH_NAME ?= $(shell git rev-parse --abbrev-ref HEAD) +BRANCH_NAME_TAG_SAFE = $(shell echo $(BRANCH_NAME) | sed 's/\//\-\-/g') +export COMMIT_SHA ?= $(shell git rev-parse HEAD) +PROJECT_NAME = git-bridge + +IMAGE_CI ?= ci/$(PROJECT_NAME):$(BRANCH_NAME_TAG_SAFE)-$(BUILD_NUMBER) +IMAGE_REPO ?= us-east1-docker.pkg.dev/overleaf-ops/ol-docker/$(PROJECT_NAME) +IMAGE_REPO_BRANCH ?= $(IMAGE_REPO):$(BRANCH_NAME_TAG_SAFE) +IMAGE_REPO_MAIN ?= $(IMAGE_REPO):main +IMAGE_REPO_FINAL ?= $(IMAGE_REPO_BRANCH)-$(BUILD_NUMBER) + +runtime-conf: + /opt/envsubst < conf/envsubst_template.json > conf/runtime.json + + +run: $(MVN_TARGET) runtime-conf + @exec java $(GIT_BRIDGE_JVM_ARGS) -jar $(MVN_TARGET) conf/runtime.json + + +$(MVN_TARGET): $(shell find src -type f) pom.xml + mvn $(MVN_OPTS) package -DskipTests + +build: $(MVN_TARGET) + +docker_build_base: + docker build --pull \ + --build-arg BUILDKIT_INLINE_CACHE=1 \ + --cache-from $(IMAGE_REPO_BRANCH) \ + --cache-from $(IMAGE_REPO_MAIN) \ + --tag $(IMAGE_CI) \ + --target base \ + . + +docker_build: + docker build --pull \ + --build-arg BUILDKIT_INLINE_CACHE=1 \ + --cache-from $(IMAGE_REPO_BRANCH) \ + --cache-from $(IMAGE_REPO_MAIN) \ + --tag $(IMAGE_REPO_BRANCH) \ + --tag $(IMAGE_REPO_FINAL) \ + . + +format: + mvn $(MVN_OPTS) com.spotify.fmt:fmt-maven-plugin:check + +docker_format: + docker run --rm -v $(PWD):$(PWD) -w $(PWD) --user node $(IMAGE_CI) make format + +format_fix: + mvn $(MVN_OPTS) com.spotify.fmt:fmt-maven-plugin:format + + +test: + mvn $(MVN_OPTS) test + +docker_test: + docker run --rm -v $(PWD):$(PWD) -w $(PWD) --user node $(IMAGE_CI) make test + +clean: + mvn $(MVN_OPTS) clean + + +package: clean + mvn $(MVN_OPTS) package -DskipTests + +refresh_cache: refresh_cache_branch +refresh_cache_branch: + docker inspect $(IMAGE_REPO_BRANCH) > /dev/null && docker pull $(IMAGE_REPO_BRANCH) || true +refresh_cache: refresh_cache_latest +refresh_cache_latest: + docker inspect $(IMAGE_REPO_MAIN) > /dev/null && docker pull $(IMAGE_REPO_MAIN) || true + +push: + docker push $(IMAGE_REPO_FINAL) + +push_branch: + docker push $(IMAGE_REPO_BRANCH) + +clean_ci: + -docker rmi -f $(IMAGE_CI) $(IMAGE_REPO_FINAL) + -git clean -xdf . + +.PHONY: run package build clean test runtime-conf