Compare commits
284 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| af045687ae | |||
| c90ee3c9b1 | |||
| 83e99e7d0a | |||
|
80daed081d
|
|||
| f6e4458efa | |||
| 11b9a46802 | |||
| d2324d27df | |||
| c496ed025e | |||
| 4773ada816 | |||
| 6447a299b3 | |||
| b8e9e0d632 | |||
| 3179bb7ae3 | |||
| 73f6fe31d9 | |||
| 87eab3a04e | |||
| e751d35e38 | |||
| 84e30c0771 | |||
| bdb3b80f4a | |||
| d08c9663fe | |||
| a17b8dd122 | |||
| ae8cf15b0a | |||
| 8fd2c1790b | |||
| fe4efa7b97 | |||
| 78599baa5b | |||
| 8ad47c2e54 | |||
| ecce66b579 | |||
| a26e66649a | |||
| b8b5951883 | |||
| f860d80a81 | |||
| d27331cef0 | |||
|
e343ff7538
|
|||
| 4fe45bf125 | |||
| 89e35c4ee7 | |||
| 0f077a53bb | |||
| 51fd889f6a | |||
| e13c9b1a28 | |||
| 576a530886 | |||
| aa9fea580f | |||
| ccb8a10f92 | |||
| d86beb8308 | |||
| 429cf6e66d | |||
| 2dd0ac9392 | |||
| 780244b165 | |||
|
540e90a577
|
|||
| 1b527bab74 | |||
| 5b64cd0165 | |||
| e2fb56f505 | |||
| 6bdbe36c7f | |||
| 2a1415bc35 | |||
| 8e53b1fbf4 | |||
|
2cf992c948
|
|||
| ca9e7c3aa0 | |||
| db762cb496 | |||
| c33885a0ab | |||
| 1135d77c35 | |||
| d1d14c1097 | |||
| 41075e06a3 | |||
| a7d4c01089 | |||
| 7c30a66144 | |||
| 98c17196c8 | |||
| 6635019035 | |||
| 1ae73e7203 | |||
| 91c02eb499 | |||
| 32fc6b2641 | |||
| ce86af4486 | |||
| 5258a68682 | |||
| 1d69be641c | |||
| 3c571a1dc3 | |||
| 4c16e293c0 | |||
| 18fb8da472 | |||
| c9fa0ecc2c | |||
| 35db2fc74e | |||
| e10ab9d75f | |||
| d6100bcb76 | |||
| 47d122aa8d | |||
| b089801216 | |||
| 3c071cb300 | |||
| 8fe56f6ce0 | |||
| c9aa447a9f | |||
| 575f97e8d1 | |||
| dde2a965ec | |||
| b6ae9826b2 | |||
| 787f388168 | |||
| c4b01dbe07 | |||
| 992a95ff8d | |||
| 0c31b8c2b9 | |||
| b75b61f724 | |||
| 0e76377865 | |||
|
52e58f8df8
|
|||
| 35ba7679c9 | |||
| 9d5dc75c2b | |||
| 83cb25a2bb | |||
|
e7a09e8322
|
|||
| 2eae446669 | |||
| 2e86f80727 | |||
| 1311a07dcb | |||
| cd080189a9 | |||
| 2d86c77c39 | |||
| eea7f86bbe | |||
| baccd12e63 | |||
| 7fe90ee9af | |||
| a3b9cae8eb | |||
| 769cbd3f14 | |||
| ecc4da28ff | |||
| 4a14f41324 | |||
| 3f8fdce292 | |||
| 335c419a44 | |||
| 82d2aa1812 | |||
| 24bbb39c3d | |||
| d98a20afff | |||
| 737b133b8b | |||
| 177f923fc2 | |||
| fd0c89dce9 | |||
| 1e58f8e0d5 | |||
| 53349071aa | |||
| efe9e0a5a0 | |||
| 406cb8e4d0 | |||
|
6e7ee0110b
|
|||
| 6eac3a7796 | |||
| 890a6fd50e | |||
| e1cf0d8cb3 | |||
| 63d70d7e35 | |||
| 35a454f8b1 | |||
| 6651553246 | |||
| 311ef3f530 | |||
| d8cce2fb05 | |||
| 309b9423a4 | |||
| 323145a076 | |||
| 28b4dc5572 | |||
| c1173c20ae | |||
| 2d12077016 | |||
| c38db83cd1 | |||
| 25bd438d05 | |||
| f4355d620f | |||
| 887ba69c5e | |||
| 8e6c7aade7 | |||
| 0f0f50111f | |||
| 81a895e5a6 | |||
|
0fab1d5098
|
|||
| 4fbfc0f42e | |||
| 0ba3706c12 | |||
| c44ac87b5e | |||
| deefcd7045 | |||
| 4933857351 | |||
| 18616e8346 | |||
| dd075afb8d | |||
| 003bd3cd50 | |||
| a68fb437dc | |||
| 8aa57e8f68 | |||
| 84e8764054 | |||
| c40bbad892 | |||
| c159c6d20e | |||
| ae0d796e93 | |||
| 1ec0f9a3a7 | |||
| 0dad651959 | |||
| 24fcc4e6a2 | |||
| 4c7406d97b | |||
| 51affc5a55 | |||
| 10871a9b32 | |||
| 411b51f895 | |||
| 6a478209ea | |||
| 043ca65698 | |||
| 8131042a1c | |||
| 2fb2c1947a | |||
| 1cf4faa17f | |||
| 8bb6cb7279 | |||
|
376ae41b4f
|
|||
| dc6e57e815 | |||
| f8c7de447a | |||
| 92050aa31f | |||
| e20829bb2b | |||
| 1918ec3da4 | |||
| 735c387c58 | |||
| 98e2f660a6 | |||
| 7a0159a33f | |||
|
b4447bb15e
|
|||
|
2948905005
|
|||
| 53141720ca | |||
|
e84df1db08
|
|||
| 9539e6bb1b | |||
| 291ef08ad7 | |||
| 98b84772df | |||
| 26278066b8 | |||
| 5bdacce71a | |||
|
0b4bbdeef0
|
|||
| 3c3c939447 | |||
|
93a12a2909
|
|||
| c36802570a | |||
| 5d64a3a45c | |||
| e55d3400e6 | |||
| 7da95e7566 | |||
| b8ea2690fc | |||
| 3689486fa8 | |||
| 1787815299 | |||
| 2886835d18 | |||
| 097e1274db | |||
| 640ede7de2 | |||
| 122c87dab4 | |||
| 4647d7ad1e | |||
| f2c73e8bf6 | |||
| ba7bbd082a | |||
| 2466d2a4ab | |||
| 86a61a1a64 | |||
| 75e85c0339 | |||
| d654ef1b81 | |||
|
55114c3d39
|
|||
| 0575c45d66 | |||
| d004745244 | |||
| 36ef6a85c2 | |||
| aa8363428f | |||
| 36a387040f | |||
| 5cf10efe15 | |||
| 73624e21d7 | |||
|
f53321368d
|
|||
|
59e0f17769
|
|||
| 8661c931a1 | |||
| f484bea8c4 | |||
| 8c4f579cef | |||
| 30ccbf9aab | |||
| 5973c1341d | |||
| 0285549431 | |||
|
3256819705
|
|||
| 578354ddeb | |||
| 12adc9bc48 | |||
| a44937e130 | |||
| 04a88bf310 | |||
| c1e5ee97ee | |||
| 66dd948181 | |||
| 6fc87e952b | |||
| dade16a10c | |||
| aa617ae11d | |||
|
a87b480345
|
|||
| 69e232cd7c | |||
| 5adfe0e711 | |||
| 7fa947a945 | |||
| a4552cb418 | |||
| c15371c236 | |||
|
aaa111dd20
|
|||
|
8e02bfb0a2
|
|||
| 1e34fe77eb | |||
| 30ca9091d2 | |||
|
4dd79e3d73
|
|||
| bdfbf6c22e | |||
| b6a281b5f2 | |||
| e8305441bb | |||
|
dd5c0f3dc0
|
|||
| f35be93cb6 | |||
| 3840c40c90 | |||
|
2ba10d763d
|
|||
| ba099eff51 | |||
| 2196f5a417 | |||
| 3e26aa0166 | |||
| fdf6402b7c | |||
| c6a5711dff | |||
| f82935e71a | |||
| b8053b6273 | |||
| 4086ddf73c | |||
| 8d5ff3863d | |||
| 19233af4a7 | |||
| b6ed3c7ad9 | |||
| 05eaa96d37 | |||
| 9b8f98c2d2 | |||
| d6a862ee94 | |||
| 574e6c8926 | |||
|
15eda6f0de
|
|||
| 46b624568e | |||
| 72bbf92265 | |||
| 313e43016b | |||
| 570a0114b3 | |||
|
a9c07bf4c2
|
|||
| f126c23b45 | |||
| 65dc35a5fc | |||
| b57080c9d0 | |||
| 19a826608c | |||
| 316d4a4c34 | |||
| 48873bf5ee | |||
| f9cce092b5 | |||
| ae8aa21388 | |||
| 7ba1d3ae08 | |||
| fd6e4a0cbd | |||
| 856b140538 | |||
| fdfbf823a6 | |||
| 697e6c3d75 | |||
| fdbb57e33a | |||
| 07057d7206 |
+6
-4
@@ -1,5 +1,7 @@
|
||||
include:
|
||||
- template: 'Workflows/MergeRequest-Pipelines.gitlab-ci.yml'
|
||||
- project: unboundsoftware/ci-templates
|
||||
file: Defaults.gitlab-ci.yml
|
||||
- project: unboundsoftware/ci-templates
|
||||
file: Release.gitlab-ci.yml
|
||||
- project: unboundsoftware/ci-templates
|
||||
@@ -19,7 +21,7 @@ variables:
|
||||
|
||||
check:
|
||||
stage: .pre
|
||||
image: amd64/golang:1.24.0@sha256:4a3f1013f696a1f86314902f2c9907fe712eabc91e911cc9fde4fdc57a16d35d
|
||||
image: amd64/golang:1.25.4@sha256:efe81fa41fdf81fb873ab7cd931b9bb29bd10aced6c252cbd91739c34e654f01
|
||||
script:
|
||||
- go install mvdan.cc/gofumpt@latest
|
||||
- go install golang.org/x/tools/cmd/goimports@latest
|
||||
@@ -38,7 +40,7 @@ build:
|
||||
|
||||
vulnerabilities:
|
||||
stage: build
|
||||
image: amd64/golang:1.24.0@sha256:4a3f1013f696a1f86314902f2c9907fe712eabc91e911cc9fde4fdc57a16d35d
|
||||
image: amd64/golang:1.25.4@sha256:efe81fa41fdf81fb873ab7cd931b9bb29bd10aced6c252cbd91739c34e654f01
|
||||
script:
|
||||
- go install golang.org/x/vuln/cmd/govulncheck@latest
|
||||
- govulncheck ./...
|
||||
@@ -59,7 +61,7 @@ deploy-prod:
|
||||
check_release:
|
||||
stage: test
|
||||
image:
|
||||
name: goreleaser/goreleaser:v2.7.0@sha256:41247b711fc423eddcd8395b998b9de5c7d169bfe99e6a474ba35e87896c1343
|
||||
name: goreleaser/goreleaser:v2.12.7@sha256:a2a47c0dda85f8d40eaaa5b9765bf76c69addb6060666f8a51441410d9b008e9
|
||||
entrypoint: [ '' ]
|
||||
variables:
|
||||
GOTOOLCHAIN: auto
|
||||
@@ -72,7 +74,7 @@ release:
|
||||
needs:
|
||||
- unbound_release_prepare_release
|
||||
image:
|
||||
name: goreleaser/goreleaser:v2.7.0@sha256:41247b711fc423eddcd8395b998b9de5c7d169bfe99e6a474ba35e87896c1343
|
||||
name: goreleaser/goreleaser:v2.12.7@sha256:a2a47c0dda85f8d40eaaa5b9765bf76c69addb6060666f8a51441410d9b008e9
|
||||
entrypoint: [ '' ]
|
||||
variables:
|
||||
# Disable shallow cloning so that goreleaser can diff between tags to
|
||||
|
||||
+20
-1
@@ -1,3 +1,22 @@
|
||||
version: "2"
|
||||
run:
|
||||
allow-parallel-runners: true
|
||||
timeout: 5m
|
||||
linters:
|
||||
exclusions:
|
||||
generated: lax
|
||||
presets:
|
||||
- comments
|
||||
- common-false-positives
|
||||
- legacy
|
||||
- std-error-handling
|
||||
paths:
|
||||
- third_party$
|
||||
- builtin$
|
||||
- examples$
|
||||
formatters:
|
||||
exclusions:
|
||||
generated: lax
|
||||
paths:
|
||||
- third_party$
|
||||
- builtin$
|
||||
- examples$
|
||||
|
||||
+8
-4
@@ -16,18 +16,22 @@ builds:
|
||||
- amd64
|
||||
- arm64
|
||||
|
||||
brews:
|
||||
homebrew_casks:
|
||||
- name: unbound-schemas
|
||||
repository:
|
||||
owner: unboundsoftware
|
||||
name: homebrew-taps
|
||||
directory: Formula
|
||||
install: |
|
||||
bin.install "schemactl"
|
||||
binaries: [schemactl]
|
||||
directory: Casks
|
||||
commit_author:
|
||||
name: "Joakim Olsson"
|
||||
email: joakim@unbound.se
|
||||
homepage: "https://schemas.unbound.se/"
|
||||
hooks:
|
||||
post:
|
||||
install: |
|
||||
# replace foo with the actual binary name
|
||||
system_command "/usr/bin/xattr", args: ["-dr", "com.apple.quarantine", "#{staged_path}/schemactl"]
|
||||
|
||||
archives:
|
||||
- id: unbound-schemas
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
# See https://pre-commit.com/hooks.html for more hooks
|
||||
repos:
|
||||
- repo: https://github.com/pre-commit/pre-commit-hooks
|
||||
rev: v5.0.0
|
||||
rev: v6.0.0
|
||||
hooks:
|
||||
- id: trailing-whitespace
|
||||
- id: end-of-file-fixer
|
||||
@@ -18,7 +18,7 @@ repos:
|
||||
- --project
|
||||
- unboundsoftware/schemas
|
||||
- repo: https://github.com/alessandrojcm/commitlint-pre-commit-hook
|
||||
rev: v9.21.0
|
||||
rev: v9.23.0
|
||||
hooks:
|
||||
- id: commitlint
|
||||
stages: [ commit-msg ]
|
||||
@@ -32,16 +32,16 @@ repos:
|
||||
- -local
|
||||
- gitlab.com/unboundsoftware/schemas
|
||||
- repo: https://github.com/lietu/go-pre-commit
|
||||
rev: v0.1.0
|
||||
rev: v1.0.0
|
||||
hooks:
|
||||
- id: go-test
|
||||
- id: gofumpt
|
||||
- repo: https://github.com/golangci/golangci-lint
|
||||
rev: v1.64.5
|
||||
rev: v2.6.2
|
||||
hooks:
|
||||
- id: golangci-lint-full
|
||||
- repo: https://github.com/gitleaks/gitleaks
|
||||
rev: v8.24.0
|
||||
rev: v8.29.0
|
||||
hooks:
|
||||
- id: gitleaks
|
||||
exclude: '^ctl/generated.go|graph/generated/.*$|^graph/model/models_gen.go|^tools/.*$$'
|
||||
|
||||
+602
@@ -2,6 +2,356 @@
|
||||
|
||||
All notable changes to this project will be documented in this file.
|
||||
|
||||
## [0.7.0] - 2025-11-19
|
||||
|
||||
### 🚀 Features
|
||||
|
||||
- Add Cosmo Router config generation and PubSub support
|
||||
|
||||
### 🐛 Bug Fixes
|
||||
|
||||
- *(deps)* Update module github.com/wundergraph/graphql-go-tools/v2 to v2.0.0-rc.231
|
||||
- *(deps)* Update module github.com/wundergraph/graphql-go-tools/v2 to v2.0.0-rc.232
|
||||
- *(deps)* Update module github.com/wundergraph/graphql-go-tools/v2 to v2.0.0-rc.233
|
||||
- *(deps)* Update module github.com/wundergraph/graphql-go-tools/v2 to v2.0.0-rc.234
|
||||
- *(deps)* Update module github.com/wundergraph/graphql-go-tools/v2 to v2.0.0-rc.235
|
||||
- *(deps)* Update module github.com/vektah/gqlparser/v2 to v2.5.31
|
||||
- *(deps)* Update module github.com/wundergraph/graphql-go-tools/v2 to v2.0.0-rc.236
|
||||
- *(deps)* Update module github.com/99designs/gqlgen to v0.17.82
|
||||
- *(deps)* Update module github.com/wundergraph/graphql-go-tools/v2 to v2.0.0-rc.237
|
||||
- *(deps)* Update module github.com/99designs/gqlgen to v0.17.83
|
||||
- *(deps)* Update module github.com/alecthomas/kong to v1.13.0
|
||||
- *(deps)* Update module github.com/wundergraph/graphql-go-tools/v2 to v2.0.0-rc.238
|
||||
|
||||
### ⚙️ Miscellaneous Tasks
|
||||
|
||||
- Add git-cliff configuration for changelog generation
|
||||
- *(deps)* Update golang:1.25.3 docker digest to 69d1009
|
||||
- *(deps)* Update goreleaser/goreleaser docker tag to v2.12.6
|
||||
- *(deps)* Update goreleaser/goreleaser docker tag to v2.12.7
|
||||
- *(deps)* Update pre-commit hook golangci/golangci-lint to v2.6.0
|
||||
- *(deps)* Update golang:1.25.3 docker digest to 9ac0edc
|
||||
- *(deps)* Update pre-commit hook golangci/golangci-lint to v2.6.1
|
||||
- *(deps)* Update pre-commit hook gitleaks/gitleaks to v8.29.0
|
||||
- *(deps)* Update golang docker tag to v1.25.4
|
||||
- *(deps)* Update pre-commit hook golangci/golangci-lint to v2.6.2
|
||||
- *(deps)* Update golang:1.25.4 docker digest to efe81fa
|
||||
|
||||
## [0.6.6] - 2025-10-14
|
||||
|
||||
### 🐛 Bug Fixes
|
||||
|
||||
- *(deps)* Update module github.com/wundergraph/graphql-go-tools/v2 to v2.0.0-rc.227
|
||||
- *(deps)* Update module github.com/wundergraph/graphql-go-tools/v2 to v2.0.0-rc.228
|
||||
- *(deps)* Update module github.com/wundergraph/graphql-go-tools/v2 to v2.0.0-rc.229
|
||||
- *(deps)* Update module github.com/99designs/gqlgen to v0.17.81
|
||||
- *(deps)* Update module github.com/pressly/goose/v3 to v3.26.0
|
||||
- *(deps)* Update module github.com/wundergraph/graphql-go-tools/v2 to v2.0.0-rc.230
|
||||
|
||||
### ⚙️ Miscellaneous Tasks
|
||||
|
||||
- *(deps)* Update pre-commit hook golangci/golangci-lint to v2.5.0
|
||||
- *(deps)* Update goreleaser/goreleaser docker tag to v2.12.3
|
||||
- *(deps)* Update goreleaser/goreleaser docker tag to v2.12.4
|
||||
- *(deps)* Update goreleaser/goreleaser docker tag to v2.12.5
|
||||
- *(deps)* Update golang:1.25.1 docker digest to 12640a4
|
||||
- *(deps)* Update pre-commit hook alessandrojcm/commitlint-pre-commit-hook to v9.23.0
|
||||
- *(deps)* Update golang docker tag to v1.25.2
|
||||
- *(deps)* Update golang docker tag to v1.25.3
|
||||
|
||||
## [0.6.5] - 2025-09-18
|
||||
|
||||
### 🐛 Bug Fixes
|
||||
|
||||
- *(deps)* Update module github.com/wundergraph/graphql-go-tools/v2 to v2.0.0-rc.226
|
||||
- *(deps)* Update module github.com/99designs/gqlgen to v0.17.79
|
||||
- *(deps)* Update module github.com/99designs/gqlgen to v0.17.80
|
||||
- *(deps)* Update module gitlab.com/unboundsoftware/eventsourced/eventsourced to v1.19.3
|
||||
|
||||
### ⚙️ Miscellaneous Tasks
|
||||
|
||||
- *(deps)* Update pre-commit hook lietu/go-pre-commit to v1
|
||||
- *(deps)* Update goreleaser/goreleaser docker tag to v2.12.1
|
||||
- *(deps)* Update goreleaser/goreleaser docker tag to v2.12.2
|
||||
|
||||
## [0.6.4] - 2025-09-11
|
||||
|
||||
### 🐛 Bug Fixes
|
||||
|
||||
- *(deps)* Update module gitlab.com/unboundsoftware/eventsourced/amqp to v1.9.0
|
||||
|
||||
## [0.6.3] - 2025-09-09
|
||||
|
||||
### 🐛 Bug Fixes
|
||||
|
||||
- *(deps)* Update module github.com/stretchr/testify to v1.11.0
|
||||
- *(deps)* Update module github.com/pressly/goose/v3 to v3.25.0
|
||||
- *(deps)* Update module github.com/stretchr/testify to v1.11.1
|
||||
- *(deps)* Update module github.com/wundergraph/graphql-go-tools/v2 to v2.0.0-rc.222
|
||||
- *(deps)* Update module github.com/wundergraph/graphql-go-tools/v2 to v2.0.0-rc.223
|
||||
- *(deps)* Update opentelemetry-go monorepo
|
||||
- *(deps)* Update module github.com/wundergraph/graphql-go-tools/v2 to v2.0.0-rc.224
|
||||
- *(deps)* Update module go.opentelemetry.io/contrib/bridges/otelslog to v0.13.0
|
||||
- *(deps)* Update module github.com/wundergraph/graphql-go-tools/v2 to v2.0.0-rc.225
|
||||
|
||||
### ⚙️ Miscellaneous Tasks
|
||||
|
||||
- *(deps)* Update golang:1.25.0 docker digest to f6b9e1a
|
||||
- *(deps)* Update goreleaser/goreleaser docker tag to v2.12.0
|
||||
- *(deps)* Update golang docker tag to v1.25.1
|
||||
- *(deps)* Update golang:1.25.1 docker digest to 53f7808
|
||||
|
||||
## [0.6.2] - 2025-08-22
|
||||
|
||||
### ⚙️ Miscellaneous Tasks
|
||||
|
||||
- Remove conflicts entry from homebrew-taps config
|
||||
|
||||
## [0.6.1] - 2025-08-22
|
||||
|
||||
### 🐛 Bug Fixes
|
||||
|
||||
- *(deps)* Update module github.com/wundergraph/graphql-go-tools/v2 to v2.0.0-rc.195
|
||||
- *(deps)* Update module github.com/wundergraph/graphql-go-tools/v2 to v2.0.0-rc.196
|
||||
- *(deps)* Update module github.com/wundergraph/graphql-go-tools/v2 to v2.0.0-rc.197
|
||||
- *(deps)* Update module github.com/wundergraph/graphql-go-tools/v2 to v2.0.0-rc.198
|
||||
- *(deps)* Update module github.com/wundergraph/graphql-go-tools/v2 to v2.0.0-rc.199
|
||||
- *(deps)* Update module github.com/wundergraph/graphql-go-tools/v2 to v2.0.0-rc.200
|
||||
- *(deps)* Update module github.com/wundergraph/graphql-go-tools/v2 to v2.0.0-rc.202
|
||||
- *(deps)* Update module github.com/wundergraph/graphql-go-tools/v2 to v2.0.0-rc.203
|
||||
- *(deps)* Update module github.com/wundergraph/graphql-go-tools/v2 to v2.0.0-rc.204
|
||||
- *(deps)* Update module github.com/wundergraph/graphql-go-tools/v2 to v2.0.0-rc.207
|
||||
- *(deps)* Update module github.com/golang-jwt/jwt/v5 to v5.2.3
|
||||
- *(deps)* Update module github.com/alecthomas/kong to v1.12.1
|
||||
- *(deps)* Update module github.com/wundergraph/graphql-go-tools/v2 to v2.0.0-rc.208
|
||||
- *(deps)* Update module github.com/wundergraph/graphql-go-tools/v2 to v2.0.0-rc.210
|
||||
- *(deps)* Update module github.com/99designs/gqlgen to v0.17.78
|
||||
- *(deps)* Update module github.com/wundergraph/graphql-go-tools/v2 to v2.0.0-rc.212
|
||||
- *(deps)* Update module github.com/wundergraph/graphql-go-tools/v2 to v2.0.0-rc.213
|
||||
- *(deps)* Update module github.com/wundergraph/graphql-go-tools/v2 to v2.0.0-rc.215
|
||||
- *(deps)* Update module github.com/golang-jwt/jwt/v5 to v5.3.0
|
||||
- *(deps)* Update module github.com/wundergraph/graphql-go-tools/v2 to v2.0.0-rc.216
|
||||
- *(deps)* Update module github.com/wundergraph/graphql-go-tools/v2 to v2.0.0-rc.217
|
||||
- *(deps)* Update module github.com/wundergraph/graphql-go-tools/v2 to v2.0.0-rc.218
|
||||
- *(deps)* Update module github.com/wundergraph/graphql-go-tools/v2 to v2.0.0-rc.219
|
||||
- *(deps)* Update module github.com/wundergraph/graphql-go-tools/v2 to v2.0.0-rc.220
|
||||
- *(deps)* Update module github.com/sparetimecoders/goamqp to v0.3.3
|
||||
- *(deps)* Update module github.com/wundergraph/graphql-go-tools/v2 to v2.0.0-rc.221
|
||||
|
||||
### ⚙️ Miscellaneous Tasks
|
||||
|
||||
- *(deps)* Update pre-commit hook golangci/golangci-lint to v2.2.1
|
||||
- *(deps)* Update golang:1.24.4 docker digest to 9f820b6
|
||||
- *(deps)* Update golang docker tag to v1.24.5
|
||||
- *(deps)* Update goreleaser/goreleaser docker tag to v2.11.0
|
||||
- *(deps)* Update pre-commit hook golangci/golangci-lint to v2.2.2
|
||||
- *(deps)* Update pre-commit hook gitleaks/gitleaks to v8.28.0
|
||||
- *(deps)* Update pre-commit hook golangci/golangci-lint to v2.3.0
|
||||
- *(deps)* Update golang:1.24.5 docker digest to 0a156a4
|
||||
- *(deps)* Update goreleaser/goreleaser docker tag to v2.11.1
|
||||
- *(deps)* Update goreleaser/goreleaser docker tag to v2.11.2
|
||||
- *(deps)* Update pre-commit hook golangci/golangci-lint to v2.3.1
|
||||
- *(deps)* Update golang docker tag to v1.24.6
|
||||
- *(deps)* Update pre-commit hook pre-commit/pre-commit-hooks to v6
|
||||
- *(deps)* Update golang:1.24.6 docker digest to 958bfd1
|
||||
- *(deps)* Update pre-commit hook golangci/golangci-lint to v2.4.0
|
||||
- *(deps)* Update golang:1.24.6 docker digest to cd8f653
|
||||
- *(deps)* Update golang docker tag to v1.25.0
|
||||
|
||||
## [0.6.0] - 2025-06-29
|
||||
|
||||
### 🚀 Features
|
||||
|
||||
- *(k8s)* Add OpenTelemetry exporter endpoint to deploy.yaml
|
||||
- Add build version injection via CI_COMMIT argument
|
||||
|
||||
### 🐛 Bug Fixes
|
||||
|
||||
- *(deps)* Update module github.com/wundergraph/graphql-go-tools/v2 to v2.0.0-rc.190
|
||||
- *(deps)* Update module github.com/vektah/gqlparser/v2 to v2.5.28
|
||||
- *(deps)* Update module github.com/99designs/gqlgen to v0.17.75
|
||||
- *(deps)* Update module github.com/wundergraph/graphql-go-tools/v2 to v2.0.0-rc.192
|
||||
- *(deps)* Update module github.com/alecthomas/kong to v1.12.0
|
||||
- *(deps)* Update opentelemetry-go monorepo
|
||||
- *(deps)* Update module go.opentelemetry.io/contrib/bridges/otelslog to v0.12.0
|
||||
- *(deps)* Update module github.com/vektah/gqlparser/v2 to v2.5.29
|
||||
- *(deps)* Update module github.com/wundergraph/graphql-go-tools/v2 to v2.0.0-rc.194
|
||||
- *(deps)* Update module github.com/vektah/gqlparser/v2 to v2.5.30
|
||||
- *(deps)* Update module github.com/99designs/gqlgen to v0.17.76
|
||||
|
||||
### ⚙️ Miscellaneous Tasks
|
||||
|
||||
- *(deps)* Update pre-commit hook golangci/golangci-lint to v2.2.0
|
||||
|
||||
## [0.5.3] - 2025-06-13
|
||||
|
||||
### 🐛 Bug Fixes
|
||||
|
||||
- *(deps)* Update module github.com/wundergraph/graphql-go-tools/v2 to v2.0.0-rc.187
|
||||
- *(deps)* Update module github.com/wundergraph/graphql-go-tools/v2 to v2.0.0-rc.188
|
||||
- *(deps)* Update module github.com/wundergraph/graphql-go-tools/v2 to v2.0.0-rc.189
|
||||
|
||||
### 🚜 Refactor
|
||||
|
||||
- Remove Sentry integration and replace with OpenTelemetry
|
||||
|
||||
### ⚙️ Miscellaneous Tasks
|
||||
|
||||
- *(deps)* Update golang:1.24.4 docker digest to 3494bbe
|
||||
|
||||
## [0.5.2] - 2025-06-09
|
||||
|
||||
### 🐛 Bug Fixes
|
||||
|
||||
- *(goreleaser)* Specify binary name in configuration
|
||||
|
||||
## [0.5.1] - 2025-06-09
|
||||
|
||||
### 🐛 Bug Fixes
|
||||
|
||||
- *(deps)* Update module github.com/alecthomas/kong to v1.11.0
|
||||
- *(deps)* Update module github.com/getsentry/sentry-go to v0.33.0
|
||||
- *(deps)* Update module github.com/khan/genqlient to v0.8.1
|
||||
- *(deps)* Update module github.com/wundergraph/graphql-go-tools/v2 to v2.0.0-rc.179
|
||||
- *(deps)* Update module github.com/wundergraph/graphql-go-tools/v2 to v2.0.0-rc.180
|
||||
- *(deps)* Update module github.com/wundergraph/graphql-go-tools/v2 to v2.0.0-rc.181
|
||||
- *(deps)* Update module github.com/wundergraph/graphql-go-tools/v2 to v2.0.0-rc.182
|
||||
- *(deps)* Update module github.com/wundergraph/graphql-go-tools/v2 to v2.0.0-rc.183
|
||||
- *(deps)* Update module github.com/99designs/gqlgen to v0.17.74
|
||||
- *(deps)* Update module github.com/wundergraph/graphql-go-tools/v2 to v2.0.0-rc.184
|
||||
- *(deps)* Update module github.com/wundergraph/graphql-go-tools/v2 to v2.0.0-rc.185
|
||||
- *(deps)* Update module github.com/wundergraph/graphql-go-tools/v2 to v2.0.0-rc.186
|
||||
|
||||
### ⚙️ Miscellaneous Tasks
|
||||
|
||||
- *(deps)* Update golang:1.24.3 docker digest to f255a7d
|
||||
- *(deps)* Update pre-commit hook gitleaks/gitleaks to v8.27.0
|
||||
- *(deps)* Update golang docker tag to v1.24.4
|
||||
- *(deps)* Update pre-commit hook gitleaks/gitleaks to v8.27.1
|
||||
- *(deps)* Update pre-commit hook gitleaks/gitleaks to v8.27.2
|
||||
- *(deps)* Update goreleaser/goreleaser docker tag to v2.10.2
|
||||
|
||||
## [0.5.0] - 2025-05-15
|
||||
|
||||
### 🚀 Features
|
||||
|
||||
- *(k8s)* Add PodDisruptionBudget for schemas service
|
||||
|
||||
### 🐛 Bug Fixes
|
||||
|
||||
- *(deps)* Update module github.com/vektah/gqlparser/v2 to v2.5.26
|
||||
- *(deps)* Update module github.com/wundergraph/graphql-go-tools/v2 to v2.0.0-rc.173
|
||||
- *(deps)* Update module github.com/wundergraph/graphql-go-tools/v2 to v2.0.0-rc.174
|
||||
- *(deps)* Update module github.com/wundergraph/graphql-go-tools/v2 to v2.0.0-rc.175
|
||||
- *(deps)* Update module github.com/wundergraph/graphql-go-tools/v2 to v2.0.0-rc.176
|
||||
- *(deps)* Update module github.com/99designs/gqlgen to v0.17.73
|
||||
- *(deps)* Update module github.com/wundergraph/graphql-go-tools/v2 to v2.0.0-rc.177
|
||||
- *(deps)* Update module github.com/wundergraph/graphql-go-tools/v2 to v2.0.0-rc.178
|
||||
- *(deps)* Update module github.com/pressly/goose/v3 to v3.24.3
|
||||
- *(deps)* Update module github.com/vektah/gqlparser/v2 to v2.5.27
|
||||
- *(k8s)* Update apiVersion for external secrets
|
||||
|
||||
### ⚙️ Miscellaneous Tasks
|
||||
|
||||
- *(deps)* Update pre-commit hook golangci/golangci-lint to v2.1.4
|
||||
- *(deps)* Update pre-commit hook golangci/golangci-lint to v2.1.5
|
||||
- *(deps)* Update golang:1.24.2 docker digest to bf7899c
|
||||
- *(deps)* Update pre-commit hook gitleaks/gitleaks to v8.25.0
|
||||
- *(deps)* Update goreleaser/goreleaser docker tag to v2.9.0
|
||||
- *(deps)* Update pre-commit hook gitleaks/gitleaks to v8.25.1
|
||||
- *(ci)* Update GitLab CI configuration for templates
|
||||
- *(deps)* Update pre-commit hook golangci/golangci-lint to v2.1.6
|
||||
- *(deps)* Update golang docker tag to v1.24.3
|
||||
- *(deps)* Update pre-commit hook gitleaks/gitleaks to v8.26.0
|
||||
|
||||
## [0.4.1] - 2025-04-24
|
||||
|
||||
### 🐛 Bug Fixes
|
||||
|
||||
- *(deps)* Update module github.com/vektah/gqlparser/v2 to v2.5.25
|
||||
- *(deps)* Update module github.com/wundergraph/graphql-go-tools/v2 to v2.0.0-rc.170
|
||||
- *(deps)* Update module github.com/99designs/gqlgen to v0.17.71
|
||||
- *(deps)* Update module github.com/99designs/gqlgen to v0.17.72
|
||||
- *(deps)* Update module github.com/wundergraph/graphql-go-tools/v2 to v2.0.0-rc.171
|
||||
- *(deps)* Update module github.com/wundergraph/graphql-go-tools/v2 to v2.0.0-rc.172
|
||||
|
||||
### ⚙️ Miscellaneous Tasks
|
||||
|
||||
- *(deps)* Update pre-commit hook golangci/golangci-lint to v2.1.1
|
||||
- *(deps)* Update pre-commit hook golangci/golangci-lint to v2.1.2
|
||||
|
||||
## [0.4.0] - 2025-04-12
|
||||
|
||||
### 🚀 Features
|
||||
|
||||
- *(service)* Implement graceful shutdown for HTTP server
|
||||
|
||||
### 🐛 Bug Fixes
|
||||
|
||||
- *(secrets)* Remove namespace from ExternalSecret definition
|
||||
- *(deps)* Update module github.com/sparetimecoders/goamqp to v0.3.2
|
||||
- *(deps)* Update module github.com/vektah/gqlparser/v2 to v2.5.24
|
||||
- *(deps)* Update module github.com/getsentry/sentry-go to v0.32.0
|
||||
- *(k8s)* Increase CPU request for better performance
|
||||
- *(deps)* Update module gitlab.com/unboundsoftware/eventsourced/amqp to v1.8.1
|
||||
|
||||
### 🚜 Refactor
|
||||
|
||||
- *(deploy)* Remove cpu and memory limits for schemas
|
||||
|
||||
### ⚙️ Miscellaneous Tasks
|
||||
|
||||
- *(deps)* Update pre-commit hook gitleaks/gitleaks to v8.24.3
|
||||
|
||||
## [0.3.0] - 2025-04-08
|
||||
|
||||
### 🚀 Features
|
||||
|
||||
- *(k8s)* Add RabbitMQ configurations and update secrets
|
||||
|
||||
### 🐛 Bug Fixes
|
||||
|
||||
- *(deps)* Update module github.com/wundergraph/graphql-go-tools/v2 to v2.0.0-rc.161
|
||||
- *(deps)* Update module github.com/wundergraph/graphql-go-tools/v2 to v2.0.0-rc.162
|
||||
- *(deps)* Update module github.com/wundergraph/graphql-go-tools/v2 to v2.0.0-rc.163
|
||||
- *(deps)* Update module github.com/auth0/go-jwt-middleware/v2 to v2.3.0
|
||||
- *(deps)* Update module gitlab.com/unboundsoftware/eventsourced/eventsourced to v1.18.0
|
||||
- *(deps)* Update module gitlab.com/unboundsoftware/eventsourced/eventsourced to v1.18.1
|
||||
- *(deps)* Update module github.com/alecthomas/kong to v1.9.0
|
||||
- *(deps)* Update module github.com/wundergraph/graphql-go-tools/v2 to v2.0.0-rc.164
|
||||
- *(deps)* Update module github.com/wundergraph/graphql-go-tools/v2 to v2.0.0-rc.165
|
||||
- *(deps)* Update module github.com/99designs/gqlgen to v0.17.68
|
||||
- *(deps)* Update module github.com/golang-jwt/jwt/v5 to v5.2.2
|
||||
- *(deps)* Update module github.com/wundergraph/graphql-go-tools/v2 to v2.0.0-rc.166
|
||||
- *(deps)* Update module gitlab.com/unboundsoftware/eventsourced/eventsourced to v1.19.0
|
||||
- *(deps)* Update module github.com/99designs/gqlgen to v0.17.69
|
||||
- *(deps)* Update module github.com/99designs/gqlgen to v0.17.70
|
||||
- *(deps)* Update module github.com/wundergraph/graphql-go-tools/v2 to v2.0.0-rc.167
|
||||
- *(deps)* Update module gitlab.com/unboundsoftware/eventsourced/eventsourced to v1.19.1
|
||||
- *(deps)* Update module github.com/pressly/goose/v3 to v3.24.2
|
||||
- *(deps)* Update module github.com/alecthomas/kong to v1.10.0
|
||||
- *(deps)* Update eventsourced
|
||||
- *(deps)* Update module github.com/wundergraph/graphql-go-tools/v2 to v2.0.0-rc.168
|
||||
- *(deps)* Update module github.com/wundergraph/graphql-go-tools/v2 to v2.0.0-rc.169
|
||||
|
||||
### ⚙️ Miscellaneous Tasks
|
||||
|
||||
- *(deps)* Update pre-commit hook golangci/golangci-lint to v1.64.6
|
||||
- *(deps)* Update golang docker tag to v1.24.1
|
||||
- *(deps)* Update pre-commit hook alessandrojcm/commitlint-pre-commit-hook to v9.22.0
|
||||
- *(deps)* Update pre-commit hook golangci/golangci-lint to v1.64.7
|
||||
- *(deps)* Update goreleaser/goreleaser docker tag to v2.8.0
|
||||
- *(deps)* Update goreleaser/goreleaser docker tag to v2.8.1
|
||||
- *(deps)* Update pre-commit hook golangci/golangci-lint to v1.64.8
|
||||
- *(deps)* Update golang:1.24.1 docker digest to 5ecf333
|
||||
- *(deps)* Update pre-commit hook gitleaks/gitleaks to v8.24.2
|
||||
- *(deps)* Update pre-commit hook golangci/golangci-lint to v2
|
||||
- *(deps)* Update pre-commit hook golangci/golangci-lint to v2.0.1
|
||||
- *(deps)* Update pre-commit hook golangci/golangci-lint to v2.0.2
|
||||
- *(deps)* Update goreleaser/goreleaser docker tag to v2.8.2
|
||||
- *(deps)* Update golang docker tag to v1.24.2
|
||||
- *(deps)* Update golang:1.24.2 docker digest to aebb7df
|
||||
|
||||
## [0.2.0] - 2025-02-28
|
||||
|
||||
### 🚀 Features
|
||||
@@ -26,7 +376,24 @@ All notable changes to this project will be documented in this file.
|
||||
|
||||
### ⚙️ Miscellaneous Tasks
|
||||
|
||||
- *(deps)* Update pre-commit hook gitleaks/gitleaks to v8.23.3
|
||||
- *(deps)* Update golang:1.23.5 docker digest to e213430
|
||||
- *(deps)* Update dependency go to v1.23.6
|
||||
- *(deps)* Update golang docker tag to v1.23.6
|
||||
- *(deps)* Update golang:1.23.6 docker digest to 958bd2e
|
||||
- *(deps)* Update golang:1.23.6 docker digest to 9271129
|
||||
- *(deps)* Update goreleaser/goreleaser docker tag to v2.7.0
|
||||
- *(deps)* Update pre-commit hook golangci/golangci-lint to v1.64.2
|
||||
- *(deps)* Update pre-commit hook golangci/golangci-lint to v1.64.3
|
||||
- *(deps)* Update pre-commit hook golangci/golangci-lint to v1.64.4
|
||||
- *(go)* Update go version to 1.23.6 and remove toolchain
|
||||
- *(deps)* Update golang docker tag to v1.24.0
|
||||
- *(deps)* Update pre-commit hook golangci/golangci-lint to v1.64.5
|
||||
- *(deps)* Update pre-commit hook alessandrojcm/commitlint-pre-commit-hook to v9.21.0
|
||||
- *(deps)* Update pre-commit hook gitleaks/gitleaks to v8.24.0
|
||||
- *(deps)* Update golang:1.24.0 docker digest
|
||||
- *(deps)* Update golang:1.24.0 docker digest to a14c5a6
|
||||
- *(deps)* Update golang:1.24.0 docker digest to 58cf31c
|
||||
- *(docker)* Update base image architecture to amd64
|
||||
|
||||
## [0.1.1] - 2025-01-24
|
||||
@@ -40,6 +407,27 @@ All notable changes to this project will be documented in this file.
|
||||
- *(deps)* Update module github.com/99designs/gqlgen to v0.17.63
|
||||
- *(k8s)* Standardize app label to app.kubernetes.io/name
|
||||
|
||||
### ⚙️ Miscellaneous Tasks
|
||||
|
||||
- *(deps)* Update pre-commit hook golangci/golangci-lint to v1.63.1
|
||||
- *(deps)* Update pre-commit hook golangci/golangci-lint to v1.63.2
|
||||
- *(deps)* Update goreleaser/goreleaser docker tag to v2.5.1
|
||||
- *(deps)* Update pre-commit hook golangci/golangci-lint to v1.63.3
|
||||
- *(deps)* Update pre-commit hook golangci/golangci-lint to v1.63.4
|
||||
- *(deps)* Update pre-commit hook gitleaks/gitleaks to v8.23.0
|
||||
- *(deps)* Update golang:1.23.4 docker digest to 3b1a7de
|
||||
- *(deps)* Update golang:1.23.4 docker digest to 08e1417
|
||||
- *(deps)* Update golang:1.23.4 docker digest to 585103a
|
||||
- *(deps)* Update pre-commit hook gitleaks/gitleaks to v8.23.1
|
||||
- *(deps)* Update golang:1.23.4 docker digest to 5305905
|
||||
- *(deps)* Update golang:1.23.4 docker digest to 9820aca
|
||||
- *(deps)* Update dependency go to v1.23.5
|
||||
- *(deps)* Update golang docker tag to v1.23.5
|
||||
- *(deps)* Update goreleaser/goreleaser docker tag to v2.6.0
|
||||
- *(deps)* Update golang:1.23.5 docker digest to 8c10f21
|
||||
- *(deps)* Update goreleaser/goreleaser docker tag to v2.6.1
|
||||
- *(deps)* Update pre-commit hook gitleaks/gitleaks to v8.23.2
|
||||
|
||||
## [0.1.0] - 2025-01-01
|
||||
|
||||
### 🚀 Features
|
||||
@@ -80,8 +468,47 @@ All notable changes to this project will be documented in this file.
|
||||
|
||||
### ⚙️ Miscellaneous Tasks
|
||||
|
||||
- *(deps)* Update pre-commit hook gitleaks/gitleaks to v8.21.2
|
||||
- *(deps)* Update goreleaser/goreleaser docker tag to v2.4.1
|
||||
- *(deps)* Pin dependencies
|
||||
- *(deps)* Pin dependencies
|
||||
- *(deps)* Update goreleaser/goreleaser docker tag to v2.4.2
|
||||
- *(deps)* Update goreleaser/goreleaser docker tag to v2.4.4
|
||||
- *(deps)* Update dependency go to v1.23.3
|
||||
- *(deps)* Update golang docker tag to v1.23.3
|
||||
- *(deps)* Update unbound/pre-commit docker digest to 596abf5
|
||||
- *(deps)* Update pre-commit hook golangci/golangci-lint to v1.62.0
|
||||
- *(deps)* Update golang:1.23.3 docker digest to 8956c08
|
||||
- *(deps)* Update unbound/pre-commit docker digest to e78425c
|
||||
- *(deps)* Update golang:1.23.3 docker digest to 3694e36
|
||||
- *(deps)* Update golang:1.23.3 docker digest to b2ca381
|
||||
- *(deps)* Update golang:1.23.3 docker digest to 2660218
|
||||
- *(deps)* Update golang:1.23.3 docker digest to c2d828f
|
||||
- *(deps)* Update goreleaser/goreleaser docker tag to v2.4.5
|
||||
- *(deps)* Update golang:1.23.3 docker digest to 73f06be
|
||||
- *(deps)* Update goreleaser/goreleaser docker tag to v2.4.6
|
||||
- *(deps)* Update goreleaser/goreleaser docker tag to v2.4.7
|
||||
- *(deps)* Update goreleaser/goreleaser docker tag to v2.4.8
|
||||
- *(deps)* Update pre-commit hook golangci/golangci-lint to v1.62.2
|
||||
- *(deps)* Update pre-commit hook alessandrojcm/commitlint-pre-commit-hook to v9.19.0
|
||||
- *(deps)* Update golang:1.23.3 docker digest to ee5f0ad
|
||||
- *(deps)* Update golang:1.23.3 docker digest to b4aabba
|
||||
- *(deps)* Update golang:1.23.3 docker digest to 2b01164
|
||||
- *(deps)* Update golang:1.23.3 docker digest to 017ec6b
|
||||
- *(deps)* Update dependency go to v1.23.4
|
||||
- *(deps)* Update golang docker tag to v1.23.4
|
||||
- *(deps)* Update golang:1.23.4 docker digest to 574185e
|
||||
- Remove unnecessary Docker variables from configuration
|
||||
- *(ci)* Remove unused docker service from buildtools
|
||||
- *(deps)* Update golang:1.23.4 docker digest to 7003184
|
||||
- *(deps)* Update goreleaser/goreleaser docker tag to v2.5.0
|
||||
- *(deps)* Update pre-commit hook alessandrojcm/commitlint-pre-commit-hook to v9.20.0
|
||||
- *(deps)* Update pre-commit hook gitleaks/gitleaks to v8.21.3
|
||||
- *(deps)* Update pre-commit hook gitleaks/gitleaks to v8.21.4
|
||||
- *(deps)* Update pre-commit hook gitleaks/gitleaks to v8.22.0
|
||||
- *(deps)* Update golang:1.23.4 docker digest to 7ea4c9d
|
||||
- *(deps)* Update pre-commit hook gitleaks/gitleaks to v8.22.1
|
||||
- *(deps)* Update pre-commit hook golangci/golangci-lint to v1.63.0
|
||||
|
||||
## [0.0.7] - 2024-10-22
|
||||
|
||||
@@ -126,9 +553,49 @@ All notable changes to this project will be documented in this file.
|
||||
|
||||
### ⚙️ Miscellaneous Tasks
|
||||
|
||||
- *(deps)* Update pre-commit hook pre-commit/pre-commit-hooks to v4.6.0
|
||||
- *(deps)* Update pre-commit hook alessandrojcm/commitlint-pre-commit-hook to v9.15.0
|
||||
- *(deps)* Update dependency go to v1.22.2
|
||||
- *(deps)* Update pre-commit hook alessandrojcm/commitlint-pre-commit-hook to v9.16.0
|
||||
- *(deps)* Update pre-commit hook golangci/golangci-lint to v1.58.0
|
||||
- *(deps)* Update dependency go to v1.22.3
|
||||
- *(deps)* Update golang docker tag to v1.22.3
|
||||
- *(deps)* Update pre-commit hook golangci/golangci-lint to v1.58.1
|
||||
- *(deps)* Update pre-commit hook golangci/golangci-lint to v1.58.2
|
||||
- *(deps)* Update pre-commit hook golangci/golangci-lint to v1.59.0
|
||||
- *(deps)* Update pre-commit hook gitleaks/gitleaks to v8.18.3
|
||||
- *(deps)* Update dependency go to v1.22.4
|
||||
- *(deps)* Update golang docker tag to v1.22.4
|
||||
- *(deps)* Update pre-commit hook golangci/golangci-lint to v1.59.1
|
||||
- *(deps)* Update pre-commit hook gitleaks/gitleaks to v8.18.4
|
||||
- *(deps)* Update dependency go to v1.22.5
|
||||
- *(deps)* Update golang docker tag to v1.22.5
|
||||
- *(deps)* Update dependency go to v1.22.6
|
||||
- *(deps)* Update golang docker tag to v1.22.6
|
||||
- *(deps)* Update dependency go to v1.23.0
|
||||
- *(deps)* Update pre-commit hook golangci/golangci-lint to v1.60.1
|
||||
- *(deps)* Update golang docker tag to v1.23.0
|
||||
- Update golangci-lint hook identifier in pre-commit config
|
||||
- *(deps)* Update pre-commit hook golangci/golangci-lint to v1.60.2
|
||||
- *(deps)* Update pre-commit hook golangci/golangci-lint to v1.60.3
|
||||
- *(deps)* Update pre-commit hook alessandrojcm/commitlint-pre-commit-hook to v9.17.0
|
||||
- *(deps)* Update dependency go to v1.23.1
|
||||
- *(deps)* Update golang docker tag to v1.23.1
|
||||
- *(deps)* Update pre-commit hook golangci/golangci-lint to v1.61.0
|
||||
- *(deps)* Update pre-commit hook alessandrojcm/commitlint-pre-commit-hook to v9.18.0
|
||||
- Update goreleaser image to v2.3.1
|
||||
- *(deps)* Update pre-commit hook gitleaks/gitleaks to v8.19.1
|
||||
- *(deps)* Update pre-commit hook gitleaks/gitleaks to v8.19.2
|
||||
- Add generate check
|
||||
- *(deps)* Update goreleaser/goreleaser docker tag to v2.3.2
|
||||
- *(deps)* Update pre-commit hook gitleaks/gitleaks to v8.19.3
|
||||
- *(deps)* Update dependency go to v1.23.2
|
||||
- *(deps)* Update golang docker tag to v1.23.2
|
||||
- *(deps)* Update pre-commit hook gitleaks/gitleaks to v8.20.0
|
||||
- *(deps)* Update pre-commit hook pre-commit/pre-commit-hooks to v5
|
||||
- *(deps)* Update pre-commit hook gitleaks/gitleaks to v8.20.1
|
||||
- *(deps)* Update pre-commit hook gitleaks/gitleaks to v8.21.0
|
||||
- *(deps)* Update pre-commit hook gitleaks/gitleaks to v8.21.1
|
||||
- Add release notes for goreleaser command in .gitlab-ci.yml
|
||||
|
||||
## [0.0.6] - 2024-04-04
|
||||
@@ -140,6 +607,7 @@ All notable changes to this project will be documented in this file.
|
||||
### ⚙️ Miscellaneous Tasks
|
||||
|
||||
- Add step for checking release
|
||||
- *(deps)* Update golang docker tag to v1.22.2
|
||||
|
||||
## [0.0.5] - 2024-04-03
|
||||
|
||||
@@ -164,15 +632,106 @@ All notable changes to this project will be documented in this file.
|
||||
|
||||
### ⚙️ Miscellaneous Tasks
|
||||
|
||||
- *(deps)* Bump github.com/stretchr/testify from 1.8.3 to 1.8.4
|
||||
- Update golangci-lint
|
||||
- *(deps)* Bump golang from 1.20.4 to 1.20.5
|
||||
- Update Go version for vulnerabilities
|
||||
- *(deps)* Bump github.com/99designs/gqlgen from 0.17.31 to 0.17.32
|
||||
- *(deps)* Bump github.com/wundergraph/graphql-go-tools
|
||||
- *(deps)* Bump github.com/vektah/gqlparser/v2
|
||||
- *(deps)* Bump github.com/99designs/gqlgen from 0.17.32 to 0.17.33
|
||||
- *(deps)* Bump github.com/getsentry/sentry-go from 0.21.0 to 0.22.0
|
||||
- *(deps)* Bump github.com/alecthomas/kong from 0.7.1 to 0.8.0
|
||||
- *(deps)* Bump github.com/99designs/gqlgen from 0.17.33 to 0.17.34
|
||||
- *(deps)* Bump github.com/vektah/gqlparser/v2 from 2.5.3 to 2.5.5
|
||||
- *(deps)* Bump github.com/vektah/gqlparser/v2 from 2.5.5 to 2.5.6
|
||||
- *(deps)* Bump github.com/pressly/goose/v3 from 3.11.2 to 3.13.0
|
||||
- *(deps)* Bump github.com/sparetimecoders/goamqp from 0.1.4 to 0.1.5
|
||||
- *(deps)* Bump github.com/pressly/goose/v3 from 3.13.0 to 3.13.1
|
||||
- *(deps)* Bump github.com/pressly/goose/v3 from 3.13.1 to 3.13.4
|
||||
- *(deps)* Bump gitlab.com/unboundsoftware/eventsourced/pg
|
||||
- *(deps)* Bump github.com/wundergraph/graphql-go-tools
|
||||
- *(deps)* Bump golang from 1.20.5 to 1.20.6
|
||||
- *(deps)* Bump github.com/vektah/gqlparser/v2 from 2.5.6 to 2.5.7
|
||||
- *(deps)* Bump github.com/99designs/gqlgen from 0.17.34 to 0.17.35
|
||||
- *(deps)* Bump github.com/vektah/gqlparser/v2 from 2.5.7 to 2.5.8
|
||||
- *(deps)* Bump github.com/wundergraph/graphql-go-tools
|
||||
- *(deps)* Bump github.com/pressly/goose/v3 from 3.13.4 to 3.14.0
|
||||
- *(deps)* Bump github.com/wundergraph/graphql-go-tools
|
||||
- *(deps)* Bump github.com/99designs/gqlgen from 0.17.35 to 0.17.36
|
||||
- *(deps)* Bump github.com/wundergraph/graphql-go-tools
|
||||
- *(deps)* Bump github.com/getsentry/sentry-go from 0.22.0 to 0.23.0
|
||||
- *(deps)* Bump golang from 1.20.6 to 1.20.7
|
||||
- Update to Go 1.20.7
|
||||
- *(deps)* Bump github.com/wundergraph/graphql-go-tools
|
||||
- *(deps)* Bump github.com/wundergraph/graphql-go-tools
|
||||
- *(deps)* Bump golang from 1.20.7 to 1.21.0
|
||||
- *(deps)* Bump github.com/pressly/goose/v3 from 3.14.0 to 3.15.0
|
||||
- *(deps)* Bump github.com/wundergraph/graphql-go-tools
|
||||
- Update to Golang 1.21.0 for vulnerabilities
|
||||
- Update pre-commit versions
|
||||
- *(deps)* Bump github.com/getsentry/sentry-go from 0.23.0 to 0.24.0
|
||||
- *(deps)* Bump github.com/rs/cors from 1.9.0 to 1.10.0
|
||||
- *(deps)* Bump golang from 1.21.0 to 1.21.1
|
||||
- Update to Go 1.21.1 for vulnerabilities
|
||||
- *(deps)* Bump github.com/vektah/gqlparser/v2 from 2.5.8 to 2.5.9
|
||||
- *(deps)* Bump github.com/99designs/gqlgen from 0.17.36 to 0.17.37
|
||||
- *(deps)* Bump github.com/getsentry/sentry-go from 0.24.0 to 0.24.1
|
||||
- *(deps)* Bump github.com/vektah/gqlparser/v2 from 2.5.9 to 2.5.10
|
||||
- *(deps)* Bump github.com/99designs/gqlgen from 0.17.37 to 0.17.38
|
||||
- *(deps)* Bump github.com/wundergraph/graphql-go-tools
|
||||
- *(deps)* Bump github.com/rs/cors from 1.10.0 to 1.10.1
|
||||
- *(deps)* Bump github.com/getsentry/sentry-go from 0.24.1 to 0.25.0
|
||||
- *(deps)* Bump github.com/sparetimecoders/goamqp from 0.1.5 to 0.2.0
|
||||
- *(deps)* Bump github.com/99designs/gqlgen from 0.17.38 to 0.17.39
|
||||
- *(deps)* Bump golang from 1.21.1 to 1.21.2
|
||||
- *(deps)* Bump github.com/pressly/goose/v3 from 3.15.0 to 3.15.1
|
||||
- *(deps)* Bump golang from 1.21.2 to 1.21.3
|
||||
- *(deps)* Bump github.com/alecthomas/kong from 0.8.0 to 0.8.1
|
||||
- *(deps)* Bump github.com/wundergraph/graphql-go-tools
|
||||
- *(deps)* Bump github.com/99designs/gqlgen from 0.17.39 to 0.17.40
|
||||
- *(deps)* Bump gitlab.com/unboundsoftware/eventsourced/eventsourced
|
||||
- *(deps)* Bump gitlab.com/unboundsoftware/eventsourced/pg
|
||||
- *(deps)* Bump golang from 1.21.3 to 1.21.4
|
||||
- *(deps)* Bump gitlab.com/unboundsoftware/eventsourced/pg
|
||||
- *(deps)* Bump github.com/pressly/goose/v3 from 3.15.1 to 3.16.0
|
||||
- *(deps)* Bump gitlab.com/unboundsoftware/eventsourced/pg
|
||||
- *(deps)* Bump gitlab.com/unboundsoftware/eventsourced/pg
|
||||
- *(deps)* Bump github.com/99designs/gqlgen from 0.17.40 to 0.17.41
|
||||
- *(deps)* Bump github.com/auth0/go-jwt-middleware/v2
|
||||
- *(deps)* Bump golang from 1.21.4 to 1.21.5
|
||||
- *(deps)* Bump gitlab.com/unboundsoftware/eventsourced/pg
|
||||
- *(deps)* Bump github.com/pressly/goose/v3 from 3.16.0 to 3.17.0
|
||||
- *(deps)* Bump gitlab.com/unboundsoftware/eventsourced/pg
|
||||
- *(deps)* Bump github.com/sparetimecoders/goamqp from 0.2.0 to 0.2.1
|
||||
- *(deps)* Bump github.com/99designs/gqlgen from 0.17.41 to 0.17.42
|
||||
- *(deps)* Bump golang from 1.21.5 to 1.21.6
|
||||
- *(deps)* Bump github.com/getsentry/sentry-go from 0.25.0 to 0.26.0
|
||||
- *(deps)* Bump github.com/sparetimecoders/goamqp from 0.2.1 to 0.3.0
|
||||
- *(deps)* Bump github.com/vektah/gqlparser/v2 from 2.5.10 to 2.5.11
|
||||
- *(deps)* Bump github.com/99designs/gqlgen from 0.17.42 to 0.17.43
|
||||
- *(deps)* Bump github.com/auth0/go-jwt-middleware/v2
|
||||
- *(deps)* Bump github.com/wundergraph/graphql-go-tools
|
||||
- *(deps)* Bump github.com/pressly/goose/v3 from 3.17.0 to 3.18.0
|
||||
- *(deps)* Bump gitlab.com/unboundsoftware/eventsourced/eventsourced
|
||||
- *(deps)* Bump golang from 1.21.6 to 1.22.0
|
||||
- *(deps)* Bump github.com/getsentry/sentry-go from 0.26.0 to 0.27.0
|
||||
- *(deps)* Bump github.com/99designs/gqlgen from 0.17.43 to 0.17.44
|
||||
- *(deps)* Update pre-commit hook devopshq/gitlab-ci-linter to v1.0.6
|
||||
- *(deps)* Update pre-commit hook alessandrojcm/commitlint-pre-commit-hook to v9.11.0
|
||||
- *(deps)* Update pre-commit hook golangci/golangci-lint to v1.56.2
|
||||
- *(deps)* Update pre-commit hook lietu/go-pre-commit to v0.1.0
|
||||
- *(deps)* Update pre-commit hook pre-commit/pre-commit-hooks to v4.5.0
|
||||
- *(deps)* Update pre-commit hook alessandrojcm/commitlint-pre-commit-hook to v9.12.0
|
||||
- *(deps)* Update pre-commit hook alessandrojcm/commitlint-pre-commit-hook to v9.13.0
|
||||
- Use OrbStack for local dev
|
||||
- *(deps)* Update golang docker tag to v1.22.1
|
||||
- *(deps)* Update pre-commit hook golangci/golangci-lint to v1.57.0
|
||||
- *(deps)* Update pre-commit hook golangci/golangci-lint to v1.57.1
|
||||
- Add gitleaks to pre-commit setup
|
||||
- Update resources
|
||||
- *(deps)* Update pre-commit hook golangci/golangci-lint to v1.57.2
|
||||
- *(deps)* Update pre-commit hook alessandrojcm/commitlint-pre-commit-hook to v9.14.0
|
||||
- Run release on medium instance
|
||||
- Back to small and upgrade goreleaser
|
||||
- Remove deprecated replacements
|
||||
@@ -185,8 +744,18 @@ All notable changes to this project will be documented in this file.
|
||||
|
||||
### ⚙️ Miscellaneous Tasks
|
||||
|
||||
- *(deps)* Bump golang from 1.20.3 to 1.20.4
|
||||
- *(deps)* Bump github.com/pressly/goose/v3 from 3.10.0 to 3.11.0
|
||||
- Update Go version for vulnerabilities
|
||||
- *(deps)* Bump github.com/99designs/gqlgen from 0.17.30 to 0.17.31
|
||||
- *(deps)* Bump github.com/Khan/genqlient from 0.5.0 to 0.6.0
|
||||
- *(deps)* Bump github.com/getsentry/sentry-go from 0.20.0 to 0.21.0
|
||||
- *(deps)* Bump github.com/pressly/goose/v3 from 3.11.0 to 3.11.2
|
||||
- *(deps)* Bump github.com/wundergraph/graphql-go-tools
|
||||
- *(deps)* Bump github.com/sparetimecoders/goamqp from 0.1.3 to 0.1.4
|
||||
- *(deps)* Bump github.com/wundergraph/graphql-go-tools
|
||||
- Update pre-commit and fix golangci-lint
|
||||
- *(deps)* Bump github.com/stretchr/testify from 1.8.2 to 1.8.3
|
||||
- Actually validate API key privileges and refs
|
||||
|
||||
## [0.0.3] - 2023-04-27
|
||||
@@ -205,19 +774,52 @@ All notable changes to this project will be documented in this file.
|
||||
|
||||
- Update schema if URLs have changed
|
||||
- Add pre-commit and remove those checks from Dockerfile
|
||||
- *(deps)* Bump github.com/alecthomas/kong from 0.6.1 to 0.7.1
|
||||
- *(deps)* Bump github.com/stretchr/testify from 1.8.0 to 1.8.1
|
||||
- *(deps)* Bump github.com/99designs/gqlgen from 0.17.20 to 0.17.22
|
||||
- *(deps)* Bump github.com/getsentry/sentry-go from 0.14.0 to 0.16.0
|
||||
- *(deps)* Bump gitlab.com/unboundsoftware/eventsourced/eventsourced
|
||||
- *(deps)* Bump gitlab.com/unboundsoftware/eventsourced/amqp
|
||||
- *(deps)* Bump gitlab.com/unboundsoftware/eventsourced/pg
|
||||
- Add context and error handling
|
||||
- *(deps)* Bump github.com/rs/cors from 1.8.2 to 1.8.3
|
||||
- Move to default ingress group
|
||||
- Decrease trace sample rate
|
||||
- Improve docker caching
|
||||
- *(deps)* Bump golang from 1.19.4 to 1.19.5
|
||||
- *(deps)* Bump github.com/getsentry/sentry-go from 0.16.0 to 0.17.0
|
||||
- Add local module to pre-commit config
|
||||
- Only ignore generated files with do not edit
|
||||
- Default ingress group
|
||||
- *(deps)* Bump gitlab.com/unboundsoftware/eventsourced/eventsourced
|
||||
- *(deps)* Bump gitlab.com/unboundsoftware/eventsourced/eventsourced
|
||||
- *(deps)* Bump github.com/99designs/gqlgen from 0.17.22 to 0.17.24
|
||||
- *(deps)* Bump gitlab.com/unboundsoftware/eventsourced/eventsourced
|
||||
- *(deps)* Bump gitlab.com/unboundsoftware/eventsourced/pg
|
||||
- *(deps)* Bump gitlab.com/unboundsoftware/eventsourced/pg
|
||||
- *(deps)* Bump gitlab.com/unboundsoftware/eventsourced/eventsourced
|
||||
- *(deps)* Bump golang from 1.19.5 to 1.20.0
|
||||
- Use Docker DinD version from variable
|
||||
- *(deps)* Bump github.com/getsentry/sentry-go from 0.17.0 to 0.18.0
|
||||
- Switch to manual rebases for Dependabot
|
||||
- *(deps)* Bump golang from 1.20.0 to 1.20.1
|
||||
- Update to golang 1.20.1
|
||||
- *(deps)* Bump github.com/stretchr/testify from 1.8.1 to 1.8.2
|
||||
- *(deps)* Bump github.com/99designs/gqlgen from 0.17.24 to 0.17.25
|
||||
- *(deps)* Bump github.com/getsentry/sentry-go from 0.18.0 to 0.19.0
|
||||
- *(deps)* Bump golang from 1.20.1 to 1.20.2
|
||||
- *(deps)* Bump github.com/99designs/gqlgen from 0.17.25 to 0.17.26
|
||||
- Update Go verion for vulnerabilities scan
|
||||
- *(deps)* Bump github.com/99designs/gqlgen from 0.17.26 to 0.17.27
|
||||
- Reduce sample rate
|
||||
- *(deps)* Bump github.com/getsentry/sentry-go from 0.19.0 to 0.20.0
|
||||
- *(deps)* Bump github.com/99designs/gqlgen from 0.17.27 to 0.17.28
|
||||
- *(deps)* Bump golang from 1.20.2 to 1.20.3
|
||||
- Update to Go 1.20.3
|
||||
- *(deps)* Bump github.com/99designs/gqlgen from 0.17.28 to 0.17.29
|
||||
- *(deps)* Bump github.com/rs/cors from 1.8.3 to 1.9.0
|
||||
- *(deps)* Bump gitlab.com/unboundsoftware/eventsourced/pg
|
||||
- *(deps)* Bump github.com/99designs/gqlgen from 0.17.29 to 0.17.30
|
||||
- Fix Gitlab CI lint
|
||||
|
||||
## [0.0.2] - 2022-10-14
|
||||
|
||||
+3
-2
@@ -1,9 +1,10 @@
|
||||
FROM amd64/golang:1.24.0@sha256:4a3f1013f696a1f86314902f2c9907fe712eabc91e911cc9fde4fdc57a16d35d as modules
|
||||
FROM amd64/golang:1.25.4@sha256:efe81fa41fdf81fb873ab7cd931b9bb29bd10aced6c252cbd91739c34e654f01 as modules
|
||||
WORKDIR /build
|
||||
ADD go.* /build
|
||||
RUN go mod download
|
||||
|
||||
FROM modules as build
|
||||
ARG CI_COMMIT
|
||||
WORKDIR /build
|
||||
ENV CGO_ENABLED=0
|
||||
ADD . /build
|
||||
@@ -17,7 +18,7 @@ RUN GOOS=linux GOARCH=amd64 go build \
|
||||
-a -installsuffix cgo \
|
||||
-mod=readonly \
|
||||
-o /release/service \
|
||||
-ldflags '-w -s' \
|
||||
-ldflags "-w -s -X main.buildVersion=${CI_COMMIT}" \
|
||||
./cmd/service/service.go
|
||||
|
||||
FROM scratch as export
|
||||
|
||||
Vendored
+4
-4
@@ -2,9 +2,9 @@ package cache
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"log/slog"
|
||||
"time"
|
||||
|
||||
"github.com/apex/log"
|
||||
"github.com/sparetimecoders/goamqp"
|
||||
|
||||
"gitlab.com/unboundsoftware/schemas/domain"
|
||||
@@ -18,7 +18,7 @@ type Cache struct {
|
||||
services map[string]map[string]map[string]struct{}
|
||||
subGraphs map[string]string
|
||||
lastUpdate map[string]string
|
||||
logger log.Interface
|
||||
logger *slog.Logger
|
||||
}
|
||||
|
||||
func (c *Cache) OrganizationByAPIKey(apiKey string) *domain.Organization {
|
||||
@@ -98,7 +98,7 @@ func (c *Cache) Update(msg any, _ goamqp.Headers) (any, error) {
|
||||
case *domain.SubGraph:
|
||||
c.updateSubGraph(m.OrganizationId, m.Ref, m.ID.String(), m.Service, m.ChangedAt)
|
||||
default:
|
||||
c.logger.Warnf("unexpected message received: %+v", msg)
|
||||
c.logger.With("msg", msg).Warn("unexpected message received")
|
||||
}
|
||||
return nil, nil
|
||||
}
|
||||
@@ -124,7 +124,7 @@ func (c *Cache) addUser(sub string, organization domain.Organization) {
|
||||
}
|
||||
}
|
||||
|
||||
func New(logger log.Interface) *Cache {
|
||||
func New(logger *slog.Logger) *Cache {
|
||||
return &Cache{
|
||||
organizations: make(map[string]domain.Organization),
|
||||
users: make(map[string][]string),
|
||||
|
||||
+80
@@ -0,0 +1,80 @@
|
||||
# git-cliff ~ default configuration file
|
||||
# https://git-cliff.org/docs/configuration
|
||||
#
|
||||
# Lines starting with "#" are comments.
|
||||
# Configuration options are organized into tables and keys.
|
||||
# See documentation for more information on available options.
|
||||
|
||||
[changelog]
|
||||
# template for the changelog header
|
||||
header = """
|
||||
# Changelog\n
|
||||
All notable changes to this project will be documented in this file.\n
|
||||
"""
|
||||
# template for the changelog body
|
||||
# https://keats.github.io/tera/docs/#introduction
|
||||
body = """
|
||||
{% if version %}\
|
||||
## [{{ version | trim_start_matches(pat="v") }}] - {{ timestamp | date(format="%Y-%m-%d") }}
|
||||
{% else %}\
|
||||
## [unreleased]
|
||||
{% endif %}\
|
||||
{% for group, commits in commits | group_by(attribute="group") %}
|
||||
### {{ group | striptags | trim | upper_first }}
|
||||
{% for commit in commits %}
|
||||
- {% if commit.scope %}*({{ commit.scope }})* {% endif %}\
|
||||
{% if commit.breaking %}[**breaking**] {% endif %}\
|
||||
{{ commit.message | upper_first }}\
|
||||
{% endfor %}
|
||||
{% endfor %}\n
|
||||
"""
|
||||
# template for the changelog footer
|
||||
footer = """
|
||||
<!-- generated by git-cliff -->
|
||||
"""
|
||||
# remove the leading and trailing s
|
||||
trim = true
|
||||
# postprocessors
|
||||
postprocessors = [
|
||||
# { pattern = '<REPO>', replace = "https://github.com/orhun/git-cliff" }, # replace repository URL
|
||||
]
|
||||
# render body even when there are no releases to process
|
||||
# render_always = true
|
||||
# output file path
|
||||
# output = "test.md"
|
||||
|
||||
[git]
|
||||
# parse the commits based on https://www.conventionalcommits.org
|
||||
conventional_commits = true
|
||||
# filter out the commits that are not conventional
|
||||
filter_unconventional = true
|
||||
# process each line of a commit as an individual commit
|
||||
split_commits = false
|
||||
# regex for preprocessing the commit messages
|
||||
commit_preprocessors = [
|
||||
# Replace issue numbers
|
||||
#{ pattern = '\((\w+\s)?#([0-9]+)\)', replace = "([#${2}](<REPO>/issues/${2}))"},
|
||||
# Check spelling of the commit with https://github.com/crate-ci/typos
|
||||
# If the spelling is incorrect, it will be automatically fixed.
|
||||
#{ pattern = '.*', replace_command = 'typos --write-changes -' },
|
||||
]
|
||||
# regex for parsing and grouping commits
|
||||
commit_parsers = [
|
||||
{ message = "^feat", group = "<!-- 0 -->🚀 Features" },
|
||||
{ message = "^fix", group = "<!-- 1 -->🐛 Bug Fixes" },
|
||||
{ message = "^doc", group = "<!-- 3 -->📚 Documentation" },
|
||||
{ message = "^perf", group = "<!-- 4 -->⚡ Performance" },
|
||||
{ message = "^refactor", group = "<!-- 2 -->🚜 Refactor" },
|
||||
{ message = "^style", group = "<!-- 5 -->🎨 Styling" },
|
||||
{ message = "^test", group = "<!-- 6 -->🧪 Testing" },
|
||||
{ message = "^chore\\(release\\): prepare for", skip = true },
|
||||
{ message = "^chore|^ci", group = "<!-- 7 -->⚙️ Miscellaneous Tasks" },
|
||||
{ body = ".*security", group = "<!-- 8 -->🛡️ Security" },
|
||||
{ message = "^revert", group = "<!-- 9 -->◀️ Revert" },
|
||||
]
|
||||
# filter out the commits that are not matched by commit parsers
|
||||
filter_commits = false
|
||||
# sort the tags topologically
|
||||
topo_order = false
|
||||
# sort the commits inside sections by oldest/newest order
|
||||
sort_commits = "oldest"
|
||||
+30
-62
@@ -2,7 +2,9 @@ package main
|
||||
|
||||
import (
|
||||
"context"
|
||||
"errors"
|
||||
"fmt"
|
||||
"log/slog"
|
||||
"net/http"
|
||||
"os"
|
||||
"os/signal"
|
||||
@@ -17,10 +19,6 @@ import (
|
||||
"github.com/99designs/gqlgen/graphql/handler/transport"
|
||||
"github.com/99designs/gqlgen/graphql/playground"
|
||||
"github.com/alecthomas/kong"
|
||||
"github.com/apex/log"
|
||||
"github.com/apex/log/handlers/json"
|
||||
"github.com/getsentry/sentry-go"
|
||||
sentryhttp "github.com/getsentry/sentry-go/http"
|
||||
"github.com/rs/cors"
|
||||
"github.com/sparetimecoders/goamqp"
|
||||
"github.com/vektah/gqlparser/v2/ast"
|
||||
@@ -32,7 +30,9 @@ import (
|
||||
"gitlab.com/unboundsoftware/schemas/domain"
|
||||
"gitlab.com/unboundsoftware/schemas/graph"
|
||||
"gitlab.com/unboundsoftware/schemas/graph/generated"
|
||||
"gitlab.com/unboundsoftware/schemas/logging"
|
||||
"gitlab.com/unboundsoftware/schemas/middleware"
|
||||
"gitlab.com/unboundsoftware/schemas/monitoring"
|
||||
"gitlab.com/unboundsoftware/schemas/store"
|
||||
)
|
||||
|
||||
@@ -40,16 +40,12 @@ type CLI struct {
|
||||
AmqpURL string `name:"amqp-url" env:"AMQP_URL" help:"URL to use to connect to RabbitMQ" default:"amqp://user:password@unbound-control-plane.orb.local:5672/"`
|
||||
Port int `name:"port" env:"PORT" help:"Listen-port for GraphQL API" default:"8080"`
|
||||
LogLevel string `name:"log-level" env:"LOG_LEVEL" help:"The level of logging to use (debug, info, warn, error, fatal)" default:"info"`
|
||||
LogFormat string `name:"log-format" env:"LOG_FORMAT" help:"The format of logs" default:"text" enum:"otel,json,text"`
|
||||
DatabaseURL string `name:"postgres-url" env:"POSTGRES_URL" help:"URL to use to connect to Postgres" default:"postgres://postgres:postgres@unbound-control-plane.orb.local:5432/schemas?sslmode=disable"`
|
||||
DatabaseDriverName string `name:"db-driver" env:"DB_DRIVER" help:"Driver to use to connect to db" default:"postgres"`
|
||||
Issuer string `name:"issuer" env:"ISSUER" help:"The JWT token issuer to use" default:"unbound.eu.auth0.com"`
|
||||
StrictSSL bool `name:"strict-ssl" env:"STRICT_SSL" help:"Should strict SSL handling be enabled" default:"true"`
|
||||
SentryConfig
|
||||
}
|
||||
|
||||
type SentryConfig struct {
|
||||
DSN string `name:"sentry-dsn" env:"SENTRY_DSN" help:"Sentry dsn" default:""`
|
||||
Environment string `name:"sentry-environment" env:"SENTRY_ENVIRONMENT" help:"Sentry environment" default:"development"`
|
||||
Environment string `name:"environment" env:"ENVIRONMENT" help:"The environment we are running in" default:"development" enum:"development,staging,production"`
|
||||
}
|
||||
|
||||
var buildVersion = "none"
|
||||
@@ -59,9 +55,7 @@ const serviceName = "schemas"
|
||||
func main() {
|
||||
var cli CLI
|
||||
_ = kong.Parse(&cli)
|
||||
log.SetHandler(json.New(os.Stdout))
|
||||
log.SetLevelFromString(cli.LogLevel)
|
||||
logger := log.WithField("service", serviceName)
|
||||
logger := logging.SetupLogger(cli.LogLevel, cli.LogFormat, serviceName, buildVersion)
|
||||
closeEvents := make(chan error)
|
||||
|
||||
if err := start(
|
||||
@@ -70,19 +64,22 @@ func main() {
|
||||
ConnectAMQP,
|
||||
cli,
|
||||
); err != nil {
|
||||
logger.WithError(err).Error("process error")
|
||||
logger.With("error", err).Error("process error")
|
||||
}
|
||||
}
|
||||
|
||||
func start(closeEvents chan error, logger *log.Entry, connectToAmqpFunc func(url string) (Connection, error), cli CLI) error {
|
||||
if err := setupSentry(logger, cli.SentryConfig); err != nil {
|
||||
return err
|
||||
}
|
||||
defer sentry.Flush(2 * time.Second)
|
||||
|
||||
func start(closeEvents chan error, logger *slog.Logger, connectToAmqpFunc func(url string) (Connection, error), cli CLI) error {
|
||||
rootCtx, rootCancel := context.WithCancel(context.Background())
|
||||
defer rootCancel()
|
||||
|
||||
shutdownFn, err := monitoring.SetupOTelSDK(rootCtx, cli.LogFormat == "otel", serviceName, buildVersion, cli.Environment)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
defer func() {
|
||||
_ = errors.Join(shutdownFn(context.Background()))
|
||||
}()
|
||||
|
||||
db, err := store.SetupDB(cli.DatabaseDriverName, cli.DatabaseURL)
|
||||
if err != nil {
|
||||
return fmt.Errorf("failed to setup DB: %v", err)
|
||||
@@ -123,7 +120,7 @@ func start(closeEvents chan error, logger *log.Entry, connectToAmqpFunc func(url
|
||||
return fmt.Errorf("caching subgraphs: %w", err)
|
||||
}
|
||||
setups := []goamqp.Setup{
|
||||
goamqp.UseLogger(logger.Error),
|
||||
goamqp.UseLogger(func(s string) { logger.Error(s) }),
|
||||
goamqp.CloseListener(closeEvents),
|
||||
goamqp.WithPrefetchLimit(20),
|
||||
goamqp.EventStreamPublisher(publisher),
|
||||
@@ -169,7 +166,7 @@ func start(closeEvents chan error, logger *log.Entry, connectToAmqpFunc func(url
|
||||
defer wg.Done()
|
||||
err := <-closeEvents
|
||||
if err != nil {
|
||||
logger.WithError(err).Error("received close from AMQP")
|
||||
logger.With("error", err).Error("received close from AMQP")
|
||||
rootCancel()
|
||||
}
|
||||
}()
|
||||
@@ -179,8 +176,11 @@ func start(closeEvents chan error, logger *log.Entry, connectToAmqpFunc func(url
|
||||
defer wg.Done()
|
||||
<-rootCtx.Done()
|
||||
|
||||
if err := httpSrv.Close(); err != nil {
|
||||
logger.WithError(err).Error("close http server")
|
||||
shutdownCtx, shutdownRelease := context.WithTimeout(context.Background(), 10*time.Second)
|
||||
defer shutdownRelease()
|
||||
|
||||
if err := httpSrv.Shutdown(shutdownCtx); err != nil {
|
||||
logger.With("error", err).Error("close http server")
|
||||
}
|
||||
close(sigint)
|
||||
close(closeEvents)
|
||||
@@ -195,6 +195,7 @@ func start(closeEvents chan error, logger *log.Entry, connectToAmqpFunc func(url
|
||||
Publisher: eventPublisher,
|
||||
Logger: logger,
|
||||
Cache: serviceCache,
|
||||
PubSub: graph.NewPubSub(),
|
||||
}
|
||||
|
||||
config := generated.Config{
|
||||
@@ -222,11 +223,10 @@ func start(closeEvents chan error, logger *log.Entry, connectToAmqpFunc func(url
|
||||
Cache: lru.New[string](100),
|
||||
})
|
||||
|
||||
sentryHandler := sentryhttp.New(sentryhttp.Options{Repanic: true})
|
||||
mux.Handle("/", sentryHandler.HandleFunc(playground.Handler("GraphQL playground", "/query")))
|
||||
mux.Handle("/", monitoring.Handler(playground.Handler("GraphQL playground", "/query")))
|
||||
mux.Handle("/health", http.HandlerFunc(healthFunc))
|
||||
mux.Handle("/query", cors.AllowAll().Handler(
|
||||
sentryHandler.Handle(
|
||||
monitoring.Handler(
|
||||
mw.Middleware().CheckJWT(
|
||||
apiKeyMiddleware.Handler(
|
||||
authMiddleware.Handler(srv),
|
||||
@@ -235,10 +235,10 @@ func start(closeEvents chan error, logger *log.Entry, connectToAmqpFunc func(url
|
||||
),
|
||||
))
|
||||
|
||||
logger.Infof("connect to http://localhost:%d/ for GraphQL playground", cli.Port)
|
||||
logger.Info(fmt.Sprintf("connect to http://localhost:%d/ for GraphQL playground", cli.Port))
|
||||
|
||||
if err := httpSrv.ListenAndServe(); err != nil {
|
||||
logger.WithError(err).Error("listen http")
|
||||
if err := httpSrv.ListenAndServe(); !errors.Is(err, http.ErrServerClosed) {
|
||||
logger.With("error", err).Error("listen http")
|
||||
}
|
||||
}()
|
||||
|
||||
@@ -287,38 +287,6 @@ func healthFunc(w http.ResponseWriter, _ *http.Request) {
|
||||
_, _ = w.Write([]byte("OK"))
|
||||
}
|
||||
|
||||
func setupSentry(logger log.Interface, args SentryConfig) error {
|
||||
if args.Environment == "" {
|
||||
return fmt.Errorf("no Sentry environment supplied, exiting")
|
||||
}
|
||||
cfg := sentry.ClientOptions{
|
||||
Dsn: args.DSN,
|
||||
Environment: args.Environment,
|
||||
Release: fmt.Sprintf("%s-%s", serviceName, buildVersion),
|
||||
}
|
||||
switch args.Environment {
|
||||
case "development":
|
||||
cfg.Debug = true
|
||||
cfg.EnableTracing = false
|
||||
cfg.TracesSampleRate = 0.0
|
||||
case "production":
|
||||
if args.DSN == "" {
|
||||
return fmt.Errorf("no DSN supplied for non-dev environment, exiting")
|
||||
}
|
||||
cfg.Debug = false
|
||||
cfg.EnableTracing = true
|
||||
cfg.TracesSampleRate = 0.01
|
||||
default:
|
||||
return fmt.Errorf("illegal environment %s", args.Environment)
|
||||
}
|
||||
|
||||
if err := sentry.Init(cfg); err != nil {
|
||||
return fmt.Errorf("sentry setup: %w", err)
|
||||
}
|
||||
logger.Infof("configured Sentry for env: %s", args.Environment)
|
||||
return nil
|
||||
}
|
||||
|
||||
func ConnectAMQP(url string) (Connection, error) {
|
||||
return goamqp.NewFromURL(serviceName, url)
|
||||
}
|
||||
|
||||
@@ -1,58 +1,76 @@
|
||||
module gitlab.com/unboundsoftware/schemas
|
||||
|
||||
go 1.23.6
|
||||
go 1.25
|
||||
|
||||
require (
|
||||
github.com/99designs/gqlgen v0.17.66
|
||||
github.com/Khan/genqlient v0.8.0
|
||||
github.com/alecthomas/kong v1.8.1
|
||||
github.com/99designs/gqlgen v0.17.83
|
||||
github.com/Khan/genqlient v0.8.1
|
||||
github.com/alecthomas/kong v1.13.0
|
||||
github.com/apex/log v1.9.0
|
||||
github.com/auth0/go-jwt-middleware/v2 v2.2.2
|
||||
github.com/getsentry/sentry-go v0.31.1
|
||||
github.com/golang-jwt/jwt/v5 v5.2.1
|
||||
github.com/auth0/go-jwt-middleware/v2 v2.3.0
|
||||
github.com/golang-jwt/jwt/v5 v5.3.0
|
||||
github.com/jmoiron/sqlx v1.4.0
|
||||
github.com/pkg/errors v0.9.1
|
||||
github.com/pressly/goose/v3 v3.24.1
|
||||
github.com/pressly/goose/v3 v3.26.0
|
||||
github.com/rs/cors v1.11.1
|
||||
github.com/sparetimecoders/goamqp v0.3.1
|
||||
github.com/stretchr/testify v1.10.0
|
||||
github.com/vektah/gqlparser/v2 v2.5.23
|
||||
github.com/wundergraph/graphql-go-tools/v2 v2.0.0-rc.160
|
||||
gitlab.com/unboundsoftware/eventsourced/amqp v1.8.0
|
||||
gitlab.com/unboundsoftware/eventsourced/eventsourced v1.17.0
|
||||
gitlab.com/unboundsoftware/eventsourced/pg v1.16.0
|
||||
github.com/sparetimecoders/goamqp v0.3.3
|
||||
github.com/stretchr/testify v1.11.1
|
||||
github.com/vektah/gqlparser/v2 v2.5.31
|
||||
github.com/wundergraph/graphql-go-tools/v2 v2.0.0-rc.238
|
||||
gitlab.com/unboundsoftware/eventsourced/amqp v1.9.0
|
||||
gitlab.com/unboundsoftware/eventsourced/eventsourced v1.19.3
|
||||
gitlab.com/unboundsoftware/eventsourced/pg v1.17.0
|
||||
go.opentelemetry.io/contrib/bridges/otelslog v0.13.0
|
||||
go.opentelemetry.io/otel v1.38.0
|
||||
go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetrichttp v1.38.0
|
||||
go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp v1.38.0
|
||||
go.opentelemetry.io/otel/exporters/stdout/stdoutlog v0.14.0
|
||||
go.opentelemetry.io/otel/log v0.14.0
|
||||
go.opentelemetry.io/otel/sdk v1.38.0
|
||||
go.opentelemetry.io/otel/sdk/log v0.14.0
|
||||
go.opentelemetry.io/otel/sdk/metric v1.38.0
|
||||
go.opentelemetry.io/otel/trace v1.38.0
|
||||
)
|
||||
|
||||
require (
|
||||
github.com/agnivade/levenshtein v1.2.1 // indirect
|
||||
github.com/buger/jsonparser v1.1.1 // indirect
|
||||
github.com/cespare/xxhash/v2 v2.2.0 // indirect
|
||||
github.com/cpuguy83/go-md2man/v2 v2.0.5 // indirect
|
||||
github.com/cenkalti/backoff/v5 v5.0.3 // indirect
|
||||
github.com/cespare/xxhash/v2 v2.3.0 // indirect
|
||||
github.com/davecgh/go-spew v1.1.1 // indirect
|
||||
github.com/go-viper/mapstructure/v2 v2.2.1 // indirect
|
||||
github.com/go-logr/logr v1.4.3 // indirect
|
||||
github.com/go-logr/stdr v1.2.2 // indirect
|
||||
github.com/go-viper/mapstructure/v2 v2.4.0 // indirect
|
||||
github.com/google/uuid v1.6.0 // indirect
|
||||
github.com/gorilla/websocket v1.5.1 // indirect
|
||||
github.com/grpc-ecosystem/grpc-gateway/v2 v2.27.2 // indirect
|
||||
github.com/hashicorp/golang-lru/v2 v2.0.7 // indirect
|
||||
github.com/lib/pq v1.10.9 // indirect
|
||||
github.com/mfridman/interpolate v0.0.2 // indirect
|
||||
github.com/pmezard/go-difflib v1.0.0 // indirect
|
||||
github.com/rabbitmq/amqp091-go v1.10.0 // indirect
|
||||
github.com/russross/blackfriday/v2 v2.1.0 // indirect
|
||||
github.com/sethvargo/go-retry v0.3.0 // indirect
|
||||
github.com/sosodev/duration v1.3.1 // indirect
|
||||
github.com/tidwall/gjson v1.17.0 // indirect
|
||||
github.com/tidwall/match v1.1.1 // indirect
|
||||
github.com/tidwall/pretty v1.2.1 // indirect
|
||||
github.com/tidwall/sjson v1.2.5 // indirect
|
||||
github.com/urfave/cli/v2 v2.27.5 // indirect
|
||||
github.com/urfave/cli/v3 v3.6.0 // indirect
|
||||
github.com/wundergraph/astjson v0.0.0-20250106123708-be463c97e083 // indirect
|
||||
github.com/xrash/smetrics v0.0.0-20240521201337-686a1a2994c1 // indirect
|
||||
go.opentelemetry.io/auto/sdk v1.1.0 // indirect
|
||||
go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.38.0 // indirect
|
||||
go.opentelemetry.io/otel/metric v1.38.0 // indirect
|
||||
go.opentelemetry.io/proto/otlp v1.7.1 // indirect
|
||||
go.uber.org/multierr v1.11.0 // indirect
|
||||
golang.org/x/mod v0.23.0 // indirect
|
||||
golang.org/x/net v0.35.0 // indirect
|
||||
golang.org/x/sync v0.11.0 // indirect
|
||||
golang.org/x/sys v0.30.0 // indirect
|
||||
golang.org/x/text v0.22.0 // indirect
|
||||
golang.org/x/tools v0.30.0 // indirect
|
||||
golang.org/x/mod v0.29.0 // indirect
|
||||
golang.org/x/net v0.46.0 // indirect
|
||||
golang.org/x/sync v0.17.0 // indirect
|
||||
golang.org/x/sys v0.37.0 // indirect
|
||||
golang.org/x/text v0.30.0 // indirect
|
||||
golang.org/x/tools v0.38.0 // indirect
|
||||
google.golang.org/genproto/googleapis/api v0.0.0-20250825161204-c5933d9347a5 // indirect
|
||||
google.golang.org/genproto/googleapis/rpc v0.0.0-20250825161204-c5933d9347a5 // indirect
|
||||
google.golang.org/grpc v1.75.0 // indirect
|
||||
google.golang.org/protobuf v1.36.10 // indirect
|
||||
gopkg.in/yaml.v3 v3.0.1 // indirect
|
||||
)
|
||||
|
||||
@@ -1,25 +1,25 @@
|
||||
filippo.io/edwards25519 v1.1.0 h1:FNf4tywRC1HmFuKW5xopWpigGjJKiJSV0Cqo0cJWDaA=
|
||||
filippo.io/edwards25519 v1.1.0/go.mod h1:BxyFTGdWcka3PhytdK4V28tE5sGfRvvvRV7EaN4VDT4=
|
||||
github.com/99designs/gqlgen v0.17.66 h1:2/SRc+h3115fCOZeTtsqrB5R5gTGm+8qCAwcrZa+CXA=
|
||||
github.com/99designs/gqlgen v0.17.66/go.mod h1:gucrb5jK5pgCKzAGuOMMVU9C8PnReecHEHd2UxLQwCg=
|
||||
github.com/99designs/gqlgen v0.17.83 h1:LZOd4Of2snK5V22/ZWfBAPa3WoAZkBO70dKXM0ODHQk=
|
||||
github.com/99designs/gqlgen v0.17.83/go.mod h1:q6Lb64wknFqNFSbSUGzKRKupklvY/xgNr62g0GGWPB8=
|
||||
github.com/DATA-DOG/go-sqlmock v1.5.2 h1:OcvFkGmslmlZibjAjaHm3L//6LiuBgolP7OputlJIzU=
|
||||
github.com/DATA-DOG/go-sqlmock v1.5.2/go.mod h1:88MAG/4G7SMwSE3CeA0ZKzrT5CiOU3OJ+JlNzwDqpNU=
|
||||
github.com/Khan/genqlient v0.8.0 h1:Hd1a+E1CQHYbMEKakIkvBH3zW0PWEeiX6Hp1i2kP2WE=
|
||||
github.com/Khan/genqlient v0.8.0/go.mod h1:hn70SpYjWteRGvxTwo0kfaqg4wxvndECGkfa1fdDdYI=
|
||||
github.com/PuerkitoBio/goquery v1.9.3 h1:mpJr/ikUA9/GNJB/DBZcGeFDXUtosHRyRrwh7KGdTG0=
|
||||
github.com/PuerkitoBio/goquery v1.9.3/go.mod h1:1ndLHPdTz+DyQPICCWYlYQMPl0oXZj0G6D4LCYA6u4U=
|
||||
github.com/Khan/genqlient v0.8.1 h1:wtOCc8N9rNynRLXN3k3CnfzheCUNKBcvXmVv5zt6WCs=
|
||||
github.com/Khan/genqlient v0.8.1/go.mod h1:R2G6DzjBvCbhjsEajfRjbWdVglSH/73kSivC9TLWVjU=
|
||||
github.com/PuerkitoBio/goquery v1.10.3 h1:pFYcNSqHxBD06Fpj/KsbStFRsgRATgnf3LeXiUkhzPo=
|
||||
github.com/PuerkitoBio/goquery v1.10.3/go.mod h1:tMUX0zDMHXYlAQk6p35XxQMqMweEKB7iK7iLNd4RH4Y=
|
||||
github.com/agnivade/levenshtein v1.2.1 h1:EHBY3UOn1gwdy/VbFwgo4cxecRznFk7fKWN1KOX7eoM=
|
||||
github.com/agnivade/levenshtein v1.2.1/go.mod h1:QVVI16kDrtSuwcpd0p1+xMC6Z/VfhtCyDIjcwga4/DU=
|
||||
github.com/alecthomas/assert/v2 v2.11.0 h1:2Q9r3ki8+JYXvGsDyBXwH3LcJ+WK5D0gc5E8vS6K3D0=
|
||||
github.com/alecthomas/assert/v2 v2.11.0/go.mod h1:Bze95FyfUr7x34QZrjL+XP+0qgp/zg8yS+TtBj1WA3k=
|
||||
github.com/alecthomas/kong v1.8.1 h1:6aamvWBE/REnR/BCq10EcozmcpUPc5aGI1lPAWdB0EE=
|
||||
github.com/alecthomas/kong v1.8.1/go.mod h1:p2vqieVMeTAnaC83txKtXe8FLke2X07aruPWXyMPQrU=
|
||||
github.com/alecthomas/repr v0.4.0 h1:GhI2A8MACjfegCPVq9f1FLvIBS+DrQ2KQBFZP1iFzXc=
|
||||
github.com/alecthomas/repr v0.4.0/go.mod h1:Fr0507jx4eOXV7AlPV6AVZLYrLIuIeSOWtW57eE/O/4=
|
||||
github.com/alecthomas/kong v1.13.0 h1:5e/7XC3ugvhP1DQBmTS+WuHtCbcv44hsohMgcvVxSrA=
|
||||
github.com/alecthomas/kong v1.13.0/go.mod h1:wrlbXem1CWqUV5Vbmss5ISYhsVPkBb1Yo7YKJghju2I=
|
||||
github.com/alecthomas/repr v0.5.2 h1:SU73FTI9D1P5UNtvseffFSGmdNci/O6RsqzeXJtP0Qs=
|
||||
github.com/alecthomas/repr v0.5.2/go.mod h1:Fr0507jx4eOXV7AlPV6AVZLYrLIuIeSOWtW57eE/O/4=
|
||||
github.com/andreyvit/diff v0.0.0-20170406064948-c7f18ee00883 h1:bvNMNQO63//z+xNgfBlViaCIJKLlCJ6/fmUseuG0wVQ=
|
||||
github.com/andreyvit/diff v0.0.0-20170406064948-c7f18ee00883/go.mod h1:rCTlJbsFo29Kk6CurOXKm700vrz8f0KW0JNfpkRJY/8=
|
||||
github.com/andybalholm/cascadia v1.3.2 h1:3Xi6Dw5lHF15JtdcmAHD3i1+T8plmv7BQ/nsViSLyss=
|
||||
github.com/andybalholm/cascadia v1.3.2/go.mod h1:7gtRlve5FxPPgIgX36uWBX58OdBsSS6lUvCFb+h7KvU=
|
||||
github.com/andybalholm/cascadia v1.3.3 h1:AG2YHrzJIm4BZ19iwJ/DAua6Btl3IwJX+VI4kktS1LM=
|
||||
github.com/andybalholm/cascadia v1.3.3/go.mod h1:xNd9bqTn98Ln4DwST8/nG+H0yuB8Hmgu1YHNnWw0GeA=
|
||||
github.com/apex/log v1.9.0 h1:FHtw/xuaM8AgmvDDTI9fiwoAL25Sq2cxojnZICUU8l0=
|
||||
github.com/apex/log v1.9.0/go.mod h1:m82fZlWIuiWzWP04XCTXmnX0xRkYYbCdYn8jbJeLBEA=
|
||||
github.com/apex/logs v1.0.0/go.mod h1:XzxuLZ5myVHDy9SAmYpamKKRNApGj54PfYLcFrXqDwo=
|
||||
@@ -27,16 +27,16 @@ github.com/aphistic/golf v0.0.0-20180712155816-02c07f170c5a/go.mod h1:3NqKYiepwy
|
||||
github.com/aphistic/sweet v0.2.0/go.mod h1:fWDlIh/isSE9n6EPsRmC0det+whmX6dJid3stzu0Xys=
|
||||
github.com/arbovm/levenshtein v0.0.0-20160628152529-48b4e1c0c4d0 h1:jfIu9sQUG6Ig+0+Ap1h4unLjW6YQJpKZVmUzxsD4E/Q=
|
||||
github.com/arbovm/levenshtein v0.0.0-20160628152529-48b4e1c0c4d0/go.mod h1:t2tdKJDJF9BV14lnkjHmOQgcvEKgtqs5a1N3LNdJhGE=
|
||||
github.com/auth0/go-jwt-middleware/v2 v2.2.2 h1:vrvkFZf72r3Qbt45KLjBG3/6Xq2r3NTixWKu2e8de9I=
|
||||
github.com/auth0/go-jwt-middleware/v2 v2.2.2/go.mod h1:4vwxpVtu/Kl4c4HskT+gFLjq0dra8F1joxzamrje6J0=
|
||||
github.com/auth0/go-jwt-middleware/v2 v2.3.0 h1:4QREj6cS3d8dS05bEm443jhnqQF97FX9sMBeWqnNRzE=
|
||||
github.com/auth0/go-jwt-middleware/v2 v2.3.0/go.mod h1:dL4ObBs1/dj4/W4cYxd8rqAdDGXYyd5rqbpMIxcbVrU=
|
||||
github.com/aws/aws-sdk-go v1.20.6/go.mod h1:KmX6BPdI08NWTb3/sm4ZGu5ShLoqVDhKgpiN924inxo=
|
||||
github.com/aybabtme/rgbterm v0.0.0-20170906152045-cc83f3b3ce59/go.mod h1:q/89r3U2H7sSsE2t6Kca0lfwTK8JdoNGS/yzM/4iH5I=
|
||||
github.com/buger/jsonparser v1.1.1 h1:2PnMjfWD7wBILjqQbt530v576A/cAbQvEW9gGIpYMUs=
|
||||
github.com/buger/jsonparser v1.1.1/go.mod h1:6RYKKt7H4d4+iWqouImQ9R2FZql3VbhNgx27UK13J/0=
|
||||
github.com/cespare/xxhash/v2 v2.2.0 h1:DC2CZ1Ep5Y4k3ZQ899DldepgrayRUGE6BBZ/cd9Cj44=
|
||||
github.com/cespare/xxhash/v2 v2.2.0/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs=
|
||||
github.com/cpuguy83/go-md2man/v2 v2.0.5 h1:ZtcqGrnekaHpVLArFSe4HK5DoKx1T0rq2DwVB0alcyc=
|
||||
github.com/cpuguy83/go-md2man/v2 v2.0.5/go.mod h1:tgQtvFlXSQOSOSIRvRPT7W67SCa46tRHOmNcaadrF8o=
|
||||
github.com/cenkalti/backoff/v5 v5.0.3 h1:ZN+IMa753KfX5hd8vVaMixjnqRZ3y8CuJKRKj1xcsSM=
|
||||
github.com/cenkalti/backoff/v5 v5.0.3/go.mod h1:rkhZdG3JZukswDf7f0cwqPNk4K0sa+F97BxZthm/crw=
|
||||
github.com/cespare/xxhash/v2 v2.3.0 h1:UL815xU9SqsFlibzuggzjXhog7bL6oX9BbNZnL2UFvs=
|
||||
github.com/cespare/xxhash/v2 v2.3.0/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs=
|
||||
github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
|
||||
github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c=
|
||||
github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
|
||||
@@ -46,26 +46,32 @@ github.com/dustin/go-humanize v1.0.1 h1:GzkhY7T5VNhEkwH0PVJgjz+fX1rhBrR7pRT3mDkp
|
||||
github.com/dustin/go-humanize v1.0.1/go.mod h1:Mu1zIs6XwVuF/gI1OepvI0qD18qycQx+mFykh5fBlto=
|
||||
github.com/fatih/color v1.7.0/go.mod h1:Zm6kSWBoL9eyXnKyktHP6abPY2pDugNf5KwzbycvMj4=
|
||||
github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMoQvtojpjFo=
|
||||
github.com/getsentry/sentry-go v0.31.1 h1:ELVc0h7gwyhnXHDouXkhqTFSO5oslsRDk0++eyE0KJ4=
|
||||
github.com/getsentry/sentry-go v0.31.1/go.mod h1:CYNcMMz73YigoHljQRG+qPF+eMq8gG72XcGN/p71BAY=
|
||||
github.com/go-errors/errors v1.4.2 h1:J6MZopCL4uSllY1OfXM374weqZFFItUbrImctkmUxIA=
|
||||
github.com/go-errors/errors v1.4.2/go.mod h1:sIVyrIiJhuEF+Pj9Ebtd6P/rEYROXFi3BopGUQ5a5Og=
|
||||
github.com/go-logfmt/logfmt v0.4.0/go.mod h1:3RMwSq7FuexP4Kalkev3ejPJsZTpXXBr9+V4qmtdjCk=
|
||||
github.com/go-sql-driver/mysql v1.8.1 h1:LedoTUt/eveggdHS9qUFC1EFSa8bU2+1pZjSRpvNJ1Y=
|
||||
github.com/go-logr/logr v1.2.2/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A=
|
||||
github.com/go-logr/logr v1.4.3 h1:CjnDlHq8ikf6E492q6eKboGOC0T8CDaOvkHCIg8idEI=
|
||||
github.com/go-logr/logr v1.4.3/go.mod h1:9T104GzyrTigFIr8wt5mBrctHMim0Nb2HLGrmQ40KvY=
|
||||
github.com/go-logr/stdr v1.2.2 h1:hSWxHoqTgW2S2qGc0LTAI563KZ5YKYRhT3MFKZMbjag=
|
||||
github.com/go-logr/stdr v1.2.2/go.mod h1:mMo/vtBO5dYbehREoey6XUKy/eSumjCCveDpRre4VKE=
|
||||
github.com/go-sql-driver/mysql v1.8.1/go.mod h1:wEBSXgmK//2ZFJyE+qWnIsVGmvmEKlqwuVSjsCm7DZg=
|
||||
github.com/go-viper/mapstructure/v2 v2.2.1 h1:ZAaOCxANMuZx5RCeg0mBdEZk7DZasvvZIxtHqx8aGss=
|
||||
github.com/go-viper/mapstructure/v2 v2.2.1/go.mod h1:oJDH3BJKyqBA2TXFhDsKDGDTlndYOZ6rGS0BRZIxGhM=
|
||||
github.com/golang-jwt/jwt/v5 v5.2.1 h1:OuVbFODueb089Lh128TAcimifWaLhJwVflnrgM17wHk=
|
||||
github.com/golang-jwt/jwt/v5 v5.2.1/go.mod h1:pqrtFR0X4osieyHYxtmOUWsAWrfe1Q5UVIyoH402zdk=
|
||||
github.com/go-sql-driver/mysql v1.9.3 h1:U/N249h2WzJ3Ukj8SowVFjdtZKfu9vlLZxjPXV1aweo=
|
||||
github.com/go-sql-driver/mysql v1.9.3/go.mod h1:qn46aNg1333BRMNU69Lq93t8du/dwxI64Gl8i5p1WMU=
|
||||
github.com/go-viper/mapstructure/v2 v2.4.0 h1:EBsztssimR/CONLSZZ04E8qAkxNYq4Qp9LvH92wZUgs=
|
||||
github.com/go-viper/mapstructure/v2 v2.4.0/go.mod h1:oJDH3BJKyqBA2TXFhDsKDGDTlndYOZ6rGS0BRZIxGhM=
|
||||
github.com/golang-jwt/jwt/v5 v5.3.0 h1:pv4AsKCKKZuqlgs5sUmn4x8UlGa0kEVt/puTpKx9vvo=
|
||||
github.com/golang-jwt/jwt/v5 v5.3.0/go.mod h1:fxCRLWMO43lRc8nhHWY6LGqRcf+1gQWArsqaEUEa5bE=
|
||||
github.com/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U=
|
||||
github.com/golang/protobuf v1.3.1/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U=
|
||||
github.com/google/go-cmp v0.6.0 h1:ofyhxvXcZhMsU5ulbFiLKl/XBFqE1GSq7atu8tAmTRI=
|
||||
github.com/google/go-cmp v0.6.0/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY=
|
||||
github.com/golang/protobuf v1.5.4 h1:i7eJL8qZTpSEXOPTxNKhASYpMn+8e5Q6AdndVa1dWek=
|
||||
github.com/golang/protobuf v1.5.4/go.mod h1:lnTiLA8Wa4RWRcIUkrtSVa5nRhsEGBg48fD6rSs7xps=
|
||||
github.com/google/go-cmp v0.7.0 h1:wk8382ETsv4JYUZwIsn6YpYiWiBsYLSJiTsyBybVuN8=
|
||||
github.com/google/go-cmp v0.7.0/go.mod h1:pXiqmnSA92OHEEa9HXL2W4E7lf9JzCmGVUdgjX3N/iU=
|
||||
github.com/google/uuid v1.1.1/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
|
||||
github.com/google/uuid v1.6.0 h1:NIvaJDMOsjHA8n1jAhLSgzrAzy1Hgr+hNrb57e+94F0=
|
||||
github.com/google/uuid v1.6.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
|
||||
github.com/gorilla/websocket v1.5.1 h1:gmztn0JnHVt9JZquRuzLw3g4wouNVzKL15iLr/zn/QY=
|
||||
github.com/gorilla/websocket v1.5.1/go.mod h1:x3kM2JMyaluk02fnUJpQuwD2dCS5NDG2ZHL0uE0tcaY=
|
||||
github.com/grpc-ecosystem/grpc-gateway/v2 v2.27.2 h1:8Tjv8EJ+pM1xP8mK6egEbD1OgnVTyacbefKhmbLhIhU=
|
||||
github.com/grpc-ecosystem/grpc-gateway/v2 v2.27.2/go.mod h1:pkJQ2tZHJ0aFOVEEot6oZmaVEZcRme73eIFmhiVuRWs=
|
||||
github.com/hashicorp/golang-lru/v2 v2.0.7 h1:a+bsQ5rvGLjzHuww6tVxozPZFVghXaHOwFs4luLUK2k=
|
||||
github.com/hashicorp/golang-lru/v2 v2.0.7/go.mod h1:QeFd9opnmA6QUJc5vARoKUSoFhyfM2/ZepoAG6RGpeM=
|
||||
github.com/hexops/gotextdiff v1.0.3 h1:gitA9+qJrrTCsiCl7+kh75nPqQt1cx4ZkudSTLoUqJM=
|
||||
@@ -82,8 +88,9 @@ github.com/kr/pretty v0.2.0/go.mod h1:ipq/a2n7PKx3OHsz4KJII5eveXtPO4qwEXGdVfWzfn
|
||||
github.com/kr/pretty v0.3.1 h1:flRD4NNwYAUpkphVc1HcthR4KEIFJ65n8Mw5qdRn3LE=
|
||||
github.com/kr/pretty v0.3.1/go.mod h1:hoEshYVHaxMs3cyo3Yncou5ZscifuDolrwPKZanG3xk=
|
||||
github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ=
|
||||
github.com/kr/text v0.1.0 h1:45sCR5RtlFHMR4UwH9sdQ5TC8v0qDQCHnXt+kaKSTVE=
|
||||
github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI=
|
||||
github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY=
|
||||
github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE=
|
||||
github.com/lib/pq v1.10.9 h1:YXG7RB+JIjhP29X+OtkiDnYaXQwpS4JEWq7dtCCRUEw=
|
||||
github.com/lib/pq v1.10.9/go.mod h1:AlVN5x4E4T544tWzH6hKfbfQvm3HdbOxrmggDNAPY9o=
|
||||
github.com/mattn/go-colorable v0.1.1/go.mod h1:FuOcm+DKB9mbwrcAfNl7/TZVBZ6rcnceauSikq3lYCQ=
|
||||
@@ -101,30 +108,26 @@ github.com/ncruces/go-strftime v0.1.9 h1:bY0MQC28UADQmHmaF5dgpLmImcShSi2kHU9XLdh
|
||||
github.com/ncruces/go-strftime v0.1.9/go.mod h1:Fwc5htZGVVkseilnfgOVb9mKy6w1naJmn9CehxcKcls=
|
||||
github.com/onsi/ginkgo v1.6.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE=
|
||||
github.com/onsi/gomega v1.5.0/go.mod h1:ex+gbHU/CVuBBDIJjb2X0qEXbFg53c61hWP/1CpauHY=
|
||||
github.com/pingcap/errors v0.11.4 h1:lFuQV/oaUMGcD2tqt+01ROSmJs75VG1ToEOkZIZ4nE4=
|
||||
github.com/pingcap/errors v0.11.4/go.mod h1:Oi8TUi2kEtXXLMJk9l1cGmz20kV3TaQ0usTwv5KuLY8=
|
||||
github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
|
||||
github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4=
|
||||
github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
|
||||
github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM=
|
||||
github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
|
||||
github.com/pressly/goose/v3 v3.24.1 h1:bZmxRco2uy5uu5Ng1MMVEfYsFlrMJI+e/VMXHQ3C4LY=
|
||||
github.com/pressly/goose/v3 v3.24.1/go.mod h1:rEWreU9uVtt0DHCyLzF9gRcWiiTF/V+528DV+4DORug=
|
||||
github.com/pressly/goose/v3 v3.26.0 h1:KJakav68jdH0WDvoAcj8+n61WqOIaPGgH0bJWS6jpmM=
|
||||
github.com/pressly/goose/v3 v3.26.0/go.mod h1:4hC1KrritdCxtuFsqgs1R4AU5bWtTAf+cnWvfhf2DNY=
|
||||
github.com/rabbitmq/amqp091-go v1.10.0 h1:STpn5XsHlHGcecLmMFCtg7mqq0RnD+zFr4uzukfVhBw=
|
||||
github.com/rabbitmq/amqp091-go v1.10.0/go.mod h1:Hy4jKW5kQART1u+JkDTF9YYOQUHXqMuhrgxOEeS7G4o=
|
||||
github.com/remyoudompheng/bigfft v0.0.0-20230129092748-24d4a6f8daec h1:W09IVJc94icq4NjY3clb7Lk8O1qJ8BdBEF8z0ibU0rE=
|
||||
github.com/remyoudompheng/bigfft v0.0.0-20230129092748-24d4a6f8daec/go.mod h1:qqbHyh8v60DhA7CoWK5oRCqLrMHRGoxYCSS9EjAz6Eo=
|
||||
github.com/rogpeppe/fastuuid v1.1.0/go.mod h1:jVj6XXZzXRy/MSR5jhDC/2q6DgLz+nrA6LYCDYWNEvQ=
|
||||
github.com/rogpeppe/go-internal v1.12.0 h1:exVL4IDcn6na9z1rAb56Vxr+CgyK3nn3O+epU5NdKM8=
|
||||
github.com/rogpeppe/go-internal v1.12.0/go.mod h1:E+RYuTGaKKdloAfM02xzb0FW3Paa99yedzYV+kq4uf4=
|
||||
github.com/rogpeppe/go-internal v1.14.1 h1:UQB4HGPB6osV0SQTLymcB4TgvyWu6ZyliaW0tI/otEQ=
|
||||
github.com/rogpeppe/go-internal v1.14.1/go.mod h1:MaRKkUm5W0goXpeCfT7UZI6fk/L7L7so1lCWt35ZSgc=
|
||||
github.com/rs/cors v1.11.1 h1:eU3gRzXLRK57F5rKMGMZURNdIG4EoAmX8k94r9wXWHA=
|
||||
github.com/rs/cors v1.11.1/go.mod h1:XyqrcTp5zjWr1wsJ8PIRZssZ8b/WMcMf71DJnit4EMU=
|
||||
github.com/russross/blackfriday/v2 v2.1.0 h1:JIOH55/0cWyOuilr9/qlrm0BSXldqnqwMsf35Ld67mk=
|
||||
github.com/russross/blackfriday/v2 v2.1.0/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM=
|
||||
github.com/sanity-io/litter v1.5.8 h1:uM/2lKrWdGbRXDrIq08Lh9XtVYoeGtcQxk9rtQ7+rYg=
|
||||
github.com/sanity-io/litter v1.5.8/go.mod h1:9gzJgR2i4ZpjZHsKvUXIRQVk7P+yM3e+jAF7bU2UI5U=
|
||||
github.com/sebdah/goldie/v2 v2.5.3 h1:9ES/mNN+HNUbNWpVAlrzuZ7jE+Nrczbj8uFRjM7624Y=
|
||||
github.com/sebdah/goldie/v2 v2.5.3/go.mod h1:oZ9fp0+se1eapSRjfYbsV/0Hqhbuu3bJVvKI/NNtssI=
|
||||
github.com/sebdah/goldie/v2 v2.7.1 h1:PkBHymaYdtvEkZV7TmyqKxdmn5/Vcj+8TpATWZjnG5E=
|
||||
github.com/sebdah/goldie/v2 v2.7.1/go.mod h1:oZ9fp0+se1eapSRjfYbsV/0Hqhbuu3bJVvKI/NNtssI=
|
||||
github.com/sergi/go-diff v1.0.0/go.mod h1:0CfEIISq7TuYL3j771MWULgwwjU+GofnZX9QAmXWZgo=
|
||||
github.com/sergi/go-diff v1.3.1 h1:xkr+Oxo4BOQKmkn/B9eMK0g5Kg/983T9DqqPHwYqD+8=
|
||||
github.com/sergi/go-diff v1.3.1/go.mod h1:aMJSSKb2lpPvRNec0+w3fl7LP9IOFzdc9Pa4NFbPK1I=
|
||||
@@ -135,13 +138,13 @@ github.com/smartystreets/go-aws-auth v0.0.0-20180515143844-0c1422d1fdb9/go.mod h
|
||||
github.com/smartystreets/gunit v1.0.0/go.mod h1:qwPWnhz6pn0NnRBP++URONOVyNkPyr4SauJk4cUOwJs=
|
||||
github.com/sosodev/duration v1.3.1 h1:qtHBDMQ6lvMQsL15g4aopM4HEfOaYuhWBw3NPTtlqq4=
|
||||
github.com/sosodev/duration v1.3.1/go.mod h1:RQIBBX0+fMLc/D9+Jb/fwvVmo0eZvDDEERAikUR6SDg=
|
||||
github.com/sparetimecoders/goamqp v0.3.1 h1:NCzdyAz84G679HlO+ivhyoI1aMgXEe3qfqpn4EChu1s=
|
||||
github.com/sparetimecoders/goamqp v0.3.1/go.mod h1:PjkgrmsuMVgRbiQDTLs0pCWYrcQgqcUee38JjCDZdlk=
|
||||
github.com/sparetimecoders/goamqp v0.3.3 h1:z/nfTPmrjeU/rIVuNOgsVLCimp3WFoNFvS3ZzXRJ6HE=
|
||||
github.com/sparetimecoders/goamqp v0.3.3/go.mod h1:W9NRCpWLE+Vruv2dcRSbszNil2O826d2Nv6kAkETW5o=
|
||||
github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
|
||||
github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI=
|
||||
github.com/stretchr/testify v1.6.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
|
||||
github.com/stretchr/testify v1.10.0 h1:Xv5erBjTwe/5IxqUQTdXv5kgmIvbHo3QQyRwhJsOfJA=
|
||||
github.com/stretchr/testify v1.10.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY=
|
||||
github.com/stretchr/testify v1.11.1 h1:7s2iGBzp5EwR7/aIZr8ao5+dra3wiQyKjjFuvgVKu7U=
|
||||
github.com/stretchr/testify v1.11.1/go.mod h1:wZwfW3scLgRK+23gO65QZefKpKQRnfz6sD981Nm4B6U=
|
||||
github.com/tidwall/gjson v1.14.2/go.mod h1:/wbyibRr2FHMks5tjHJ5F8dMZh3AcwJEMf5vlfC0lxk=
|
||||
github.com/tidwall/gjson v1.17.0 h1:/Jocvlh98kcTfpN2+JzGQWQcqrPQwDrVEMApx/M5ZwM=
|
||||
github.com/tidwall/gjson v1.17.0/go.mod h1:/wbyibRr2FHMks5tjHJ5F8dMZh3AcwJEMf5vlfC0lxk=
|
||||
@@ -159,53 +162,93 @@ github.com/tj/go-buffer v1.1.0/go.mod h1:iyiJpfFcR2B9sXu7KvjbT9fpM4mOelRSDTbntVj
|
||||
github.com/tj/go-elastic v0.0.0-20171221160941-36157cbbebc2/go.mod h1:WjeM0Oo1eNAjXGDx2yma7uG2XoyRZTq1uv3M/o7imD0=
|
||||
github.com/tj/go-kinesis v0.0.0-20171128231115-08b17f58cb1b/go.mod h1:/yhzCV0xPfx6jb1bBgRFjl5lytqVqZXEaeqWP8lTEao=
|
||||
github.com/tj/go-spin v1.1.0/go.mod h1:Mg1mzmePZm4dva8Qz60H2lHwmJ2loum4VIrLgVnKwh4=
|
||||
github.com/urfave/cli/v2 v2.27.5 h1:WoHEJLdsXr6dDWoJgMq/CboDmyY/8HMMH1fTECbih+w=
|
||||
github.com/urfave/cli/v2 v2.27.5/go.mod h1:3Sevf16NykTbInEnD0yKkjDAeZDS0A6bzhBH5hrMvTQ=
|
||||
github.com/vektah/gqlparser/v2 v2.5.23 h1:PurJ9wpgEVB7tty1seRUwkIDa/QH5RzkzraiKIjKLfA=
|
||||
github.com/vektah/gqlparser/v2 v2.5.23/go.mod h1:D1/VCZtV3LPnQrcPBeR/q5jkSQIPti0uYCP/RI0gIeo=
|
||||
github.com/urfave/cli/v3 v3.6.0 h1:oIdArVjkdIXHWg3iqxgmqwQGC8NM0JtdgwQAj2sRwFo=
|
||||
github.com/urfave/cli/v3 v3.6.0/go.mod h1:ysVLtOEmg2tOy6PknnYVhDoouyC/6N42TMeoMzskhso=
|
||||
github.com/vektah/gqlparser/v2 v2.5.31 h1:YhWGA1mfTjID7qJhd1+Vxhpk5HTgydrGU9IgkWBTJ7k=
|
||||
github.com/vektah/gqlparser/v2 v2.5.31/go.mod h1:c1I28gSOVNzlfc4WuDlqU7voQnsqI6OG2amkBAFmgts=
|
||||
github.com/wundergraph/astjson v0.0.0-20250106123708-be463c97e083 h1:8/D7f8gKxTBjW+SZK4mhxTTBVpxcqeBgWF1Rfmltbfk=
|
||||
github.com/wundergraph/astjson v0.0.0-20250106123708-be463c97e083/go.mod h1:eOTL6acwctsN4F3b7YE+eE2t8zcJ/doLm9sZzsxxxrE=
|
||||
github.com/wundergraph/graphql-go-tools/v2 v2.0.0-rc.160 h1:whZcpumOJNwJg71M56VGZ/Ex4TnYeGjmzhWa6+1X+uI=
|
||||
github.com/wundergraph/graphql-go-tools/v2 v2.0.0-rc.160/go.mod h1:B7eV0Qh8Lop9QzIOQcsvKp3S0ejfC6mgyWoJnI917yQ=
|
||||
github.com/xrash/smetrics v0.0.0-20240521201337-686a1a2994c1 h1:gEOO8jv9F4OT7lGCjxCBTO/36wtF6j2nSip77qHd4x4=
|
||||
github.com/xrash/smetrics v0.0.0-20240521201337-686a1a2994c1/go.mod h1:Ohn+xnUBiLI6FVj/9LpzZWtj1/D6lUovWYBkxHVV3aM=
|
||||
gitlab.com/unboundsoftware/eventsourced/amqp v1.8.0 h1:Ez3UuXvveyV/HlphqWUWZU/05DuhqKfgF9r6tCJigEI=
|
||||
gitlab.com/unboundsoftware/eventsourced/amqp v1.8.0/go.mod h1:HO9ZBFAvBNRhVS3hXPuGMW7zyENDfoqjLCUAzPWw3so=
|
||||
gitlab.com/unboundsoftware/eventsourced/eventsourced v1.17.0 h1:CWttfHbytJb7eZ1hflwYkQ7W/c9meHLOjjxguPeZm28=
|
||||
gitlab.com/unboundsoftware/eventsourced/eventsourced v1.17.0/go.mod h1:KeLn3U67hxbdFLfeXd0c0LI/r1C5rijbWrfNdARWe98=
|
||||
gitlab.com/unboundsoftware/eventsourced/pg v1.16.0 h1:n4ZoGseeBM/+12pRxMdNI0XYPaWghxPGJNcWbN30c0o=
|
||||
gitlab.com/unboundsoftware/eventsourced/pg v1.16.0/go.mod h1:zHnnTcR7xzh6Z/iZASZaDQpFsa8kefcXDbcMEeFFbNc=
|
||||
github.com/wundergraph/graphql-go-tools/v2 v2.0.0-rc.238 h1:ll0BtYVMziRa8v0T/f+DQOJ/1x3Dq5puifJNnxF0R+M=
|
||||
github.com/wundergraph/graphql-go-tools/v2 v2.0.0-rc.238/go.mod h1:ErOQH1ki2+SZB8JjpTyGVnoBpg5picIyjvuWQJP4abg=
|
||||
gitlab.com/unboundsoftware/eventsourced/amqp v1.9.0 h1:TdBJnrnrxJrPhC4i6KTFUElZa3k/fFXiGwg0sds5aAo=
|
||||
gitlab.com/unboundsoftware/eventsourced/amqp v1.9.0/go.mod h1:VauAph7uCvEakYNdHkkSAoOOGKvEuUA/uhsR376ThbI=
|
||||
gitlab.com/unboundsoftware/eventsourced/eventsourced v1.19.3 h1:0HbDHF4sHfoyDrbPLMFWvsQLbTl2ITrpI9PjDIZsV1Y=
|
||||
gitlab.com/unboundsoftware/eventsourced/eventsourced v1.19.3/go.mod h1:LrA7I7etRmhIC1PjO8c26BHm+gWsy2rC3eSMe5+XUWE=
|
||||
gitlab.com/unboundsoftware/eventsourced/pg v1.17.0 h1:pUJzMpNPX0GVsffRZXlpKR1d7Ws96KTxJwbLFPpASSc=
|
||||
gitlab.com/unboundsoftware/eventsourced/pg v1.17.0/go.mod h1:WgPrZhyCbsZ3TG2tPUbh2MUjOEaANJjsWi/0hlIwRVU=
|
||||
go.opentelemetry.io/auto/sdk v1.1.0 h1:cH53jehLUN6UFLY71z+NDOiNJqDdPRaXzTel0sJySYA=
|
||||
go.opentelemetry.io/auto/sdk v1.1.0/go.mod h1:3wSPjt5PWp2RhlCcmmOial7AvC4DQqZb7a7wCow3W8A=
|
||||
go.opentelemetry.io/contrib/bridges/otelslog v0.13.0 h1:bwnLpizECbPr1RrQ27waeY2SPIPeccCx/xLuoYADZ9s=
|
||||
go.opentelemetry.io/contrib/bridges/otelslog v0.13.0/go.mod h1:3nWlOiiqA9UtUnrcNk82mYasNxD8ehOspL0gOfEo6Y4=
|
||||
go.opentelemetry.io/otel v1.38.0 h1:RkfdswUDRimDg0m2Az18RKOsnI8UDzppJAtj01/Ymk8=
|
||||
go.opentelemetry.io/otel v1.38.0/go.mod h1:zcmtmQ1+YmQM9wrNsTGV/q/uyusom3P8RxwExxkZhjM=
|
||||
go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetrichttp v1.38.0 h1:Oe2z/BCg5q7k4iXC3cqJxKYg0ieRiOqF0cecFYdPTwk=
|
||||
go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetrichttp v1.38.0/go.mod h1:ZQM5lAJpOsKnYagGg/zV2krVqTtaVdYdDkhMoX6Oalg=
|
||||
go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.38.0 h1:GqRJVj7UmLjCVyVJ3ZFLdPRmhDUp2zFmQe3RHIOsw24=
|
||||
go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.38.0/go.mod h1:ri3aaHSmCTVYu2AWv44YMauwAQc0aqI9gHKIcSbI1pU=
|
||||
go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp v1.38.0 h1:aTL7F04bJHUlztTsNGJ2l+6he8c+y/b//eR0jjjemT4=
|
||||
go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp v1.38.0/go.mod h1:kldtb7jDTeol0l3ewcmd8SDvx3EmIE7lyvqbasU3QC4=
|
||||
go.opentelemetry.io/otel/exporters/stdout/stdoutlog v0.14.0 h1:B/g+qde6Mkzxbry5ZZag0l7QrQBCtVm7lVjaLgmpje8=
|
||||
go.opentelemetry.io/otel/exporters/stdout/stdoutlog v0.14.0/go.mod h1:mOJK8eMmgW6ocDJn6Bn11CcZ05gi3P8GylBXEkZtbgA=
|
||||
go.opentelemetry.io/otel/log v0.14.0 h1:2rzJ+pOAZ8qmZ3DDHg73NEKzSZkhkGIua9gXtxNGgrM=
|
||||
go.opentelemetry.io/otel/log v0.14.0/go.mod h1:5jRG92fEAgx0SU/vFPxmJvhIuDU9E1SUnEQrMlJpOno=
|
||||
go.opentelemetry.io/otel/metric v1.38.0 h1:Kl6lzIYGAh5M159u9NgiRkmoMKjvbsKtYRwgfrA6WpA=
|
||||
go.opentelemetry.io/otel/metric v1.38.0/go.mod h1:kB5n/QoRM8YwmUahxvI3bO34eVtQf2i4utNVLr9gEmI=
|
||||
go.opentelemetry.io/otel/sdk v1.38.0 h1:l48sr5YbNf2hpCUj/FoGhW9yDkl+Ma+LrVl8qaM5b+E=
|
||||
go.opentelemetry.io/otel/sdk v1.38.0/go.mod h1:ghmNdGlVemJI3+ZB5iDEuk4bWA3GkTpW+DOoZMYBVVg=
|
||||
go.opentelemetry.io/otel/sdk/log v0.14.0 h1:JU/U3O7N6fsAXj0+CXz21Czg532dW2V4gG1HE/e8Zrg=
|
||||
go.opentelemetry.io/otel/sdk/log v0.14.0/go.mod h1:imQvII+0ZylXfKU7/wtOND8Hn4OpT3YUoIgqJVksUkM=
|
||||
go.opentelemetry.io/otel/sdk/log/logtest v0.14.0 h1:Ijbtz+JKXl8T2MngiwqBlPaHqc4YCaP/i13Qrow6gAM=
|
||||
go.opentelemetry.io/otel/sdk/log/logtest v0.14.0/go.mod h1:dCU8aEL6q+L9cYTqcVOk8rM9Tp8WdnHOPLiBgp0SGOA=
|
||||
go.opentelemetry.io/otel/sdk/metric v1.38.0 h1:aSH66iL0aZqo//xXzQLYozmWrXxyFkBJ6qT5wthqPoM=
|
||||
go.opentelemetry.io/otel/sdk/metric v1.38.0/go.mod h1:dg9PBnW9XdQ1Hd6ZnRz689CbtrUp0wMMs9iPcgT9EZA=
|
||||
go.opentelemetry.io/otel/trace v1.38.0 h1:Fxk5bKrDZJUH+AMyyIXGcFAPah0oRcT+LuNtJrmcNLE=
|
||||
go.opentelemetry.io/otel/trace v1.38.0/go.mod h1:j1P9ivuFsTceSWe1oY+EeW3sc+Pp42sO++GHkg4wwhs=
|
||||
go.opentelemetry.io/proto/otlp v1.7.1 h1:gTOMpGDb0WTBOP8JaO72iL3auEZhVmAQg4ipjOVAtj4=
|
||||
go.opentelemetry.io/proto/otlp v1.7.1/go.mod h1:b2rVh6rfI/s2pHWNlB7ILJcRALpcNDzKhACevjI+ZnE=
|
||||
go.uber.org/goleak v1.3.0 h1:2K3zAYmnTNqV73imy9J1T3WC+gmCePx2hEGkimedGto=
|
||||
go.uber.org/goleak v1.3.0/go.mod h1:CoHD4mav9JJNrW/WLlf7HGZPjdw8EucARQHekz1X6bE=
|
||||
go.uber.org/multierr v1.11.0 h1:blXXJkSxSSfBVBlC76pxqeO+LN3aDfLQo+309xJstO0=
|
||||
go.uber.org/multierr v1.11.0/go.mod h1:20+QtiLqy0Nd6FdQB9TLXag12DsQkrbs3htMFfDN80Y=
|
||||
golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w=
|
||||
golang.org/x/crypto v0.0.0-20190426145343-a29dc8fdc734/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
|
||||
golang.org/x/crypto v0.33.0 h1:IOBPskki6Lysi0lo9qQvbxiQ+FvsCC/YWOecCHAixus=
|
||||
golang.org/x/crypto v0.33.0/go.mod h1:bVdXmD7IV/4GdElGPozy6U7lWdRXA4qyRVGJV57uQ5M=
|
||||
golang.org/x/mod v0.23.0 h1:Zb7khfcRGKk+kqfxFaP5tZqCnDZMjC5VtUBs87Hr6QM=
|
||||
golang.org/x/mod v0.23.0/go.mod h1:6SkKJ3Xj0I0BrPOZoBy3bdMptDDU9oJrpohJ3eWZ1fY=
|
||||
golang.org/x/crypto v0.43.0 h1:dduJYIi3A3KOfdGOHX8AVZ/jGiyPa3IbBozJ5kNuE04=
|
||||
golang.org/x/crypto v0.43.0/go.mod h1:BFbav4mRNlXJL4wNeejLpWxB7wMbc79PdRGhWKncxR0=
|
||||
golang.org/x/exp v0.0.0-20250620022241-b7579e27df2b h1:M2rDM6z3Fhozi9O7NWsxAkg/yqS/lQJ6PmkyIV3YP+o=
|
||||
golang.org/x/exp v0.0.0-20250620022241-b7579e27df2b/go.mod h1:3//PLf8L/X+8b4vuAfHzxeRUl04Adcb341+IGKfnqS8=
|
||||
golang.org/x/mod v0.29.0 h1:HV8lRxZC4l2cr3Zq1LvtOsi/ThTgWnUk/y64QSs8GwA=
|
||||
golang.org/x/mod v0.29.0/go.mod h1:NyhrlYXJ2H4eJiRy/WDBO6HMqZQ6q9nk4JzS3NuCK+w=
|
||||
golang.org/x/net v0.0.0-20180906233101-161cd47e91fd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
|
||||
golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
|
||||
golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
|
||||
golang.org/x/net v0.35.0 h1:T5GQRQb2y08kTAByq9L4/bz8cipCdA8FbRTXewonqY8=
|
||||
golang.org/x/net v0.35.0/go.mod h1:EglIi67kWsHKlRzzVMUD93VMSWGFOMSZgxFjparz1Qk=
|
||||
golang.org/x/net v0.46.0 h1:giFlY12I07fugqwPuWJi68oOnpfqFnJIJzaIIm2JVV4=
|
||||
golang.org/x/net v0.46.0/go.mod h1:Q9BGdFy1y4nkUwiLvT5qtyhAnEHgnQ/zd8PfU6nc210=
|
||||
golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
|
||||
golang.org/x/sync v0.11.0 h1:GGz8+XQP4FvTTrjZPzNKTMFtSXH80RAzG+5ghFPgK9w=
|
||||
golang.org/x/sync v0.11.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk=
|
||||
golang.org/x/sync v0.17.0 h1:l60nONMj9l5drqw6jlhIELNv9I0A4OFgRsG9k2oT9Ug=
|
||||
golang.org/x/sync v0.17.0/go.mod h1:9KTHXmSnoGruLpwFjVSX0lNNA75CykiMECbovNTZqGI=
|
||||
golang.org/x/sys v0.0.0-20180909124046-d0be0721c37e/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
|
||||
golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
|
||||
golang.org/x/sys v0.0.0-20190222072716-a9d3bda3a223/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
|
||||
golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
||||
golang.org/x/sys v0.30.0 h1:QjkSwP/36a20jFYWkSue1YwXzLmsV5Gfq7Eiy72C1uc=
|
||||
golang.org/x/sys v0.30.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=
|
||||
golang.org/x/sys v0.37.0 h1:fdNQudmxPjkdUTPnLn5mdQv7Zwvbvpaxqs831goi9kQ=
|
||||
golang.org/x/sys v0.37.0/go.mod h1:OgkHotnGiDImocRcuBABYBEXf8A9a87e/uXjp9XT3ks=
|
||||
golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
|
||||
golang.org/x/text v0.3.2/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk=
|
||||
golang.org/x/text v0.22.0 h1:bofq7m3/HAFvbF51jz3Q9wLg3jkvSPuiZu/pD1XwgtM=
|
||||
golang.org/x/text v0.22.0/go.mod h1:YRoo4H8PVmsu+E3Ou7cqLVH8oXWIHVoX0jqUWALQhfY=
|
||||
golang.org/x/text v0.30.0 h1:yznKA/E9zq54KzlzBEAWn1NXSQ8DIp/NYMy88xJjl4k=
|
||||
golang.org/x/text v0.30.0/go.mod h1:yDdHFIX9t+tORqspjENWgzaCVXgk0yYnYuSZ8UzzBVM=
|
||||
golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
|
||||
golang.org/x/tools v0.30.0 h1:BgcpHewrV5AUp2G9MebG4XPFI1E2W41zU1SaqVA9vJY=
|
||||
golang.org/x/tools v0.30.0/go.mod h1:c347cR/OJfw5TI+GfX7RUPNMdDRRbjvYTS0jPyvsVtY=
|
||||
golang.org/x/tools v0.38.0 h1:Hx2Xv8hISq8Lm16jvBZ2VQf+RLmbd7wVUsALibYI/IQ=
|
||||
golang.org/x/tools v0.38.0/go.mod h1:yEsQ/d/YK8cjh0L6rZlY8tgtlKiBNTL14pGDJPJpYQs=
|
||||
gonum.org/v1/gonum v0.16.0 h1:5+ul4Swaf3ESvrOnidPp4GZbzf0mxVQpDCYUQE7OJfk=
|
||||
gonum.org/v1/gonum v0.16.0/go.mod h1:fef3am4MQ93R2HHpKnLk4/Tbh/s0+wqD5nfa6Pnwy4E=
|
||||
google.golang.org/genproto/googleapis/api v0.0.0-20250825161204-c5933d9347a5 h1:BIRfGDEjiHRrk0QKZe3Xv2ieMhtgRGeLcZQ0mIVn4EY=
|
||||
google.golang.org/genproto/googleapis/api v0.0.0-20250825161204-c5933d9347a5/go.mod h1:j3QtIyytwqGr1JUDtYXwtMXWPKsEa5LtzIFN1Wn5WvE=
|
||||
google.golang.org/genproto/googleapis/rpc v0.0.0-20250825161204-c5933d9347a5 h1:eaY8u2EuxbRv7c3NiGK0/NedzVsCcV6hDuU5qPX5EGE=
|
||||
google.golang.org/genproto/googleapis/rpc v0.0.0-20250825161204-c5933d9347a5/go.mod h1:M4/wBTSeyLxupu3W3tJtOgB14jILAS/XWPSSa3TAlJc=
|
||||
google.golang.org/grpc v1.75.0 h1:+TW+dqTd2Biwe6KKfhE5JpiYIBWq865PhKGSXiivqt4=
|
||||
google.golang.org/grpc v1.75.0/go.mod h1:JtPAzKiq4v1xcAB2hydNlWI2RnF85XXcV0mhKXr2ecQ=
|
||||
google.golang.org/protobuf v1.36.10 h1:AYd7cD/uASjIL6Q9LiTjz8JLcrh/88q5UObnmY3aOOE=
|
||||
google.golang.org/protobuf v1.36.10/go.mod h1:HTf+CrKn2C3g5S8VImy6tdcUvCska2kB7j23XfzDpco=
|
||||
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
|
||||
gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
|
||||
gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c h1:Hei/4ADfdWqJk1ZMxUNpqntNwaWcugrBjAiHlqqRiVk=
|
||||
@@ -220,17 +263,11 @@ gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C
|
||||
gopkg.in/yaml.v3 v3.0.0-20200605160147-a5ece683394c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
|
||||
gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA=
|
||||
gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
|
||||
modernc.org/gc/v3 v3.0.0-20240107210532-573471604cb6 h1:5D53IMaUuA5InSeMu9eJtlQXS2NxAhyWQvkKEgXZhHI=
|
||||
modernc.org/gc/v3 v3.0.0-20240107210532-573471604cb6/go.mod h1:Qz0X07sNOR1jWYCrJMEnbW/X55x206Q7Vt4mz6/wHp4=
|
||||
modernc.org/libc v1.55.3 h1:AzcW1mhlPNrRtjS5sS+eW2ISCgSOLLNyFzRh/V3Qj/U=
|
||||
modernc.org/libc v1.55.3/go.mod h1:qFXepLhz+JjFThQ4kzwzOjA/y/artDeg+pcYnY+Q83w=
|
||||
modernc.org/mathutil v1.6.0 h1:fRe9+AmYlaej+64JsEEhoWuAYBkOtQiMEU7n/XgfYi4=
|
||||
modernc.org/mathutil v1.6.0/go.mod h1:Ui5Q9q1TR2gFm0AQRqQUaBWFLAhQpCwNcuhBOSedWPo=
|
||||
modernc.org/memory v1.8.0 h1:IqGTL6eFMaDZZhEWwcREgeMXYwmW83LYW8cROZYkg+E=
|
||||
modernc.org/memory v1.8.0/go.mod h1:XPZ936zp5OMKGWPqbD3JShgd/ZoQ7899TUuQqxY+peU=
|
||||
modernc.org/sqlite v1.34.1 h1:u3Yi6M0N8t9yKRDwhXcyp1eS5/ErhPTBggxWFuR6Hfk=
|
||||
modernc.org/sqlite v1.34.1/go.mod h1:pXV2xHxhzXZsgT/RtTFAPY6JJDEvOTcTdwADQCCWD4k=
|
||||
modernc.org/strutil v1.2.0 h1:agBi9dp1I+eOnxXeiZawM8F4LawKv4NzGWSaLfyeNZA=
|
||||
modernc.org/strutil v1.2.0/go.mod h1:/mdcBmfOibveCTBxUl5B5l6W+TTH1FXPLHZE6bTosX0=
|
||||
modernc.org/token v1.1.0 h1:Xl7Ap9dKaEs5kLoOQeQmPWevfnk/DM5qcLcYlA8ys6Y=
|
||||
modernc.org/token v1.1.0/go.mod h1:UGzOrNV1mAFSEB63lOFHIpNRUVMvYTc6yu1SMY/XTDM=
|
||||
modernc.org/libc v1.66.3 h1:cfCbjTUcdsKyyZZfEUKfoHcP3S0Wkvz3jgSzByEWVCQ=
|
||||
modernc.org/libc v1.66.3/go.mod h1:XD9zO8kt59cANKvHPXpx7yS2ELPheAey0vjIuZOhOU8=
|
||||
modernc.org/mathutil v1.7.1 h1:GCZVGXdaN8gTqB1Mf/usp1Y/hSqgI2vAGGP4jZMCxOU=
|
||||
modernc.org/mathutil v1.7.1/go.mod h1:4p5IwJITfppl0G4sUEDtCr4DthTaT47/N3aT6MhfgJg=
|
||||
modernc.org/memory v1.11.0 h1:o4QC8aMQzmcwCK3t3Ux/ZHmwFPzE6hf2Y5LbkRs+hbI=
|
||||
modernc.org/memory v1.11.0/go.mod h1:/JP4VbVC+K5sU2wZi9bHoq2MAkCnrt2r98UGeSK7Mjw=
|
||||
modernc.org/sqlite v1.38.2 h1:Aclu7+tgjgcQVShZqim41Bbw9Cho0y/7WzYptXqkEek=
|
||||
modernc.org/sqlite v1.38.2/go.mod h1:cPTJYSlgg3Sfg046yBShXENNtPrWrDX8bsbAQBzgQ5E=
|
||||
|
||||
@@ -0,0 +1,54 @@
|
||||
package graph
|
||||
|
||||
import (
|
||||
"encoding/json"
|
||||
"fmt"
|
||||
|
||||
"gitlab.com/unboundsoftware/schemas/graph/model"
|
||||
)
|
||||
|
||||
// GenerateCosmoRouterConfig generates a Cosmo Router execution config from subgraphs
|
||||
func GenerateCosmoRouterConfig(subGraphs []*model.SubGraph) (string, error) {
|
||||
// Build the Cosmo router config structure
|
||||
// This is a simplified version - you may need to adjust based on actual Cosmo requirements
|
||||
config := map[string]interface{}{
|
||||
"version": "1",
|
||||
"subgraphs": convertSubGraphsToCosmo(subGraphs),
|
||||
// Add other Cosmo-specific configuration as needed
|
||||
}
|
||||
|
||||
// Marshal to JSON
|
||||
configJSON, err := json.MarshalIndent(config, "", " ")
|
||||
if err != nil {
|
||||
return "", fmt.Errorf("marshal cosmo config: %w", err)
|
||||
}
|
||||
|
||||
return string(configJSON), nil
|
||||
}
|
||||
|
||||
func convertSubGraphsToCosmo(subGraphs []*model.SubGraph) []map[string]interface{} {
|
||||
cosmoSubgraphs := make([]map[string]interface{}, 0, len(subGraphs))
|
||||
|
||||
for _, sg := range subGraphs {
|
||||
cosmoSg := map[string]interface{}{
|
||||
"name": sg.Service,
|
||||
"sdl": sg.Sdl,
|
||||
}
|
||||
|
||||
if sg.URL != nil {
|
||||
cosmoSg["routing_url"] = *sg.URL
|
||||
}
|
||||
|
||||
if sg.WsURL != nil {
|
||||
cosmoSg["subscription"] = map[string]interface{}{
|
||||
"url": *sg.WsURL,
|
||||
"protocol": "ws",
|
||||
"websocket_subprotocol": "graphql-ws",
|
||||
}
|
||||
}
|
||||
|
||||
cosmoSubgraphs = append(cosmoSubgraphs, cosmoSg)
|
||||
}
|
||||
|
||||
return cosmoSubgraphs
|
||||
}
|
||||
@@ -0,0 +1,258 @@
|
||||
package graph
|
||||
|
||||
import (
|
||||
"encoding/json"
|
||||
"testing"
|
||||
|
||||
"github.com/stretchr/testify/assert"
|
||||
"github.com/stretchr/testify/require"
|
||||
|
||||
"gitlab.com/unboundsoftware/schemas/graph/model"
|
||||
)
|
||||
|
||||
func TestGenerateCosmoRouterConfig(t *testing.T) {
|
||||
tests := []struct {
|
||||
name string
|
||||
subGraphs []*model.SubGraph
|
||||
wantErr bool
|
||||
validate func(t *testing.T, config string)
|
||||
}{
|
||||
{
|
||||
name: "single subgraph with all fields",
|
||||
subGraphs: []*model.SubGraph{
|
||||
{
|
||||
Service: "test-service",
|
||||
URL: stringPtr("http://localhost:4001/query"),
|
||||
WsURL: stringPtr("ws://localhost:4001/query"),
|
||||
Sdl: "type Query { test: String }",
|
||||
},
|
||||
},
|
||||
wantErr: false,
|
||||
validate: func(t *testing.T, config string) {
|
||||
var result map[string]interface{}
|
||||
err := json.Unmarshal([]byte(config), &result)
|
||||
require.NoError(t, err, "Config should be valid JSON")
|
||||
|
||||
assert.Equal(t, "1", result["version"], "Version should be 1")
|
||||
|
||||
subgraphs, ok := result["subgraphs"].([]interface{})
|
||||
require.True(t, ok, "subgraphs should be an array")
|
||||
require.Len(t, subgraphs, 1, "Should have 1 subgraph")
|
||||
|
||||
sg := subgraphs[0].(map[string]interface{})
|
||||
assert.Equal(t, "test-service", sg["name"])
|
||||
assert.Equal(t, "http://localhost:4001/query", sg["routing_url"])
|
||||
assert.Equal(t, "type Query { test: String }", sg["sdl"])
|
||||
|
||||
subscription, ok := sg["subscription"].(map[string]interface{})
|
||||
require.True(t, ok, "Should have subscription config")
|
||||
assert.Equal(t, "ws://localhost:4001/query", subscription["url"])
|
||||
assert.Equal(t, "ws", subscription["protocol"])
|
||||
assert.Equal(t, "graphql-ws", subscription["websocket_subprotocol"])
|
||||
},
|
||||
},
|
||||
{
|
||||
name: "multiple subgraphs",
|
||||
subGraphs: []*model.SubGraph{
|
||||
{
|
||||
Service: "service-1",
|
||||
URL: stringPtr("http://localhost:4001/query"),
|
||||
Sdl: "type Query { field1: String }",
|
||||
},
|
||||
{
|
||||
Service: "service-2",
|
||||
URL: stringPtr("http://localhost:4002/query"),
|
||||
Sdl: "type Query { field2: String }",
|
||||
},
|
||||
{
|
||||
Service: "service-3",
|
||||
URL: stringPtr("http://localhost:4003/query"),
|
||||
WsURL: stringPtr("ws://localhost:4003/query"),
|
||||
Sdl: "type Subscription { updates: String }",
|
||||
},
|
||||
},
|
||||
wantErr: false,
|
||||
validate: func(t *testing.T, config string) {
|
||||
var result map[string]interface{}
|
||||
err := json.Unmarshal([]byte(config), &result)
|
||||
require.NoError(t, err)
|
||||
|
||||
subgraphs := result["subgraphs"].([]interface{})
|
||||
assert.Len(t, subgraphs, 3, "Should have 3 subgraphs")
|
||||
|
||||
// Check first service has no subscription
|
||||
sg1 := subgraphs[0].(map[string]interface{})
|
||||
assert.Equal(t, "service-1", sg1["name"])
|
||||
_, hasSubscription := sg1["subscription"]
|
||||
assert.False(t, hasSubscription, "service-1 should not have subscription config")
|
||||
|
||||
// Check third service has subscription
|
||||
sg3 := subgraphs[2].(map[string]interface{})
|
||||
assert.Equal(t, "service-3", sg3["name"])
|
||||
subscription, hasSubscription := sg3["subscription"]
|
||||
assert.True(t, hasSubscription, "service-3 should have subscription config")
|
||||
assert.NotNil(t, subscription)
|
||||
},
|
||||
},
|
||||
{
|
||||
name: "subgraph with no URL",
|
||||
subGraphs: []*model.SubGraph{
|
||||
{
|
||||
Service: "test-service",
|
||||
URL: nil,
|
||||
WsURL: nil,
|
||||
Sdl: "type Query { test: String }",
|
||||
},
|
||||
},
|
||||
wantErr: false,
|
||||
validate: func(t *testing.T, config string) {
|
||||
var result map[string]interface{}
|
||||
err := json.Unmarshal([]byte(config), &result)
|
||||
require.NoError(t, err)
|
||||
|
||||
subgraphs := result["subgraphs"].([]interface{})
|
||||
sg := subgraphs[0].(map[string]interface{})
|
||||
|
||||
// Should not have routing_url or subscription fields if URLs are nil
|
||||
_, hasRoutingURL := sg["routing_url"]
|
||||
assert.False(t, hasRoutingURL, "Should not have routing_url when URL is nil")
|
||||
|
||||
_, hasSubscription := sg["subscription"]
|
||||
assert.False(t, hasSubscription, "Should not have subscription when WsURL is nil")
|
||||
},
|
||||
},
|
||||
{
|
||||
name: "empty subgraphs",
|
||||
subGraphs: []*model.SubGraph{},
|
||||
wantErr: false,
|
||||
validate: func(t *testing.T, config string) {
|
||||
var result map[string]interface{}
|
||||
err := json.Unmarshal([]byte(config), &result)
|
||||
require.NoError(t, err)
|
||||
|
||||
subgraphs := result["subgraphs"].([]interface{})
|
||||
assert.Len(t, subgraphs, 0, "Should have empty subgraphs array")
|
||||
},
|
||||
},
|
||||
{
|
||||
name: "nil subgraphs",
|
||||
subGraphs: nil,
|
||||
wantErr: false,
|
||||
validate: func(t *testing.T, config string) {
|
||||
var result map[string]interface{}
|
||||
err := json.Unmarshal([]byte(config), &result)
|
||||
require.NoError(t, err)
|
||||
|
||||
subgraphs := result["subgraphs"].([]interface{})
|
||||
assert.Len(t, subgraphs, 0, "Should handle nil subgraphs as empty array")
|
||||
},
|
||||
},
|
||||
{
|
||||
name: "complex SDL with multiple types",
|
||||
subGraphs: []*model.SubGraph{
|
||||
{
|
||||
Service: "complex-service",
|
||||
URL: stringPtr("http://localhost:4001/query"),
|
||||
Sdl: `
|
||||
type Query {
|
||||
user(id: ID!): User
|
||||
users: [User!]!
|
||||
}
|
||||
|
||||
type User {
|
||||
id: ID!
|
||||
name: String!
|
||||
email: String!
|
||||
}
|
||||
`,
|
||||
},
|
||||
},
|
||||
wantErr: false,
|
||||
validate: func(t *testing.T, config string) {
|
||||
var result map[string]interface{}
|
||||
err := json.Unmarshal([]byte(config), &result)
|
||||
require.NoError(t, err)
|
||||
|
||||
subgraphs := result["subgraphs"].([]interface{})
|
||||
sg := subgraphs[0].(map[string]interface{})
|
||||
sdl := sg["sdl"].(string)
|
||||
|
||||
assert.Contains(t, sdl, "type Query")
|
||||
assert.Contains(t, sdl, "type User")
|
||||
assert.Contains(t, sdl, "email: String!")
|
||||
},
|
||||
},
|
||||
}
|
||||
|
||||
for _, tt := range tests {
|
||||
t.Run(tt.name, func(t *testing.T) {
|
||||
config, err := GenerateCosmoRouterConfig(tt.subGraphs)
|
||||
|
||||
if tt.wantErr {
|
||||
assert.Error(t, err)
|
||||
return
|
||||
}
|
||||
|
||||
require.NoError(t, err)
|
||||
assert.NotEmpty(t, config, "Config should not be empty")
|
||||
|
||||
if tt.validate != nil {
|
||||
tt.validate(t, config)
|
||||
}
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
func TestConvertSubGraphsToCosmo(t *testing.T) {
|
||||
tests := []struct {
|
||||
name string
|
||||
subGraphs []*model.SubGraph
|
||||
wantLen int
|
||||
validate func(t *testing.T, result []map[string]interface{})
|
||||
}{
|
||||
{
|
||||
name: "preserves subgraph order",
|
||||
subGraphs: []*model.SubGraph{
|
||||
{Service: "alpha", URL: stringPtr("http://a"), Sdl: "a"},
|
||||
{Service: "beta", URL: stringPtr("http://b"), Sdl: "b"},
|
||||
{Service: "gamma", URL: stringPtr("http://c"), Sdl: "c"},
|
||||
},
|
||||
wantLen: 3,
|
||||
validate: func(t *testing.T, result []map[string]interface{}) {
|
||||
assert.Equal(t, "alpha", result[0]["name"])
|
||||
assert.Equal(t, "beta", result[1]["name"])
|
||||
assert.Equal(t, "gamma", result[2]["name"])
|
||||
},
|
||||
},
|
||||
{
|
||||
name: "includes SDL exactly as provided",
|
||||
subGraphs: []*model.SubGraph{
|
||||
{
|
||||
Service: "test",
|
||||
URL: stringPtr("http://test"),
|
||||
Sdl: "type Query { special: String! }",
|
||||
},
|
||||
},
|
||||
wantLen: 1,
|
||||
validate: func(t *testing.T, result []map[string]interface{}) {
|
||||
assert.Equal(t, "type Query { special: String! }", result[0]["sdl"])
|
||||
},
|
||||
},
|
||||
}
|
||||
|
||||
for _, tt := range tests {
|
||||
t.Run(tt.name, func(t *testing.T) {
|
||||
result := convertSubGraphsToCosmo(tt.subGraphs)
|
||||
assert.Len(t, result, tt.wantLen)
|
||||
|
||||
if tt.validate != nil {
|
||||
tt.validate(t, result)
|
||||
}
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
// Helper function for tests
|
||||
func stringPtr(s string) *string {
|
||||
return &s
|
||||
}
|
||||
+1393
-2245
File diff suppressed because it is too large
Load Diff
@@ -49,6 +49,13 @@ type Organization struct {
|
||||
type Query struct {
|
||||
}
|
||||
|
||||
type SchemaUpdate struct {
|
||||
Ref string `json:"ref"`
|
||||
ID string `json:"id"`
|
||||
SubGraphs []*SubGraph `json:"subGraphs"`
|
||||
CosmoRouterConfig *string `json:"cosmoRouterConfig,omitempty"`
|
||||
}
|
||||
|
||||
type SubGraph struct {
|
||||
ID string `json:"id"`
|
||||
Service string `json:"service"`
|
||||
@@ -68,6 +75,9 @@ type SubGraphs struct {
|
||||
|
||||
func (SubGraphs) IsSupergraph() {}
|
||||
|
||||
type Subscription struct {
|
||||
}
|
||||
|
||||
type Unchanged struct {
|
||||
ID string `json:"id"`
|
||||
MinDelaySeconds int `json:"minDelaySeconds"`
|
||||
|
||||
@@ -0,0 +1,66 @@
|
||||
package graph
|
||||
|
||||
import (
|
||||
"sync"
|
||||
|
||||
"gitlab.com/unboundsoftware/schemas/graph/model"
|
||||
)
|
||||
|
||||
// PubSub handles publishing schema updates to subscribers
|
||||
type PubSub struct {
|
||||
mu sync.RWMutex
|
||||
subscribers map[string][]chan *model.SchemaUpdate
|
||||
}
|
||||
|
||||
func NewPubSub() *PubSub {
|
||||
return &PubSub{
|
||||
subscribers: make(map[string][]chan *model.SchemaUpdate),
|
||||
}
|
||||
}
|
||||
|
||||
// Subscribe creates a new subscription channel for a given schema ref
|
||||
func (ps *PubSub) Subscribe(ref string) chan *model.SchemaUpdate {
|
||||
ps.mu.Lock()
|
||||
defer ps.mu.Unlock()
|
||||
|
||||
ch := make(chan *model.SchemaUpdate, 10)
|
||||
ps.subscribers[ref] = append(ps.subscribers[ref], ch)
|
||||
|
||||
return ch
|
||||
}
|
||||
|
||||
// Unsubscribe removes a subscription channel
|
||||
func (ps *PubSub) Unsubscribe(ref string, ch chan *model.SchemaUpdate) {
|
||||
ps.mu.Lock()
|
||||
defer ps.mu.Unlock()
|
||||
|
||||
subs := ps.subscribers[ref]
|
||||
for i, sub := range subs {
|
||||
if sub == ch {
|
||||
// Remove this subscriber
|
||||
ps.subscribers[ref] = append(subs[:i], subs[i+1:]...)
|
||||
close(sub)
|
||||
break
|
||||
}
|
||||
}
|
||||
|
||||
// Clean up empty subscriber lists
|
||||
if len(ps.subscribers[ref]) == 0 {
|
||||
delete(ps.subscribers, ref)
|
||||
}
|
||||
}
|
||||
|
||||
// Publish sends a schema update to all subscribers of a given ref
|
||||
func (ps *PubSub) Publish(ref string, update *model.SchemaUpdate) {
|
||||
ps.mu.RLock()
|
||||
defer ps.mu.RUnlock()
|
||||
|
||||
for _, ch := range ps.subscribers[ref] {
|
||||
// Non-blocking send - if subscriber is slow, skip
|
||||
select {
|
||||
case ch <- update:
|
||||
default:
|
||||
// Channel full, subscriber is too slow - skip this update
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,256 @@
|
||||
package graph
|
||||
|
||||
import (
|
||||
"sync"
|
||||
"testing"
|
||||
"time"
|
||||
|
||||
"github.com/stretchr/testify/assert"
|
||||
"github.com/stretchr/testify/require"
|
||||
|
||||
"gitlab.com/unboundsoftware/schemas/graph/model"
|
||||
)
|
||||
|
||||
func TestPubSub_SubscribeAndPublish(t *testing.T) {
|
||||
ps := NewPubSub()
|
||||
ref := "Test@dev"
|
||||
|
||||
// Subscribe
|
||||
ch := ps.Subscribe(ref)
|
||||
require.NotNil(t, ch, "Subscribe should return a channel")
|
||||
|
||||
// Publish
|
||||
update := &model.SchemaUpdate{
|
||||
Ref: ref,
|
||||
ID: "test-id-1",
|
||||
SubGraphs: []*model.SubGraph{
|
||||
{
|
||||
ID: "sg1",
|
||||
Service: "test-service",
|
||||
Sdl: "type Query { test: String }",
|
||||
},
|
||||
},
|
||||
}
|
||||
|
||||
go ps.Publish(ref, update)
|
||||
|
||||
// Receive
|
||||
select {
|
||||
case received := <-ch:
|
||||
assert.Equal(t, update.Ref, received.Ref, "Ref should match")
|
||||
assert.Equal(t, update.ID, received.ID, "ID should match")
|
||||
assert.Equal(t, len(update.SubGraphs), len(received.SubGraphs), "SubGraphs count should match")
|
||||
case <-time.After(1 * time.Second):
|
||||
t.Fatal("Timeout waiting for published update")
|
||||
}
|
||||
}
|
||||
|
||||
func TestPubSub_MultipleSubscribers(t *testing.T) {
|
||||
ps := NewPubSub()
|
||||
ref := "Test@dev"
|
||||
|
||||
// Create multiple subscribers
|
||||
ch1 := ps.Subscribe(ref)
|
||||
ch2 := ps.Subscribe(ref)
|
||||
ch3 := ps.Subscribe(ref)
|
||||
|
||||
update := &model.SchemaUpdate{
|
||||
Ref: ref,
|
||||
ID: "test-id-2",
|
||||
}
|
||||
|
||||
// Publish once
|
||||
ps.Publish(ref, update)
|
||||
|
||||
// All subscribers should receive the update
|
||||
var wg sync.WaitGroup
|
||||
wg.Add(3)
|
||||
|
||||
checkReceived := func(ch <-chan *model.SchemaUpdate, name string) {
|
||||
defer wg.Done()
|
||||
select {
|
||||
case received := <-ch:
|
||||
assert.Equal(t, update.ID, received.ID, "%s should receive correct update", name)
|
||||
case <-time.After(1 * time.Second):
|
||||
t.Errorf("%s: Timeout waiting for update", name)
|
||||
}
|
||||
}
|
||||
|
||||
go checkReceived(ch1, "Subscriber 1")
|
||||
go checkReceived(ch2, "Subscriber 2")
|
||||
go checkReceived(ch3, "Subscriber 3")
|
||||
|
||||
wg.Wait()
|
||||
}
|
||||
|
||||
func TestPubSub_DifferentRefs(t *testing.T) {
|
||||
ps := NewPubSub()
|
||||
|
||||
ref1 := "Test1@dev"
|
||||
ref2 := "Test2@dev"
|
||||
|
||||
ch1 := ps.Subscribe(ref1)
|
||||
ch2 := ps.Subscribe(ref2)
|
||||
|
||||
update1 := &model.SchemaUpdate{Ref: ref1, ID: "id1"}
|
||||
update2 := &model.SchemaUpdate{Ref: ref2, ID: "id2"}
|
||||
|
||||
// Publish to ref1
|
||||
ps.Publish(ref1, update1)
|
||||
|
||||
// Only ch1 should receive
|
||||
select {
|
||||
case received := <-ch1:
|
||||
assert.Equal(t, "id1", received.ID)
|
||||
case <-time.After(100 * time.Millisecond):
|
||||
t.Fatal("ch1 should have received update")
|
||||
}
|
||||
|
||||
// ch2 should not receive ref1's update
|
||||
select {
|
||||
case <-ch2:
|
||||
t.Fatal("ch2 should not receive ref1's update")
|
||||
case <-time.After(100 * time.Millisecond):
|
||||
// Expected - no update
|
||||
}
|
||||
|
||||
// Publish to ref2
|
||||
ps.Publish(ref2, update2)
|
||||
|
||||
// Now ch2 should receive
|
||||
select {
|
||||
case received := <-ch2:
|
||||
assert.Equal(t, "id2", received.ID)
|
||||
case <-time.After(100 * time.Millisecond):
|
||||
t.Fatal("ch2 should have received update")
|
||||
}
|
||||
}
|
||||
|
||||
func TestPubSub_Unsubscribe(t *testing.T) {
|
||||
ps := NewPubSub()
|
||||
ref := "Test@dev"
|
||||
|
||||
ch := ps.Subscribe(ref)
|
||||
|
||||
// Unsubscribe
|
||||
ps.Unsubscribe(ref, ch)
|
||||
|
||||
// Channel should be closed
|
||||
_, ok := <-ch
|
||||
assert.False(t, ok, "Channel should be closed after unsubscribe")
|
||||
|
||||
// Publishing after unsubscribe should not panic
|
||||
assert.NotPanics(t, func() {
|
||||
ps.Publish(ref, &model.SchemaUpdate{Ref: ref})
|
||||
})
|
||||
}
|
||||
|
||||
func TestPubSub_BufferedChannel(t *testing.T) {
|
||||
ps := NewPubSub()
|
||||
ref := "Test@dev"
|
||||
|
||||
ch := ps.Subscribe(ref)
|
||||
|
||||
// Publish multiple updates quickly (up to buffer size of 10)
|
||||
for i := 0; i < 10; i++ {
|
||||
update := &model.SchemaUpdate{
|
||||
Ref: ref,
|
||||
ID: string(rune('a' + i)),
|
||||
}
|
||||
ps.Publish(ref, update)
|
||||
}
|
||||
|
||||
// All 10 should be buffered and receivable
|
||||
received := 0
|
||||
timeout := time.After(1 * time.Second)
|
||||
|
||||
for received < 10 {
|
||||
select {
|
||||
case <-ch:
|
||||
received++
|
||||
case <-timeout:
|
||||
t.Fatalf("Only received %d out of 10 updates", received)
|
||||
}
|
||||
}
|
||||
|
||||
assert.Equal(t, 10, received, "Should receive all buffered updates")
|
||||
}
|
||||
|
||||
func TestPubSub_SlowSubscriber(t *testing.T) {
|
||||
ps := NewPubSub()
|
||||
ref := "Test@dev"
|
||||
|
||||
ch := ps.Subscribe(ref)
|
||||
|
||||
// Fill the buffer (10 items)
|
||||
for i := 0; i < 10; i++ {
|
||||
ps.Publish(ref, &model.SchemaUpdate{Ref: ref})
|
||||
}
|
||||
|
||||
// Publish one more - this should be dropped (channel full, non-blocking send)
|
||||
ps.Publish(ref, &model.SchemaUpdate{Ref: ref, ID: "should-be-dropped"})
|
||||
|
||||
// Drain the channel
|
||||
count := 0
|
||||
timeout := time.After(500 * time.Millisecond)
|
||||
|
||||
drainLoop:
|
||||
for {
|
||||
select {
|
||||
case update := <-ch:
|
||||
count++
|
||||
// Should not receive the dropped update
|
||||
assert.NotEqual(t, "should-be-dropped", update.ID, "Should not receive dropped update")
|
||||
case <-timeout:
|
||||
break drainLoop
|
||||
}
|
||||
}
|
||||
|
||||
// Should have received exactly 10 (the buffer size), not 11
|
||||
assert.Equal(t, 10, count, "Should only receive buffered updates, not the dropped one")
|
||||
}
|
||||
|
||||
func TestPubSub_ConcurrentPublish(t *testing.T) {
|
||||
ps := NewPubSub()
|
||||
ref := "Test@dev"
|
||||
|
||||
ch := ps.Subscribe(ref)
|
||||
|
||||
numPublishers := 10
|
||||
updatesPerPublisher := 10
|
||||
|
||||
var wg sync.WaitGroup
|
||||
wg.Add(numPublishers)
|
||||
|
||||
// Multiple goroutines publishing concurrently
|
||||
for i := 0; i < numPublishers; i++ {
|
||||
go func(publisherID int) {
|
||||
defer wg.Done()
|
||||
for j := 0; j < updatesPerPublisher; j++ {
|
||||
ps.Publish(ref, &model.SchemaUpdate{
|
||||
Ref: ref,
|
||||
ID: string(rune('a' + publisherID)),
|
||||
})
|
||||
}
|
||||
}(i)
|
||||
}
|
||||
|
||||
wg.Wait()
|
||||
|
||||
// Should not panic and subscriber should receive updates
|
||||
// (exact count may vary due to buffer and timing)
|
||||
timeout := time.After(1 * time.Second)
|
||||
received := 0
|
||||
|
||||
receiveLoop:
|
||||
for {
|
||||
select {
|
||||
case <-ch:
|
||||
received++
|
||||
case <-timeout:
|
||||
break receiveLoop
|
||||
}
|
||||
}
|
||||
|
||||
assert.Greater(t, received, 0, "Should have received some updates")
|
||||
}
|
||||
+3
-2
@@ -3,8 +3,8 @@ package graph
|
||||
import (
|
||||
"context"
|
||||
"fmt"
|
||||
"log/slog"
|
||||
|
||||
"github.com/apex/log"
|
||||
"gitlab.com/unboundsoftware/eventsourced/eventsourced"
|
||||
|
||||
"gitlab.com/unboundsoftware/schemas/cache"
|
||||
@@ -26,8 +26,9 @@ type Publisher interface {
|
||||
type Resolver struct {
|
||||
EventStore eventsourced.EventStore
|
||||
Publisher Publisher
|
||||
Logger log.Interface
|
||||
Logger *slog.Logger
|
||||
Cache *cache.Cache
|
||||
PubSub *PubSub
|
||||
}
|
||||
|
||||
func (r *Resolver) apiKeyCanAccessRef(ctx context.Context, ref string, publish bool) (string, error) {
|
||||
|
||||
@@ -9,6 +9,10 @@ type Mutation {
|
||||
updateSubGraph(input: InputSubGraph!): SubGraph! @auth(organization: true)
|
||||
}
|
||||
|
||||
type Subscription {
|
||||
schemaUpdates(ref: String!): SchemaUpdate! @auth(organization: true)
|
||||
}
|
||||
|
||||
type Organization {
|
||||
id: ID!
|
||||
name: String!
|
||||
@@ -54,6 +58,13 @@ type SubGraph {
|
||||
changedAt: Time!
|
||||
}
|
||||
|
||||
type SchemaUpdate {
|
||||
ref: String!
|
||||
id: ID!
|
||||
subGraphs: [SubGraph!]!
|
||||
cosmoRouterConfig: String
|
||||
}
|
||||
|
||||
input InputAPIKey {
|
||||
name: String!
|
||||
organizationId: ID!
|
||||
|
||||
+101
-2
@@ -119,6 +119,44 @@ func (r *mutationResolver) UpdateSubGraph(ctx context.Context, input model.Input
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
// Publish schema update to subscribers
|
||||
go func() {
|
||||
services, lastUpdate := r.Cache.Services(orgId, input.Ref, "")
|
||||
subGraphs := make([]*model.SubGraph, len(services))
|
||||
for i, id := range services {
|
||||
sg, err := r.fetchSubGraph(context.Background(), id)
|
||||
if err != nil {
|
||||
r.Logger.Error("fetch subgraph for update notification", "error", err)
|
||||
continue
|
||||
}
|
||||
subGraphs[i] = &model.SubGraph{
|
||||
ID: sg.ID.String(),
|
||||
Service: sg.Service,
|
||||
URL: sg.Url,
|
||||
WsURL: sg.WSUrl,
|
||||
Sdl: sg.Sdl,
|
||||
ChangedBy: sg.ChangedBy,
|
||||
ChangedAt: sg.ChangedAt,
|
||||
}
|
||||
}
|
||||
|
||||
// Generate Cosmo router config
|
||||
cosmoConfig, err := GenerateCosmoRouterConfig(subGraphs)
|
||||
if err != nil {
|
||||
r.Logger.Error("generate cosmo config for update", "error", err)
|
||||
cosmoConfig = "" // Send empty if generation fails
|
||||
}
|
||||
|
||||
// Publish to all subscribers of this ref
|
||||
r.PubSub.Publish(input.Ref, &model.SchemaUpdate{
|
||||
Ref: input.Ref,
|
||||
ID: lastUpdate,
|
||||
SubGraphs: subGraphs,
|
||||
CosmoRouterConfig: &cosmoConfig,
|
||||
})
|
||||
}()
|
||||
|
||||
return r.toGqlSubGraph(subGraph), nil
|
||||
}
|
||||
|
||||
@@ -184,13 +222,74 @@ func (r *queryResolver) Supergraph(ctx context.Context, ref string, isAfter *str
|
||||
}, nil
|
||||
}
|
||||
|
||||
// SchemaUpdates is the resolver for the schemaUpdates field.
|
||||
func (r *subscriptionResolver) SchemaUpdates(ctx context.Context, ref string) (<-chan *model.SchemaUpdate, error) {
|
||||
orgId := middleware.OrganizationFromContext(ctx)
|
||||
_, err := r.apiKeyCanAccessRef(ctx, ref, false)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
// Subscribe to updates for this ref
|
||||
ch := r.PubSub.Subscribe(ref)
|
||||
|
||||
// Send initial state immediately
|
||||
go func() {
|
||||
services, lastUpdate := r.Cache.Services(orgId, ref, "")
|
||||
subGraphs := make([]*model.SubGraph, len(services))
|
||||
for i, id := range services {
|
||||
sg, err := r.fetchSubGraph(ctx, id)
|
||||
if err != nil {
|
||||
r.Logger.Error("fetch subgraph for initial update", "error", err)
|
||||
continue
|
||||
}
|
||||
subGraphs[i] = &model.SubGraph{
|
||||
ID: sg.ID.String(),
|
||||
Service: sg.Service,
|
||||
URL: sg.Url,
|
||||
WsURL: sg.WSUrl,
|
||||
Sdl: sg.Sdl,
|
||||
ChangedBy: sg.ChangedBy,
|
||||
ChangedAt: sg.ChangedAt,
|
||||
}
|
||||
}
|
||||
|
||||
// Generate Cosmo router config
|
||||
cosmoConfig, err := GenerateCosmoRouterConfig(subGraphs)
|
||||
if err != nil {
|
||||
r.Logger.Error("generate cosmo config", "error", err)
|
||||
cosmoConfig = "" // Send empty if generation fails
|
||||
}
|
||||
|
||||
// Send initial update
|
||||
ch <- &model.SchemaUpdate{
|
||||
Ref: ref,
|
||||
ID: lastUpdate,
|
||||
SubGraphs: subGraphs,
|
||||
CosmoRouterConfig: &cosmoConfig,
|
||||
}
|
||||
}()
|
||||
|
||||
// Clean up subscription when context is done
|
||||
go func() {
|
||||
<-ctx.Done()
|
||||
r.PubSub.Unsubscribe(ref, ch)
|
||||
}()
|
||||
|
||||
return ch, nil
|
||||
}
|
||||
|
||||
// Mutation returns generated.MutationResolver implementation.
|
||||
func (r *Resolver) Mutation() generated.MutationResolver { return &mutationResolver{r} }
|
||||
|
||||
// Query returns generated.QueryResolver implementation.
|
||||
func (r *Resolver) Query() generated.QueryResolver { return &queryResolver{r} }
|
||||
|
||||
// Subscription returns generated.SubscriptionResolver implementation.
|
||||
func (r *Resolver) Subscription() generated.SubscriptionResolver { return &subscriptionResolver{r} }
|
||||
|
||||
type (
|
||||
mutationResolver struct{ *Resolver }
|
||||
queryResolver struct{ *Resolver }
|
||||
mutationResolver struct{ *Resolver }
|
||||
queryResolver struct{ *Resolver }
|
||||
subscriptionResolver struct{ *Resolver }
|
||||
)
|
||||
|
||||
@@ -1,5 +1,4 @@
|
||||
//go:build tools
|
||||
// +build tools
|
||||
|
||||
package graph
|
||||
|
||||
|
||||
@@ -0,0 +1,7 @@
|
||||
apiVersion: v1
|
||||
kind: ConfigMap
|
||||
metadata:
|
||||
name: schemas
|
||||
data:
|
||||
LOG_FORMAT: "otel"
|
||||
ENVIRONMENT: "production"
|
||||
@@ -0,0 +1,6 @@
|
||||
apiVersion: v1
|
||||
kind: ConfigMap
|
||||
metadata:
|
||||
name: schemas
|
||||
data:
|
||||
ENVIRONMENT: "development"
|
||||
+6
-6
@@ -41,11 +41,8 @@ spec:
|
||||
containers:
|
||||
- name: schemas
|
||||
resources:
|
||||
limits:
|
||||
cpu: "500m"
|
||||
memory: "100Mi"
|
||||
requests:
|
||||
cpu: "10m"
|
||||
cpu: "20m"
|
||||
memory: "20Mi"
|
||||
readinessProbe:
|
||||
httpGet:
|
||||
@@ -59,11 +56,14 @@ spec:
|
||||
ports:
|
||||
- name: api
|
||||
containerPort: 8080
|
||||
env:
|
||||
- name: OTEL_EXPORTER_OTLP_ENDPOINT
|
||||
value: http://k8s-monitoring-alloy-receiver.monitoring.svc.cluster.local:4318
|
||||
envFrom:
|
||||
- secretRef:
|
||||
- configMapRef:
|
||||
name: schemas
|
||||
- secretRef:
|
||||
name: rabbitmq
|
||||
name: schemas
|
||||
restartPolicy: Always
|
||||
serviceAccountName: schemas
|
||||
---
|
||||
|
||||
@@ -0,0 +1,9 @@
|
||||
apiVersion: policy/v1
|
||||
kind: PodDisruptionBudget
|
||||
metadata:
|
||||
name: schemas-pdb
|
||||
spec:
|
||||
minAvailable: 1
|
||||
selector:
|
||||
matchLabels:
|
||||
app.kubernetes.io/name: schemas
|
||||
@@ -5,3 +5,4 @@ metadata:
|
||||
stringData:
|
||||
API_KEY: supersecret123!
|
||||
POSTGRES_URL: "postgres://postgres:postgres@postgres:5432/schemas?sslmode=disable"
|
||||
AMQP_URL: "amqp://user:password@rabbitmq:5672/"
|
||||
|
||||
+5
-4
@@ -1,8 +1,7 @@
|
||||
apiVersion: external-secrets.io/v1beta1
|
||||
apiVersion: external-secrets.io/v1
|
||||
kind: ExternalSecret
|
||||
metadata:
|
||||
name: schemas
|
||||
namespace: default
|
||||
spec:
|
||||
refreshInterval: 1h
|
||||
secretStoreRef:
|
||||
@@ -11,13 +10,15 @@ spec:
|
||||
target:
|
||||
creationPolicy: Owner
|
||||
template:
|
||||
mergePolicy: Merge
|
||||
engineVersion: 'v2'
|
||||
data:
|
||||
POSTGRES_URL: "postgres://{{ .DB_USERNAME }}:{{ .DB_PASSWORD }}@{{ .DB_HOST }}:{{ .DB_PORT }}/schemas?sslmode=disable"
|
||||
API_KEY: "{{ .API_KEY }}"
|
||||
SENTRY_DSN: "{{ .SENTRY_DSN }}"
|
||||
SENTRY_ENVIRONMENT: "{{ .SENTRY_ENVIRONMENT }}"
|
||||
dataFrom:
|
||||
- extract:
|
||||
key: services/schemas
|
||||
- extract:
|
||||
key: rds/postgres/prod-psql
|
||||
- extract:
|
||||
key: mq/rabbit/prod
|
||||
|
||||
@@ -0,0 +1,65 @@
|
||||
package logging
|
||||
|
||||
import (
|
||||
"context"
|
||||
"log/slog"
|
||||
"os"
|
||||
|
||||
"go.opentelemetry.io/contrib/bridges/otelslog"
|
||||
)
|
||||
|
||||
type Logger interface {
|
||||
Info(msg string, args ...any)
|
||||
Warn(msg string, args ...any)
|
||||
Error(msg string, args ...any)
|
||||
}
|
||||
|
||||
var defaultLogger *slog.Logger
|
||||
|
||||
type contextKey string
|
||||
|
||||
const loggerKey = contextKey("logger")
|
||||
|
||||
func SetupLogger(logLevel, logFormat, serviceName, buildVersion string) *slog.Logger {
|
||||
var leveler slog.LevelVar
|
||||
|
||||
err := leveler.UnmarshalText([]byte(logLevel))
|
||||
|
||||
handlerOpts := &slog.HandlerOptions{
|
||||
AddSource: false,
|
||||
Level: leveler.Level(),
|
||||
ReplaceAttr: nil,
|
||||
}
|
||||
|
||||
var handler slog.Handler
|
||||
switch logFormat {
|
||||
case "json":
|
||||
handler = slog.NewJSONHandler(os.Stdout, handlerOpts)
|
||||
case "text":
|
||||
handler = slog.NewTextHandler(os.Stdout, handlerOpts)
|
||||
case "otel":
|
||||
handler = otelslog.NewHandler(serviceName,
|
||||
otelslog.WithVersion(buildVersion))
|
||||
}
|
||||
defaultLogger = slog.New(handler).With("service", serviceName).With("version", buildVersion)
|
||||
if err != nil {
|
||||
defaultLogger.With("err", err).Error("Failed to parse log level")
|
||||
os.Exit(1)
|
||||
}
|
||||
slog.SetDefault(defaultLogger)
|
||||
return defaultLogger
|
||||
}
|
||||
|
||||
// ContextWithLogger returns a new Context with the logger attached
|
||||
func ContextWithLogger(ctx context.Context, logger *slog.Logger) context.Context {
|
||||
return context.WithValue(ctx, loggerKey, logger)
|
||||
}
|
||||
|
||||
// LoggerFromContext returns a logger from the passed context or the default logger
|
||||
func LoggerFromContext(ctx context.Context) *slog.Logger {
|
||||
logger := ctx.Value(loggerKey)
|
||||
if l, ok := logger.(*slog.Logger); ok {
|
||||
return l
|
||||
}
|
||||
return defaultLogger
|
||||
}
|
||||
@@ -0,0 +1,48 @@
|
||||
package logging
|
||||
|
||||
import (
|
||||
"bytes"
|
||||
"log/slog"
|
||||
"strings"
|
||||
"testing"
|
||||
|
||||
"github.com/stretchr/testify/assert"
|
||||
)
|
||||
|
||||
func NewMockLogger() *MockLogger {
|
||||
logged := &bytes.Buffer{}
|
||||
|
||||
return &MockLogger{
|
||||
logged: logged,
|
||||
logger: slog.New(slog.NewTextHandler(logged, &slog.HandlerOptions{
|
||||
ReplaceAttr: func(groups []string, a slog.Attr) slog.Attr {
|
||||
if a.Key == "time" {
|
||||
return slog.Attr{}
|
||||
}
|
||||
return a
|
||||
},
|
||||
})),
|
||||
}
|
||||
}
|
||||
|
||||
type MockLogger struct {
|
||||
logger *slog.Logger
|
||||
logged *bytes.Buffer
|
||||
}
|
||||
|
||||
func (m *MockLogger) Logger() *slog.Logger {
|
||||
return m.logger
|
||||
}
|
||||
|
||||
func (m *MockLogger) Check(t testing.TB, wantLogged []string) {
|
||||
var gotLogged []string
|
||||
if m.logged.String() != "" {
|
||||
gotLogged = strings.Split(m.logged.String(), "\n")
|
||||
gotLogged = gotLogged[:len(gotLogged)-1]
|
||||
}
|
||||
if len(wantLogged) == 0 {
|
||||
assert.Empty(t, gotLogged)
|
||||
return
|
||||
}
|
||||
assert.Equal(t, wantLogged, gotLogged)
|
||||
}
|
||||
@@ -0,0 +1,41 @@
|
||||
package monitoring
|
||||
|
||||
import (
|
||||
"context"
|
||||
"fmt"
|
||||
|
||||
"github.com/99designs/gqlgen/graphql"
|
||||
"go.opentelemetry.io/otel/trace"
|
||||
)
|
||||
|
||||
func AroundOperations(ctx context.Context, next graphql.OperationHandler) graphql.ResponseHandler {
|
||||
op := graphql.GetOperationContext(ctx)
|
||||
spanName := fmt.Sprintf("graphql:operation:%s", op.OperationName)
|
||||
// Span always injected in the http handler above
|
||||
sp := trace.SpanFromContext(ctx)
|
||||
if sp != nil {
|
||||
sp.SetName(spanName)
|
||||
}
|
||||
return next(ctx)
|
||||
}
|
||||
|
||||
func AroundRootFields(ctx context.Context, next graphql.RootResolver) graphql.Marshaler {
|
||||
oc := graphql.GetRootFieldContext(ctx)
|
||||
spanCtx, span := StartSpan(ctx, fmt.Sprintf("graphql:rootfield:%s", oc.Field.Name))
|
||||
defer span.Finish()
|
||||
return next(spanCtx)
|
||||
}
|
||||
|
||||
func AroundFields(ctx context.Context, next graphql.Resolver) (res any, err error) {
|
||||
oc := graphql.GetFieldContext(ctx)
|
||||
var span Span
|
||||
if oc.IsResolver {
|
||||
ctx, span = StartSpan(ctx, fmt.Sprintf("graphql:field:%s", oc.Field.Name))
|
||||
}
|
||||
defer func() {
|
||||
if span != nil {
|
||||
span.Finish()
|
||||
}
|
||||
}()
|
||||
return next(ctx)
|
||||
}
|
||||
@@ -0,0 +1,100 @@
|
||||
package monitoring
|
||||
|
||||
import (
|
||||
"context"
|
||||
"errors"
|
||||
"fmt"
|
||||
"net/http"
|
||||
"os"
|
||||
"time"
|
||||
|
||||
"go.opentelemetry.io/otel"
|
||||
"go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetrichttp"
|
||||
"go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp"
|
||||
"go.opentelemetry.io/otel/exporters/stdout/stdoutlog"
|
||||
"go.opentelemetry.io/otel/log/global"
|
||||
"go.opentelemetry.io/otel/propagation"
|
||||
"go.opentelemetry.io/otel/sdk/log"
|
||||
"go.opentelemetry.io/otel/sdk/metric"
|
||||
"go.opentelemetry.io/otel/sdk/trace"
|
||||
)
|
||||
|
||||
// SetupOTelSDK bootstraps the OpenTelemetry pipeline.
|
||||
func SetupOTelSDK(ctx context.Context, enabled bool, serviceName, buildVersion, environment string) (func(context.Context) error, error) {
|
||||
if os.Getenv("OTEL_RESOURCE_ATTRIBUTES") == "" {
|
||||
if err := os.Setenv("OTEL_RESOURCE_ATTRIBUTES", fmt.Sprintf("service.name=%s,service.version=%s,service.environment=%s", serviceName, buildVersion, environment)); err != nil {
|
||||
return func(context.Context) error {
|
||||
return nil
|
||||
}, err
|
||||
}
|
||||
}
|
||||
var shutdownFuncs []func(context.Context) error
|
||||
if !enabled {
|
||||
return func(context.Context) error {
|
||||
return nil
|
||||
}, nil
|
||||
}
|
||||
shutdown := func(ctx context.Context) error {
|
||||
var err error
|
||||
for _, fn := range shutdownFuncs {
|
||||
err = errors.Join(err, fn(ctx))
|
||||
}
|
||||
shutdownFuncs = nil
|
||||
return err
|
||||
}
|
||||
|
||||
// handleErr calls shutdown for cleanup and makes sure that all errors are returned.
|
||||
handleErr := func(inErr error) (func(context.Context) error, error) {
|
||||
return nil, errors.Join(inErr, shutdown(ctx))
|
||||
}
|
||||
|
||||
// Set up the propagator.
|
||||
prop := propagation.NewCompositeTextMapPropagator(
|
||||
propagation.TraceContext{},
|
||||
propagation.Baggage{},
|
||||
)
|
||||
otel.SetTextMapPropagator(prop)
|
||||
|
||||
traceExporter, err := otlptracehttp.New(ctx)
|
||||
if err != nil {
|
||||
return handleErr(err)
|
||||
}
|
||||
shutdownFuncs = append(shutdownFuncs, traceExporter.Shutdown)
|
||||
|
||||
tracerProvider := trace.NewTracerProvider(
|
||||
trace.WithBatcher(traceExporter,
|
||||
trace.WithBatchTimeout(5*time.Second)),
|
||||
)
|
||||
shutdownFuncs = append(shutdownFuncs, tracerProvider.Shutdown)
|
||||
otel.SetTracerProvider(tracerProvider)
|
||||
|
||||
logExporter, err := stdoutlog.New()
|
||||
if err != nil {
|
||||
return handleErr(err)
|
||||
}
|
||||
processor := log.NewSimpleProcessor(logExporter)
|
||||
logProvider := log.NewLoggerProvider(log.WithProcessor(processor))
|
||||
|
||||
global.SetLoggerProvider(logProvider)
|
||||
shutdownFuncs = append(shutdownFuncs, logProvider.Shutdown)
|
||||
|
||||
exp, err := otlpmetrichttp.New(ctx)
|
||||
if err != nil {
|
||||
return handleErr(err)
|
||||
}
|
||||
meterProvider := metric.NewMeterProvider(metric.WithReader(metric.NewPeriodicReader(exp)))
|
||||
shutdownFuncs = append(shutdownFuncs, meterProvider.Shutdown)
|
||||
|
||||
otel.SetMeterProvider(meterProvider)
|
||||
return shutdown, err
|
||||
}
|
||||
|
||||
func Handler(h http.Handler) http.Handler {
|
||||
return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
|
||||
ctx := otel.GetTextMapPropagator().Extract(r.Context(), propagation.HeaderCarrier(r.Header))
|
||||
spanCtx, s := StartSpan(ctx, "http")
|
||||
defer s.Finish()
|
||||
|
||||
h.ServeHTTP(w, r.WithContext(spanCtx))
|
||||
})
|
||||
}
|
||||
@@ -0,0 +1,46 @@
|
||||
package monitoring
|
||||
|
||||
import (
|
||||
"context"
|
||||
|
||||
"go.opentelemetry.io/otel"
|
||||
"go.opentelemetry.io/otel/trace"
|
||||
)
|
||||
|
||||
type Span interface {
|
||||
Context() context.Context
|
||||
Finish()
|
||||
}
|
||||
|
||||
type span struct {
|
||||
otelSpan trace.Span
|
||||
ctx context.Context
|
||||
}
|
||||
|
||||
func (s *span) Finish() {
|
||||
s.otelSpan.End()
|
||||
}
|
||||
|
||||
func (s *span) Context() context.Context {
|
||||
return s.ctx
|
||||
}
|
||||
|
||||
func StartSpan(ctx context.Context, name string, opts ...trace.SpanStartOption) (context.Context, Span) {
|
||||
ctx, otelSpan := otel.Tracer("").Start(ctx, name, opts...)
|
||||
|
||||
return ctx, &span{
|
||||
otelSpan: otelSpan,
|
||||
ctx: ctx,
|
||||
}
|
||||
}
|
||||
|
||||
type TraceHandlerFunc func(ctx context.Context, name string) (context.Context, func())
|
||||
|
||||
func (t TraceHandlerFunc) Trace(tx context.Context, name string) (context.Context, func()) {
|
||||
return t(tx, name)
|
||||
}
|
||||
|
||||
func Trace(ctx context.Context, name string) (context.Context, func()) {
|
||||
ctx, s := StartSpan(ctx, name)
|
||||
return ctx, s.Finish
|
||||
}
|
||||
@@ -41,15 +41,15 @@ func (m *mergeDuplicatedFieldsVisitor) LeaveObjectTypeDefinition(ref int) {
|
||||
}
|
||||
oldFieldTypeNameBytes, err := m.document.PrintTypeBytes(oldTypeRef, nil)
|
||||
if err != nil {
|
||||
m.Walker.StopWithInternalErr(err)
|
||||
m.StopWithInternalErr(err)
|
||||
return
|
||||
}
|
||||
newFieldTypeNameBytes, err := m.document.PrintTypeBytes(newTypeRef, nil)
|
||||
if err != nil {
|
||||
m.Walker.StopWithInternalErr(err)
|
||||
m.StopWithInternalErr(err)
|
||||
return
|
||||
}
|
||||
m.Walker.StopWithExternalErr(operationreport.ErrDuplicateFieldsMustBeIdentical(
|
||||
m.StopWithExternalErr(operationreport.ErrDuplicateFieldsMustBeIdentical(
|
||||
fieldName, m.document.ObjectTypeDefinitionNameString(ref), string(oldFieldTypeNameBytes), string(newFieldTypeNameBytes),
|
||||
))
|
||||
return
|
||||
|
||||
@@ -154,14 +154,14 @@ func (u unionSharedType) valueName(ref int) string {
|
||||
|
||||
type scalarSharedType struct{}
|
||||
|
||||
func (_ scalarSharedType) areValuesIdentical(_ []int) bool {
|
||||
func (scalarSharedType) areValuesIdentical(_ []int) bool {
|
||||
return true
|
||||
}
|
||||
|
||||
func (_ scalarSharedType) valueRefs() []int {
|
||||
func (scalarSharedType) valueRefs() []int {
|
||||
return nil
|
||||
}
|
||||
|
||||
func (_ scalarSharedType) valueName(_ int) string {
|
||||
func (scalarSharedType) valueName(_ int) string {
|
||||
return ""
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user