1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
# Changelog for gitlab-workhorse
Formerly known as 'gitlab-git-http-server'.
v 3.3.0
- Ban context.Background !201
- Respect the ShowAllRefs flag in git upload-pack and info-refs !203
- Upgrade grpc to v1.7.1, protobuf to latest !207
v3.2.0
- Implement Gitaly call for archive requests !199
- Re-use client.Dial from gitaly !194
- Respect GL_USERNAME !192
- Update BurntSushi/toml !195
- Add Redis error counters !197
- Migrate Send{Diff,Patch} to Gitaly !200
v3.1.0
- Add histograms to routes !184
- Gitaly deprecations and replacements !186, !187, !189
- Enable CI long polling by default !188
- Refactor Git archive creation !190
v3.0.0
- Use GetBlob RPC instead of TreeEntry RPC for serving blobs !182
v2.3.0
- Improve gitaly info refs error message !172
- Migrate GetBlob to Gitaly !174
- Drop support for Go <1.8 !176
- Add some tests for gzipped assets !177
- Use reader/writer from gitaly streamio !178
- Use http.Request contexts for Gitaly calls !179
- Allow to access remote archive !180
v2.2.0
- Add support for token authentication on Gitaly requests
- Update gitaly-proto library to 0.9.0
v2.1.1
- Bug fix and counters for static error pages
v2.1.0
- Remove chatty ErrorPage log message
- Filter query-string secrets out of logged URLs
- Suggest better default for prometheus port
- Add internal upload to external storage
- Prometheus metrics for senddata and git archive cache
v2.0.1
- Support GL_REPOSITORY from API and pass it to Gitaly on ReceivePack
v2.0.0
- Fix gRPC stream resource leak !158, !160
- Don't append error messages to Git HTTP responses !157
- Drop support for old Gitaly fields in Git API response !152
v1.4.3
- Support forwarding Git HTTP POST data to Gitaly !143
- Pass more Gitaly 'Repository' fields on from gitlab-rails !147
- Support insecure TCP connections to Gitaly !150
v1.4.2
- Return 500 from GET /info/refs if possible !145
v1.4.1
- Fix several Redis integration bugs !137, !140
- Fix race conditions in Redis tests !136
- Don't follow HTTP redirects on internal API !134
- Support /api/v4 for CI !133
- Don't spam logs with CI queueing messages (Marcin Biegała) !127
v1.4.0
- Integrate with Gitaly via gRPC !119
- Buffer git receive-pack responses in tempfiles !123
- Use stdlib to copy stdin/stdout of git subprocesses !118
- Terminal session timeouts !107
- Redis integration EXPERIMENTAL !112
- CI notifications via Redis EXPERIMENTAL !128
- More CI queue metrics !122
v1.3.0
- Fix stalled HTTP fetches with large payloads. !110
- Correctly parse content types in HTTP requests and responses !114
- Catch _all_ multipart NextPart() errors. !108
- Replace 'gitlab_workhorse_artifacts_upload_*' with labeled version of
'gitlab_workhorse_multipart_upload_*'. !106
- Allow GET /info/refs to be proxied to Gitaly. !105
- Set correct value of X-Forwarded-For header in PreAuthorize request. !104
- Allow nested namespaces in git URLs. !80
v1.2.1
- More Prometheus metrics
- Hide 502 internal errors from text-mode clients
- Buffer internal API responses up to a 32kB hard limit
v1.2.0
- Add terminal websocket proxy endpoint
- Rewrite all incoming multipart requests: write 'file' parts to tempfiles
v1.1.1
- Restrict effect of API rate limiting to /ci/api/v1/builds/register.json
v1.1.0
- Prometheus metrics listener via `-prometheusListenAddr` option
- Tell NGINX to not buffer Git HTTP responses etc. with X-Accel-Buffering
- Fix double content type bug on archive downloads
v1.0.0
- Workhorse is now v1.0.0, according to Semantic Versioning. No breaking
changes were made.
- Add support for logging to file, and logfile rotation with SIGHUP.
- Improve error messages.
v0.8.5
Simplify revspec for 'git format-patch'.
v0.8.4
Fix Go 1.5 compatibility broken in 0.8.3. Update CI configuration so
that tests run on Go 1.5, 1.6 and 1.7 (was only 1.6 before).
v0.8.3
Add rate-limiting feature for /api requests (disabled by default).
Suppress non-zero exit code error from git-upload-pack during shallow
Git clone (only affects logging and Sentry). Don't treat EEXIST as an
error during git archive finalization.
v0.8.2
Recognize more archive formats in git.SendArchive. Make 502 errors
(failed proxy requests to Unicorn) easier to recognize in Sentry.
v0.8.1
Add Sentry (raven-go) for remote error tracking.
v0.8.0
Add JWT signed communication between gitlab-workhorse and gitlab-rails.
v0.7.11
Fix 'nil dereference' crash on Go 1.7 when parsing authBackend
parameter. Fix 'hard-wire backend host' crashes.
v0.7.10
Fix typo in metrics header name.
v0.7.9
Hard-wire backend host when using TCP.
v0.7.8
Send artifact zip file entries via the 'senddata' mechanism.
v0.7.7
Add the protocol used (HTTP) to each gitCommand call in order to check
for restricted protocol access on GitLab's side.
v0.7.6
Add the capability to inject `git format-patch` output.
v0.7.5
Add the capability to inject `git diff` output as HTTP response bodies
(@zj).
v0.7.4
Pass a timestamp when forwarding requests to Rails. Hopefully this
will give us insight into Unicorn queueing behavior.
v0.7.3
Revert 'buffer Git HTTP responses'. Set default listen socket
permissions to world read/writeable.
v0.7.2 DO NOT USE
Integrate with GOPATH during development (remove relative imports
etc.). Buffer Git HTTP responses so that we may return an error if the
local command fails early.
Update: the 'buffer Git HTTP responses' change in 0.7.2 is BAD, it
breaks shallow Git clone. Don't use 0.7.2!
v0.7.1
Set Content-Length (retrieved from Git) on raw blob data responses.
v0.7.0
Start using a 'v' prefix on the version string.
0.6.5
Inject 'git archive' data the same way as Git blob data.
0.6.4
Increase default ProxyHeadersTimeout to 5 minutes. Fix injecting raw
blobs for /api/v3 requetsts.
0.6.3
Add support for sending Git raw git blobs via gitlab-workhorse.
0.6.2
We now fill in missing directory entries in archize zip metadata
files; also some other minor changes.
0.6.1
Add support for generating zip artifacts metadata and serving single
files from zip archives.
Gitlab-workhorse now consists of multiple executables. We also fixed a
routing bug introduced by the 0.6.0 refactor that broke relative URL
support.
0.6.0
Overhauled the source code organization; no user-facing changes
(intended). The application code is now split into Go 'packages'
(modules). As of 0.6.0 gitlab-workhorse requires Go 1.5 or newer.
0.5.4
Fix /api/v3/projects routing bug introduced in 0.5.2-0.5.3.
0.5.3
Fixes merge error in 0.5.2.
0.5.2 (broken!)
- Always check with upstream if files in /uploads/ may be served
- Fix project%2Fnamespace API project ID's
- Prevent archive zombies when using gzip or bzip2
- Don't show pretty error pages in development mode
0.5.1
Deprecate -relativeURLRoot option, use -authBackend instead.
0.5.0
Send ALL GitLab requests through gitlab-workhorse.
0.4.2
Return response to client when uploading Git LFS object.
0.4.1
Add support for Build Artifacts and Git LFS. The GitLab-Workhorse
offloads file uploading and downloading by providing support for
rewriting multipart form data and X-Sendfile.
Other changes:
- add header Gitlab-Workhorse to all requests to indicate from where
they originated
0.4.0
Rename the project to gitlab-workhorse. The old name had become too
specific.
Other changes:
- pass LD_LIBRARY_PATH to Git commands
- accomodate broken HTTP clients by spelling 'Www-Authenticate' as
'WWW-Authenticate'
0.3.1
Add support for Unix domain socket connections to the authBackend.
0.3.0
In 0.3.0 we also handle 'git archive' downloads for GitLab 8.1+.
This has lead to some breaking API changes, making 0.3.0 incompatible
with GitLab 8.0. We now expect the 'auth backend' (GitLab) to
provide us with much more information about each request, such as
the path on disk to the Git repository the client is requesting.
This makes the REPO_ROOT command line argument obsolete.
0.2.14
This is the last version that works with GitLab 8.0.