Skip to content

Commit 55f4aba

Browse files
committed
feat: add new module for vault-action
1 parent ce3767c commit 55f4aba

9 files changed

Lines changed: 505 additions & 0 deletions

File tree

.github/workflows/ci.yml

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -75,6 +75,17 @@ jobs:
7575
- name: Validate module
7676
run: dagger -m ./python functions
7777

78+
vault-action-module:
79+
name: Validate vault-action module
80+
runs-on: ubuntu-latest
81+
steps:
82+
- uses: actions/checkout@v6
83+
- uses: dagger/dagger-for-github@v8.4.1
84+
with:
85+
version: "0.20.3"
86+
- name: Validate module
87+
run: dagger -m ./vault-action functions
88+
7889
release-please-module:
7990
name: Validate release-please module
8091
runs-on: ubuntu-latest

README.md

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@ Reusable Dagger modules for building, testing, and releasing software.
1717
| [npm](./npm) | Build, test, lint, and containerize Node.js applications |
1818
| [python](./python) | Build, test, lint, and containerize Python applications |
1919
| [release-please](./release-please) | Automate GitHub releases with release-please |
20+
| [vault-action](./vault-action) | Retrieve secrets from HashiCorp Vault KV v2 engine |
2021

2122
## Quick Start
2223

@@ -71,4 +72,13 @@ dagger call -m github.com/kdihalas/dagger/release-please --token env:GITHUB_TOKE
7172
--repo-url github.com/owner/repo
7273
```
7374

75+
### Vault Action Module
76+
77+
```bash
78+
dagger call -m github.com/kdihalas/dagger/vault-action \
79+
--url https://vault.example.com:8200 \
80+
--token env:VAULT_TOKEN \
81+
get-secret --mount secret --path myapp/config --key api-key
82+
```
83+
7484
See each module's README for full documentation and examples.

vault-action/.gitattributes

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
/dagger.gen.go linguist-generated
2+
/internal/dagger/** linguist-generated
3+
/internal/querybuilder/** linguist-generated
4+
/internal/telemetry/** linguist-generated

vault-action/.gitignore

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
/dagger.gen.go
2+
/internal/dagger
3+
/internal/querybuilder
4+
/internal/telemetry
5+
/.env

vault-action/README.md

Lines changed: 143 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,143 @@
1+
# Vault Action
2+
3+
Retrieve secrets from HashiCorp Vault KV v2 engine using GitHub OIDC (JWT) authentication.
4+
5+
## Requirements
6+
7+
- Dagger v0.20.3 or later
8+
- A running HashiCorp Vault instance with JWT auth method configured
9+
- A GitHub Actions workflow with `id-token: write` permission
10+
11+
## Constructor Parameters
12+
13+
| Parameter | Type | Required | Default | Description |
14+
|-----------|------|----------|---------|-------------|
15+
| `url` | `string` | yes || Vault server URL (e.g., `https://vault.example.com:8200`) |
16+
| `github-token` | `Secret` | yes || GitHub OIDC token (JWT) |
17+
| `role` | `string` | yes || Vault JWT auth role name |
18+
| `auth-mount` | `string` | no | `jwt` | Vault JWT auth mount path |
19+
| `namespace` | `string` | no | `""` | Vault namespace (for Vault Enterprise) |
20+
21+
## Functions
22+
23+
| Function | Description |
24+
|----------|-------------|
25+
| `get-secret` | Read a single field from a KV v2 secret, returned as a Dagger secret |
26+
| `get-secret-json` | Read all fields from a KV v2 secret, returned as JSON |
27+
28+
### get-secret
29+
30+
| Parameter | Type | Required | Default | Description |
31+
|-----------|------|----------|---------|-------------|
32+
| `mount` | `string` | yes || KV v2 mount path (e.g., `secret`) |
33+
| `path` | `string` | yes || Secret path within the mount |
34+
| `key` | `string` | yes || Field name to retrieve |
35+
| `name` | `string` | no | `vault-secret` | Name for the returned Dagger secret |
36+
37+
### get-secret-json
38+
39+
| Parameter | Type | Required | Default | Description |
40+
|-----------|------|----------|---------|-------------|
41+
| `mount` | `string` | yes || KV v2 mount path (e.g., `secret`) |
42+
| `path` | `string` | yes || Secret path within the mount |
43+
44+
## Usage
45+
46+
### Read a single secret field
47+
48+
```bash
49+
dagger call -m github.com/kdihalas/dagger/vault-action \
50+
--url https://vault.example.com:8200 \
51+
--github-token env:GITHUB_OIDC_TOKEN \
52+
--role my-github-role \
53+
get-secret --mount secret --path myapp/config --key api-key
54+
```
55+
56+
### Read all fields as JSON
57+
58+
```bash
59+
dagger call -m github.com/kdihalas/dagger/vault-action \
60+
--url https://vault.example.com:8200 \
61+
--github-token env:GITHUB_OIDC_TOKEN \
62+
--role my-github-role \
63+
get-secret-json --mount secret --path myapp/config
64+
```
65+
66+
### Use with Vault Enterprise namespaces
67+
68+
```bash
69+
dagger call -m github.com/kdihalas/dagger/vault-action \
70+
--url https://vault.example.com:8200 \
71+
--github-token env:GITHUB_OIDC_TOKEN \
72+
--role my-github-role \
73+
--namespace admin/team-a \
74+
get-secret --mount secret --path myapp/config --key db-password
75+
```
76+
77+
### Use in a Dagger pipeline (Go SDK)
78+
79+
```go
80+
secret := dag.VaultAction(
81+
"https://vault.example.com:8200",
82+
dag.SetSecret("oidc-token", os.Getenv("GITHUB_OIDC_TOKEN")),
83+
"my-github-role",
84+
).GetSecret("secret", "myapp/config", "db-password")
85+
86+
ctr := dag.Container().
87+
From("alpine:latest").
88+
WithSecretVariable("DB_PASSWORD", secret)
89+
```
90+
91+
## GitHub Actions
92+
93+
```yaml
94+
jobs:
95+
deploy:
96+
runs-on: ubuntu-latest
97+
permissions:
98+
contents: read
99+
id-token: write
100+
steps:
101+
- uses: actions/checkout@v6
102+
- uses: actions/github-script@v7
103+
id: oidc
104+
with:
105+
script: return await core.getIDToken("https://vault.example.com:8200")
106+
result-encoding: string
107+
- uses: dagger/dagger-for-github@v8.4.1
108+
with:
109+
version: "0.20.3"
110+
- name: Get secret from Vault
111+
run: |
112+
dagger call -m github.com/kdihalas/dagger/vault-action \
113+
--url https://vault.example.com:8200 \
114+
--github-token env:GITHUB_OIDC_TOKEN \
115+
--role my-github-role \
116+
get-secret --mount secret --path myapp/config --key api-key
117+
env:
118+
GITHUB_OIDC_TOKEN: ${{ steps.oidc.outputs.result }}
119+
```
120+
121+
## Vault Configuration
122+
123+
To use this module, configure Vault's JWT auth method to trust GitHub's OIDC provider:
124+
125+
```bash
126+
# Enable JWT auth method
127+
vault auth enable jwt
128+
129+
# Configure with GitHub's OIDC discovery
130+
vault write auth/jwt/config \
131+
oidc_discovery_url="https://token.actions.githubusercontent.com" \
132+
bound_issuer="https://token.actions.githubusercontent.com"
133+
134+
# Create a role bound to your repository
135+
vault write auth/jwt/role/my-github-role \
136+
bound_audiences="https://vault.example.com:8200" \
137+
bound_claims_type="glob" \
138+
bound_claims='{"sub": "repo:myorg/myrepo:*"}' \
139+
user_claim="actor" \
140+
role_type="jwt" \
141+
token_policies="my-policy" \
142+
token_ttl="10m"
143+
```

