Skip to content

Instantly share code, notes, and snippets.

View coopernetes's full-sized avatar
🌴
On vacation

Thomas Cooper coopernetes

🌴
On vacation
View GitHub Profile
@coopernetes
coopernetes / feature-comparison.md
Last active April 10, 2026 01:12
Feature comparison: finos/git-proxy (Node.js) vs git-proxy-java

Feature Comparison: finos/git-proxy (Node.js) vs git-proxy-java

Generated 2026-04-08

Feature Node.js (finos/git-proxy) Java (git-proxy-java) Notes
Proxy Modes
Transparent proxy Single mode only (acts as transparent proxy) /proxy/ path
Store-and-forward No /push/ path Java-only — local receive + hook chain + forward
Sideband streaming progress No (single HTTP response) Yes Java-only
@coopernetes
coopernetes / git-proxy-java-comparison.md
Last active April 20, 2026 14:25
Tech stack comparison

Server Framework: Jetty/Servlet vs Node/Express

Context: git-proxy is a FINOS project that acts as a policy-enforcing proxy for git pushes. The current implementation is Node.js/Express. This document compares the server-side capabilities relevant to building a store-and-forward git proxy — where pushes land in a local repository first, run through validation hooks with real-time sideband feedback, then get forwarded upstream.

These findings come from prototyping git-proxy-java, a Java/Jetty implementation that uses JGit's native git protocol stack.

The Problem

A git proxy that does more than passively forward bytes needs to:

JGit Server-Side Abstractions: Reference Guide

Quick reference for integrating JGit's server-side git-receive-pack handling into jgit-proxy's servlet-based filter architecture.

Core Composition Model

GitServlet (HTTP layer)
  ├── RepositoryResolver<HttpServletRequest>  ← "which repo?"
  ├── ReceivePackFactory<HttpServletRequest>   ← "how to handle this push?"

git-proxy-java: Architecture Vision

Why This Project Exists

finos/git-proxy is the upstream reference — a Node.js/Express server that inspects git pushes and enforces policy. It works. But the stack imposes real constraints on what kind of proxy it can become.

The root problem: express-http-proxy is a dumb TCP relay. It forwards bytes. It has no understanding of the git smart HTTP protocol, no ability to intercept sideband channels, and no mechanism to stream real-time feedback to the developer during a push. The git smart HTTP protocol is stateful and streaming — not a typical request-response exchange.

Building a policy-enforcing proxy in Node requires:

@coopernetes
coopernetes / branching-strategy-discussion.md
Last active March 26, 2026 04:17
Branching strategy discussion — finos/git-proxy #1483

Branching Strategy Discussion — finos/git-proxy #1483

Related issue: finos/git-proxy#1483

Proposed flow (GitLabFlow with cherry-pick backports)

gitGraph
   commit id: "feat: foo"
 commit id: "feat: bar"
@coopernetes
coopernetes / git-proxy-push.md
Last active October 23, 2023 18:17
git-proxy manual authorization steps

Authorize git pushes through git-proxy using the API

Git-proxy includes a REST-based API for managing certain aspects of repositories & git operations (pushes, pulls). This API is fronted by a web UI. The web interface is under active development and is missing some key features to allow Git Proxy to push commits through it.

The below procedure will allow you to "authorize" a push through git-proxy using the included API. The following assumptions are made and must be modified to match your deployment of git-proxy: