diff --git a/.github/workflows/ci.yaml b/.github/workflows/ci.yaml index 29f32d821..042ecc6f0 100644 --- a/.github/workflows/ci.yaml +++ b/.github/workflows/ci.yaml @@ -9,7 +9,7 @@ permissions: contents: read env: - DAGGER_VERSION: 0.11.8 + DAGGER_VERSION: 0.12.0 jobs: build: diff --git a/.github/workflows/release.yaml b/.github/workflows/release.yaml index 6260adcb9..99e3089da 100644 --- a/.github/workflows/release.yaml +++ b/.github/workflows/release.yaml @@ -59,7 +59,7 @@ jobs: module: github.com/${{ github.repository }}@${{ github.ref }} args: --ref ${{ github.ref }} release --version ${{ github.ref_name }} --github-actor ${{ github.actor }} --github-token env:GITHUB_TOKEN --pypi-token env:PYPI_TOKEN --npm-token env:NPM_TOKEN cloud-token: ${{ secrets.DAGGER_CLOUD_TOKEN }} - version: "0.11.8" + version: "0.12.0" env: GITHUB_TOKEN: ${{ github.token }} PYPI_TOKEN: ${{ secrets.PYPI_TOKEN }} diff --git a/.github/workflows/sdk-node.yaml b/.github/workflows/sdk-node.yaml index 5833ec42f..f47a956e0 100644 --- a/.github/workflows/sdk-node.yaml +++ b/.github/workflows/sdk-node.yaml @@ -30,7 +30,7 @@ jobs: verb: call args: --source .:default generate node-sdk -o api/client/node cloud-token: ${{ secrets.DAGGER_CLOUD_TOKEN }} - version: "0.11.8" + version: "0.12.0" - name: Open pull request uses: peter-evans/create-pull-request@v6 diff --git a/.github/workflows/sdk-python.yaml b/.github/workflows/sdk-python.yaml index 23460027f..8a5b161b6 100644 --- a/.github/workflows/sdk-python.yaml +++ b/.github/workflows/sdk-python.yaml @@ -30,7 +30,7 @@ jobs: verb: call args: --source .:default generate python-sdk -o api/client/python cloud-token: ${{ secrets.DAGGER_CLOUD_TOKEN }} - version: "0.11.8" + version: "0.12.0" - name: Open pull request uses: peter-evans/create-pull-request@v6 diff --git a/.github/workflows/sdk-web.yaml b/.github/workflows/sdk-web.yaml index 17c7efb04..e8117e4f0 100644 --- a/.github/workflows/sdk-web.yaml +++ b/.github/workflows/sdk-web.yaml @@ -30,7 +30,7 @@ jobs: verb: call args: --source .:default generate web-sdk -o api/client/web cloud-token: ${{ secrets.DAGGER_CLOUD_TOKEN }} - version: "0.11.8" + version: "0.12.0" - name: Open pull request uses: peter-evans/create-pull-request@v6 diff --git a/.github/workflows/snapshot.yaml b/.github/workflows/snapshot.yaml index cb93b6943..9edfd2bc1 100644 --- a/.github/workflows/snapshot.yaml +++ b/.github/workflows/snapshot.yaml @@ -24,6 +24,6 @@ jobs: module: github.com/${{ github.repository }}@${{ github.ref }} args: --ref ${{ github.ref }} snapshot --stainless-token env:STAINLESS_TOKEN cloud-token: ${{ secrets.DAGGER_CLOUD_TOKEN }} - version: "0.11.8" + version: "0.12.0" env: STAINLESS_TOKEN: ${{ secrets.STAINLESS_TOKEN }} diff --git a/ci/build.go b/ci/build.go index 37dd7374a..5bb98736a 100644 --- a/ci/build.go +++ b/ci/build.go @@ -6,6 +6,8 @@ import ( "time" "github.com/sourcegraph/conc/pool" + + "github.com/openmeterio/openmeter/ci/internal/dagger" ) // Build individual artifacts. (Useful for testing and development) @@ -17,7 +19,7 @@ func (m *Ci) Build() *Build { type Build struct { // +private - Source *Directory + Source *dagger.Directory } func (m *Build) All( @@ -25,7 +27,7 @@ func (m *Build) All( // Target platform in "[os]/[platform]/[version]" format (e.g., "darwin/arm64/v7", "windows/amd64", "linux/arm64"). // +optional - platform Platform, + platform dagger.Platform, ) error { p := pool.New().WithErrors().WithContext(ctx) @@ -36,13 +38,13 @@ func (m *Build) All( return p.Wait() } -func (m *Build) containerImages(version string) []*Container { - platforms := []Platform{ +func (m *Build) containerImages(version string) []*dagger.Container { + platforms := []dagger.Platform{ "linux/amd64", "linux/arm64", } - variants := make([]*Container, 0, len(platforms)) + variants := make([]*dagger.Container, 0, len(platforms)) for _, platform := range platforms { variants = append(variants, m.containerImage(platform, version)) @@ -55,13 +57,13 @@ func (m *Build) containerImages(version string) []*Container { func (m *Build) ContainerImage( // Target platform in "[os]/[platform]/[version]" format (e.g., "darwin/arm64/v7", "windows/amd64", "linux/arm64"). // +optional - platform Platform, -) *Container { + platform dagger.Platform, +) *dagger.Container { return m.containerImage(platform, "") } -func (m *Build) containerImage(platform Platform, version string) *Container { - return dag.Container(ContainerOpts{Platform: platform}). +func (m *Build) containerImage(platform dagger.Platform, version string) *dagger.Container { + return dag.Container(dagger.ContainerOpts{Platform: platform}). From(alpineBaseImage). WithLabel("org.opencontainers.image.title", "openmeter"). WithLabel("org.opencontainers.image.description", "Cloud Metering for AI, Billing and FinOps. Collect and aggregate millions of usage events in real-time."). @@ -69,7 +71,7 @@ func (m *Build) containerImage(platform Platform, version string) *Container { WithLabel("org.opencontainers.image.created", time.Now().String()). // TODO: embed commit timestamp WithLabel("org.opencontainers.image.source", "https://github.com/openmeterio/openmeter"). WithLabel("org.opencontainers.image.licenses", "Apache-2.0"). - With(func(c *Container) *Container { + With(func(c *dagger.Container) *dagger.Container { if version != "" { c = c.WithLabel("org.opencontainers.image.version", version) } @@ -90,7 +92,7 @@ func (m *Build) Binary() *Binary { type Binary struct { // +private - Source *Directory + Source *dagger.Directory } // Build all binaries. @@ -99,7 +101,7 @@ func (m *Binary) All( // Target platform in "[os]/[platform]/[version]" format (e.g., "darwin/arm64/v7", "windows/amd64", "linux/arm64"). // +optional - platform Platform, + platform dagger.Platform, ) error { p := pool.New().WithErrors().WithContext(ctx) @@ -114,12 +116,12 @@ func (m *Binary) All( func (m *Binary) Api( // Target platform in "[os]/[platform]/[version]" format (e.g., "darwin/arm64/v7", "windows/amd64", "linux/arm64"). // +optional - platform Platform, -) *File { + platform dagger.Platform, +) *dagger.File { return m.api(platform, "") } -func (m *Binary) api(platform Platform, version string) *File { +func (m *Binary) api(platform dagger.Platform, version string) *dagger.File { return m.buildCross(platform, version, "./cmd/server").WithName("server") } @@ -127,16 +129,16 @@ func (m *Binary) api(platform Platform, version string) *File { func (m *Binary) SinkWorker( // Target platform in "[os]/[platform]/[version]" format (e.g., "darwin/arm64/v7", "windows/amd64", "linux/arm64"). // +optional - platform Platform, -) *File { + platform dagger.Platform, +) *dagger.File { return m.sinkWorker(platform, "") } -func (m *Binary) sinkWorker(platform Platform, version string) *File { +func (m *Binary) sinkWorker(platform dagger.Platform, version string) *dagger.File { return m.buildCross(platform, version, "./cmd/sink-worker").WithName("sink-worker") } -func (m *Binary) buildCross(platform Platform, version string, pkg string) *File { +func (m *Binary) buildCross(platform dagger.Platform, version string, pkg string) *dagger.File { if version == "" { version = "unknown" } @@ -145,7 +147,7 @@ func (m *Binary) buildCross(platform Platform, version string, pkg string) *File binary := goMod. WithSource(m.Source). - Build(GoWithSourceBuildOpts{ + Build(dagger.GoWithSourceBuildOpts{ Pkg: pkg, Trimpath: true, Tags: []string{"musl"}, @@ -168,16 +170,16 @@ func (m *Binary) buildCross(platform Platform, version string, pkg string) *File func (m *Binary) BenthosCollector( // Target platform in "[os]/[platform]/[version]" format (e.g., "darwin/arm64/v7", "windows/amd64", "linux/arm64"). // +optional - platform Platform, -) *File { + platform dagger.Platform, +) *dagger.File { return m.benthosCollector(platform, "") } -func (m *Binary) benthosCollector(platform Platform, version string) *File { +func (m *Binary) benthosCollector(platform dagger.Platform, version string) *dagger.File { return m.build(platform, version, "./cmd/benthos-collector").WithName("benthos") } -func (m *Binary) build(platform Platform, version string, pkg string) *File { +func (m *Binary) build(platform dagger.Platform, version string, pkg string) *dagger.File { if version == "" { version = "unknown" } @@ -185,7 +187,7 @@ func (m *Binary) build(platform Platform, version string, pkg string) *File { return goModule(). WithSource(m.Source). WithPlatform(platform). - Build(GoWithSourceBuildOpts{ + Build(dagger.GoWithSourceBuildOpts{ Pkg: pkg, Trimpath: true, Ldflags: []string{ @@ -195,13 +197,13 @@ func (m *Binary) build(platform Platform, version string, pkg string) *File { }) } -func goModule() *Go { - return dag.Go(GoOpts{Version: goBuildVersion}). +func goModule() *dagger.Go { + return dag.Go(dagger.GoOpts{Version: goBuildVersion}). WithModuleCache(dag.CacheVolume("openmeter-go-mod-v2")). WithBuildCache(dag.CacheVolume("openmeter-go-build-v2")) } -func goModuleCross(platform Platform) *Go { +func goModuleCross(platform dagger.Platform) *dagger.Go { container := goModule(). WithCgoEnabled(). // TODO: set env var instead? Container(). @@ -211,7 +213,7 @@ func goModuleCross(platform Platform) *Go { WithExec([]string{"xx-apk", "add", "--update", "--no-cache", "musl-dev", "gcc"}). WithExec([]string{"xx-go", "--wrap"}) - return dag.Go(GoOpts{Container: container}) + return dag.Go(dagger.GoOpts{Container: container}) } func (m *Build) HelmChart( @@ -221,12 +223,12 @@ func (m *Build) HelmChart( // Release version. // +optional version string, -) *File { +) *dagger.File { return m.helmChart(name, version).File() } -func (m *Build) helmChart(name string, version string) *HelmPackage { - opts := HelmChartPackageOpts{ +func (m *Build) helmChart(name string, version string) *dagger.HelmPackage { + opts := dagger.HelmChartPackageOpts{ DependencyUpdate: true, } @@ -238,11 +240,11 @@ func (m *Build) helmChart(name string, version string) *HelmPackage { return helmChart(m.Source, name).Package(opts) } -func helmChart(source *Directory, name string) *HelmChart { +func helmChart(source *dagger.Directory, name string) *dagger.HelmChart { chart := source.Directory("deploy/charts").Directory(name) - readme := dag.HelmDocs(HelmDocsOpts{Version: helmDocsVersion}).Generate(chart, HelmDocsGenerateOpts{ - Templates: []*File{ + readme := dag.HelmDocs(dagger.HelmDocsOpts{Version: helmDocsVersion}).Generate(chart, dagger.HelmDocsGenerateOpts{ + Templates: []*dagger.File{ source.File("deploy/charts/template.md"), chart.File("README.tmpl.md"), }, @@ -251,5 +253,5 @@ func helmChart(source *Directory, name string) *HelmChart { chart = chart.WithFile("README.md", readme) - return dag.Helm(HelmOpts{Version: helmVersion}).Chart(chart) + return dag.Helm(dagger.HelmOpts{Version: helmVersion}).Chart(chart) } diff --git a/ci/e2e.go b/ci/e2e.go index 638851f90..9b7a9d91c 100644 --- a/ci/e2e.go +++ b/ci/e2e.go @@ -2,16 +2,18 @@ package main import ( "fmt" + + "github.com/openmeterio/openmeter/ci/internal/dagger" ) func (m *Ci) Etoe( // +optional test string, -) *Container { +) *dagger.Container { image := m.Build().ContainerImage(""). WithExposedPort(10000). WithMountedFile("/etc/openmeter/config.yaml", m.Source.File("e2e/config.yaml")). - WithServiceBinding("kafka", dag.Kafka(KafkaOpts{Version: kafkaVersion}).Service()). + WithServiceBinding("kafka", dag.Kafka(dagger.KafkaOpts{Version: kafkaVersion}).Service()). WithServiceBinding("clickhouse", clickhouse()) api := image. @@ -35,7 +37,7 @@ func (m *Ci) Etoe( args = append(args, "./e2e/...") - return dag.Go(GoOpts{ + return dag.Go(dagger.GoOpts{ Container: goModule(). WithSource(m.Source). Container(). @@ -47,7 +49,7 @@ func (m *Ci) Etoe( Exec(args) } -func clickhouse() *Service { +func clickhouse() *dagger.Service { return dag.Container(). From(fmt.Sprintf("clickhouse/clickhouse-server:%s-alpine", clickhouseVersion)). WithEnvVariable("CLICKHOUSE_USER", "default"). @@ -59,14 +61,14 @@ func clickhouse() *Service { AsService() } -func redis() *Service { +func redis() *dagger.Service { return dag.Container(). From(fmt.Sprintf("redis:%s-alpine", redisVersion)). WithExposedPort(6379). AsService() } -func postgres() *Service { +func postgres() *dagger.Service { return dag.Container(). From(fmt.Sprintf("postgres:%s", postgresVersion)). WithEnvVariable("POSTGRES_USER", "postgres"). diff --git a/ci/generate.go b/ci/generate.go index ccd3f2a35..6522f39a0 100644 --- a/ci/generate.go +++ b/ci/generate.go @@ -1,5 +1,7 @@ package main +import "github.com/openmeterio/openmeter/ci/internal/dagger" + // Generate various artifacts. func (m *Ci) Generate() *Generate { return &Generate{ @@ -9,11 +11,11 @@ func (m *Ci) Generate() *Generate { type Generate struct { // +private - Source *Directory + Source *dagger.Directory } // Generate the Python SDK. -func (m *Generate) PythonSdk() *Directory { +func (m *Generate) PythonSdk() *dagger.Directory { // We build our image as the official autorest Dockerfile is outdated // and not compatible with the latest autorest. // More specifically, the latest autorest npm package depends on @@ -33,7 +35,7 @@ func (m *Generate) PythonSdk() *Directory { } // Generate the Node SDK. -func (m *Generate) NodeSdk() *Directory { +func (m *Generate) NodeSdk() *dagger.Directory { return dag.Container(). From("node:20-alpine"). WithExec([]string{"npm", "install", "-g", "pnpm"}). @@ -47,7 +49,7 @@ func (m *Generate) NodeSdk() *Directory { } // Generate the Web SDK. -func (m *Generate) WebSdk() *Directory { +func (m *Generate) WebSdk() *dagger.Directory { return dag.Container(). From("node:20-alpine"). WithExec([]string{"npm", "install", "-g", "pnpm"}). diff --git a/ci/go.mod b/ci/go.mod index 8e1642c1d..b1cd98646 100644 --- a/ci/go.mod +++ b/ci/go.mod @@ -1,21 +1,21 @@ module github.com/openmeterio/openmeter/ci -go 1.22.2 +go 1.22.5 require ( github.com/99designs/gqlgen v0.17.49 github.com/Khan/genqlient v0.7.0 github.com/sourcegraph/conc v0.3.0 github.com/vektah/gqlparser/v2 v2.5.16 - go.opentelemetry.io/otel v1.27.0 + go.opentelemetry.io/otel v1.28.0 go.opentelemetry.io/otel/exporters/otlp/otlplog/otlploggrpc v0.0.0-20240619101304-773aec217df3 go.opentelemetry.io/otel/exporters/otlp/otlplog/otlploghttp v0.3.0 - go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.27.0 + go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.28.0 go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp v1.27.0 go.opentelemetry.io/otel/log v0.3.0 - go.opentelemetry.io/otel/sdk v1.27.0 + go.opentelemetry.io/otel/sdk v1.28.0 go.opentelemetry.io/otel/sdk/log v0.3.0 - go.opentelemetry.io/otel/trace v1.27.0 + go.opentelemetry.io/otel/trace v1.28.0 go.opentelemetry.io/proto/otlp v1.3.1 golang.org/x/exp v0.0.0-20231110203233-9a3e6036ecaa golang.org/x/sync v0.7.0 @@ -24,20 +24,21 @@ require ( require ( github.com/cenkalti/backoff/v4 v4.3.0 // indirect + github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc // indirect github.com/go-logr/logr v1.4.2 // indirect github.com/go-logr/stdr v1.2.2 // indirect github.com/google/uuid v1.6.0 // indirect github.com/grpc-ecosystem/grpc-gateway/v2 v2.20.0 // indirect + github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 // indirect github.com/sergi/go-diff v1.3.2-0.20230802210424-5b0b94c5c0d3 // indirect github.com/sosodev/duration v1.3.1 // indirect - go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.27.0 // indirect - go.opentelemetry.io/otel/metric v1.27.0 // indirect - go.uber.org/atomic v1.7.0 // indirect - go.uber.org/multierr v1.9.0 // indirect + go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.28.0 // indirect + go.opentelemetry.io/otel/metric v1.28.0 // indirect + go.uber.org/multierr v1.11.0 // indirect golang.org/x/net v0.26.0 // indirect golang.org/x/sys v0.21.0 // indirect golang.org/x/text v0.16.0 // indirect - google.golang.org/genproto/googleapis/api v0.0.0-20240520151616-dc85e6b867a5 // indirect - google.golang.org/genproto/googleapis/rpc v0.0.0-20240617180043-68d350f18fd4 // indirect + google.golang.org/genproto/googleapis/api v0.0.0-20240701130421-f6361c86f094 // indirect + google.golang.org/genproto/googleapis/rpc v0.0.0-20240701130421-f6361c86f094 // indirect google.golang.org/protobuf v1.34.2 // indirect ) diff --git a/ci/go.sum b/ci/go.sum index 60796320c..1b903382a 100644 --- a/ci/go.sum +++ b/ci/go.sum @@ -7,8 +7,8 @@ github.com/andreyvit/diff v0.0.0-20170406064948-c7f18ee00883/go.mod h1:rCTlJbsFo github.com/cenkalti/backoff/v4 v4.3.0 h1:MyRJ/UdXutAwSAT+s3wNd7MfTIcy71VQueUuFK343L8= github.com/cenkalti/backoff/v4 v4.3.0/go.mod h1:Y3VNntkOUPxTVeUxJ/G5vcM//AlwfmyYozVcomhLiZE= 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= +github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc h1:U9qPSI2PIWSS1VwoXQT9A3Wy9MM3WgvqSxFWenqJduM= github.com/go-logr/logr v1.2.2/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A= github.com/go-logr/logr v1.4.2 h1:6pFjapn8bFcIbiKo3XT4j/BhANplGihG6tvd+8rYgrY= github.com/go-logr/logr v1.4.2/go.mod h1:9T104GzyrTigFIr8wt5mBrctHMim0Nb2HLGrmQ40KvY= @@ -23,8 +23,8 @@ github.com/grpc-ecosystem/grpc-gateway/v2 v2.20.0/go.mod h1:P+Lt/0by1T8bfcF3z737 github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo= github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ= github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI= -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/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 h1:Jamvg5psRIccs7FGNTlIRMkT8wgtp5eCXdBlqhYGL6U= github.com/sergi/go-diff v1.3.2-0.20230802210424-5b0b94c5c0d3 h1:n661drycOFuPLCN3Uc8sB6B/s6Z4t2xvBgU1htSHuq8= github.com/sergi/go-diff v1.3.2-0.20230802210424-5b0b94c5c0d3/go.mod h1:A0bzQcvG0E7Rwjx0REVgAGH58e96+X0MeOfepqsbeW4= github.com/sosodev/duration v1.3.1 h1:qtHBDMQ6lvMQsL15g4aopM4HEfOaYuhWBw3NPTtlqq4= @@ -32,42 +32,32 @@ github.com/sosodev/duration v1.3.1/go.mod h1:RQIBBX0+fMLc/D9+Jb/fwvVmo0eZvDDEERA github.com/sourcegraph/conc v0.3.0 h1:OQTbbt6P72L20UqAkXXuLOj79LfEanQ+YQFNpLA9ySo= github.com/sourcegraph/conc v0.3.0/go.mod h1:Sdozi7LEKbFPqYX2/J+iBAM6HpqSLTASQIKqDmF7Mt0= 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.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4= github.com/stretchr/testify v1.9.0 h1:HtqpIVDClZ4nwg75+f6Lvsy/wHu+3BoSGCbBAcpTsTg= github.com/stretchr/testify v1.9.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY= github.com/vektah/gqlparser/v2 v2.5.16 h1:1gcmLTvs3JLKXckwCwlUagVn/IlV2bwqle0vJ0vy5p8= github.com/vektah/gqlparser/v2 v2.5.16/go.mod h1:1lz1OeCqgQbQepsGxPVywrjdBHW2T08PUS3pJqepRww= -go.opentelemetry.io/otel v1.27.0 h1:9BZoF3yMK/O1AafMiQTVu0YDj5Ea4hPhxCs7sGva+cg= -go.opentelemetry.io/otel v1.27.0/go.mod h1:DMpAK8fzYRzs+bi3rS5REupisuqTheUlSZJ1WnZaPAQ= +go.opentelemetry.io/otel v1.28.0 h1:/SqNcYk+idO0CxKEUOtKQClMK/MimZihKYMruSMViUo= go.opentelemetry.io/otel/exporters/otlp/otlplog/otlploggrpc v0.0.0-20240619101304-773aec217df3 h1:+Wdli3py2yZkUEnN6r1sBW8altSukTVnEEsAYzTBtus= go.opentelemetry.io/otel/exporters/otlp/otlplog/otlploggrpc v0.0.0-20240619101304-773aec217df3/go.mod h1:rf7KtfQ+evvgLpiKHIEx+2k+UWfzbxQ2G1nGlNqYEDQ= go.opentelemetry.io/otel/exporters/otlp/otlplog/otlploghttp v0.3.0 h1:ccBrA8nCY5mM0y5uO7FT0ze4S0TuFcWdDB2FxGMTjkI= go.opentelemetry.io/otel/exporters/otlp/otlplog/otlploghttp v0.3.0/go.mod h1:/9pb6634zi2Lk8LYg9Q0X8Ar6jka4dkFOylBLbVQPCE= -go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.27.0 h1:R9DE4kQ4k+YtfLI2ULwX82VtNQ2J8yZmA7ZIF/D+7Mc= -go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.27.0/go.mod h1:OQFyQVrDlbe+R7xrEyDr/2Wr67Ol0hRUgsfA+V5A95s= -go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.27.0 h1:qFffATk0X+HD+f1Z8lswGiOQYKHRlzfmdJm0wEaVrFA= -go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.27.0/go.mod h1:MOiCmryaYtc+V0Ei+Tx9o5S1ZjA7kzLucuVuyzBZloQ= +go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.28.0 h1:3Q/xZUyC1BBkualc9ROb4G8qkH90LXEIICcs5zv1OYY= +go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.28.0 h1:R3X6ZXmNPRR8ul6i3WgFURCHzaXjHdm0karRG/+dj3s= go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp v1.27.0 h1:QY7/0NeRPKlzusf40ZE4t1VlMKbqSNT7cJRYzWuja0s= go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp v1.27.0/go.mod h1:HVkSiDhTM9BoUJU8qE6j2eSWLLXvi1USXjyd2BXT8PY= go.opentelemetry.io/otel/log v0.3.0 h1:kJRFkpUFYtny37NQzL386WbznUByZx186DpEMKhEGZs= go.opentelemetry.io/otel/log v0.3.0/go.mod h1:ziCwqZr9soYDwGNbIL+6kAvQC+ANvjgG367HVcyR/ys= -go.opentelemetry.io/otel/metric v1.27.0 h1:hvj3vdEKyeCi4YaYfNjv2NUje8FqKqUY8IlF0FxV/ik= -go.opentelemetry.io/otel/metric v1.27.0/go.mod h1:mVFgmRlhljgBiuk/MP/oKylr4hs85GZAylncepAX/ak= -go.opentelemetry.io/otel/sdk v1.27.0 h1:mlk+/Y1gLPLn84U4tI8d3GNJmGT/eXe3ZuOXN9kTWmI= -go.opentelemetry.io/otel/sdk v1.27.0/go.mod h1:Ha9vbLwJE6W86YstIywK2xFfPjbWlCuwPtMkKdz/Y4A= +go.opentelemetry.io/otel/metric v1.28.0 h1:f0HGvSl1KRAU1DLgLGFjrwVyismPlnuU6JD6bOeuA5Q= +go.opentelemetry.io/otel/sdk v1.28.0 h1:b9d7hIry8yZsgtbmM0DKyPWMMUMlK9NEKuIG4aBqWyE= go.opentelemetry.io/otel/sdk/log v0.3.0 h1:GEjJ8iftz2l+XO1GF2856r7yYVh74URiF9JMcAacr5U= go.opentelemetry.io/otel/sdk/log v0.3.0/go.mod h1:BwCxtmux6ACLuys1wlbc0+vGBd+xytjmjajwqqIul2g= -go.opentelemetry.io/otel/trace v1.27.0 h1:IqYb813p7cmbHk0a5y6pD5JPakbVfftRXABGt5/Rscw= -go.opentelemetry.io/otel/trace v1.27.0/go.mod h1:6RiD1hkAprV4/q+yd2ln1HG9GoPx39SuvvstaLBl+l4= +go.opentelemetry.io/otel/trace v1.28.0 h1:GhQ9cUuQGmNDd5BTCP2dAvv75RdMxEfTmYejp+lkx9g= go.opentelemetry.io/proto/otlp v1.3.1 h1:TrMUixzpM0yuc/znrFTP9MMRh8trP93mkCiDVeXrui0= go.opentelemetry.io/proto/otlp v1.3.1/go.mod h1:0X1WI4de4ZsLrrJNLAQbFeLCm3T7yBkR0XqQ7niQU+8= -go.uber.org/atomic v1.7.0 h1:ADUqmZGgLDDfbSL9ZmPxKTybcoEYHgpYfELNoN+7hsw= -go.uber.org/atomic v1.7.0/go.mod h1:fEN4uk6kAWBTFdckzkM89CLk9XfWZrxpCo0nPH17wJc= 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.9.0 h1:7fIwc/ZtS0q++VgcfqFDxSBZVv/Xo49/SYnDFupUwlI= -go.uber.org/multierr v1.9.0/go.mod h1:X2jQV1h+kxSjClGpnseKVIxpmcjrj7MNnI0bnlfKTVQ= +go.uber.org/multierr v1.11.0 h1:blXXJkSxSSfBVBlC76pxqeO+LN3aDfLQo+309xJstO0= golang.org/x/exp v0.0.0-20231110203233-9a3e6036ecaa h1:FRnLl4eNAQl8hwxVVC17teOw8kdjVDVAiFMtgUdTSRQ= golang.org/x/exp v0.0.0-20231110203233-9a3e6036ecaa/go.mod h1:zk2irFbV9DP96SEBUUAy67IdHUaZuSnrz1n472HUCLE= golang.org/x/net v0.26.0 h1:soB7SVo0PWrY4vPW/+ay0jKDNScG2X9wFeYlXIvJsOQ= @@ -78,10 +68,8 @@ golang.org/x/sys v0.21.0 h1:rF+pYz3DAGSQAxAu1CbC7catZg4ebC4UIeIhKxBZvws= golang.org/x/sys v0.21.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= golang.org/x/text v0.16.0 h1:a94ExnEXNtEwYLGJSIUxnWoxoRz/ZcCsV63ROupILh4= golang.org/x/text v0.16.0/go.mod h1:GhwF1Be+LQoKShO3cGOHzqOgRrGaYc9AvblQOmPVHnI= -google.golang.org/genproto/googleapis/api v0.0.0-20240520151616-dc85e6b867a5 h1:P8OJ/WCl/Xo4E4zoe4/bifHpSmmKwARqyqE4nW6J2GQ= -google.golang.org/genproto/googleapis/api v0.0.0-20240520151616-dc85e6b867a5/go.mod h1:RGnPtTG7r4i8sPlNyDeikXF99hMM+hN6QMm4ooG9g2g= -google.golang.org/genproto/googleapis/rpc v0.0.0-20240617180043-68d350f18fd4 h1:Di6ANFilr+S60a4S61ZM00vLdw0IrQOSMS2/6mrnOU0= -google.golang.org/genproto/googleapis/rpc v0.0.0-20240617180043-68d350f18fd4/go.mod h1:Ue6ibwXGpU+dqIcODieyLOcgj7z8+IcskoNIgZxtrFY= +google.golang.org/genproto/googleapis/api v0.0.0-20240701130421-f6361c86f094 h1:0+ozOGcrp+Y8Aq8TLNN2Aliibms5LEzsq99ZZmAGYm0= +google.golang.org/genproto/googleapis/rpc v0.0.0-20240701130421-f6361c86f094 h1:BwIjyKYGsK9dMCBOorzRri8MQwmi7mT9rGHsCEinZkA= google.golang.org/grpc v1.64.0 h1:KH3VH9y/MgNQg1dE7b3XfVK0GsPSIzJwdF617gUSbvY= google.golang.org/grpc v1.64.0/go.mod h1:oxjF8E3FBnjp+/gVFYdWacaLDx9na1aqy9oovLpxQYg= google.golang.org/protobuf v1.34.2 h1:6xV6lTsCfpGD21XK49h7MhtcApnLqkfYgPcdHftf6hg= diff --git a/ci/lint.go b/ci/lint.go index 5c3b32c1e..ad88681d4 100644 --- a/ci/lint.go +++ b/ci/lint.go @@ -3,6 +3,7 @@ package main import ( "context" + "github.com/openmeterio/openmeter/ci/internal/dagger" "github.com/sourcegraph/conc/pool" ) @@ -13,7 +14,7 @@ func (m *Ci) Lint() *Lint { } type Lint struct { - Source *Directory + Source *dagger.Directory } func (m *Lint) All(ctx context.Context) error { @@ -26,19 +27,19 @@ func (m *Lint) All(ctx context.Context) error { return p.Wait() } -func (m *Lint) Go() *Container { - return dag.GolangciLint(GolangciLintOpts{ +func (m *Lint) Go() *dagger.Container { + return dag.GolangciLint(dagger.GolangciLintOpts{ Version: golangciLintVersion, GoVersion: goVersion, }). - Run(m.Source, GolangciLintRunOpts{ + Run(m.Source, dagger.GolangciLintRunOpts{ Verbose: true, }) } -func (m *Lint) Openapi() *Container { - return dag.Spectral(SpectralOpts{Version: spectralVersion}). - Lint([]*File{m.Source.File("api/openapi.yaml")}, m.Source.File(".spectral.yaml")) +func (m *Lint) Openapi() *dagger.Container { + return dag.Spectral(dagger.SpectralOpts{Version: spectralVersion}). + Lint([]*dagger.File{m.Source.File("api/openapi.yaml")}, m.Source.File(".spectral.yaml")) } func (m *Lint) Helm(ctx context.Context) error { diff --git a/ci/main.go b/ci/main.go index 831388eca..3b8c67492 100644 --- a/ci/main.go +++ b/ci/main.go @@ -4,25 +4,27 @@ import ( "context" "errors" "fmt" + + "github.com/openmeterio/openmeter/ci/internal/dagger" ) const ( // Alpine is required for our current build (due to Kafka and CGO), but it doesn't seem to work well with golangci-lint - goVersion = "1.22.4" - goBuildVersion = goVersion + "-alpine3.19@sha256:65b5d2d0a312fd9ef65551ad7f9cb5db1f209b7517ef6d5625cfd29248bc6c85" + goVersion = "1.22.5" + goBuildVersion = goVersion + "-alpine3.19@sha256:0642d4f809abf039440540de1f0e83502401686e3946ed8e7398a1d94648aa6d" xxBaseImage = "tonistiigi/xx:1.4.0@sha256:0cd3f05c72d6c9b038eb135f91376ee1169ef3a330d34e418e65e2a5c2e9c0d4" - golangciLintVersion = "v1.59.0" + golangciLintVersion = "v1.59.1" spectralVersion = "6.11" kafkaVersion = "3.6" clickhouseVersion = "23.3.9.55" redisVersion = "7.0.12" postgresVersion = "15.3" - helmDocsVersion = "v1.13.1" - helmVersion = "3.15.1" + helmDocsVersion = "v1.14.2" + helmVersion = "3.15.2" - alpineBaseImage = "alpine:3.20.0@sha256:77726ef6b57ddf65bb551896826ec38bc3e53f75cdde31354fbffb4f25238ebd" + alpineBaseImage = "alpine:3.20.1@sha256:b89d9c93e9ed3597455c90a0b88a8bbb5cb7188438f70953fede212a0c4394e0" ) type Ci struct { @@ -30,20 +32,20 @@ type Ci struct { // This will become useful once pulling from remote becomes available // // +private - Source *Directory + Source *dagger.Directory } func New( // Project source directory. // +optional - source *Directory, + source *dagger.Directory, // Checkout the repository (at the designated ref) and use it as the source directory instead of the local one. // +optional ref string, ) (*Ci, error) { if source == nil && ref != "" { - source = dag.Git("https://github.com/openmeterio/openmeter.git", GitOpts{ + source = dag.Git("https://github.com/openmeterio/openmeter.git", dagger.GitOpts{ KeepGitDir: true, }).Ref(ref).Tree() } @@ -82,7 +84,7 @@ func (m *Ci) Ci(ctx context.Context) error { return p.wait() } -func (m *Ci) Test() *Container { +func (m *Ci) Test() *dagger.Container { return dag.Go(). WithSource(m.Source). Container(). @@ -92,11 +94,11 @@ func (m *Ci) Test() *Container { } func (m *Ci) QuickstartTest( - service *Service, + service *dagger.Service, // +default=8888 port int, -) *Container { +) *dagger.Container { return dag.Go(). WithSource(m.Source). Container(). diff --git a/ci/release.go b/ci/release.go index 13cf50bb3..4058a81da 100644 --- a/ci/release.go +++ b/ci/release.go @@ -7,9 +7,11 @@ import ( "path" "strings" "time" + + "github.com/openmeterio/openmeter/ci/internal/dagger" ) -func (m *Ci) Release(ctx context.Context, version string, githubActor string, githubToken *Secret, pypiToken *Secret, npmToken *Secret) error { +func (m *Ci) Release(ctx context.Context, version string, githubActor string, githubToken *dagger.Secret, pypiToken *dagger.Secret, npmToken *dagger.Secret) error { p := newPipeline(ctx) p.addJobs( @@ -28,17 +30,15 @@ func (m *Ci) Release(ctx context.Context, version string, githubActor string, gi releaseAssets := m.releaseAssets(version) - _, err := dag.Gh(GhOpts{ + return dag.Gh(dagger.GhOpts{ Token: githubToken, Repo: "openmeterio/openmeter", - }).Release().Create(ctx, version, version, GhReleaseCreateOpts{ + }).Release().Create(ctx, version, version, dagger.GhReleaseCreateOpts{ Files: releaseAssets, GenerateNotes: true, Latest: true, VerifyTag: true, }) - - return err }, func(ctx context.Context) error { @@ -55,24 +55,22 @@ func (m *Ci) Release(ctx context.Context, version string, githubActor string, gi return p.wait() } -func (m *Ci) pushHelmChart(ctx context.Context, name string, version string, githubActor string, githubToken *Secret) error { - _, err := m.Build(). +func (m *Ci) pushHelmChart(ctx context.Context, name string, version string, githubActor string, githubToken *dagger.Secret) error { + return m.Build(). helmChart(name, version). WithRegistryAuth("ghcr.io", githubActor, githubToken). Publish(ctx, "oci://ghcr.io/openmeterio/helm-charts") - - return err } -func (m *Ci) releaseAssets(version string) []*File { +func (m *Ci) releaseAssets(version string) []*dagger.File { binaryArchives := m.binaryArchives(version) checksums := dag.Checksum().Sha256().Calculate(binaryArchives) return append(binaryArchives, checksums) } -func (m *Ci) binaryArchives(version string) []*File { - platforms := []Platform{ +func (m *Ci) binaryArchives(version string) []*dagger.File { + platforms := []dagger.Platform{ "linux/amd64", "linux/arm64", @@ -80,7 +78,7 @@ func (m *Ci) binaryArchives(version string) []*File { "darwin/arm64", } - archives := make([]*File, 0, len(platforms)) + archives := make([]*dagger.File, 0, len(platforms)) for _, platform := range platforms { archives = append(archives, m.binaryArchive(version, platform)) @@ -89,9 +87,9 @@ func (m *Ci) binaryArchives(version string) []*File { return archives } -func (m *Ci) binaryArchive(version string, platform Platform) *File { +func (m *Ci) binaryArchive(version string, platform dagger.Platform) *dagger.File { var archiver interface { - Archive(name string, source *Directory) *File + Archive(name string, source *dagger.Directory) *dagger.File } = dag.Archivist().TarGz() if strings.HasPrefix(string(platform), "windows/") { @@ -107,13 +105,13 @@ func (m *Ci) binaryArchive(version string, platform Platform) *File { ) } -func (m *Ci) publishPythonSdk(ctx context.Context, version string, pypiToken *Secret) error { - _, err := dag.Python(PythonOpts{ - Container: dag.Python(PythonOpts{Container: dag.Container().From("pypy:3.10-slim")}). +func (m *Ci) publishPythonSdk(ctx context.Context, version string, pypiToken *dagger.Secret) error { + _, err := dag.Python(dagger.PythonOpts{ + Container: dag.Python(dagger.PythonOpts{Container: dag.Container().From("pypy:3.10-slim")}). WithPipCache(dag.CacheVolume("openmeter-pip")). Container(). WithExec([]string{"pip", "--disable-pip-version-check", "install", "pipx"}). - WithEnvVariable("PATH", "${PATH}:/root/.local/bin", ContainerWithEnvVariableOpts{Expand: true}). + WithEnvVariable("PATH", "${PATH}:/root/.local/bin", dagger.ContainerWithEnvVariableOpts{Expand: true}). WithExec([]string{"pipx", "install", "poetry"}), }). WithSource(m.Source.Directory("api/client/python")). // TODO: generate SDK on the fly? @@ -128,17 +126,17 @@ func (m *Ci) publishPythonSdk(ctx context.Context, version string, pypiToken *Se return err } -func (m *Ci) publishNodeSdk(ctx context.Context, version string, npmToken *Secret) error { +func (m *Ci) publishNodeSdk(ctx context.Context, version string, npmToken *dagger.Secret) error { // TODO: generate SDK on the fly? return m.publishToNpm(ctx, "node", version, npmToken) } -func (m *Ci) publishWebSdk(ctx context.Context, version string, npmToken *Secret) error { +func (m *Ci) publishWebSdk(ctx context.Context, version string, npmToken *dagger.Secret) error { // TODO: generate SDK on the fly? return m.publishToNpm(ctx, "web", version, npmToken) } -func (m *Ci) publishToNpm(ctx context.Context, pkg string, version string, npmToken *Secret) error { +func (m *Ci) publishToNpm(ctx context.Context, pkg string, version string, npmToken *dagger.Secret) error { _, err := dag.Container(). From("node:20-alpine"). WithExec([]string{"npm", "install", "-g", "pnpm"}). diff --git a/ci/snapshot.go b/ci/snapshot.go index 852b39af6..7269fdbf0 100644 --- a/ci/snapshot.go +++ b/ci/snapshot.go @@ -1,8 +1,12 @@ package main -import "context" +import ( + "context" -func (m *Ci) Snapshot(ctx context.Context, stainlessToken *Secret) error { + "github.com/openmeterio/openmeter/ci/internal/dagger" +) + +func (m *Ci) Snapshot(ctx context.Context, stainlessToken *dagger.Secret) error { p := newPipeline(ctx) p.addJobs(func(ctx context.Context) error { @@ -12,7 +16,7 @@ func (m *Ci) Snapshot(ctx context.Context, stainlessToken *Secret) error { return p.wait() } -func (m *Ci) uploadOpenAPISpecToStainless(ctx context.Context, stainlessToken *Secret) error { +func (m *Ci) uploadOpenAPISpecToStainless(ctx context.Context, stainlessToken *dagger.Secret) error { _, err := dag.Stainless(stainlessToken).UploadSpec("openmeter", m.Source.File("api/openapi.yaml")).Sync(ctx) return err diff --git a/ci/utils.go b/ci/utils.go index 33c0d85ed..eb545f581 100644 --- a/ci/utils.go +++ b/ci/utils.go @@ -7,6 +7,8 @@ import ( "slices" "github.com/sourcegraph/conc/pool" + + "github.com/openmeterio/openmeter/ci/internal/dagger" ) func root() string { @@ -34,11 +36,11 @@ func exclude(paths ...string) []string { return append(slices.Clone(excludes), paths...) } -func projectDir() *Directory { +func projectDir() *dagger.Directory { return dag.CurrentModule().Source().Directory(root()) } -func buildDir() *Directory { +func buildDir() *dagger.Directory { return dag.CurrentModule().Source().Directory(root()) } diff --git a/dagger.json b/dagger.json index bda9b6734..37816e1d1 100644 --- a/dagger.json +++ b/dagger.json @@ -12,51 +12,51 @@ "dependencies": [ { "name": "archivist", - "source": "github.com/sagikazarmark/daggerverse/archivist@01d435953bfc7ac8185517d1e5634a5dde342c4a" + "source": "github.com/sagikazarmark/daggerverse/archivist@8f444e2c2b8e8162cea76d702086034ed3edc4f1" }, { "name": "checksum", - "source": "github.com/sagikazarmark/daggerverse/checksum@01d435953bfc7ac8185517d1e5634a5dde342c4a" + "source": "github.com/sagikazarmark/daggerverse/checksum@8f444e2c2b8e8162cea76d702086034ed3edc4f1" }, { "name": "gh", - "source": "github.com/sagikazarmark/daggerverse/gh@01d435953bfc7ac8185517d1e5634a5dde342c4a" + "source": "github.com/sagikazarmark/daggerverse/gh@8f444e2c2b8e8162cea76d702086034ed3edc4f1" }, { "name": "go", - "source": "github.com/sagikazarmark/daggerverse/go@01d435953bfc7ac8185517d1e5634a5dde342c4a" + "source": "github.com/sagikazarmark/daggerverse/go@8f444e2c2b8e8162cea76d702086034ed3edc4f1" }, { "name": "golangci-lint", - "source": "github.com/sagikazarmark/daggerverse/golangci-lint@01d435953bfc7ac8185517d1e5634a5dde342c4a" + "source": "github.com/sagikazarmark/daggerverse/golangci-lint@8f444e2c2b8e8162cea76d702086034ed3edc4f1" }, { "name": "helm", - "source": "github.com/sagikazarmark/daggerverse/helm@01d435953bfc7ac8185517d1e5634a5dde342c4a" + "source": "github.com/sagikazarmark/daggerverse/helm@8f444e2c2b8e8162cea76d702086034ed3edc4f1" }, { "name": "helm-docs", - "source": "github.com/sagikazarmark/daggerverse/helm-docs@01d435953bfc7ac8185517d1e5634a5dde342c4a" + "source": "github.com/sagikazarmark/daggerverse/helm-docs@8f444e2c2b8e8162cea76d702086034ed3edc4f1" }, { "name": "kafka", - "source": "github.com/sagikazarmark/daggerverse/kafka@01d435953bfc7ac8185517d1e5634a5dde342c4a" + "source": "github.com/sagikazarmark/daggerverse/kafka@8f444e2c2b8e8162cea76d702086034ed3edc4f1" }, { "name": "python", - "source": "github.com/sagikazarmark/daggerverse/python@01d435953bfc7ac8185517d1e5634a5dde342c4a" + "source": "github.com/sagikazarmark/daggerverse/python@8f444e2c2b8e8162cea76d702086034ed3edc4f1" }, { "name": "spectral", - "source": "github.com/sagikazarmark/daggerverse/spectral@01d435953bfc7ac8185517d1e5634a5dde342c4a" + "source": "github.com/sagikazarmark/daggerverse/spectral@8f444e2c2b8e8162cea76d702086034ed3edc4f1" }, { "name": "stainless", - "source": "github.com/sagikazarmark/daggerverse/stainless@01d435953bfc7ac8185517d1e5634a5dde342c4a" + "source": "github.com/sagikazarmark/daggerverse/stainless@8f444e2c2b8e8162cea76d702086034ed3edc4f1" } ], "source": "ci", - "engineVersion": "v0.11.8", + "engineVersion": "v0.12.0", "views": [ { "name": "default", diff --git a/flake.lock b/flake.lock index d937496a8..87ae29d2c 100644 --- a/flake.lock +++ b/flake.lock @@ -37,11 +37,11 @@ ] }, "locked": { - "lastModified": 1719271701, - "narHash": "sha256-KPPuK8Yq7QP/bmD97Ojn2SainL2KUEnWKp4WpCK0pwM=", + "lastModified": 1720794046, + "narHash": "sha256-er/LaTNiL/9HIY0Al8Hq+NsNLtN4MgS2Xb8Aq5Iv55s=", "owner": "dagger", "repo": "nix", - "rev": "08aa7a30f2cd6ae56a02f6a489485cd15a92313e", + "rev": "7ba0387345d742ae4e249fe2db18c477fdcba3f1", "type": "github" }, "original": { diff --git a/go.mod b/go.mod index 1cbf03dd8..815d3abf7 100644 --- a/go.mod +++ b/go.mod @@ -1,6 +1,6 @@ module github.com/openmeterio/openmeter -go 1.22.4 +go 1.22.5 replace github.com/getkin/kin-openapi => github.com/getkin/kin-openapi v0.123.0