vault-action/dagger.json

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
{
2+
"name": "vault-action",
3+
"engineVersion": "v0.20.3",
4+
"sdk": {
5+
"source": "go"
6+
}
7+
}

vault-action/go.mod

Lines changed: 53 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,53 @@
1+
module dagger/vault-action
2+
3+
go 1.26.1
4+
5+
require (
6+
dagger.io/dagger v0.19.11
7+
github.com/Khan/genqlient v0.8.1
8+
github.com/dagger/otel-go v1.41.0
9+
github.com/vektah/gqlparser/v2 v2.5.30
10+
go.opentelemetry.io/otel v1.41.0
11+
go.opentelemetry.io/otel/trace v1.41.0
12+
)
13+
14+
require (
15+
github.com/99designs/gqlgen v0.17.81 // indirect
16+
github.com/cenkalti/backoff/v5 v5.0.3 // indirect
17+
github.com/cespare/xxhash/v2 v2.3.0 // indirect
18+
github.com/go-logr/logr v1.4.3 // indirect
19+
github.com/go-logr/stdr v1.2.2 // indirect
20+
github.com/google/uuid v1.6.0 // indirect
21+
github.com/grpc-ecosystem/grpc-gateway/v2 v2.28.0 // indirect
22+
github.com/sosodev/duration v1.3.1 // indirect
23+
go.opentelemetry.io/auto/sdk v1.2.1 // indirect
24+
go.opentelemetry.io/otel/exporters/otlp/otlplog/otlploggrpc v0.17.0 // indirect
25+
go.opentelemetry.io/otel/exporters/otlp/otlplog/otlploghttp v0.17.0 // indirect
26+
go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetricgrpc v1.41.0 // indirect
27+
go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetrichttp v1.41.0 // indirect
28+
go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.41.0 // indirect
29+
go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.41.0 // indirect
30+
go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp v1.41.0 // indirect
31+
go.opentelemetry.io/otel/log v0.17.0 // indirect
32+
go.opentelemetry.io/otel/metric v1.41.0 // indirect
33+
go.opentelemetry.io/otel/sdk v1.41.0
34+
go.opentelemetry.io/otel/sdk/log v0.17.0 // indirect
35+
go.opentelemetry.io/otel/sdk/metric v1.41.0 // indirect
36+
go.opentelemetry.io/proto/otlp v1.9.0 // indirect
37+
golang.org/x/net v0.51.0 // indirect
38+
golang.org/x/sync v0.19.0 // indirect
39+
golang.org/x/sys v0.41.0 // indirect
40+
golang.org/x/text v0.34.0 // indirect
41+
google.golang.org/genproto/googleapis/api v0.0.0-20260226221140-a57be14db171 // indirect
42+
google.golang.org/genproto/googleapis/rpc v0.0.0-20260226221140-a57be14db171 // indirect
43+
google.golang.org/grpc v1.79.1 // indirect
44+
google.golang.org/protobuf v1.36.11 // indirect
45+
)
46+
47+
replace go.opentelemetry.io/otel/exporters/otlp/otlplog/otlploggrpc => go.opentelemetry.io/otel/exporters/otlp/otlplog/otlploggrpc v0.16.0
48+
49+
replace go.opentelemetry.io/otel/exporters/otlp/otlplog/otlploghttp => go.opentelemetry.io/otel/exporters/otlp/otlplog/otlploghttp v0.16.0
50+
51+
replace go.opentelemetry.io/otel/log => go.opentelemetry.io/otel/log v0.16.0
52+
53+
replace go.opentelemetry.io/otel/sdk/log => go.opentelemetry.io/otel/sdk/log v0.16.0

