Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
69 commits
Select commit Hold shift + click to select a range
1b829c6
poc: ocis github actions steps
mklos-kw Apr 22, 2026
f920623
fix ci
mklos-kw May 18, 2026
e006dda
fix ci
mklos-kw May 18, 2026
84b0b35
mvp: ocis github actions steps
mklos-kw May 18, 2026
8d909f0
mvp: ocis github actions steps
mklos-kw May 18, 2026
8372939
mvp: ocis github actions steps
mklos-kw May 18, 2026
06c247e
mvp: ocis github actions steps, remove run-xyz.py
mklos-kw May 18, 2026
f8911b3
mvp: ocis github actions steps, remove run-xyz.py
mklos-kw May 18, 2026
60f40a2
mvp: ocis github actions steps, remove run-xyz.py
mklos-kw May 18, 2026
2edd8c3
mvp: ocis github actions steps, cleanup
mklos-kw May 19, 2026
55e9838
mvp: ocis github actions steps, cleanup
mklos-kw May 19, 2026
f9b20c4
mvp: ocis github actions steps, extract steps to repo
mklos-kw May 19, 2026
5102c3f
mvp: ocis github actions steps, resolve remaining rfc points
mklos-kw Jun 12, 2026
c455a04
fix: bump packages
mklos-kw Jun 15, 2026
4de6595
fix(ci): pin node to 24.15.0 for e2e — 24.16.0 breaks playwright zip …
mklos-kw Jun 16, 2026
87b4026
fix(ci): fix e2e web config path and litmus async uploads
mklos-kw Jun 16, 2026
762a3c7
fix: ci
mklos-kw Jun 17, 2026
3b47443
fix: ci
mklos-kw Jun 17, 2026
38dd02a
feat: ocis unit test
mklos-kw Jun 17, 2026
f44ed5e
feat: adapt to improved ocis-setup
mklos-kw Jun 17, 2026
aad1eea
feat: cleanup stop ocis
mklos-kw Jun 17, 2026
20571f3
feat: improved ocm developer experience
mklos-kw Jun 17, 2026
fd6738e
feat: remove unused test pipeline
mklos-kw Jun 17, 2026
9d59ed9
feat: declarative wopi step
mklos-kw Jun 17, 2026
f09785e
feat: improve ocm providers step
mklos-kw Jun 17, 2026
a76f6d6
feat: simplify the cli antivirus steps
mklos-kw Jun 17, 2026
e04d636
feat: fix ocm
mklos-kw Jun 17, 2026
aad8966
feat: fix antivirus
mklos-kw Jun 18, 2026
ea6c0d3
feat: fix ocm
mklos-kw Jun 18, 2026
0a7f3f5
fix: add OCIS_INSECURE and OCIS_LDAP_URI to federation extra-server-env
mklos-kw Jun 18, 2026
c2d4bfa
fix: add data server URLs to federation extra-server-env
mklos-kw Jun 18, 2026
72a61fb
feat: fix ocm
mklos-kw Jun 18, 2026
51321ce
fix: add THUMBNAILS_DATA_ENDPOINT to federation extra-server-env
mklos-kw Jun 18, 2026
e0841da
dx: remove redundant debug addr overrides from e2e extra-server-env
mklos-kw Jun 18, 2026
152f6af
dx: fix e2e job — correct playwright cache key, drop redundant env va…
mklos-kw Jun 18, 2026
4cbf753
dx: collapse generate-code step, drop dead CHROMEDRIVER env var
mklos-kw Jun 18, 2026
e6badcd
dx: add .npmrc with pnpm store-dir to replace imperative config mutat…
mklos-kw Jun 18, 2026
7b4a804
dx: reorder e2e steps — tools → fetch → build → configure → services …
mklos-kw Jun 18, 2026
2539f18
dx: remove .npmrc — pnpm store handled by setup-node cache: pnpm
mklos-kw Jun 18, 2026
b5c541f
dx: replace corepack pnpm setup with pnpm/action-setup, delegate stor…
mklos-kw Jun 18, 2026
674d076
fix: drop pnpm store cache from build-and-test — no pnpm-lock.yaml at…
mklos-kw Jun 18, 2026
bb2d0fa
fix: drop pnpm store cache from e2e setup-node — webTestRunner clone …
mklos-kw Jun 18, 2026
c6fb029
dx: pin pnpm/action-setup SHA, move generate-code before clone, add c…
mklos-kw Jun 19, 2026
4feacc3
dx: remove Generate code step — now handled inside ocis-setup
mklos-kw Jun 19, 2026
01ec416
revert: restore Generate oCIS frontend assets step in e2e — pnpm not …
mklos-kw Jun 19, 2026
8c4fa1b
dx: remove Trust oCIS cert step from e2e — now handled inside ocis-setup
mklos-kw Jun 19, 2026
b52e52f
dx: remove Generate frontend assets from e2e — now self-contained in …
mklos-kw Jun 19, 2026
4f3c22c
dx: use web-ui-config input — remove Patch web UI config step and WEB…
mklos-kw Jun 19, 2026
4fc3432
fix: e2e-keycloak - disable demo users for keycloak matrix entry (409…
mklos-kw Jun 19, 2026
418c9cd
fix: trust keycloak cert for playwright; combine CA bundle for NODE_E…
mklos-kw Jun 19, 2026
56c7693
feat: enable litmus job (declarative 3-step form)
mklos-kw Jun 19, 2026
8bc0693
fix: bump Go to 1.25.11 (GO-2026-5039 net/textproto)
mklos-kw Jun 19, 2026
ae8b80e
refactor: replace Python with jq in govulncheck-wrapper.sh
mklos-kw Jun 19, 2026
add91ac
ci: trigger run after ocis-test YAML fix
mklos-kw Jun 19, 2026
41240ea
feat: enable cs3api job (declarative ocis-setup with docker-accessible)
mklos-kw Jun 19, 2026
9d0cffa
feat: enable cs3api job
mklos-kw Jun 19, 2026
dffe90d
fix: use --network host for cs3api-validator so localhost resolves on…
mklos-kw Jun 19, 2026
3003e5b
feat: wopi-builtin:
mklos-kw Jun 19, 2026
bc0af1a
feat: wopi-cs3
mklos-kw Jun 20, 2026
31adee9
ci: retrigger
mklos-kw Jun 25, 2026
4bbc0b7
fix: bump golang.org/x/image to v0.43.0 (GO-2026-4961, GO-2026-5061, …
mklos-kw Jun 25, 2026
f017bf3
fix: wopi-cs3 uses app-provider (legacy arch) so cs3 wopi server issu…
mklos-kw Jul 1, 2026
ad2e99f
ci: retrigger wopi-cs3 — start FakeOffice before oCIS
mklos-kw Jul 1, 2026
4e283b6
simplify: drop separate ocis-keycloak-setup step — Keycloak stack now…
mklos-kw Jul 1, 2026
03fe931
ci: retrigger — actions fixes (jq, WOPI_PORT, fakeoffice guard)
mklos-kw Jul 1, 2026
9995fc5
ci: retrigger — env safety, docker failure detection, WOPI timeout, c…
mklos-kw Jul 1, 2026
2d5b1a8
ci: retrigger — readability pass
mklos-kw Jul 1, 2026
08bb56f
ci: retrigger
mklos-kw Jul 2, 2026
71bc489
ci: retrigger
mklos-kw Jul 2, 2026
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
630 changes: 393 additions & 237 deletions .github/workflows/acceptance-tests.yml

Large diffs are not rendered by default.

4 changes: 2 additions & 2 deletions .github/workflows/k6-load-test.yml
Original file line number Diff line number Diff line change
Expand Up @@ -42,11 +42,11 @@ jobs:

- name: Run k6 load tests
if: ${{ !cancelled() }}
run: sh tests/config/drone/run_k6_tests.sh
run: sh tests/config/ci/run_k6_tests.sh

- name: Retrieve OCIS logs
if: ${{ !cancelled() }}
run: sh tests/config/drone/run_k6_tests.sh --ocis-log
run: sh tests/config/ci/run_k6_tests.sh --ocis-log

- name: Show Grafana dashboard link
if: ${{ !cancelled() }}
Expand Down
20 changes: 10 additions & 10 deletions go.mod
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
module github.com/owncloud/ocis/v2

go 1.25.10
go 1.25.11

require (
dario.cat/mergo v1.0.2
Expand Down Expand Up @@ -94,14 +94,14 @@ require (
go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.42.0
go.opentelemetry.io/otel/sdk v1.43.0
go.opentelemetry.io/otel/trace v1.43.0
golang.org/x/crypto v0.50.0
golang.org/x/crypto v0.51.0
golang.org/x/exp v0.0.0-20260410095643-746e56fc9e2f
golang.org/x/image v0.39.0
golang.org/x/net v0.53.0
golang.org/x/image v0.43.0
golang.org/x/net v0.55.0
golang.org/x/oauth2 v0.36.0
golang.org/x/sync v0.20.0
golang.org/x/term v0.42.0
golang.org/x/text v0.36.0
golang.org/x/sync v0.21.0
golang.org/x/term v0.43.0
golang.org/x/text v0.38.0
google.golang.org/genproto/googleapis/api v0.0.0-20260319201613-d00831a3d3e7
google.golang.org/grpc v1.80.0
google.golang.org/protobuf v1.36.11
Expand Down Expand Up @@ -340,10 +340,10 @@ require (
go.uber.org/zap v1.27.0 // indirect
go.yaml.in/yaml/v2 v2.4.3 // indirect
go.yaml.in/yaml/v3 v3.0.4 // indirect
golang.org/x/mod v0.35.0 // indirect
golang.org/x/sys v0.43.0 // indirect
golang.org/x/mod v0.36.0 // indirect
golang.org/x/sys v0.45.0 // indirect
golang.org/x/time v0.15.0 // indirect
golang.org/x/tools v0.44.0 // indirect
golang.org/x/tools v0.45.0 // indirect
google.golang.org/genproto v0.0.0-20251202230838-ff82c1b0f217 // indirect
google.golang.org/genproto/googleapis/rpc v0.0.0-20260401024825-9d38bb4040a9 // indirect
gopkg.in/cenkalti/backoff.v1 v1.1.0 // indirect
Expand Down
36 changes: 18 additions & 18 deletions go.sum
Original file line number Diff line number Diff line change
Expand Up @@ -1022,8 +1022,8 @@ golang.org/x/crypto v0.14.0/go.mod h1:MVFd36DqK4CsrnJYDkBA3VC4m2GkXAM0PvzMCn4JQf
golang.org/x/crypto v0.19.0/go.mod h1:Iy9bg/ha4yyC70EfRS8jz+B6ybOBKMaSxLj6P6oBDfU=
golang.org/x/crypto v0.21.0/go.mod h1:0BP7YvVV9gBbVKyeTG0Gyn+gZm94bibOW5BjDEYAOMs=
golang.org/x/crypto v0.23.0/go.mod h1:CKFgDieR+mRhux2Lsu27y0fO304Db0wZe70UKqHu0v8=
golang.org/x/crypto v0.50.0 h1:zO47/JPrL6vsNkINmLoo/PH1gcxpls50DNogFvB5ZGI=
golang.org/x/crypto v0.50.0/go.mod h1:3muZ7vA7PBCE6xgPX7nkzzjiUq87kRItoJQM1Yo8S+Q=
golang.org/x/crypto v0.51.0 h1:IBPXwPfKxY7cWQZ38ZCIRPI50YLeevDLlLnyC5wRGTI=
golang.org/x/crypto v0.51.0/go.mod h1:8AdwkbraGNABw2kOX6YFPs3WM22XqI4EXEd8g+x7Oc8=
golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA=
golang.org/x/exp v0.0.0-20190306152737-a1d7652674e8/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA=
golang.org/x/exp v0.0.0-20190510132918-efd6b22b2522/go.mod h1:ZjyILWgesfNpC6sMxTJOJm9Kp84zZh5NQWvqDGG3Qr8=
Expand All @@ -1039,8 +1039,8 @@ golang.org/x/exp v0.0.0-20260410095643-746e56fc9e2f/go.mod h1:J1xhfL/vlindoeF/aI
golang.org/x/image v0.0.0-20190227222117-0694c2d4d067/go.mod h1:kZ7UVZpmo3dzQBMxlp+ypCbDeSB+sBbTgSJuh5dn5js=
golang.org/x/image v0.0.0-20190802002840-cff245a6509b/go.mod h1:FeLwcggjj3mMvU+oOTbSwawSJRM1uh48EjtB4UJZlP0=
golang.org/x/image v0.18.0/go.mod h1:4yyo5vMFQjVjUcVk4jEQcU9MGy/rulF5WvUILseCM2E=
golang.org/x/image v0.39.0 h1:skVYidAEVKgn8lZ602XO75asgXBgLj9G/FE3RbuPFww=
golang.org/x/image v0.39.0/go.mod h1:sIbmppfU+xFLPIG0FoVUTvyBMmgng1/XAMhQ2ft0hpA=
golang.org/x/image v0.43.0 h1:FLxcP4ec2350nTfOC8ysKtqYSIFbk/QGjw1ZHNP4tsY=
golang.org/x/image v0.43.0/go.mod h1:rrpelvGFt+kLPAjPM4HeWPgrl0FtafueU//e5N0qk/Q=
golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE=
golang.org/x/lint v0.0.0-20190227174305-5b3e6a55c961/go.mod h1:wehouNa3lNwaWXcvxsM5YxQ5yQlVC4a0KAMCusXpPoU=
golang.org/x/lint v0.0.0-20190301231843-5614ed5bae6f/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE=
Expand All @@ -1065,8 +1065,8 @@ golang.org/x/mod v0.8.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs=
golang.org/x/mod v0.12.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs=
golang.org/x/mod v0.15.0/go.mod h1:hTbmBsO62+eylJbnUtE2MGJUyE7QWk4xUqPFrRgJ+7c=
golang.org/x/mod v0.17.0/go.mod h1:hTbmBsO62+eylJbnUtE2MGJUyE7QWk4xUqPFrRgJ+7c=
golang.org/x/mod v0.35.0 h1:Ww1D637e6Pg+Zb2KrWfHQUnH2dQRLBQyAtpr/haaJeM=
golang.org/x/mod v0.35.0/go.mod h1:+GwiRhIInF8wPm+4AoT6L0FA1QWAad3OMdTRx4tFYlU=
golang.org/x/mod v0.36.0 h1:JJjpVx6myfUsUdAzZuOSTTmRE0PfZeNWzzvKrP7amb4=
golang.org/x/mod v0.36.0/go.mod h1:moc6ELqsWcOw5Ef3xVprK5ul/MvtVvkIXLziUOICjUQ=
golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
golang.org/x/net v0.0.0-20180906233101-161cd47e91fd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
Expand Down Expand Up @@ -1112,8 +1112,8 @@ golang.org/x/net v0.15.0/go.mod h1:idbUs1IY1+zTqbi8yxTbhexhEEk5ur9LInksu6HrEpk=
golang.org/x/net v0.21.0/go.mod h1:bIjVDfnllIU7BJ2DNgfnXvpSvtn8VRwhlsaeUTyUS44=
golang.org/x/net v0.23.0/go.mod h1:JKghWKKOSdJwpW2GEx0Ja7fmaKnMsbu+MWVZTokSYmg=
golang.org/x/net v0.25.0/go.mod h1:JkAGAh7GEvH74S6FOH42FLoXpXbE/aqXSrIQjXgsiwM=
golang.org/x/net v0.53.0 h1:d+qAbo5L0orcWAr0a9JweQpjXF19LMXJE8Ey7hwOdUA=
golang.org/x/net v0.53.0/go.mod h1:JvMuJH7rrdiCfbeHoo3fCQU24Lf5JJwT9W3sJFulfgs=
golang.org/x/net v0.55.0 h1:bcvxaJn3e1U6InsFWt1JUq1aSjnRxLzT2rtD2KfkDF8=
golang.org/x/net v0.55.0/go.mod h1:L5U2KuzuOe1lY7Z+aWVIKK6qEeJXnXV9yzGA+WCHJww=
golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U=
golang.org/x/oauth2 v0.0.0-20190226205417-e64efc72b421/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw=
golang.org/x/oauth2 v0.0.0-20190604053449-0f29369cfe45/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw=
Expand All @@ -1140,8 +1140,8 @@ golang.org/x/sync v0.1.0/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
golang.org/x/sync v0.3.0/go.mod h1:FU7BRWz2tNW+3quACPkgCx/L+uEAv1htQ0V83Z9Rj+Y=
golang.org/x/sync v0.6.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk=
golang.org/x/sync v0.7.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk=
golang.org/x/sync v0.20.0 h1:e0PTpb7pjO8GAtTs2dQ6jYa5BWYlMuX047Dco/pItO4=
golang.org/x/sync v0.20.0/go.mod h1:9xrNwdLfx4jkKbNva9FpL6vEN7evnE43NNNJQ2LF3+0=
golang.org/x/sync v0.21.0 h1:HLII4xRRTtCRkxYp4HNFF0Js/Og6q2i++KXbg0gHCwM=
golang.org/x/sync v0.21.0/go.mod h1:9xrNwdLfx4jkKbNva9FpL6vEN7evnE43NNNJQ2LF3+0=
golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
golang.org/x/sys v0.0.0-20180905080454-ebe1bf3edb33/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
golang.org/x/sys v0.0.0-20180909124046-d0be0721c37e/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
Expand Down Expand Up @@ -1207,8 +1207,8 @@ golang.org/x/sys v0.17.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=
golang.org/x/sys v0.18.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=
golang.org/x/sys v0.20.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=
golang.org/x/sys v0.21.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=
golang.org/x/sys v0.43.0 h1:Rlag2XtaFTxp19wS8MXlJwTvoh8ArU6ezoyFsMyCTNI=
golang.org/x/sys v0.43.0/go.mod h1:4GL1E5IUh+htKOUEOaiffhrAeqysfVGipDYzABqnCmw=
golang.org/x/sys v0.45.0 h1:dO4czNzziLiiXplLQgBCEpCvXQ3dnkn0SdaZSYdQ+FY=
golang.org/x/sys v0.45.0/go.mod h1:4GL1E5IUh+htKOUEOaiffhrAeqysfVGipDYzABqnCmw=
golang.org/x/telemetry v0.0.0-20240228155512-f48c80bd79b2/go.mod h1:TeRTkGYfJXctD9OcfyVLyj2J3IxLnKwHJR8f4D8a3YE=
golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo=
golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8=
Expand All @@ -1219,8 +1219,8 @@ golang.org/x/term v0.13.0/go.mod h1:LTmsnFJwVN6bCy1rVCoS+qHT1HhALEFxKncY3WNNh4U=
golang.org/x/term v0.17.0/go.mod h1:lLRBjIVuehSbZlaOtGMbcMncT+aqLLLmKrsjNrUguwk=
golang.org/x/term v0.18.0/go.mod h1:ILwASektA3OnRv7amZ1xhE/KTR+u50pbXfZ03+6Nx58=
golang.org/x/term v0.20.0/go.mod h1:8UkIAJTvZgivsXaD6/pH6U9ecQzZ45awqEOzuCvwpFY=
golang.org/x/term v0.42.0 h1:UiKe+zDFmJobeJ5ggPwOshJIVt6/Ft0rcfrXZDLWAWY=
golang.org/x/term v0.42.0/go.mod h1:Dq/D+snpsbazcBG5+F9Q1n2rXV8Ma+71xEjTRufARgY=
golang.org/x/term v0.43.0 h1:S4RLU2sB31O/NCl+zFN9Aru9A/Cq2aqKpTZJ6B+DwT4=
golang.org/x/term v0.43.0/go.mod h1:lrhlHNdQJHO+1qVYiHfFKVuVioJIheAc3fBSMFYEIsk=
golang.org/x/text v0.0.0-20170915032832-14c0d48ead0c/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
golang.org/x/text v0.3.1-0.20180807135948-17ff2d5776d2/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
Expand All @@ -1234,8 +1234,8 @@ golang.org/x/text v0.13.0/go.mod h1:TvPlkZtksWOMsz7fbANvkp4WM8x/WCo/om8BMLbz+aE=
golang.org/x/text v0.14.0/go.mod h1:18ZOQIKpY8NJVqYksKHtTdi31H5itFRjB5/qKTNYzSU=
golang.org/x/text v0.15.0/go.mod h1:18ZOQIKpY8NJVqYksKHtTdi31H5itFRjB5/qKTNYzSU=
golang.org/x/text v0.16.0/go.mod h1:GhwF1Be+LQoKShO3cGOHzqOgRrGaYc9AvblQOmPVHnI=
golang.org/x/text v0.36.0 h1:JfKh3XmcRPqZPKevfXVpI1wXPTqbkE5f7JA92a55Yxg=
golang.org/x/text v0.36.0/go.mod h1:NIdBknypM8iqVmPiuco0Dh6P5Jcdk8lJL0CUebqK164=
golang.org/x/text v0.38.0 h1:sXmwo9DwP3OK9EZ7PqAdaooSGozfl/3a6/xJcbzPRhE=
golang.org/x/text v0.38.0/go.mod h1:YXZt3QhHUKYT53r2lLKFIVi6Ao1jdzrTR/KQ09qyxF4=
golang.org/x/time v0.0.0-20181108054448-85acf8d2951c/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
golang.org/x/time v0.0.0-20190308202827-9d24e82272b4/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
golang.org/x/time v0.0.0-20191024005414-555d28b269f0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
Expand Down Expand Up @@ -1290,8 +1290,8 @@ golang.org/x/tools v0.1.12/go.mod h1:hNGJHUnrk76NpqgfD5Aqm5Crs+Hm0VOH/i9J2+nxYbc
golang.org/x/tools v0.6.0/go.mod h1:Xwgl3UAJ/d3gWutnCtw505GrjyAbvKui8lOU390QaIU=
golang.org/x/tools v0.13.0/go.mod h1:HvlwmtVNQAhOuCjW7xxvovg8wbNq7LwfXh/k7wXUl58=
golang.org/x/tools v0.21.1-0.20240508182429-e35e4ccd0d2d/go.mod h1:aiJjzUbINMkxbQROHiO6hDPo2LHcIPhhQsa9DLh0yGk=
golang.org/x/tools v0.44.0 h1:UP4ajHPIcuMjT1GqzDWRlalUEoY+uzoZKnhOjbIPD2c=
golang.org/x/tools v0.44.0/go.mod h1:KA0AfVErSdxRZIsOVipbv3rQhVXTnlU6UhKxHd1seDI=
golang.org/x/tools v0.45.0 h1:18qN3FAooORvApf5XjCXgsuayZOEtXf6JK18I3+ONa8=
golang.org/x/tools v0.45.0/go.mod h1:LuUGqqaXcXMEFEruIVJVm5mgDD8vww/z/SR1gQ4uE/0=
golang.org/x/tools/godoc v0.1.0-deprecated h1:o+aZ1BOj6Hsx/GBdJO/s815sqftjSnrZZwyYTHODvtk=
golang.org/x/tools/godoc v0.1.0-deprecated/go.mod h1:qM63CriJ961IHWmnWa9CjZnBndniPt4a3CK0PVB9bIg=
golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
Expand Down
173 changes: 74 additions & 99 deletions scripts/govulncheck-wrapper.sh
Original file line number Diff line number Diff line change
Expand Up @@ -21,103 +21,78 @@ echo "Running govulncheck..."
"$GOVULNCHECK" -format json ./... > "$TMPFILE" 2>"$STDERRFILE" || true
cat "$STDERRFILE" >&2

python3 - "$TMPFILE" <<'PYEOF'
import json
import sys

def parse_json_stream(path):
with open(path) as f:
content = f.read()
decoder = json.JSONDecoder()
idx = 0
objects = []
while idx < len(content):
while idx < len(content) and content[idx] in ' \t\n\r':
idx += 1
if idx >= len(content):
break
obj, end_idx = decoder.raw_decode(content, idx)
idx = end_idx
objects.append(obj)
return objects

objects = parse_json_stream(sys.argv[1])

# Collect OSV details
osvs = {}
for obj in objects:
if 'osv' in obj:
osv = obj['osv']
osvs[osv['id']] = osv

# Collect findings
findings = [obj['finding'] for obj in objects if 'finding' in obj]

# Group by vuln ID
from collections import defaultdict
by_vuln = defaultdict(list)
for f in findings:
by_vuln[f['osv']].append(f)

fail_vulns = []
warn_vulns = []

for vid, entries in sorted(by_vuln.items()):
# Check if any trace reaches symbol level (has 'function' in trace frames)
is_called = any(
any('function' in frame for frame in entry.get('trace', []))
for entry in entries
# govulncheck -format json outputs one JSON object per line (NDJSON).
# Classify each finding and display results.
jq -rn '
[inputs] |

# OSV summary lookup: { id: summary }
(map(select(has("osv")))
| map({ (.osv.id): (.osv.summary // .osv.id) })
| add // {}) as $osvs |

# Classify every vuln group
(map(select(has("finding"))) | map(.finding)
| group_by(.osv)
| map(
. as $e |
($e[0].osv) as $vid |
($e | any(.[].trace[]?; has("function"))) as $called |
($e[0].fixed_version // "") as $fixed |
($e[0].trace[0]?.module // "") as $mod |
{
id: $vid,
summary: ($osvs[$vid] // $vid),
module: $mod,
fixed_version: $fixed,
category: (
if ($called | not) then "IMPORTED"
elif ($fixed == "") then "NO_FIX"
elif ($mod == "stdlib") then "STDLIB"
else "FIXABLE"
end
)
}
)
) as $vulns |

($vulns | map(select(.category != "FIXABLE"))) as $warns |
($vulns | map(select(.category == "FIXABLE"))) as $fails |

# Warnings
if ($warns | length) > 0 then "\n⚠ Vulnerabilities acknowledged (not blocking):" else empty end,
($warns[] |
" \(.id): \(.summary)",
(if .category == "NO_FIX" then " module=\(.module) (no upstream fix available)"
elif .category == "STDLIB" then " module=\(.module) (needs Go toolchain upgrade to \(.fixed_version))"
else " module=\(.module) (code does not call vulnerable function)"
end)
),

# Failures or success
if ($fails | length) > 0 then
"\n✗ \($fails | length) fixable vulnerability(ies) found:",
($fails[] |
" \(.id): \(.summary)",
" module=\(.module), fix: bump to \(.fixed_version)"
)
fixed_version = entries[0].get('fixed_version', '')
trace = entries[0].get('trace', [])
module = trace[0].get('module', '') if trace else ''

# Determine category
if not is_called:
category = "IMPORTED"
elif not fixed_version:
category = "NO_FIX"
elif module == "stdlib":
category = "STDLIB"
else:
category = "FIXABLE"

osv = osvs.get(vid, {})
summary = osv.get('summary', vid)

info = {
'id': vid,
'category': category,
'module': module,
'fixed_version': fixed_version,
'summary': summary,
}

if category == "FIXABLE":
fail_vulns.append(info)
else:
warn_vulns.append(info)

# Print warnings
if warn_vulns:
print("\n⚠ Vulnerabilities acknowledged (not blocking):")
for v in warn_vulns:
reason = {
'NO_FIX': 'no upstream fix available',
'STDLIB': f'needs Go toolchain upgrade to {v["fixed_version"]}',
'IMPORTED': 'code does not call vulnerable function',
}.get(v['category'], v['category'])
print(f" {v['id']}: {v['summary']}")
print(f" module={v['module']} ({reason})")

# Print failures
if fail_vulns:
print(f"\n✗ {len(fail_vulns)} fixable vulnerability(ies) found:")
for v in fail_vulns:
print(f" {v['id']}: {v['summary']}")
print(f" module={v['module']}, fix: bump to {v['fixed_version']}")
sys.exit(1)
else:
print(f"\n✓ No fixable vulnerabilities found ({len(warn_vulns)} acknowledged warnings)")
sys.exit(0)
PYEOF
else
"\n✓ No fixable vulnerabilities found (\($warns | length) acknowledged warnings)"
end
' "$TMPFILE"

# Exit 1 if any fixable vulnerabilities
FAIL_COUNT=$(jq -n '
[inputs]
| map(select(has("finding"))) | map(.finding)
| group_by(.osv)
| map(
. as $e |
($e | any(.[].trace[]?; has("function"))) as $called |
($e[0].fixed_version // "") as $fixed |
($e[0].trace[0]?.module // "") as $mod |
select($called and ($fixed != "") and ($mod != "stdlib"))
)
| length
' "$TMPFILE")
[ "$FAIL_COUNT" -eq 0 ]
Loading
Loading