Julien Neuhart
d79e174c6f
fix(supervisor): bound the eager restart with a deadline
...
maybeRestartAfterTask ran its restart on a bare background context while
the drain loop in doRestartLocked selects only on ctx.Done(). A task that
never completed blocked the drain forever, pinning isRestarting. Since a
planned restart now reports healthy, that left the node claiming health
for good. LibreOffice escaped it because its concurrency of 1 drains no
slots, but Chromium defaults to 6.
Give that restart its own deadline. On expiry it aborts and the next task
retries it.
2026-09-03 16:10:16 +02:00
Julien Neuhart
88ddaed09b
fix(supervisor): report healthy during planned process restarts
...
The eager restart fired after --chromium-restart-after or
--libreoffice-restart-after conversions made Healthy() report false,
so a client probing /health between two conversions got a 503 from an
otherwise serving node. Tasks arriving during that window are requeued
by acquireSlot, not rejected.
Track whether the in-flight restart is planned and keep reporting
healthy for those. Unplanned restarts still report unhealthy so load
balancers get honest information.
Closes #1648
2026-09-03 16:04:20 +02:00
Julien Neuhart
8944db131c
fix(api): bound downloadFrom concurrency and entry count
2026-09-02 14:57:29 +02:00
Johannes Klein
676570074a
fix(Dockerfile): re-add libreoffice-math so DOCX math formulas render
...
The v8.30.0 image slimming replaced the libreoffice metapackage with an
explicit component list that omits libreoffice-math. Writer imports OMML
equations as Math objects, so without the component every formula is
silently dropped from converted PDFs.
Fixes #1644
2026-09-02 11:55:30 +02:00
dependabot[bot]
11179cb271
chore(deps): bump google.golang.org/grpc from 1.83.0 to 1.83.1 ( #1646 )
...
Bumps [google.golang.org/grpc](https://github.com/grpc/grpc-go ) from 1.83.0 to 1.83.1.
- [Release notes](https://github.com/grpc/grpc-go/releases )
- [Commits](https://github.com/grpc/grpc-go/compare/v1.83.0...v1.83.1 )
---
updated-dependencies:
- dependency-name: google.golang.org/grpc
dependency-version: 1.83.1
dependency-type: indirect
...
Signed-off-by: dependabot[bot] <support@github.com >
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-09-02 10:51:17 +02:00
Julien Neuhart
c2a85f92d0
chore(deps): update unoconverter to v0.5.0
2026-08-31 19:01:18 +02:00
Muhammad Haseeb
7dbff18e65
fix(chromium): fail fast with 503 when Chromium crashes ( #1641 )
2026-08-31 16:48:21 +02:00
Julien Neuhart
923e5f71eb
style(api): remove redundant parentheses in type switch
2026-08-31 13:38:05 +02:00
Julien Neuhart
334f859d95
chore(deps): update golangci-lint to v2.13.2
2026-08-31 13:36:02 +02:00
Julien Neuhart
0819514b7b
chore(deps): update Go to 1.27.0
2026-08-31 13:36:02 +02:00
Julien Neuhart
c636a52666
fix(otel): keep telemetry off unless an exporter is configured
2026-08-31 13:27:05 +02:00
dependabot[bot]
0b16b0ab34
chore(deps): bump github.com/stretchr/testify from 1.11.1 to 1.12.1 ( #1636 )
...
Bumps [github.com/stretchr/testify](https://github.com/stretchr/testify ) from 1.11.1 to 1.12.1.
- [Release notes](https://github.com/stretchr/testify/releases )
- [Commits](https://github.com/stretchr/testify/compare/v1.11.1...v1.12.1 )
---
updated-dependencies:
- dependency-name: github.com/stretchr/testify
dependency-version: 1.12.1
dependency-type: direct:production
update-type: version-update:semver-minor
...
Signed-off-by: dependabot[bot] <support@github.com >
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-08-21 11:57:55 +02:00
Julien Neuhart
c0f487e333
feat(api): add OIDC bearer token authentication
v8.36.0
2026-08-14 17:04:20 +02:00
Julien Neuhart
3de6932279
feat(pdfengines): apply multiple stamps and watermarks on every route
2026-08-14 16:36:40 +02:00
Julien Neuhart
e9a67132ec
feat(pdfengines): apply multiple stamps in one request ( #1601 )
2026-08-14 15:52:14 +02:00
Julien Neuhart
41b33fd6ad
test(integration): allow repeated form fields in requests
2026-08-14 15:52:14 +02:00
Julien Neuhart
2521485bf8
test(libreoffice): add .ppsm and .ppsx to the Bad Request extension list
2026-08-14 15:20:46 +02:00
Julien Neuhart
65e5699b71
feat(pdfengines): generate document-title bookmarks when merging ( #867 )
2026-08-14 12:36:13 +02:00
Julien Neuhart
b3c06fb8ae
test(chromium): cover thenable waitForExpression
2026-08-14 12:00:57 +02:00
Julien Neuhart
f90684e165
fix(chromium): add missing import for awaited waitForExpression
2026-08-14 11:58:19 +02:00
Niklas
90e614afa4
feat(chromium): await thenable waitForExpression ( #1617 )
2026-08-14 11:57:29 +02:00
Julien Neuhart
6a087cb1f7
test(libreoffice): cover OOXML PowerPoint show conversion ( #1626 )
2026-08-14 11:49:46 +02:00
Ilya Fedorov
38db892552
fix(libreoffice): accept the OOXML PowerPoint show extensions ( #1626 )
2026-08-14 11:43:12 +02:00
Julien Neuhart
ca9603bdf4
chore(test): format optimize-images testdata and integration README
2026-08-14 11:07:16 +02:00
Julien Neuhart
0c1e82c885
chore(deps): update Go and npm dependencies
2026-08-14 11:07:16 +02:00
Julien Neuhart
1303e0ebc9
refactor(pdfengines): remove qpdf embed fallback ( #1628 )
2026-08-14 11:07:16 +02:00
Julien Neuhart
cc1341c3cf
chore(deps): update pdfcpu to v0.15.0 ( #1628 )
2026-08-13 20:39:11 +02:00
Julien Neuhart
1ac1d9887e
feat(pdfengines): optimize PDF images to reduce file size ( #359 )
2026-08-13 19:39:09 +02:00
Julien Neuhart
7a730cfdc2
feat(chromium): add --chromium-clear-storage to clear local storage between conversions ( #919 )
2026-08-13 14:56:46 +02:00
Julien Neuhart
b213f2ffed
fix(chromium): fit the page to content for landscape single-page ( #1390 )
2026-08-13 14:14:48 +02:00
Julien Neuhart
8d1eeaa73a
feat(chromium): screenshot a single element via the selector form field ( #947 )
2026-08-13 13:56:17 +02:00
Julien Neuhart
2f6818d3df
fix(chromium): hint at --chromium-start-timeout when Chromium fails to start
2026-08-13 12:47:45 +02:00
Julien Neuhart
38f6e466d4
chore(libreoffice): drop the now-unneeded gosec nolint
2026-08-13 12:32:55 +02:00
Julien Neuhart
e39840d5cf
ci: bump golangci-lint to v2.12.2
2026-08-13 12:31:28 +02:00
Julien Neuhart
9b48d3f84e
chore(libreoffice): silence a gosec G703 false positive on temp-file cleanup
2026-08-13 12:28:46 +02:00
Julien Neuhart
05bde96334
refactor(qpdf): make embed-metadata logging context-aware
2026-08-13 08:21:35 +02:00
Julien Neuhart
8b2c15d5de
fix(api): classify client-cancelled requests as 499 instead of 500
2026-08-13 08:21:35 +02:00
Julien Neuhart
8d327a5196
fix(libreoffice): render scrolled workbooks in full for SinglePageSheets
2026-08-13 08:21:35 +02:00
Julien Neuhart
dc61c3631e
test(libreoffice): rename the linked-content tag to libreoffice-ssrf
2026-08-13 08:21:35 +02:00
Julien Neuhart
dc7c68152c
fix(chromium): filter WebSocket handshakes against the outbound policy
2026-08-13 08:21:35 +02:00
Julien Neuhart
357c3b4a59
fix(outbound): return 403 instead of 500 for an unresolvable outbound host
2026-08-13 08:21:35 +02:00
Julien Neuhart
91f2587fef
Merge commit from fork
...
Co-authored-by: Jacob Brackett <jbrackett@makenotion.com >
2026-08-13 08:08:28 +02:00
Julien Neuhart
9ec7be4687
docs: use real identifiers in the Godoc examples
v8.35.0
2026-08-07 19:56:54 +02:00
Julien Neuhart
de7f335791
fix(outbound): keep dial pinning for hops the environment proxy declines
2026-08-07 16:37:03 +02:00
Julien Neuhart
815f586315
fix(chromium): bound the total scope matching time per conversion
2026-08-07 16:29:55 +02:00
Julien Neuhart
b71df026f6
fix(api): sanitize the output filename header
2026-08-07 16:22:42 +02:00
Julien Neuhart
8d29638b74
fix(pdfcpu): pass --force when writing over the input file
2026-08-07 15:49:53 +02:00
Julien Neuhart
63c9a36599
chore(deps): update unoconverter to v0.4.0
2026-08-07 15:40:42 +02:00
Julien Neuhart
31fa392db2
fix(libreoffice)!: return 500 when a failure is not the client's fault
2026-08-07 15:33:44 +02:00
Julien Neuhart
bb0b874d16
fix(telemetry): align resource semconv with otel sdk 1.45 detectors
2026-08-07 14:04:37 +02:00