vault-action/go.sum

Lines changed: 95 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,95 @@
1+
dagger.io/dagger v0.19.11 h1:Cra3wL1oaZsqXJcnPydocx3bIDD5tM7XCuwcn2Uh+2Q=
2+
dagger.io/dagger v0.19.11/go.mod h1:BjAJWl4Lx7XRW7nooNjBi0ZAC5Ici2pkthkdBIZdbTI=
3+
github.com/99designs/gqlgen v0.17.81 h1:kCkN/xVyRb5rEQpuwOHRTYq83i0IuTQg9vdIiwEerTs=
4+
github.com/99designs/gqlgen v0.17.81/go.mod h1:vgNcZlLwemsUhYim4dC1pvFP5FX0pr2Y+uYUoHFb1ig=
5+
github.com/Khan/genqlient v0.8.1 h1:wtOCc8N9rNynRLXN3k3CnfzheCUNKBcvXmVv5zt6WCs=
6+
github.com/Khan/genqlient v0.8.1/go.mod h1:R2G6DzjBvCbhjsEajfRjbWdVglSH/73kSivC9TLWVjU=
7+
github.com/andreyvit/diff v0.0.0-20170406064948-c7f18ee00883 h1:bvNMNQO63//z+xNgfBlViaCIJKLlCJ6/fmUseuG0wVQ=
8+
github.com/andreyvit/diff v0.0.0-20170406064948-c7f18ee00883/go.mod h1:rCTlJbsFo29Kk6CurOXKm700vrz8f0KW0JNfpkRJY/8=
9+
github.com/cenkalti/backoff/v5 v5.0.3 h1:ZN+IMa753KfX5hd8vVaMixjnqRZ3y8CuJKRKj1xcsSM=
10+
github.com/cenkalti/backoff/v5 v5.0.3/go.mod h1:rkhZdG3JZukswDf7f0cwqPNk4K0sa+F97BxZthm/crw=
11+
github.com/cespare/xxhash/v2 v2.3.0 h1:UL815xU9SqsFlibzuggzjXhog7bL6oX9BbNZnL2UFvs=
12+
github.com/cespare/xxhash/v2 v2.3.0/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs=
13+
github.com/dagger/otel-go v1.41.0 h1:GQAJtTM1Ja9Dt/JSSqqjCFVlCye09Ymx4dWUDRqcgKw=
14+
github.com/dagger/otel-go v1.41.0/go.mod h1:RP74B3xmOq2MWL1lBsAWD9uvTryDhZ+m1dDzJj9QJEI=
15+
github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c=
16+
github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
17+
github.com/go-logr/logr v1.2.2/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A=
18+
github.com/go-logr/logr v1.4.3 h1:CjnDlHq8ikf6E492q6eKboGOC0T8CDaOvkHCIg8idEI=
19+
github.com/go-logr/logr v1.4.3/go.mod h1:9T104GzyrTigFIr8wt5mBrctHMim0Nb2HLGrmQ40KvY=
20+
github.com/go-logr/stdr v1.2.2 h1:hSWxHoqTgW2S2qGc0LTAI563KZ5YKYRhT3MFKZMbjag=
21+
github.com/go-logr/stdr v1.2.2/go.mod h1:mMo/vtBO5dYbehREoey6XUKy/eSumjCCveDpRre4VKE=
22+
github.com/golang/protobuf v1.5.4 h1:i7eJL8qZTpSEXOPTxNKhASYpMn+8e5Q6AdndVa1dWek=
23+
github.com/golang/protobuf v1.5.4/go.mod h1:lnTiLA8Wa4RWRcIUkrtSVa5nRhsEGBg48fD6rSs7xps=
24+
github.com/google/go-cmp v0.7.0 h1:wk8382ETsv4JYUZwIsn6YpYiWiBsYLSJiTsyBybVuN8=
25+
github.com/google/go-cmp v0.7.0/go.mod h1:pXiqmnSA92OHEEa9HXL2W4E7lf9JzCmGVUdgjX3N/iU=
26+
github.com/google/uuid v1.6.0 h1:NIvaJDMOsjHA8n1jAhLSgzrAzy1Hgr+hNrb57e+94F0=
27+
github.com/google/uuid v1.6.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
28+
github.com/grpc-ecosystem/grpc-gateway/v2 v2.28.0 h1:HWRh5R2+9EifMyIHV7ZV+MIZqgz+PMpZ14Jynv3O2Zs=
29+
github.com/grpc-ecosystem/grpc-gateway/v2 v2.28.0/go.mod h1:JfhWUomR1baixubs02l85lZYYOm7LV6om4ceouMv45c=
30+
github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM=
31+
github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
32+
github.com/sergi/go-diff v1.3.1 h1:xkr+Oxo4BOQKmkn/B9eMK0g5Kg/983T9DqqPHwYqD+8=
33+
github.com/sergi/go-diff v1.3.1/go.mod h1:aMJSSKb2lpPvRNec0+w3fl7LP9IOFzdc9Pa4NFbPK1I=
34+
github.com/sosodev/duration v1.3.1 h1:qtHBDMQ6lvMQsL15g4aopM4HEfOaYuhWBw3NPTtlqq4=
35+
github.com/sosodev/duration v1.3.1/go.mod h1:RQIBBX0+fMLc/D9+Jb/fwvVmo0eZvDDEERAikUR6SDg=
36+
github.com/stretchr/testify v1.11.1 h1:7s2iGBzp5EwR7/aIZr8ao5+dra3wiQyKjjFuvgVKu7U=
37+
github.com/stretchr/testify v1.11.1/go.mod h1:wZwfW3scLgRK+23gO65QZefKpKQRnfz6sD981Nm4B6U=
38+
github.com/vektah/gqlparser/v2 v2.5.30 h1:EqLwGAFLIzt1wpx1IPpY67DwUujF1OfzgEyDsLrN6kE=
39+
github.com/vektah/gqlparser/v2 v2.5.30/go.mod h1:D1/VCZtV3LPnQrcPBeR/q5jkSQIPti0uYCP/RI0gIeo=
40+
go.opentelemetry.io/auto/sdk v1.2.1 h1:jXsnJ4Lmnqd11kwkBV2LgLoFMZKizbCi5fNZ/ipaZ64=
41+
go.opentelemetry.io/auto/sdk v1.2.1/go.mod h1:KRTj+aOaElaLi+wW1kO/DZRXwkF4C5xPbEe3ZiIhN7Y=
42+
go.opentelemetry.io/otel v1.41.0 h1:YlEwVsGAlCvczDILpUXpIpPSL/VPugt7zHThEMLce1c=
43+
go.opentelemetry.io/otel v1.41.0/go.mod h1:Yt4UwgEKeT05QbLwbyHXEwhnjxNO6D8L5PQP51/46dE=
44+
go.opentelemetry.io/otel/exporters/otlp/otlplog/otlploggrpc v0.16.0 h1:ZVg+kCXxd9LtAaQNKBxAvJ5NpMf7LpvEr4MIZqb0TMQ=
45+
go.opentelemetry.io/otel/exporters/otlp/otlplog/otlploggrpc v0.16.0/go.mod h1:hh0tMeZ75CCXrHd9OXRYxTlCAdxcXioWHFIpYw2rZu8=
46+
go.opentelemetry.io/otel/exporters/otlp/otlplog/otlploghttp v0.16.0 h1:djrxvDxAe44mJUrKataUbOhCKhR3F8QCyWucO16hTQs=
47+
go.opentelemetry.io/otel/exporters/otlp/otlplog/otlploghttp v0.16.0/go.mod h1:dt3nxpQEiSoKvfTVxp3TUg5fHPLhKtbcnN3Z1I1ePD0=
48+
go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetricgrpc v1.41.0 h1:VO3BL6OZXRQ1yQc8W6EVfJzINeJ35BkiHx4MYfoQf44=
49+
go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetricgrpc v1.41.0/go.mod h1:qRDnJ2nv3CQXMK2HUd9K9VtvedsPAce3S+/4LZHjX/s=
50+
go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetrichttp v1.41.0 h1:MMrOAN8H1FrvDyq9UJ4lu5/+ss49Qgfgb7Zpm0m8ABo=
51+
go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetrichttp v1.41.0/go.mod h1:Na+2NNASJtF+uT4NxDe0G+NQb+bUgdPDfwxY/6JmS/c=
52+
go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.41.0 h1:ao6Oe+wSebTlQ1OEht7jlYTzQKE+pnx/iNywFvTbuuI=
53+
go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.41.0/go.mod h1:u3T6vz0gh/NVzgDgiwkgLxpsSF6PaPmo2il0apGJbls=
54+
go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.41.0 h1:mq/Qcf28TWz719lE3/hMB4KkyDuLJIvgJnFGcd0kEUI=
55+
go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.41.0/go.mod h1:yk5LXEYhsL2htyDNJbEq7fWzNEigeEdV5xBF/Y+kAv0=
56+
go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp v1.41.0 h1:inYW9ZhgqiDqh6BioM7DVHHzEGVq76Db5897WLGZ5Go=
57+
go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp v1.41.0/go.mod h1:Izur+Wt8gClgMJqO/cZ8wdeeMryJ/xxiOVgFSSfpDTY=
58+
go.opentelemetry.io/otel/log v0.16.0 h1:DeuBPqCi6pQwtCK0pO4fvMB5eBq6sNxEnuTs88pjsN4=
59+
go.opentelemetry.io/otel/log v0.16.0/go.mod h1:rWsmqNVTLIA8UnwYVOItjyEZDbKIkMxdQunsIhpUMes=
60+
go.opentelemetry.io/otel/metric v1.41.0 h1:rFnDcs4gRzBcsO9tS8LCpgR0dxg4aaxWlJxCno7JlTQ=
61+
go.opentelemetry.io/otel/metric v1.41.0/go.mod h1:xPvCwd9pU0VN8tPZYzDZV/BMj9CM9vs00GuBjeKhJps=
62+
go.opentelemetry.io/otel/sdk v1.41.0 h1:YPIEXKmiAwkGl3Gu1huk1aYWwtpRLeskpV+wPisxBp8=
63+
go.opentelemetry.io/otel/sdk v1.41.0/go.mod h1:ahFdU0G5y8IxglBf0QBJXgSe7agzjE4GiTJ6HT9ud90=
64+
go.opentelemetry.io/otel/sdk/log v0.16.0 h1:e/b4bdlQwC5fnGtG3dlXUrNOnP7c8YLVSpSfEBIkTnI=
65+
go.opentelemetry.io/otel/sdk/log v0.16.0/go.mod h1:JKfP3T6ycy7QEuv3Hj8oKDy7KItrEkus8XJE6EoSzw4=
66+
go.opentelemetry.io/otel/sdk/log/logtest v0.16.0 h1:/XVkpZ41rVRTP4DfMgYv1nEtNmf65XPPyAdqV90TMy4=
67+
go.opentelemetry.io/otel/sdk/log/logtest v0.16.0/go.mod h1:iOOPgQr5MY9oac/F5W86mXdeyWZGleIx3uXO98X2R6Y=
68+
go.opentelemetry.io/otel/sdk/metric v1.41.0 h1:siZQIYBAUd1rlIWQT2uCxWJxcCO7q3TriaMlf08rXw8=
69+
go.opentelemetry.io/otel/sdk/metric v1.41.0/go.mod h1:HNBuSvT7ROaGtGI50ArdRLUnvRTRGniSUZbxiWxSO8Y=
70+
go.opentelemetry.io/otel/trace v1.41.0 h1:Vbk2co6bhj8L59ZJ6/xFTskY+tGAbOnCtQGVVa9TIN0=
71+
go.opentelemetry.io/otel/trace v1.41.0/go.mod h1:U1NU4ULCoxeDKc09yCWdWe+3QoyweJcISEVa1RBzOis=
72+
go.opentelemetry.io/proto/otlp v1.9.0 h1:l706jCMITVouPOqEnii2fIAuO3IVGBRPV5ICjceRb/A=
73+
go.opentelemetry.io/proto/otlp v1.9.0/go.mod h1:xE+Cx5E/eEHw+ISFkwPLwCZefwVjY+pqKg1qcK03+/4=
74+
go.uber.org/goleak v1.3.0 h1:2K3zAYmnTNqV73imy9J1T3WC+gmCePx2hEGkimedGto=
75+
go.uber.org/goleak v1.3.0/go.mod h1:CoHD4mav9JJNrW/WLlf7HGZPjdw8EucARQHekz1X6bE=
76+
golang.org/x/net v0.51.0 h1:94R/GTO7mt3/4wIKpcR5gkGmRLOuE/2hNGeWq/GBIFo=
77+
golang.org/x/net v0.51.0/go.mod h1:aamm+2QF5ogm02fjy5Bb7CQ0WMt1/WVM7FtyaTLlA9Y=
78+
golang.org/x/sync v0.19.0 h1:vV+1eWNmZ5geRlYjzm2adRgW2/mcpevXNg50YZtPCE4=
79+
golang.org/x/sync v0.19.0/go.mod h1:9KTHXmSnoGruLpwFjVSX0lNNA75CykiMECbovNTZqGI=
80+
golang.org/x/sys v0.41.0 h1:Ivj+2Cp/ylzLiEU89QhWblYnOE9zerudt9Ftecq2C6k=
81+
golang.org/x/sys v0.41.0/go.mod h1:OgkHotnGiDImocRcuBABYBEXf8A9a87e/uXjp9XT3ks=
82+
golang.org/x/text v0.34.0 h1:oL/Qq0Kdaqxa1KbNeMKwQq0reLCCaFtqu2eNuSeNHbk=
83+
golang.org/x/text v0.34.0/go.mod h1:homfLqTYRFyVYemLBFl5GgL/DWEiH5wcsQ5gSh1yziA=
84+
gonum.org/v1/gonum v0.16.0 h1:5+ul4Swaf3ESvrOnidPp4GZbzf0mxVQpDCYUQE7OJfk=
85+
gonum.org/v1/gonum v0.16.0/go.mod h1:fef3am4MQ93R2HHpKnLk4/Tbh/s0+wqD5nfa6Pnwy4E=
86+
google.golang.org/genproto/googleapis/api v0.0.0-20260226221140-a57be14db171 h1:tu/dtnW1o3wfaxCOjSLn5IRX4YDcJrtlpzYkhHhGaC4=
87+
google.golang.org/genproto/googleapis/api v0.0.0-20260226221140-a57be14db171/go.mod h1:M5krXqk4GhBKvB596udGL3UyjL4I1+cTbK0orROM9ng=
88+
google.golang.org/genproto/googleapis/rpc v0.0.0-20260226221140-a57be14db171 h1:ggcbiqK8WWh6l1dnltU4BgWGIGo+EVYxCaAPih/zQXQ=
89+
google.golang.org/genproto/googleapis/rpc v0.0.0-20260226221140-a57be14db171/go.mod h1:4Hqkh8ycfw05ld/3BWL7rJOSfebL2Q+DVDeRgYgxUU8=
90+
google.golang.org/grpc v1.79.1 h1:zGhSi45ODB9/p3VAawt9a+O/MULLl9dpizzNNpq7flY=
91+
google.golang.org/grpc v1.79.1/go.mod h1:KmT0Kjez+0dde/v2j9vzwoAScgEPx/Bw1CYChhHLrHQ=
92+
google.golang.org/protobuf v1.36.11 h1:fV6ZwhNocDyBLK0dj+fg8ektcVegBBuEolpbTQyBNVE=
93+
google.golang.org/protobuf v1.36.11/go.mod h1:HTf+CrKn2C3g5S8VImy6tdcUvCska2kB7j23XfzDpco=
94+
gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA=
95+
gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=

0 commit comments

Comments
 (0)