├── LICENSE ├── codecov ├── .gitattributes ├── .gitignore ├── dagger.json ├── go.mod ├── go.sum ├── main └── main.go ├── dockerd ├── .gitattributes ├── .gitignore ├── README.md ├── dagger.json ├── go.mod ├── go.sum ├── main └── main.go ├── encircle ├── .gitattributes ├── .gitignore ├── README.md ├── circle │ ├── config.go │ ├── go.mod │ ├── go.sum │ ├── orb.go │ └── step.go ├── dagger.json ├── example.gql ├── executor.go ├── go.mod ├── go.sum └── main.go ├── examples ├── .gitignore ├── coverage.out ├── dagger.json ├── go.mod ├── go.sum └── main.go ├── fly ├── .gitignore ├── README.md ├── dagger.json ├── pyproject.toml └── src │ └── main.py ├── foo ├── .gitignore ├── dagger.json ├── go.mod ├── go.sum └── main.go ├── golang ├── .gitattributes ├── .gitignore ├── README.md ├── dagger.json ├── go.mod ├── go.sum └── main.go ├── kind ├── .gitattributes ├── .gitignore ├── dagger.json ├── go.mod ├── go.sum └── main.go ├── mdk ├── .gitattributes ├── .gitignore ├── dagger.json ├── generate.go ├── go.mod ├── go.sum └── main.go ├── netlify ├── .gitattributes ├── .gitignore ├── README.md ├── build │ └── lib │ │ └── main.py ├── dagger.json ├── pyproject.toml └── src │ ├── main.egg-info │ ├── PKG-INFO │ ├── SOURCES.txt │ ├── dependency_links.txt │ └── top_level.txt │ └── main.py ├── nginx ├── .gitattributes ├── .gitignore ├── dagger.json ├── go.mod ├── go.sum └── main.go ├── postgres ├── .gitattributes ├── .gitignore ├── dagger.json ├── go.mod ├── go.sum └── main.go ├── proxy ├── .gitattributes ├── .gitignore ├── README.md ├── dagger.json ├── examples │ ├── go │ │ ├── .gitattributes │ │ ├── .gitignore │ │ ├── dagger.json │ │ ├── go.mod │ │ ├── go.sum │ │ └── main.go │ ├── python │ │ ├── .gitattributes │ │ ├── .gitignore │ │ ├── dagger.json │ │ ├── pyproject.toml │ │ ├── src │ │ │ └── main │ │ │ │ └── __init__.py │ │ └── uv.lock │ ├── shell │ │ ├── proxy_postgres.sh │ │ ├── proxy_service.sh │ │ └── proxy_with_service.sh │ └── typescript │ │ ├── .gitattributes │ │ ├── .gitignore │ │ ├── dagger.json │ │ ├── package.json │ │ ├── src │ │ └── index.ts │ │ ├── tsconfig.json │ │ └── yarn.lock ├── pyproject.toml └── src │ └── main.py ├── ruff ├── .gitattributes ├── .gitignore ├── dagger.json ├── pyproject.toml └── src │ └── main.py ├── secrets-provider ├── .gitattributes ├── .gitignore ├── dagger.json ├── example │ └── go │ │ ├── .gitattributes │ │ ├── .gitignore │ │ ├── dagger.json │ │ ├── go.mod │ │ ├── go.sum │ │ ├── infdagger_call_demo │ │ ├── main.go │ │ └── opdagger_call_demo ├── go.mod ├── go.sum ├── main.go └── providers │ ├── 1password │ ├── .gitattributes │ ├── .gitignore │ ├── dagger.json │ ├── go.mod │ ├── go.sum │ └── main.go │ └── infisical │ ├── .gitattributes │ ├── .gitignore │ ├── dagger.json │ ├── go.mod │ ├── go.sum │ └── main.go ├── secretsmanager ├── .gitattributes ├── .gitignore ├── README.md ├── dagger.json ├── go.mod ├── go.sum ├── main.go └── secretsmanager ├── utils ├── .gitattributes ├── .gitignore ├── dagger.json ├── go.mod ├── go.sum └── main.go └── vault ├── .gitattributes ├── .gitignore ├── README.md ├── dagger.json ├── go.mod ├── go.sum ├── main.go └── vault /codecov/.gitattributes: -------------------------------------------------------------------------------- 1 | /dagger.gen.go linguist-generated 2 | /querybuilder/** linguist-generated 3 | /internal/dagger/** linguist-generated 4 | /internal/querybuilder/** linguist-generated 5 | /internal/telemetry/** linguist-generated 6 | -------------------------------------------------------------------------------- /codecov/.gitignore: -------------------------------------------------------------------------------- 1 | /dagger.gen.go 2 | /internal/querybuilder/ 3 | /querybuilder/ 4 | /internal/dagger 5 | /internal/telemetry 6 | -------------------------------------------------------------------------------- /codecov/dagger.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "codecov", 3 | "sdk": "go", 4 | "source": ".", 5 | "engineVersion": "v0.12.5" 6 | } 7 | -------------------------------------------------------------------------------- /codecov/go.mod: -------------------------------------------------------------------------------- 1 | module main 2 | 3 | go 1.21.3 4 | 5 | require ( 6 | github.com/99designs/gqlgen v0.17.49 7 | github.com/Khan/genqlient v0.7.0 8 | golang.org/x/exp v0.0.0-20231110203233-9a3e6036ecaa 9 | golang.org/x/sync v0.7.0 10 | ) 11 | 12 | require ( 13 | github.com/cenkalti/backoff/v4 v4.3.0 // indirect 14 | github.com/go-logr/logr v1.4.1 // indirect 15 | github.com/go-logr/stdr v1.2.2 // indirect 16 | github.com/google/uuid v1.6.0 // indirect 17 | github.com/grpc-ecosystem/grpc-gateway/v2 v2.20.0 // indirect 18 | github.com/sergi/go-diff v1.3.2-0.20230802210424-5b0b94c5c0d3 // indirect 19 | github.com/sosodev/duration v1.3.1 // indirect 20 | github.com/vektah/gqlparser/v2 v2.5.16 21 | go.opentelemetry.io/otel v1.27.0 22 | go.opentelemetry.io/otel/exporters/otlp/otlplog/otlploggrpc v0.0.0-20240518090000-14441aefdf88 23 | go.opentelemetry.io/otel/exporters/otlp/otlplog/otlploghttp v0.3.0 24 | go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.27.0 // indirect 25 | go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.27.0 26 | go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp v1.27.0 27 | go.opentelemetry.io/otel/log v0.3.0 28 | go.opentelemetry.io/otel/metric v1.27.0 // indirect 29 | go.opentelemetry.io/otel/sdk v1.27.0 30 | go.opentelemetry.io/otel/sdk/log v0.3.0 31 | go.opentelemetry.io/otel/trace v1.27.0 32 | go.opentelemetry.io/proto/otlp v1.3.1 33 | golang.org/x/net v0.26.0 // indirect 34 | golang.org/x/sys v0.21.0 // indirect 35 | golang.org/x/text v0.16.0 // indirect 36 | google.golang.org/genproto/googleapis/api v0.0.0-20240520151616-dc85e6b867a5 // indirect 37 | google.golang.org/genproto/googleapis/rpc v0.0.0-20240515191416-fc5f0ca64291 // indirect 38 | google.golang.org/grpc v1.64.0 39 | google.golang.org/protobuf v1.34.1 // indirect 40 | ) 41 | -------------------------------------------------------------------------------- /codecov/go.sum: -------------------------------------------------------------------------------- 1 | github.com/99designs/gqlgen v0.17.49 h1:b3hNGexHd33fBSAd4NDT/c3NCcQzcAVkknhN9ym36YQ= 2 | github.com/99designs/gqlgen v0.17.49/go.mod h1:tC8YFVZMed81x7UJ7ORUwXF4Kn6SXuucFqQBhN8+BU0= 3 | github.com/Khan/genqlient v0.7.0 h1:GZ1meyRnzcDTK48EjqB8t3bcfYvHArCUUvgOwpz1D4w= 4 | github.com/Khan/genqlient v0.7.0/go.mod h1:HNyy3wZvuYwmW3Y7mkoQLZsa/R5n5yIRajS1kPBvSFM= 5 | github.com/andreyvit/diff v0.0.0-20170406064948-c7f18ee00883 h1:bvNMNQO63//z+xNgfBlViaCIJKLlCJ6/fmUseuG0wVQ= 6 | github.com/andreyvit/diff v0.0.0-20170406064948-c7f18ee00883/go.mod h1:rCTlJbsFo29Kk6CurOXKm700vrz8f0KW0JNfpkRJY/8= 7 | github.com/cenkalti/backoff/v4 v4.3.0 h1:MyRJ/UdXutAwSAT+s3wNd7MfTIcy71VQueUuFK343L8= 8 | github.com/cenkalti/backoff/v4 v4.3.0/go.mod h1:Y3VNntkOUPxTVeUxJ/G5vcM//AlwfmyYozVcomhLiZE= 9 | github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= 10 | github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= 11 | github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= 12 | github.com/go-logr/logr v1.2.2/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A= 13 | github.com/go-logr/logr v1.4.1 h1:pKouT5E8xu9zeFC39JXRDukb6JFQPXM5p5I91188VAQ= 14 | github.com/go-logr/logr v1.4.1/go.mod h1:9T104GzyrTigFIr8wt5mBrctHMim0Nb2HLGrmQ40KvY= 15 | github.com/go-logr/stdr v1.2.2 h1:hSWxHoqTgW2S2qGc0LTAI563KZ5YKYRhT3MFKZMbjag= 16 | github.com/go-logr/stdr v1.2.2/go.mod h1:mMo/vtBO5dYbehREoey6XUKy/eSumjCCveDpRre4VKE= 17 | github.com/google/go-cmp v0.6.0 h1:ofyhxvXcZhMsU5ulbFiLKl/XBFqE1GSq7atu8tAmTRI= 18 | github.com/google/go-cmp v0.6.0/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= 19 | github.com/google/uuid v1.6.0 h1:NIvaJDMOsjHA8n1jAhLSgzrAzy1Hgr+hNrb57e+94F0= 20 | github.com/google/uuid v1.6.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= 21 | github.com/grpc-ecosystem/grpc-gateway/v2 v2.20.0 h1:bkypFPDjIYGfCYD5mRBvpqxfYX1YCS1PXdKYWi8FsN0= 22 | github.com/grpc-ecosystem/grpc-gateway/v2 v2.20.0/go.mod h1:P+Lt/0by1T8bfcF3z737NnSbmxQAppXMRziHUxPOC8k= 23 | github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo= 24 | github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ= 25 | github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI= 26 | github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= 27 | github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= 28 | github.com/sergi/go-diff v1.3.2-0.20230802210424-5b0b94c5c0d3 h1:n661drycOFuPLCN3Uc8sB6B/s6Z4t2xvBgU1htSHuq8= 29 | github.com/sergi/go-diff v1.3.2-0.20230802210424-5b0b94c5c0d3/go.mod h1:A0bzQcvG0E7Rwjx0REVgAGH58e96+X0MeOfepqsbeW4= 30 | github.com/sosodev/duration v1.3.1 h1:qtHBDMQ6lvMQsL15g4aopM4HEfOaYuhWBw3NPTtlqq4= 31 | github.com/sosodev/duration v1.3.1/go.mod h1:RQIBBX0+fMLc/D9+Jb/fwvVmo0eZvDDEERAikUR6SDg= 32 | github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= 33 | github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4= 34 | github.com/stretchr/testify v1.9.0 h1:HtqpIVDClZ4nwg75+f6Lvsy/wHu+3BoSGCbBAcpTsTg= 35 | github.com/stretchr/testify v1.9.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY= 36 | github.com/vektah/gqlparser/v2 v2.5.16 h1:1gcmLTvs3JLKXckwCwlUagVn/IlV2bwqle0vJ0vy5p8= 37 | github.com/vektah/gqlparser/v2 v2.5.16/go.mod h1:1lz1OeCqgQbQepsGxPVywrjdBHW2T08PUS3pJqepRww= 38 | go.opentelemetry.io/otel v1.27.0 h1:9BZoF3yMK/O1AafMiQTVu0YDj5Ea4hPhxCs7sGva+cg= 39 | go.opentelemetry.io/otel v1.27.0/go.mod h1:DMpAK8fzYRzs+bi3rS5REupisuqTheUlSZJ1WnZaPAQ= 40 | go.opentelemetry.io/otel/exporters/otlp/otlplog/otlploggrpc v0.0.0-20240518090000-14441aefdf88 h1:oM0GTNKGlc5qHctWeIGTVyda4iFFalOzMZ3Ehj5rwB4= 41 | go.opentelemetry.io/otel/exporters/otlp/otlplog/otlploggrpc v0.0.0-20240518090000-14441aefdf88/go.mod h1:JGG8ebaMO5nXOPnvKEl+DiA4MGwFjCbjsxT1WHIEBPY= 42 | go.opentelemetry.io/otel/exporters/otlp/otlplog/otlploghttp v0.3.0 h1:ccBrA8nCY5mM0y5uO7FT0ze4S0TuFcWdDB2FxGMTjkI= 43 | go.opentelemetry.io/otel/exporters/otlp/otlplog/otlploghttp v0.3.0/go.mod h1:/9pb6634zi2Lk8LYg9Q0X8Ar6jka4dkFOylBLbVQPCE= 44 | go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.27.0 h1:R9DE4kQ4k+YtfLI2ULwX82VtNQ2J8yZmA7ZIF/D+7Mc= 45 | go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.27.0/go.mod h1:OQFyQVrDlbe+R7xrEyDr/2Wr67Ol0hRUgsfA+V5A95s= 46 | go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.27.0 h1:qFffATk0X+HD+f1Z8lswGiOQYKHRlzfmdJm0wEaVrFA= 47 | go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.27.0/go.mod h1:MOiCmryaYtc+V0Ei+Tx9o5S1ZjA7kzLucuVuyzBZloQ= 48 | go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp v1.27.0 h1:QY7/0NeRPKlzusf40ZE4t1VlMKbqSNT7cJRYzWuja0s= 49 | go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp v1.27.0/go.mod h1:HVkSiDhTM9BoUJU8qE6j2eSWLLXvi1USXjyd2BXT8PY= 50 | go.opentelemetry.io/otel/log v0.3.0 h1:kJRFkpUFYtny37NQzL386WbznUByZx186DpEMKhEGZs= 51 | go.opentelemetry.io/otel/log v0.3.0/go.mod h1:ziCwqZr9soYDwGNbIL+6kAvQC+ANvjgG367HVcyR/ys= 52 | go.opentelemetry.io/otel/metric v1.27.0 h1:hvj3vdEKyeCi4YaYfNjv2NUje8FqKqUY8IlF0FxV/ik= 53 | go.opentelemetry.io/otel/metric v1.27.0/go.mod h1:mVFgmRlhljgBiuk/MP/oKylr4hs85GZAylncepAX/ak= 54 | go.opentelemetry.io/otel/sdk v1.27.0 h1:mlk+/Y1gLPLn84U4tI8d3GNJmGT/eXe3ZuOXN9kTWmI= 55 | go.opentelemetry.io/otel/sdk v1.27.0/go.mod h1:Ha9vbLwJE6W86YstIywK2xFfPjbWlCuwPtMkKdz/Y4A= 56 | go.opentelemetry.io/otel/sdk/log v0.3.0 h1:GEjJ8iftz2l+XO1GF2856r7yYVh74URiF9JMcAacr5U= 57 | go.opentelemetry.io/otel/sdk/log v0.3.0/go.mod h1:BwCxtmux6ACLuys1wlbc0+vGBd+xytjmjajwqqIul2g= 58 | go.opentelemetry.io/otel/trace v1.27.0 h1:IqYb813p7cmbHk0a5y6pD5JPakbVfftRXABGt5/Rscw= 59 | go.opentelemetry.io/otel/trace v1.27.0/go.mod h1:6RiD1hkAprV4/q+yd2ln1HG9GoPx39SuvvstaLBl+l4= 60 | go.opentelemetry.io/proto/otlp v1.3.1 h1:TrMUixzpM0yuc/znrFTP9MMRh8trP93mkCiDVeXrui0= 61 | go.opentelemetry.io/proto/otlp v1.3.1/go.mod h1:0X1WI4de4ZsLrrJNLAQbFeLCm3T7yBkR0XqQ7niQU+8= 62 | go.uber.org/goleak v1.3.0 h1:2K3zAYmnTNqV73imy9J1T3WC+gmCePx2hEGkimedGto= 63 | go.uber.org/goleak v1.3.0/go.mod h1:CoHD4mav9JJNrW/WLlf7HGZPjdw8EucARQHekz1X6bE= 64 | golang.org/x/exp v0.0.0-20231110203233-9a3e6036ecaa h1:FRnLl4eNAQl8hwxVVC17teOw8kdjVDVAiFMtgUdTSRQ= 65 | golang.org/x/exp v0.0.0-20231110203233-9a3e6036ecaa/go.mod h1:zk2irFbV9DP96SEBUUAy67IdHUaZuSnrz1n472HUCLE= 66 | golang.org/x/net v0.26.0 h1:soB7SVo0PWrY4vPW/+ay0jKDNScG2X9wFeYlXIvJsOQ= 67 | golang.org/x/net v0.26.0/go.mod h1:5YKkiSynbBIh3p6iOc/vibscux0x38BZDkn8sCUPxHE= 68 | golang.org/x/sync v0.7.0 h1:YsImfSBoP9QPYL0xyKJPq0gcaJdG3rInoqxTWbfQu9M= 69 | golang.org/x/sync v0.7.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk= 70 | golang.org/x/sys v0.21.0 h1:rF+pYz3DAGSQAxAu1CbC7catZg4ebC4UIeIhKxBZvws= 71 | golang.org/x/sys v0.21.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= 72 | golang.org/x/text v0.16.0 h1:a94ExnEXNtEwYLGJSIUxnWoxoRz/ZcCsV63ROupILh4= 73 | golang.org/x/text v0.16.0/go.mod h1:GhwF1Be+LQoKShO3cGOHzqOgRrGaYc9AvblQOmPVHnI= 74 | google.golang.org/genproto/googleapis/api v0.0.0-20240520151616-dc85e6b867a5 h1:P8OJ/WCl/Xo4E4zoe4/bifHpSmmKwARqyqE4nW6J2GQ= 75 | google.golang.org/genproto/googleapis/api v0.0.0-20240520151616-dc85e6b867a5/go.mod h1:RGnPtTG7r4i8sPlNyDeikXF99hMM+hN6QMm4ooG9g2g= 76 | google.golang.org/genproto/googleapis/rpc v0.0.0-20240515191416-fc5f0ca64291 h1:AgADTJarZTBqgjiUzRgfaBchgYB3/WFTC80GPwsMcRI= 77 | google.golang.org/genproto/googleapis/rpc v0.0.0-20240515191416-fc5f0ca64291/go.mod h1:EfXuqaE1J41VCDicxHzUDm+8rk+7ZdXzHV0IhO/I6s0= 78 | google.golang.org/grpc v1.64.0 h1:KH3VH9y/MgNQg1dE7b3XfVK0GsPSIzJwdF617gUSbvY= 79 | google.golang.org/grpc v1.64.0/go.mod h1:oxjF8E3FBnjp+/gVFYdWacaLDx9na1aqy9oovLpxQYg= 80 | google.golang.org/protobuf v1.34.1 h1:9ddQBjfCyZPOHPUiPxpYESBLc+T8P3E+Vo4IbKZgFWg= 81 | google.golang.org/protobuf v1.34.1/go.mod h1:c6P6GXX6sHbq/GpV6MGZEdwhWPcYBgnhAHhKbcUYpos= 82 | gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= 83 | gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= 84 | gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= 85 | gopkg.in/yaml.v2 v2.4.0/go.mod h1:RDklbk79AGWmwhnvt/jBztapEOGDOx6ZbXqjP6csGnQ= 86 | gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= 87 | gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= 88 | -------------------------------------------------------------------------------- /codecov/main: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kpenfound/dagger-modules/f7964245d0146dd3810f247c6c09eb33518d4654/codecov/main -------------------------------------------------------------------------------- /codecov/main.go: -------------------------------------------------------------------------------- 1 | // Upload coverage reports to Codecov 2 | // 3 | // A module for uploading test coverage reports to Codecov 4 | 5 | package main 6 | 7 | import ( 8 | "context" 9 | "strings" 10 | ) 11 | type Codecov struct{} 12 | 13 | const ( 14 | UPLOADER = "https://uploader.codecov.io/v0.7.1/linux/codecov" 15 | ) 16 | 17 | // upload: upload coverage reports to codecov.io 18 | func (c *Codecov) Upload( 19 | ctx context.Context, 20 | dir *Directory, // Directory containing git repo and coverage output 21 | token *Secret, // codecov token for the git repo 22 | // +optional 23 | name string, // optional name 24 | // +optional 25 | verbose bool, // optional verbose output 26 | // +optional 27 | files []string, // optional list of coverage files 28 | // +optional 29 | flags []string, // optional additional flags for uploader 30 | ) (string, error) { 31 | command := []string{"/bin/codecov", "-t", "$CODECOV_TOKEN"} 32 | 33 | if name != "" { 34 | command = append(command, "-n", name) 35 | } 36 | 37 | if verbose { 38 | command = append(command, "-v") 39 | } 40 | 41 | if len(files) > 0 { 42 | for _, f := range files { 43 | command = append(command, "-f", f) 44 | } 45 | } 46 | 47 | if len(flags) > 0 { 48 | for _, f := range flags { 49 | command = append(command, f) 50 | } 51 | } 52 | 53 | return dag.Container(ContainerOpts{ Platform: "linux/amd64" }). 54 | From("cgr.dev/chainguard/wolfi-base"). 55 | WithExec([]string{"apk", "add", "curl", "git"}). 56 | WithExec([]string{"curl", "-o", "/bin/codecov", "-s", UPLOADER}). // TODO: validate uploader 57 | WithExec([]string{"chmod", "+x", "/bin/codecov"}). 58 | WithExec([]string{"ls", "-lah", "/bin/codecov"}). 59 | WithMountedDirectory("/src", dir). 60 | WithWorkdir("/src"). 61 | WithSecretVariable("CODECOV_TOKEN", token). 62 | WithExec([]string{"sh", "-c", strings.Join(command, " ")}).Stdout(ctx) 63 | } 64 | -------------------------------------------------------------------------------- /dockerd/.gitattributes: -------------------------------------------------------------------------------- 1 | /dagger.gen.go linguist-generated 2 | /querybuilder/** linguist-generated 3 | /internal/dagger/** linguist-generated 4 | /internal/querybuilder/** linguist-generated 5 | /internal/telemetry/** linguist-generated 6 | -------------------------------------------------------------------------------- /dockerd/.gitignore: -------------------------------------------------------------------------------- 1 | /dagger.gen.go 2 | /internal/querybuilder/ 3 | /querybuilder/ 4 | /internal/dagger 5 | /internal/telemetry 6 | -------------------------------------------------------------------------------- /dockerd/README.md: -------------------------------------------------------------------------------- 1 | A module to attach a dockerd service to a container 2 | 3 | Example: 4 | 5 | ```go 6 | myContainerWithDocker, err := dag.Dockerd().Attach(myContainer) 7 | ``` 8 | 9 | -------------------------------------------------------------------------------- /dockerd/dagger.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "dockerd", 3 | "engineVersion": "v0.18.3", 4 | "sdk": { 5 | "source": "go" 6 | } 7 | } 8 | -------------------------------------------------------------------------------- /dockerd/go.mod: -------------------------------------------------------------------------------- 1 | module main 2 | 3 | go 1.23.0 4 | 5 | toolchain go1.23.6 6 | 7 | require ( 8 | github.com/99designs/gqlgen v0.17.70 9 | github.com/Khan/genqlient v0.8.0 10 | golang.org/x/sync v0.12.0 11 | ) 12 | 13 | require ( 14 | github.com/cenkalti/backoff/v4 v4.3.0 // indirect 15 | github.com/go-logr/logr v1.4.2 // indirect 16 | github.com/go-logr/stdr v1.2.2 // indirect 17 | github.com/google/uuid v1.6.0 // indirect 18 | github.com/grpc-ecosystem/grpc-gateway/v2 v2.23.0 // indirect 19 | github.com/sergi/go-diff v1.3.2-0.20230802210424-5b0b94c5c0d3 // indirect 20 | github.com/sosodev/duration v1.3.1 // indirect 21 | github.com/vektah/gqlparser/v2 v2.5.23 22 | go.opentelemetry.io/auto/sdk v1.1.0 // indirect 23 | go.opentelemetry.io/otel v1.34.0 24 | go.opentelemetry.io/otel/exporters/otlp/otlplog/otlploggrpc v0.8.0 25 | go.opentelemetry.io/otel/exporters/otlp/otlplog/otlploghttp v0.8.0 26 | go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetricgrpc v1.32.0 27 | go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetrichttp v1.32.0 28 | go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.32.0 // indirect 29 | go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.32.0 30 | go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp v1.32.0 31 | go.opentelemetry.io/otel/log v0.8.0 32 | go.opentelemetry.io/otel/metric v1.34.0 33 | go.opentelemetry.io/otel/sdk v1.34.0 34 | go.opentelemetry.io/otel/sdk/log v0.8.0 35 | go.opentelemetry.io/otel/sdk/metric v1.34.0 36 | go.opentelemetry.io/otel/trace v1.34.0 37 | go.opentelemetry.io/proto/otlp v1.3.1 38 | golang.org/x/net v0.38.0 // indirect 39 | golang.org/x/sys v0.31.0 // indirect 40 | golang.org/x/text v0.23.0 // indirect 41 | google.golang.org/genproto/googleapis/api v0.0.0-20250106144421-5f5ef82da422 // indirect 42 | google.golang.org/genproto/googleapis/rpc v0.0.0-20250115164207-1a7da9e5054f // indirect 43 | google.golang.org/grpc v1.71.0 44 | google.golang.org/protobuf v1.36.6 // indirect 45 | ) 46 | 47 | replace go.opentelemetry.io/otel/exporters/otlp/otlplog/otlploggrpc => go.opentelemetry.io/otel/exporters/otlp/otlplog/otlploggrpc v0.8.0 48 | 49 | replace go.opentelemetry.io/otel/exporters/otlp/otlplog/otlploghttp => go.opentelemetry.io/otel/exporters/otlp/otlplog/otlploghttp v0.8.0 50 | 51 | replace go.opentelemetry.io/otel/log => go.opentelemetry.io/otel/log v0.8.0 52 | 53 | replace go.opentelemetry.io/otel/sdk/log => go.opentelemetry.io/otel/sdk/log v0.8.0 54 | -------------------------------------------------------------------------------- /dockerd/main: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kpenfound/dagger-modules/f7964245d0146dd3810f247c6c09eb33518d4654/dockerd/main -------------------------------------------------------------------------------- /dockerd/main.go: -------------------------------------------------------------------------------- 1 | // Utility for running dockerd in Dagger 2 | // 3 | // A utility module for configuring a dockerd service in your Dagger pipeline 4 | 5 | package main 6 | 7 | import ( 8 | "context" 9 | "fmt" 10 | "main/internal/dagger" 11 | ) 12 | 13 | // Module for running docker in dagger 14 | type Dockerd struct{} 15 | 16 | // Attach a dockerd service to a container 17 | func (t *Dockerd) Attach( 18 | ctx context.Context, 19 | container *dagger.Container, 20 | // +optional 21 | // +default="24.0" 22 | dockerVersion string, 23 | ) (*dagger.Container, error) { 24 | dockerd := t.Service(dockerVersion) 25 | 26 | dockerHost, err := dockerd.Endpoint(ctx, dagger.ServiceEndpointOpts{ 27 | Scheme: "tcp", 28 | }) 29 | if err != nil { 30 | return nil, err 31 | } 32 | 33 | return container. 34 | WithServiceBinding("docker", dockerd). 35 | WithEnvVariable("DOCKER_HOST", dockerHost), nil 36 | } 37 | 38 | // Get a Service container running dockerd 39 | func (t *Dockerd) Service( 40 | // +optional 41 | // +default="24.0" 42 | dockerVersion string, 43 | ) *dagger.Service { 44 | port := 2375 45 | return dag.Container(). 46 | From(fmt.Sprintf("docker:%s-dind", dockerVersion)). 47 | WithMountedCache( 48 | "/var/lib/docker", 49 | dag.CacheVolume(dockerVersion+"-docker-lib"), 50 | dagger.ContainerWithMountedCacheOpts{ 51 | Sharing: dagger.CacheSharingModePrivate, 52 | }). 53 | WithExposedPort(port). 54 | WithExec([]string{ 55 | "dockerd", 56 | "--host=tcp://0.0.0.0:2375", 57 | "--host=unix:///var/run/docker.sock", 58 | "--tls=false", 59 | }, dagger.ContainerWithExecOpts{ 60 | InsecureRootCapabilities: true, 61 | }). 62 | AsService() 63 | } 64 | -------------------------------------------------------------------------------- /encircle/.gitattributes: -------------------------------------------------------------------------------- 1 | /dagger.gen.go linguist-generated 2 | /internal/dagger/** linguist-generated 3 | /internal/querybuilder/** linguist-generated 4 | /internal/telemetry/** linguist-generated 5 | -------------------------------------------------------------------------------- /encircle/.gitignore: -------------------------------------------------------------------------------- 1 | /dagger.gen.go 2 | /internal/querybuilder/ 3 | /querybuilder/ 4 | /internal/dagger 5 | /internal/telemetry 6 | -------------------------------------------------------------------------------- /encircle/README.md: -------------------------------------------------------------------------------- 1 | # Encircle 2 | 3 | Dagger module to run circleci workflows 4 | 5 | Example: 6 | 7 | `echo "{git(url:\"github.com/kpenfound/encircle\") {branch(name:\"main\") {tree {encircleWorkflow(workflow:\"test\")}}}}" | dagger query -m github.com/kpenfound/dagger-modules/encircle --progress=plain` 8 | -------------------------------------------------------------------------------- /encircle/circle/config.go: -------------------------------------------------------------------------------- 1 | package circle 2 | 3 | import ( 4 | "os" 5 | 6 | "gopkg.in/yaml.v3" 7 | ) 8 | 9 | // Global orb list for command matching during unmarshalling 10 | var Glorbs = map[string]*Orb{} 11 | 12 | type Config struct { 13 | Version string `yaml:"version"` 14 | Jobs map[string]*Job `yaml:"jobs"` 15 | Workflows map[string]*Workflow `yaml:"workflows"` 16 | Orbs map[string]*Orb `yaml:"orbs"` 17 | } 18 | 19 | type Job struct { 20 | Docker []*Docker `yaml:"docker"` 21 | Steps []*Step `yaml:"steps"` 22 | } 23 | 24 | type Workflow struct { 25 | Jobs []string `yaml:"jobs"` 26 | } 27 | 28 | type Docker struct { 29 | Image string `yaml:"image"` 30 | } 31 | 32 | // Custom parser because orbs have to be evaluated before jobs 33 | func (c *Config) UnmarshalYAML(value *yaml.Node) error { 34 | nodes := map[string]*yaml.Node{} 35 | for i := 0; i < len(value.Content); i += 2 { 36 | k := value.Content[i] 37 | if k.Tag == "!!str" { 38 | nodes[value.Content[i].Value] = value.Content[i+1] 39 | } 40 | } 41 | 42 | // config.Version 43 | if nodes["version"] != nil { 44 | err := nodes["version"].Decode(&c.Version) 45 | if err != nil { 46 | return err 47 | } 48 | } 49 | 50 | // config.Orbs 51 | if nodes["orbs"] != nil { 52 | err := nodes["orbs"].Decode(&c.Orbs) 53 | if err != nil { 54 | return err 55 | } 56 | } 57 | Glorbs = c.Orbs 58 | 59 | // config.Jobs 60 | if nodes["jobs"] != nil { 61 | err := nodes["jobs"].Decode(&c.Jobs) 62 | if err != nil { 63 | return err 64 | } 65 | } 66 | 67 | // config.Workflows 68 | if nodes["workflows"] != nil { 69 | err := nodes["workflows"].Decode(&c.Workflows) 70 | if err != nil { 71 | return err 72 | } 73 | } 74 | 75 | return nil 76 | } 77 | 78 | func ParseConfig(contents string) (*Config, error) { 79 | byts := []byte(contents) 80 | var configParsed *Config 81 | err := yaml.Unmarshal(byts, &configParsed) 82 | 83 | return configParsed, err 84 | } 85 | 86 | func ReadConfig(path string) (*Config, error) { 87 | configBytes, err := os.ReadFile(path) 88 | if err != nil { 89 | return nil, err 90 | } 91 | 92 | // parse yaml 93 | var configParsed *Config 94 | err = yaml.Unmarshal(configBytes, &configParsed) 95 | 96 | return configParsed, err 97 | } 98 | -------------------------------------------------------------------------------- /encircle/circle/go.mod: -------------------------------------------------------------------------------- 1 | module github.com/kpenfound/dagger-modules/encircle/circle 2 | 3 | go 1.21.1 4 | 5 | require gopkg.in/yaml.v3 v3.0.1 6 | -------------------------------------------------------------------------------- /encircle/circle/go.sum: -------------------------------------------------------------------------------- 1 | gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405 h1:yhCVgyC4o1eVCa2tZl7eS0r+SDo693bJlVdllGtEeKM= 2 | gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= 3 | gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= 4 | gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= 5 | -------------------------------------------------------------------------------- /encircle/circle/orb.go: -------------------------------------------------------------------------------- 1 | package circle 2 | 3 | import ( 4 | "bytes" 5 | "encoding/json" 6 | "fmt" 7 | "net/http" 8 | "strings" 9 | 10 | "gopkg.in/yaml.v3" 11 | ) 12 | 13 | type Orb struct { 14 | Name string 15 | Orb *OrbConfig 16 | } 17 | 18 | type OrbConfig struct { 19 | Version string `yaml:"version"` 20 | Description string `yaml:"description"` 21 | // Jobs map[string]*OrbJob `yaml:"jobs"` // TODO 22 | Commands map[string]*OrbCommand `yaml:"commands"` 23 | // Executors map[string]*OrbExecutor `yaml:"executors"` // TODO 24 | } 25 | 26 | type OrbCommand struct { 27 | Steps []*Step `yaml:"steps"` 28 | Parameters map[string]*OrbParameter `yaml:"parameters"` 29 | } 30 | 31 | type OrbParameter struct { 32 | DefaultValue string `yaml:"default"` 33 | Description string `yaml:"description"` 34 | ParamType string `yaml:"type"` 35 | Enum []string `yaml:"enum"` 36 | } 37 | 38 | // type OrbJob struct{} // TODO 39 | // type OrbExecutor struct{} 40 | 41 | func (oc *OrbCommand) GetDefaultParameters() map[string]string { 42 | defaults := map[string]string{} 43 | for k, v := range oc.Parameters { 44 | defaults[k] = v.DefaultValue 45 | } 46 | return defaults 47 | } 48 | 49 | func (o *Orb) UnmarshalYAML(value *yaml.Node) error { 50 | orbYaml, err := queryOrbDetails(value.Value) 51 | if err != nil { 52 | return err 53 | } 54 | var orb *OrbConfig 55 | err = yaml.Unmarshal([]byte(orbYaml), &orb) 56 | if err != nil { 57 | return err 58 | } 59 | o.Orb = orb 60 | o.Name = value.Value 61 | return nil 62 | } 63 | 64 | func queryOrbDetails(versionref string) (string, error) { 65 | name := strings.Split(versionref, "@")[0] 66 | payload := fmt.Sprintf(` 67 | {"operationName":"OrbDetailsQuery", 68 | "variables":{"name":"%s","orbVersionRef":"%s"}, 69 | "query":"query OrbDetailsQuery($name: String, $orbVersionRef: String) {\n 70 | orbVersion(orbVersionRef: $orbVersionRef) {\n 71 | source\n 72 | }\n 73 | }\n 74 | "} 75 | `, name, versionref) 76 | endpoint := "https://circleci.com/graphql-unstable" 77 | 78 | body := bytes.NewReader([]byte(payload)) 79 | resp, err := http.Post(endpoint, "application/json", body) 80 | if err != nil { 81 | return "", err 82 | } 83 | defer resp.Body.Close() 84 | 85 | source := struct { 86 | Data struct { 87 | OrbVersion struct { 88 | Source string `json:"source"` 89 | } `json:"orbVersion"` 90 | } `json:"data"` 91 | }{} 92 | dec := json.NewDecoder(resp.Body) 93 | err = dec.Decode(&source) 94 | if err != nil { 95 | return "", err 96 | } 97 | return source.Data.OrbVersion.Source, nil 98 | } 99 | -------------------------------------------------------------------------------- /encircle/circle/step.go: -------------------------------------------------------------------------------- 1 | package circle 2 | 3 | import ( 4 | "fmt" 5 | "strings" 6 | 7 | "gopkg.in/yaml.v3" 8 | ) 9 | 10 | type Step struct { 11 | Name string `yaml:"name"` 12 | Run *Run `yaml:"run"` 13 | Command *OrbCommandExecution 14 | WorkDir string `yaml:"working_directory"` 15 | } 16 | 17 | type Run struct { 18 | Name string `yaml:"name"` 19 | Command string `yaml:"command"` 20 | Environment map[string]string `yaml:"environment"` 21 | } 22 | 23 | type OrbCommandExecution struct { 24 | OrbCommand *OrbCommand 25 | Parameters map[string]string 26 | } 27 | 28 | func (s *Step) UnmarshalYAML(value *yaml.Node) error { 29 | switch value.Tag { 30 | case "!!str": // Basic command like checkout 31 | if value.Value == "checkout" { 32 | fmt.Println("warning: skipping checkout for local dev") 33 | } else if strings.Contains(value.Content[0].Value, "/") { 34 | // Handle orb command with no params 35 | commandParts := strings.Split(value.Content[0].Value, "/") 36 | orb := commandParts[0] 37 | command := commandParts[1] 38 | s.Command = &OrbCommandExecution{ 39 | OrbCommand: findCommandForOrb(orb, command), 40 | } 41 | } else { 42 | fmt.Printf("warning: unknown step command: %s\n", value.Value) 43 | } 44 | case "!!map": 45 | if len(value.Content) == 0 { 46 | break 47 | } 48 | // Basic run block 49 | if value.Content[0].Value == "run" { 50 | // run block 51 | if value.Content[1].Tag == "!!map" { 52 | var r *Run 53 | err := value.Content[1].Decode(&r) 54 | if err != nil { 55 | return err 56 | } 57 | s.Run = r 58 | } 59 | // inline run 60 | if value.Content[1].Tag == "!!str" { 61 | r := &Run{} 62 | r.Command = value.Content[1].Value 63 | s.Run = r 64 | } 65 | 66 | // handle orb command with params 67 | } else if strings.Contains(value.Content[0].Value, "/") { 68 | commandParts := strings.Split(value.Content[0].Value, "/") 69 | orb := commandParts[0] 70 | command := commandParts[1] 71 | s.Command = &OrbCommandExecution{ 72 | OrbCommand: findCommandForOrb(orb, command), 73 | } 74 | 75 | // parse params 76 | if len(value.Content) > 1 { 77 | params := map[string]string{} 78 | for i := 0; i < len(value.Content[1].Content); i += 2 { 79 | k := value.Content[1].Content[i].Value 80 | v := value.Content[1].Content[i+1].Value 81 | params[k] = v 82 | } 83 | s.Command.Parameters = params 84 | } 85 | } else { 86 | fmt.Printf("warning: unhandled command %s\n", value.Content[0].Value) 87 | } 88 | default: 89 | fmt.Printf("Unknown yaml Tag %s\n", value.Tag) 90 | } 91 | return nil 92 | } 93 | 94 | func findCommandForOrb(orb string, command string) *OrbCommand { 95 | if Glorbs[orb] != nil { 96 | return Glorbs[orb].Orb.Commands[command] 97 | } 98 | fmt.Println("didnt find orb") 99 | return nil 100 | } 101 | -------------------------------------------------------------------------------- /encircle/dagger.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "encircle", 3 | "sdk": "go", 4 | "source": ".", 5 | "engineVersion": "v0.12.5" 6 | } 7 | -------------------------------------------------------------------------------- /encircle/example.gql: -------------------------------------------------------------------------------- 1 | query { 2 | git(url:"github.com/kpenfound/encircle") { 3 | branch(name:"main") { 4 | tree { 5 | encircleWorkflow(workflow:"test") 6 | } 7 | } 8 | } 9 | } 10 | -------------------------------------------------------------------------------- /encircle/executor.go: -------------------------------------------------------------------------------- 1 | package main 2 | 3 | import ( 4 | "context" 5 | "crypto/sha1" 6 | "encoding/hex" 7 | "fmt" 8 | "path/filepath" 9 | "strings" 10 | 11 | "github.com/kpenfound/dagger-modules/encircle/circle" 12 | "golang.org/x/exp/maps" 13 | ) 14 | 15 | type Executor struct { 16 | ctx context.Context 17 | client *Client 18 | dir *Directory 19 | logs []string 20 | } 21 | 22 | func newExecutor(ctx context.Context, dir *Directory) *Executor { 23 | return &Executor{ 24 | ctx: ctx, 25 | client: dag, 26 | dir: dir, 27 | } 28 | } 29 | 30 | func setup(ctx context.Context, dir *Directory) (*circle.Config, *Executor, error) { 31 | executor := newExecutor(ctx, dir) 32 | cfgFile, err := dir.File(CONFIG).Contents(ctx) 33 | if err != nil { 34 | return nil, nil, err 35 | } 36 | cfg, err := circle.ParseConfig(cfgFile) 37 | 38 | return cfg, executor, err 39 | } 40 | 41 | func (e *Executor) executeJob(name string, job *circle.Job) error { 42 | fmt.Printf("running job %s\n", name) 43 | runner := e.client.Container(). 44 | Pipeline(name). 45 | From(job.Docker[0].Image). 46 | WithMountedDirectory("/src", e.dir). 47 | WithWorkdir("/src"). 48 | WithNewFile("/envfile", ContainerWithNewFileOpts{ 49 | Permissions: 0777, 50 | Contents: "", 51 | }). 52 | WithEnvVariable("BASH_ENV", "/envfile") 53 | 54 | for _, s := range job.Steps { 55 | runner = StepToDagger(s, runner, map[string]string{}) 56 | out, err := runner.Stdout(e.ctx) 57 | if err != nil { 58 | return err 59 | } 60 | e.logs = append(e.logs, out) 61 | } 62 | 63 | return nil 64 | } 65 | 66 | func (e *Executor) executeWorkflow(name string, workflow *circle.Workflow, jobs map[string]*circle.Job) error { 67 | fmt.Printf("running workflow %s\n", name) 68 | for _, jobName := range workflow.Jobs { 69 | err := e.executeJob(jobName, jobs[jobName]) 70 | if err != nil { 71 | return err 72 | } 73 | } 74 | return nil 75 | } 76 | 77 | func OrbCommandToDagger(oc *circle.OrbCommand, c *Container, params map[string]string) *Container { 78 | // TODO: handle params? 79 | for _, s := range oc.Steps { 80 | c = StepToDagger(s, c, params) 81 | } 82 | return c 83 | } 84 | 85 | func StepToDagger(s *circle.Step, c *Container, params map[string]string) *Container { 86 | c = c.Pipeline(s.Name) 87 | if s.WorkDir != "" { // workdir relative to project root 88 | c = c.WithWorkdir(filepath.Join("/src", s.WorkDir)) 89 | } 90 | if s.Run != nil { 91 | c = RunToDagger(s.Run, c, params) 92 | } 93 | if s.Command != nil { 94 | // Get default params 95 | maps.Copy(params, s.Command.OrbCommand.GetDefaultParameters()) 96 | // Override user params 97 | maps.Copy(params, s.Command.Parameters) 98 | c = OrbCommandToDagger(s.Command.OrbCommand, c, params) 99 | } 100 | 101 | return c 102 | } 103 | 104 | func RunToDagger(r *circle.Run, c *Container, params map[string]string) *Container { 105 | c = c.Pipeline(replaceParams(r.Name, params)) 106 | // Set env vars 107 | for k, v := range r.Environment { 108 | c = c.WithEnvVariable(k, replaceParams(v, params)) 109 | } 110 | // Exec command 111 | command := replaceParams(r.Command, params) 112 | command = fmt.Sprintf("#!/bin/bash\n%s", command) 113 | script := fmt.Sprintf("/%s.sh", getSha(command)) 114 | c = c.WithNewFile(script, ContainerWithNewFileOpts{ 115 | Permissions: 0777, 116 | Contents: command, 117 | }) 118 | c = c.WithExec([]string{script}) 119 | // Unset env vars 120 | for k := range r.Environment { 121 | c = c.WithoutEnvVariable(k) 122 | } 123 | return c 124 | } 125 | 126 | func replaceParams(target string, params map[string]string) string { 127 | if strings.Contains(target, "<< parameters.") || strings.Contains(target, "<>", k) 130 | p2 := fmt.Sprintf("<>", k) 131 | target = strings.ReplaceAll(target, p1, v) 132 | target = strings.ReplaceAll(target, p2, v) 133 | } 134 | } 135 | return target 136 | } 137 | 138 | func getSha(str string) string { 139 | h := sha1.New() 140 | h.Write([]byte(str)) 141 | return hex.EncodeToString(h.Sum(nil)) 142 | } 143 | -------------------------------------------------------------------------------- /encircle/go.mod: -------------------------------------------------------------------------------- 1 | module github.com/kpenfound/dagger-modules/encircle 2 | 3 | go 1.21.1 4 | 5 | toolchain go1.21.2 6 | 7 | require ( 8 | github.com/99designs/gqlgen v0.17.49 9 | github.com/Khan/genqlient v0.7.0 10 | github.com/kpenfound/dagger-modules/encircle/circle v0.0.0-00010101000000-000000000000 11 | golang.org/x/sync v0.7.0 12 | ) 13 | 14 | require ( 15 | github.com/cenkalti/backoff/v4 v4.3.0 // indirect 16 | github.com/go-logr/logr v1.4.1 // indirect 17 | github.com/go-logr/stdr v1.2.2 // indirect 18 | github.com/google/uuid v1.6.0 // indirect 19 | github.com/grpc-ecosystem/grpc-gateway/v2 v2.20.0 // indirect 20 | github.com/sergi/go-diff v1.3.2-0.20230802210424-5b0b94c5c0d3 // indirect 21 | github.com/sosodev/duration v1.3.1 // indirect 22 | github.com/vektah/gqlparser/v2 v2.5.16 23 | go.opentelemetry.io/otel v1.27.0 24 | go.opentelemetry.io/otel/exporters/otlp/otlplog/otlploggrpc v0.0.0-20240518090000-14441aefdf88 25 | go.opentelemetry.io/otel/exporters/otlp/otlplog/otlploghttp v0.3.0 26 | go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.27.0 // indirect 27 | go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.27.0 28 | go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp v1.27.0 29 | go.opentelemetry.io/otel/log v0.3.0 30 | go.opentelemetry.io/otel/metric v1.27.0 // indirect 31 | go.opentelemetry.io/otel/sdk v1.27.0 32 | go.opentelemetry.io/otel/sdk/log v0.3.0 33 | go.opentelemetry.io/otel/trace v1.27.0 34 | go.opentelemetry.io/proto/otlp v1.3.1 35 | golang.org/x/exp v0.0.0-20231110203233-9a3e6036ecaa 36 | golang.org/x/net v0.26.0 // indirect 37 | golang.org/x/sys v0.21.0 // indirect 38 | golang.org/x/text v0.16.0 // indirect 39 | google.golang.org/genproto/googleapis/api v0.0.0-20240520151616-dc85e6b867a5 // indirect 40 | google.golang.org/genproto/googleapis/rpc v0.0.0-20240515191416-fc5f0ca64291 // indirect 41 | google.golang.org/grpc v1.64.0 42 | google.golang.org/protobuf v1.34.1 // indirect 43 | gopkg.in/yaml.v3 v3.0.1 // indirect 44 | ) 45 | 46 | replace github.com/kpenfound/dagger-modules/encircle/circle => ./circle 47 | -------------------------------------------------------------------------------- /encircle/main.go: -------------------------------------------------------------------------------- 1 | // Run CircleCI config in Dagger 2 | // 3 | // A module that attempts to parse and execute a CircleCI configuration 4 | // using Dagger primitives 5 | 6 | package main 7 | 8 | import ( 9 | "context" 10 | "strings" 11 | ) 12 | 13 | const CONFIG = "./.circleci/config.yml" 14 | 15 | type Encircle struct{} 16 | 17 | // Execute a job in a workflow 18 | func (e *Encircle) EncircleJob(ctx context.Context, d *Directory, job string) (string, error) { 19 | cfg, executor, err := setup(ctx, d) 20 | if err != nil { 21 | return "", err 22 | } 23 | 24 | err = executor.executeJob(job, cfg.Jobs[job]) 25 | if err != nil { 26 | return "", err 27 | } 28 | 29 | return strings.Join(executor.logs, "\n"), nil 30 | } 31 | 32 | // Execute an entire workflow 33 | func (e *Encircle) EncircleWorkflow(ctx context.Context, d *Directory, workflow string) (string, error) { 34 | 35 | cfg, executor, err := setup(ctx, d) 36 | if err != nil { 37 | return "", err 38 | } 39 | 40 | err = executor.executeWorkflow(workflow, cfg.Workflows[workflow], cfg.Jobs) 41 | if err != nil { 42 | return "", err 43 | } 44 | 45 | return strings.Join(executor.logs, "\n"), nil 46 | } 47 | -------------------------------------------------------------------------------- /examples/.gitignore: -------------------------------------------------------------------------------- 1 | /dagger.gen.go 2 | /internal/querybuilder/ 3 | /querybuilder/ 4 | -------------------------------------------------------------------------------- /examples/coverage.out: -------------------------------------------------------------------------------- 1 | mode: atomic 2 | github.com/kpenfound/greetings-api/main.go:12.13,14.67 2 0 3 | github.com/kpenfound/greetings-api/main.go:14.67,18.17 4 0 4 | github.com/kpenfound/greetings-api/main.go:18.17,19.14 1 0 5 | github.com/kpenfound/greetings-api/main.go:23.2,35.42 4 0 6 | github.com/kpenfound/greetings-api/main.go:35.42,37.3 1 0 7 | github.com/kpenfound/greetings-api/main.go:37.8,37.23 1 0 8 | github.com/kpenfound/greetings-api/main.go:37.23,40.3 2 0 9 | github.com/kpenfound/greetings-api/main.go:43.24,46.2 2 1 10 | -------------------------------------------------------------------------------- /examples/dagger.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "examples", 3 | "sdk": "go", 4 | "dependencies": [ 5 | "github.com/kpenfound/dagger-modules/codecov@a80cf88f9a839b5c1bbeaf08264de24d7bc0ab0f", 6 | "github.com/kpenfound/dagger-modules/utils@79a5a539ec88e461661969bcdd3becee56bddc8b" 7 | ] 8 | } 9 | -------------------------------------------------------------------------------- /examples/go.mod: -------------------------------------------------------------------------------- 1 | module main 2 | 3 | go 1.21.3 4 | 5 | require ( 6 | github.com/99designs/gqlgen v0.17.31 7 | github.com/Khan/genqlient v0.6.0 8 | golang.org/x/exp v0.0.0-20231006140011-7918f672742d 9 | golang.org/x/sync v0.4.0 10 | ) 11 | 12 | require ( 13 | github.com/stretchr/testify v1.8.3 // indirect 14 | github.com/vektah/gqlparser/v2 v2.5.6 // indirect 15 | ) 16 | -------------------------------------------------------------------------------- /examples/go.sum: -------------------------------------------------------------------------------- 1 | github.com/99designs/gqlgen v0.17.31 h1:VncSQ82VxieHkea8tz11p7h/zSbvHSxSDZfywqWt158= 2 | github.com/99designs/gqlgen v0.17.31/go.mod h1:i4rEatMrzzu6RXaHydq1nmEPZkb3bKQsnxNRHS4DQB4= 3 | github.com/Khan/genqlient v0.6.0 h1:Bwb1170ekuNIVIwTJEqvO8y7RxBxXu639VJOkKSrwAk= 4 | github.com/Khan/genqlient v0.6.0/go.mod h1:rvChwWVTqXhiapdhLDV4bp9tz/Xvtewwkon4DpWWCRM= 5 | github.com/agnivade/levenshtein v1.1.1/go.mod h1:veldBMzWxcCG2ZvUTKD2kJNRdCk5hVbJomOvKkmgYbo= 6 | github.com/andreyvit/diff v0.0.0-20170406064948-c7f18ee00883 h1:bvNMNQO63//z+xNgfBlViaCIJKLlCJ6/fmUseuG0wVQ= 7 | github.com/andreyvit/diff v0.0.0-20170406064948-c7f18ee00883/go.mod h1:rCTlJbsFo29Kk6CurOXKm700vrz8f0KW0JNfpkRJY/8= 8 | github.com/arbovm/levenshtein v0.0.0-20160628152529-48b4e1c0c4d0/go.mod h1:t2tdKJDJF9BV14lnkjHmOQgcvEKgtqs5a1N3LNdJhGE= 9 | github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= 10 | github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= 11 | github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= 12 | github.com/dgryski/trifles v0.0.0-20200323201526-dd97f9abfb48/go.mod h1:if7Fbed8SFyPtHLHbg49SI7NAdJiC5WIA09pe59rfAA= 13 | github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo= 14 | github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ= 15 | github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI= 16 | github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= 17 | github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= 18 | github.com/sergi/go-diff v1.3.1 h1:xkr+Oxo4BOQKmkn/B9eMK0g5Kg/983T9DqqPHwYqD+8= 19 | github.com/sergi/go-diff v1.3.1/go.mod h1:aMJSSKb2lpPvRNec0+w3fl7LP9IOFzdc9Pa4NFbPK1I= 20 | github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= 21 | github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4= 22 | github.com/stretchr/testify v1.8.3 h1:RP3t2pwF7cMEbC1dqtB6poj3niw/9gnV4Cjg5oW5gtY= 23 | github.com/stretchr/testify v1.8.3/go.mod h1:sz/lmYIOXD/1dqDmKjjqLyZ2RngseejIcXlSw2iwfAo= 24 | github.com/vektah/gqlparser/v2 v2.5.6 h1:Ou14T0N1s191eRMZ1gARVqohcbe1e8FrcONScsq8cRU= 25 | github.com/vektah/gqlparser/v2 v2.5.6/go.mod h1:z8xXUff237NntSuH8mLFijZ+1tjV1swDbpDqjJmk6ME= 26 | golang.org/x/exp v0.0.0-20231006140011-7918f672742d h1:jtJma62tbqLibJ5sFQz8bKtEM8rJBtfilJ2qTU199MI= 27 | golang.org/x/exp v0.0.0-20231006140011-7918f672742d/go.mod h1:ldy0pHrwJyGW56pPQzzkH36rKxoZW1tw7ZJpeKx+hdo= 28 | golang.org/x/sync v0.4.0 h1:zxkM55ReGkDlKSM+Fu41A+zmbZuaPVbGMzvvdUPznYQ= 29 | golang.org/x/sync v0.4.0/go.mod h1:FU7BRWz2tNW+3quACPkgCx/L+uEAv1htQ0V83Z9Rj+Y= 30 | gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= 31 | gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= 32 | gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= 33 | gopkg.in/yaml.v2 v2.4.0/go.mod h1:RDklbk79AGWmwhnvt/jBztapEOGDOx6ZbXqjP6csGnQ= 34 | gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= 35 | gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= 36 | -------------------------------------------------------------------------------- /examples/main.go: -------------------------------------------------------------------------------- 1 | package main 2 | 3 | import ( 4 | "context" 5 | ) 6 | 7 | type Examples struct {} 8 | 9 | 10 | func (m *Examples) Multisync(ctx context.Context) error { 11 | ctr1 := dag.Container().From("alpine").WithExec([]string{"apk", "add", "git"}) 12 | ctr2 := dag.Container().From("alpine").WithExec([]string{"apk", "add", "curl"}) 13 | ctr3 := dag.Container().From("alpine").WithExec([]string{"apk", "add", "sqlite"}) 14 | 15 | _, err := dag.Utils().Multisync(ctx, []*Container{ctr1, ctr2, ctr3}) 16 | return err 17 | } 18 | 19 | func (m *Examples) Codecov(ctx context.Context, token *Secret) (string, error) { 20 | coverage := ` 21 | mode: atomic 22 | github.com/kpenfound/greetings-api/main.go:12.13,14.67 2 0 23 | github.com/kpenfound/greetings-api/main.go:14.67,18.17 4 0 24 | github.com/kpenfound/greetings-api/main.go:18.17,19.14 1 0 25 | github.com/kpenfound/greetings-api/main.go:23.2,35.42 4 0 26 | github.com/kpenfound/greetings-api/main.go:35.42,37.3 1 0 27 | github.com/kpenfound/greetings-api/main.go:37.8,37.23 1 0 28 | github.com/kpenfound/greetings-api/main.go:37.23,40.3 2 0 29 | github.com/kpenfound/greetings-api/main.go:43.24,46.2 2 1 30 | ` 31 | repo := "https://github.com/kpenfound/greetings-api" 32 | 33 | src := dag.Git(repo, GitOpts{ KeepGitDir: true }).Branch("main").Tree() 34 | 35 | src = src.WithNewFile("coverage.out", coverage) 36 | 37 | return dag.Codecov().Upload(ctx, src, token) 38 | } 39 | -------------------------------------------------------------------------------- /fly/.gitignore: -------------------------------------------------------------------------------- 1 | /sdk 2 | -------------------------------------------------------------------------------- /fly/README.md: -------------------------------------------------------------------------------- 1 | Module for deploying applications to fly.io 2 | 3 | Example usage: 4 | ```go 5 | out, err := dag.Fly().Deploy(ctx, app, imageRef, token) 6 | ``` 7 | -------------------------------------------------------------------------------- /fly/dagger.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "fly", 3 | "sdk": "python" 4 | } 5 | -------------------------------------------------------------------------------- /fly/pyproject.toml: -------------------------------------------------------------------------------- 1 | [project] 2 | name = "main" 3 | version = "0.0.0" 4 | -------------------------------------------------------------------------------- /fly/src/main.py: -------------------------------------------------------------------------------- 1 | """ 2 | Deploy containers to fly.io 3 | 4 | A utility module to deploy a container to fly.io using a very basic default configuration 5 | """ 6 | 7 | import dagger 8 | from dagger.mod import function 9 | 10 | @function 11 | def deploy(app: str, image: str, token: dagger.Secret) -> str: 12 | """Deploy an application to fly.io with an image ref""" 13 | config = f''' 14 | app = "{app}" 15 | primary_region = "ord" 16 | 17 | [build] 18 | image = "{image}" 19 | 20 | [http_service] 21 | internal_port = 8080 22 | force_https = true 23 | auto_stop_machines = true 24 | auto_start_machines = true 25 | min_machines_running = 0 26 | ''' 27 | return ( 28 | fly_base(token) 29 | .with_new_file(path="/fly.toml", contents=config) # TODO: make more of these things options 30 | .with_exec(["/root/.fly/bin/flyctl", "deploy", "--config", "/fly.toml"]) 31 | .stdout() 32 | ) 33 | 34 | def fly_base(token: dagger.Secret) -> dagger.Container: 35 | """Get the fly cli in a container""" 36 | return ( 37 | dagger.container().from_("alpine:3.18.4") 38 | .with_exec(["apk", "add", "curl"]) 39 | .with_exec(["sh", "-c", "curl -L https://fly.io/install.sh | sh"]) 40 | .with_secret_variable("FLY_API_TOKEN", token) 41 | ) 42 | 43 | -------------------------------------------------------------------------------- /foo/.gitignore: -------------------------------------------------------------------------------- 1 | /dagger.gen.go 2 | /internal/querybuilder/ 3 | /querybuilder/ 4 | -------------------------------------------------------------------------------- /foo/dagger.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "foo", 3 | "sdk": "go", 4 | "dependencies": [ 5 | "github.com/kpenfound/dagger-modules/golang@683e3a5859438a85fdc39462d6f6439fea30e804" 6 | ] 7 | } 8 | -------------------------------------------------------------------------------- /foo/go.mod: -------------------------------------------------------------------------------- 1 | module main 2 | 3 | go 1.21.3 4 | 5 | require ( 6 | github.com/99designs/gqlgen v0.17.31 7 | github.com/Khan/genqlient v0.6.0 8 | golang.org/x/exp v0.0.0-20231006140011-7918f672742d 9 | golang.org/x/sync v0.4.0 10 | ) 11 | 12 | require ( 13 | github.com/stretchr/testify v1.8.3 // indirect 14 | github.com/vektah/gqlparser/v2 v2.5.6 // indirect 15 | ) 16 | -------------------------------------------------------------------------------- /foo/go.sum: -------------------------------------------------------------------------------- 1 | github.com/99designs/gqlgen v0.17.31 h1:VncSQ82VxieHkea8tz11p7h/zSbvHSxSDZfywqWt158= 2 | github.com/99designs/gqlgen v0.17.31/go.mod h1:i4rEatMrzzu6RXaHydq1nmEPZkb3bKQsnxNRHS4DQB4= 3 | github.com/Khan/genqlient v0.6.0 h1:Bwb1170ekuNIVIwTJEqvO8y7RxBxXu639VJOkKSrwAk= 4 | github.com/Khan/genqlient v0.6.0/go.mod h1:rvChwWVTqXhiapdhLDV4bp9tz/Xvtewwkon4DpWWCRM= 5 | github.com/agnivade/levenshtein v1.1.1/go.mod h1:veldBMzWxcCG2ZvUTKD2kJNRdCk5hVbJomOvKkmgYbo= 6 | github.com/andreyvit/diff v0.0.0-20170406064948-c7f18ee00883 h1:bvNMNQO63//z+xNgfBlViaCIJKLlCJ6/fmUseuG0wVQ= 7 | github.com/andreyvit/diff v0.0.0-20170406064948-c7f18ee00883/go.mod h1:rCTlJbsFo29Kk6CurOXKm700vrz8f0KW0JNfpkRJY/8= 8 | github.com/arbovm/levenshtein v0.0.0-20160628152529-48b4e1c0c4d0/go.mod h1:t2tdKJDJF9BV14lnkjHmOQgcvEKgtqs5a1N3LNdJhGE= 9 | github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= 10 | github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= 11 | github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= 12 | github.com/dgryski/trifles v0.0.0-20200323201526-dd97f9abfb48/go.mod h1:if7Fbed8SFyPtHLHbg49SI7NAdJiC5WIA09pe59rfAA= 13 | github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo= 14 | github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ= 15 | github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI= 16 | github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= 17 | github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= 18 | github.com/sergi/go-diff v1.3.1 h1:xkr+Oxo4BOQKmkn/B9eMK0g5Kg/983T9DqqPHwYqD+8= 19 | github.com/sergi/go-diff v1.3.1/go.mod h1:aMJSSKb2lpPvRNec0+w3fl7LP9IOFzdc9Pa4NFbPK1I= 20 | github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= 21 | github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4= 22 | github.com/stretchr/testify v1.8.3 h1:RP3t2pwF7cMEbC1dqtB6poj3niw/9gnV4Cjg5oW5gtY= 23 | github.com/stretchr/testify v1.8.3/go.mod h1:sz/lmYIOXD/1dqDmKjjqLyZ2RngseejIcXlSw2iwfAo= 24 | github.com/vektah/gqlparser/v2 v2.5.6 h1:Ou14T0N1s191eRMZ1gARVqohcbe1e8FrcONScsq8cRU= 25 | github.com/vektah/gqlparser/v2 v2.5.6/go.mod h1:z8xXUff237NntSuH8mLFijZ+1tjV1swDbpDqjJmk6ME= 26 | golang.org/x/exp v0.0.0-20231006140011-7918f672742d h1:jtJma62tbqLibJ5sFQz8bKtEM8rJBtfilJ2qTU199MI= 27 | golang.org/x/exp v0.0.0-20231006140011-7918f672742d/go.mod h1:ldy0pHrwJyGW56pPQzzkH36rKxoZW1tw7ZJpeKx+hdo= 28 | golang.org/x/sync v0.4.0 h1:zxkM55ReGkDlKSM+Fu41A+zmbZuaPVbGMzvvdUPznYQ= 29 | golang.org/x/sync v0.4.0/go.mod h1:FU7BRWz2tNW+3quACPkgCx/L+uEAv1htQ0V83Z9Rj+Y= 30 | gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= 31 | gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= 32 | gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= 33 | gopkg.in/yaml.v2 v2.4.0/go.mod h1:RDklbk79AGWmwhnvt/jBztapEOGDOx6ZbXqjP6csGnQ= 34 | gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= 35 | gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= 36 | -------------------------------------------------------------------------------- /foo/main.go: -------------------------------------------------------------------------------- 1 | package main 2 | 3 | import ( 4 | "context" 5 | ) 6 | 7 | type Foo struct {} 8 | 9 | // example usage: "dagger call container-echo --string-arg yo" 10 | func (m *Foo) ContainerEcho(stringArg string) *Container { 11 | return dag.Container().From("alpine:latest").WithExec([]string{"echo", stringArg}) 12 | } 13 | 14 | // example usage: "dagger call grep-dir --directory-arg . --pattern GrepDir" 15 | func (m *Foo) GrepDir(ctx context.Context, directoryArg *Directory, pattern string) (string, error) { 16 | return dag.Container(). 17 | From("alpine:latest"). 18 | WithMountedDirectory("/mnt", directoryArg). 19 | WithWorkdir("/mnt"). 20 | WithExec([]string{"grep", "-R", pattern, "."}). 21 | Stdout(ctx) 22 | } 23 | 24 | -------------------------------------------------------------------------------- /golang/.gitattributes: -------------------------------------------------------------------------------- 1 | /dagger.gen.go linguist-generated=true 2 | /querybuilder/** linguist-generated 3 | /internal/dagger/** linguist-generated 4 | /internal/querybuilder/** linguist-generated 5 | /internal/telemetry/** linguist-generated 6 | -------------------------------------------------------------------------------- /golang/.gitignore: -------------------------------------------------------------------------------- 1 | /dagger.gen.go 2 | /internal/querybuilder/ 3 | /querybuilder/ 4 | /internal/dagger 5 | /internal/telemetry 6 | -------------------------------------------------------------------------------- /golang/README.md: -------------------------------------------------------------------------------- 1 | A module for working with Go projects, with utilities to lint, test, and build 2 | 3 | ```go 4 | dag. 5 | Golang(). 6 | WithProject(dir). 7 | Build([]string{}) 8 | ``` 9 | -------------------------------------------------------------------------------- /golang/dagger.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "golang", 3 | "engineVersion": "v0.18.6", 4 | "sdk": { 5 | "source": "go" 6 | } 7 | } 8 | -------------------------------------------------------------------------------- /golang/go.mod: -------------------------------------------------------------------------------- 1 | module golang 2 | 3 | go 1.23.0 4 | 5 | toolchain go1.23.8 6 | 7 | require ( 8 | github.com/99designs/gqlgen v0.17.70 9 | github.com/Khan/genqlient v0.8.0 10 | golang.org/x/sync v0.12.0 11 | ) 12 | 13 | require github.com/sergi/go-diff v1.3.2-0.20230802210424-5b0b94c5c0d3 // indirect 14 | 15 | require ( 16 | github.com/cenkalti/backoff/v4 v4.3.0 // indirect 17 | github.com/go-logr/logr v1.4.2 // indirect 18 | github.com/go-logr/stdr v1.2.2 // indirect 19 | github.com/google/uuid v1.6.0 // indirect 20 | github.com/grpc-ecosystem/grpc-gateway/v2 v2.23.0 // indirect 21 | github.com/sosodev/duration v1.3.1 // indirect 22 | github.com/vektah/gqlparser/v2 v2.5.23 23 | go.opentelemetry.io/auto/sdk v1.1.0 // indirect 24 | go.opentelemetry.io/otel v1.34.0 25 | go.opentelemetry.io/otel/exporters/otlp/otlplog/otlploggrpc v0.8.0 26 | go.opentelemetry.io/otel/exporters/otlp/otlplog/otlploghttp v0.8.0 27 | go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetricgrpc v1.32.0 28 | go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetrichttp v1.32.0 29 | go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.32.0 // indirect 30 | go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.32.0 31 | go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp v1.32.0 32 | go.opentelemetry.io/otel/log v0.8.0 33 | go.opentelemetry.io/otel/metric v1.34.0 34 | go.opentelemetry.io/otel/sdk v1.34.0 35 | go.opentelemetry.io/otel/sdk/log v0.8.0 36 | go.opentelemetry.io/otel/sdk/metric v1.34.0 37 | go.opentelemetry.io/otel/trace v1.34.0 38 | go.opentelemetry.io/proto/otlp v1.3.1 39 | golang.org/x/net v0.38.0 // indirect 40 | golang.org/x/sys v0.31.0 // indirect 41 | golang.org/x/text v0.23.0 // indirect 42 | google.golang.org/genproto/googleapis/api v0.0.0-20250106144421-5f5ef82da422 // indirect 43 | google.golang.org/genproto/googleapis/rpc v0.0.0-20250115164207-1a7da9e5054f // indirect 44 | google.golang.org/grpc v1.71.0 45 | google.golang.org/protobuf v1.36.6 // indirect 46 | ) 47 | 48 | replace go.opentelemetry.io/otel/exporters/otlp/otlplog/otlploggrpc => go.opentelemetry.io/otel/exporters/otlp/otlplog/otlploggrpc v0.8.0 49 | 50 | replace go.opentelemetry.io/otel/exporters/otlp/otlplog/otlploghttp => go.opentelemetry.io/otel/exporters/otlp/otlplog/otlploghttp v0.8.0 51 | 52 | replace go.opentelemetry.io/otel/log => go.opentelemetry.io/otel/log v0.8.0 53 | 54 | replace go.opentelemetry.io/otel/sdk/log => go.opentelemetry.io/otel/sdk/log v0.8.0 55 | -------------------------------------------------------------------------------- /golang/main.go: -------------------------------------------------------------------------------- 1 | // Build Go projects 2 | // 3 | // A utility module for building, testing, and linting Go projects 4 | 5 | package main 6 | 7 | import ( 8 | "context" 9 | "fmt" 10 | "runtime" 11 | 12 | "golang/internal/dagger" 13 | ) 14 | 15 | const ( 16 | MOUNT_PATH = "/app" 17 | LINT_IMAGE = "golangci/golangci-lint:v2.1" 18 | OUT_DIR = "/out/" 19 | ) 20 | 21 | type Golang struct { 22 | // Golang container with the go project and go toolchain 23 | Container *dagger.Container 24 | } 25 | 26 | func New( 27 | // Specify an alternative container to index.docker.io/golang 28 | // +optional 29 | ctr *dagger.Container, 30 | // The source directory of the Go project 31 | // +optional 32 | source *dagger.Directory, 33 | // Golang image tag to use 34 | // +default="1.24" 35 | version string, 36 | ) *Golang { 37 | g := &Golang{} 38 | if ctr == nil { 39 | ctr = g.Base(version).Container 40 | } 41 | g.Container = ctr 42 | 43 | if source != nil { 44 | g.Container = g.Container.WithDirectory(MOUNT_PATH, source) 45 | } 46 | 47 | return g 48 | } 49 | 50 | // Build the Go project 51 | func (g *Golang) Build( 52 | // The Go source code to build 53 | // +optional 54 | source *dagger.Directory, 55 | // Arguments to `go build` 56 | args []string, 57 | // The architecture for GOARCH 58 | // +optional 59 | arch string, 60 | // The operating system for GOOS 61 | // +optional 62 | os string, 63 | ) *dagger.Directory { 64 | if arch == "" { 65 | arch = runtime.GOARCH 66 | } 67 | if os == "" { 68 | os = runtime.GOOS 69 | } 70 | 71 | if source != nil { 72 | g = g.WithSource(source) 73 | } 74 | 75 | command := append([]string{"go", "build", "-o", OUT_DIR}, args...) 76 | return g.Container. 77 | WithEnvVariable("GOARCH", arch). 78 | WithEnvVariable("GOOS", os). 79 | WithExec(command). 80 | Directory(OUT_DIR) 81 | } 82 | 83 | // Build a Go project returning a Container containing the build 84 | func (g *Golang) BuildContainer( 85 | // The Go source code to build 86 | // +optional 87 | source *dagger.Directory, 88 | // Arguments to `go build` 89 | // +optional 90 | args []string, 91 | // The architecture for GOARCH 92 | // +optional 93 | arch string, 94 | // The operating system for GOOS 95 | // +optional 96 | os string, 97 | // Base container in which to copy the build 98 | // +optional 99 | base *dagger.Container, 100 | ) *dagger.Container { 101 | dir := g.Build(source, args, arch, os) 102 | if base == nil { 103 | base = dag.Container().From("ubuntu:latest") 104 | } 105 | return base. 106 | WithDirectory("/usr/local/bin/", dir) 107 | } 108 | 109 | // Test the Go project 110 | func (g *Golang) Test( 111 | ctx context.Context, 112 | // The Go source code to test 113 | // +optional 114 | source *dagger.Directory, 115 | // Arguments to `go test` 116 | // +optional 117 | // +default "./..." 118 | args []string, 119 | ) (string, error) { 120 | if source != nil { 121 | g = g.WithSource(source) 122 | } 123 | command := append([]string{"go", "test"}, args...) 124 | return g.Container.WithExec(command).Stdout(ctx) 125 | } 126 | 127 | // Format the Go project 128 | func (g *Golang) Fmt( 129 | ctx context.Context, 130 | // The Go source code to format 131 | // +optional 132 | source *dagger.Directory, 133 | // Arguments to `go fmt` 134 | // +optional 135 | // +default "./..." 136 | args []string, 137 | ) (*Golang, error) { 138 | if source != nil { 139 | g = g.WithSource(source) 140 | } 141 | command := append([]string{"go", "fmt"}, args...) 142 | c, err := g.Container.WithExec(command).Sync(ctx) 143 | if err != nil { 144 | return nil, err 145 | } 146 | g.Container = c 147 | return g, err 148 | } 149 | 150 | // Lint the Go project 151 | func (g *Golang) GolangciLint( 152 | ctx context.Context, 153 | // The Go source code to lint 154 | // +optional 155 | source *dagger.Directory, 156 | ) (string, error) { 157 | return g.lint(source, []string{}). 158 | Stdout(ctx) 159 | } 160 | 161 | // Lint the Go project and apply fixes 162 | func (g *Golang) GolangciLintFix( 163 | ctx context.Context, 164 | // The Go source code to lint 165 | // +optional 166 | source *dagger.Directory, 167 | ) (*dagger.Directory, error) { 168 | done, err := g.lint(source, []string{"--fix"}). 169 | Sync(ctx) 170 | if err != nil { 171 | return nil, err 172 | } 173 | 174 | return done.Directory(MOUNT_PATH), nil 175 | } 176 | 177 | // Private lint helper 178 | func (g *Golang) lint(source *dagger.Directory, args []string) *dagger.Container { 179 | if source == nil { 180 | source = g.GetSource() 181 | } 182 | return dag.Container().From(LINT_IMAGE). 183 | WithMountedDirectory(MOUNT_PATH, source). 184 | WithWorkdir(MOUNT_PATH). 185 | WithExec(append([]string{"golangci-lint", "run", "-v", "--timeout", "5m"}, args...)) 186 | } 187 | 188 | // Sets up the Container with a golang image and cache volumes 189 | func (g *Golang) Base( 190 | // Golang image tag to use 191 | // +default="1.24" 192 | version string, 193 | ) *Golang { 194 | image := fmt.Sprintf("golang:%s", version) 195 | g.Container = dag.Container(). 196 | From(image). 197 | WithMountedCache("/go/pkg/mod", dag.CacheVolume("gomodcache")). 198 | WithMountedCache("/root/.cache/go-build", dag.CacheVolume("gobuildcache")). 199 | WithWorkdir(MOUNT_PATH) 200 | return g 201 | } 202 | 203 | // Specify the Source to use in the module 204 | func (g *Golang) WithSource(source *dagger.Directory) *Golang { 205 | g.Container = g.Container.WithDirectory(MOUNT_PATH, source) 206 | return g 207 | } 208 | 209 | // Get the current state of the source directory 210 | func (g *Golang) GetSource() *dagger.Directory { 211 | return g.Container.Directory(MOUNT_PATH) 212 | } 213 | 214 | // Bring your own container 215 | func (g *Golang) WithContainer(ctr *dagger.Container) *Golang { 216 | g.Container = ctr 217 | return g 218 | } 219 | -------------------------------------------------------------------------------- /kind/.gitattributes: -------------------------------------------------------------------------------- 1 | /dagger.gen.go linguist-generated 2 | /internal/dagger/** linguist-generated 3 | /internal/querybuilder/** linguist-generated 4 | /internal/telemetry/** linguist-generated 5 | -------------------------------------------------------------------------------- /kind/.gitignore: -------------------------------------------------------------------------------- 1 | /dagger.gen.go 2 | /internal/dagger 3 | /internal/querybuilder 4 | /internal/telemetry 5 | -------------------------------------------------------------------------------- /kind/dagger.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "kind", 3 | "sdk": "go", 4 | "source": ".", 5 | "engineVersion": "v0.12.5" 6 | } 7 | -------------------------------------------------------------------------------- /kind/go.mod: -------------------------------------------------------------------------------- 1 | module dagger/kind 2 | 3 | go 1.21.7 4 | 5 | require ( 6 | github.com/99designs/gqlgen v0.17.49 7 | github.com/Khan/genqlient v0.7.0 8 | github.com/vektah/gqlparser/v2 v2.5.16 9 | go.opentelemetry.io/otel v1.27.0 10 | go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.27.0 11 | go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp v1.27.0 12 | go.opentelemetry.io/otel/sdk v1.27.0 13 | go.opentelemetry.io/otel/trace v1.27.0 14 | golang.org/x/exp v0.0.0-20231110203233-9a3e6036ecaa 15 | golang.org/x/sync v0.7.0 16 | google.golang.org/grpc v1.64.0 17 | ) 18 | 19 | require ( 20 | github.com/cenkalti/backoff/v4 v4.3.0 // indirect 21 | github.com/go-logr/logr v1.4.1 // indirect 22 | github.com/go-logr/stdr v1.2.2 // indirect 23 | github.com/google/uuid v1.6.0 // indirect 24 | github.com/grpc-ecosystem/grpc-gateway/v2 v2.20.0 // indirect 25 | github.com/sergi/go-diff v1.3.2-0.20230802210424-5b0b94c5c0d3 // indirect 26 | github.com/sosodev/duration v1.3.1 // indirect 27 | go.opentelemetry.io/otel/exporters/otlp/otlplog/otlploggrpc v0.0.0-20240518090000-14441aefdf88 28 | go.opentelemetry.io/otel/exporters/otlp/otlplog/otlploghttp v0.3.0 29 | go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.27.0 // indirect 30 | go.opentelemetry.io/otel/log v0.3.0 31 | go.opentelemetry.io/otel/metric v1.27.0 // indirect 32 | go.opentelemetry.io/otel/sdk/log v0.3.0 33 | go.opentelemetry.io/proto/otlp v1.3.1 34 | golang.org/x/net v0.26.0 // indirect 35 | golang.org/x/sys v0.21.0 // indirect 36 | golang.org/x/text v0.16.0 // indirect 37 | google.golang.org/genproto/googleapis/api v0.0.0-20240520151616-dc85e6b867a5 // indirect 38 | google.golang.org/genproto/googleapis/rpc v0.0.0-20240515191416-fc5f0ca64291 // indirect 39 | google.golang.org/protobuf v1.34.1 // indirect 40 | ) 41 | -------------------------------------------------------------------------------- /kind/go.sum: -------------------------------------------------------------------------------- 1 | github.com/99designs/gqlgen v0.17.49 h1:b3hNGexHd33fBSAd4NDT/c3NCcQzcAVkknhN9ym36YQ= 2 | github.com/99designs/gqlgen v0.17.49/go.mod h1:tC8YFVZMed81x7UJ7ORUwXF4Kn6SXuucFqQBhN8+BU0= 3 | github.com/Khan/genqlient v0.7.0 h1:GZ1meyRnzcDTK48EjqB8t3bcfYvHArCUUvgOwpz1D4w= 4 | github.com/Khan/genqlient v0.7.0/go.mod h1:HNyy3wZvuYwmW3Y7mkoQLZsa/R5n5yIRajS1kPBvSFM= 5 | github.com/andreyvit/diff v0.0.0-20170406064948-c7f18ee00883 h1:bvNMNQO63//z+xNgfBlViaCIJKLlCJ6/fmUseuG0wVQ= 6 | github.com/andreyvit/diff v0.0.0-20170406064948-c7f18ee00883/go.mod h1:rCTlJbsFo29Kk6CurOXKm700vrz8f0KW0JNfpkRJY/8= 7 | github.com/cenkalti/backoff/v4 v4.3.0 h1:MyRJ/UdXutAwSAT+s3wNd7MfTIcy71VQueUuFK343L8= 8 | github.com/cenkalti/backoff/v4 v4.3.0/go.mod h1:Y3VNntkOUPxTVeUxJ/G5vcM//AlwfmyYozVcomhLiZE= 9 | github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= 10 | github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= 11 | github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= 12 | github.com/go-logr/logr v1.2.2/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A= 13 | github.com/go-logr/logr v1.4.1 h1:pKouT5E8xu9zeFC39JXRDukb6JFQPXM5p5I91188VAQ= 14 | github.com/go-logr/logr v1.4.1/go.mod h1:9T104GzyrTigFIr8wt5mBrctHMim0Nb2HLGrmQ40KvY= 15 | github.com/go-logr/stdr v1.2.2 h1:hSWxHoqTgW2S2qGc0LTAI563KZ5YKYRhT3MFKZMbjag= 16 | github.com/go-logr/stdr v1.2.2/go.mod h1:mMo/vtBO5dYbehREoey6XUKy/eSumjCCveDpRre4VKE= 17 | github.com/google/go-cmp v0.6.0 h1:ofyhxvXcZhMsU5ulbFiLKl/XBFqE1GSq7atu8tAmTRI= 18 | github.com/google/go-cmp v0.6.0/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= 19 | github.com/google/uuid v1.6.0 h1:NIvaJDMOsjHA8n1jAhLSgzrAzy1Hgr+hNrb57e+94F0= 20 | github.com/google/uuid v1.6.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= 21 | github.com/grpc-ecosystem/grpc-gateway/v2 v2.20.0 h1:bkypFPDjIYGfCYD5mRBvpqxfYX1YCS1PXdKYWi8FsN0= 22 | github.com/grpc-ecosystem/grpc-gateway/v2 v2.20.0/go.mod h1:P+Lt/0by1T8bfcF3z737NnSbmxQAppXMRziHUxPOC8k= 23 | github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo= 24 | github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ= 25 | github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI= 26 | github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= 27 | github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= 28 | github.com/sergi/go-diff v1.3.2-0.20230802210424-5b0b94c5c0d3 h1:n661drycOFuPLCN3Uc8sB6B/s6Z4t2xvBgU1htSHuq8= 29 | github.com/sergi/go-diff v1.3.2-0.20230802210424-5b0b94c5c0d3/go.mod h1:A0bzQcvG0E7Rwjx0REVgAGH58e96+X0MeOfepqsbeW4= 30 | github.com/sosodev/duration v1.3.1 h1:qtHBDMQ6lvMQsL15g4aopM4HEfOaYuhWBw3NPTtlqq4= 31 | github.com/sosodev/duration v1.3.1/go.mod h1:RQIBBX0+fMLc/D9+Jb/fwvVmo0eZvDDEERAikUR6SDg= 32 | github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= 33 | github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4= 34 | github.com/stretchr/testify v1.9.0 h1:HtqpIVDClZ4nwg75+f6Lvsy/wHu+3BoSGCbBAcpTsTg= 35 | github.com/stretchr/testify v1.9.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY= 36 | github.com/vektah/gqlparser/v2 v2.5.16 h1:1gcmLTvs3JLKXckwCwlUagVn/IlV2bwqle0vJ0vy5p8= 37 | github.com/vektah/gqlparser/v2 v2.5.16/go.mod h1:1lz1OeCqgQbQepsGxPVywrjdBHW2T08PUS3pJqepRww= 38 | go.opentelemetry.io/otel v1.27.0 h1:9BZoF3yMK/O1AafMiQTVu0YDj5Ea4hPhxCs7sGva+cg= 39 | go.opentelemetry.io/otel v1.27.0/go.mod h1:DMpAK8fzYRzs+bi3rS5REupisuqTheUlSZJ1WnZaPAQ= 40 | go.opentelemetry.io/otel/exporters/otlp/otlplog/otlploggrpc v0.0.0-20240518090000-14441aefdf88 h1:oM0GTNKGlc5qHctWeIGTVyda4iFFalOzMZ3Ehj5rwB4= 41 | go.opentelemetry.io/otel/exporters/otlp/otlplog/otlploggrpc v0.0.0-20240518090000-14441aefdf88/go.mod h1:JGG8ebaMO5nXOPnvKEl+DiA4MGwFjCbjsxT1WHIEBPY= 42 | go.opentelemetry.io/otel/exporters/otlp/otlplog/otlploghttp v0.3.0 h1:ccBrA8nCY5mM0y5uO7FT0ze4S0TuFcWdDB2FxGMTjkI= 43 | go.opentelemetry.io/otel/exporters/otlp/otlplog/otlploghttp v0.3.0/go.mod h1:/9pb6634zi2Lk8LYg9Q0X8Ar6jka4dkFOylBLbVQPCE= 44 | go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.27.0 h1:R9DE4kQ4k+YtfLI2ULwX82VtNQ2J8yZmA7ZIF/D+7Mc= 45 | go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.27.0/go.mod h1:OQFyQVrDlbe+R7xrEyDr/2Wr67Ol0hRUgsfA+V5A95s= 46 | go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.27.0 h1:qFffATk0X+HD+f1Z8lswGiOQYKHRlzfmdJm0wEaVrFA= 47 | go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.27.0/go.mod h1:MOiCmryaYtc+V0Ei+Tx9o5S1ZjA7kzLucuVuyzBZloQ= 48 | go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp v1.27.0 h1:QY7/0NeRPKlzusf40ZE4t1VlMKbqSNT7cJRYzWuja0s= 49 | go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp v1.27.0/go.mod h1:HVkSiDhTM9BoUJU8qE6j2eSWLLXvi1USXjyd2BXT8PY= 50 | go.opentelemetry.io/otel/log v0.3.0 h1:kJRFkpUFYtny37NQzL386WbznUByZx186DpEMKhEGZs= 51 | go.opentelemetry.io/otel/log v0.3.0/go.mod h1:ziCwqZr9soYDwGNbIL+6kAvQC+ANvjgG367HVcyR/ys= 52 | go.opentelemetry.io/otel/metric v1.27.0 h1:hvj3vdEKyeCi4YaYfNjv2NUje8FqKqUY8IlF0FxV/ik= 53 | go.opentelemetry.io/otel/metric v1.27.0/go.mod h1:mVFgmRlhljgBiuk/MP/oKylr4hs85GZAylncepAX/ak= 54 | go.opentelemetry.io/otel/sdk v1.27.0 h1:mlk+/Y1gLPLn84U4tI8d3GNJmGT/eXe3ZuOXN9kTWmI= 55 | go.opentelemetry.io/otel/sdk v1.27.0/go.mod h1:Ha9vbLwJE6W86YstIywK2xFfPjbWlCuwPtMkKdz/Y4A= 56 | go.opentelemetry.io/otel/sdk/log v0.3.0 h1:GEjJ8iftz2l+XO1GF2856r7yYVh74URiF9JMcAacr5U= 57 | go.opentelemetry.io/otel/sdk/log v0.3.0/go.mod h1:BwCxtmux6ACLuys1wlbc0+vGBd+xytjmjajwqqIul2g= 58 | go.opentelemetry.io/otel/trace v1.27.0 h1:IqYb813p7cmbHk0a5y6pD5JPakbVfftRXABGt5/Rscw= 59 | go.opentelemetry.io/otel/trace v1.27.0/go.mod h1:6RiD1hkAprV4/q+yd2ln1HG9GoPx39SuvvstaLBl+l4= 60 | go.opentelemetry.io/proto/otlp v1.3.1 h1:TrMUixzpM0yuc/znrFTP9MMRh8trP93mkCiDVeXrui0= 61 | go.opentelemetry.io/proto/otlp v1.3.1/go.mod h1:0X1WI4de4ZsLrrJNLAQbFeLCm3T7yBkR0XqQ7niQU+8= 62 | go.uber.org/goleak v1.3.0 h1:2K3zAYmnTNqV73imy9J1T3WC+gmCePx2hEGkimedGto= 63 | go.uber.org/goleak v1.3.0/go.mod h1:CoHD4mav9JJNrW/WLlf7HGZPjdw8EucARQHekz1X6bE= 64 | golang.org/x/exp v0.0.0-20231110203233-9a3e6036ecaa h1:FRnLl4eNAQl8hwxVVC17teOw8kdjVDVAiFMtgUdTSRQ= 65 | golang.org/x/exp v0.0.0-20231110203233-9a3e6036ecaa/go.mod h1:zk2irFbV9DP96SEBUUAy67IdHUaZuSnrz1n472HUCLE= 66 | golang.org/x/net v0.26.0 h1:soB7SVo0PWrY4vPW/+ay0jKDNScG2X9wFeYlXIvJsOQ= 67 | golang.org/x/net v0.26.0/go.mod h1:5YKkiSynbBIh3p6iOc/vibscux0x38BZDkn8sCUPxHE= 68 | golang.org/x/sync v0.7.0 h1:YsImfSBoP9QPYL0xyKJPq0gcaJdG3rInoqxTWbfQu9M= 69 | golang.org/x/sync v0.7.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk= 70 | golang.org/x/sys v0.21.0 h1:rF+pYz3DAGSQAxAu1CbC7catZg4ebC4UIeIhKxBZvws= 71 | golang.org/x/sys v0.21.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= 72 | golang.org/x/text v0.16.0 h1:a94ExnEXNtEwYLGJSIUxnWoxoRz/ZcCsV63ROupILh4= 73 | golang.org/x/text v0.16.0/go.mod h1:GhwF1Be+LQoKShO3cGOHzqOgRrGaYc9AvblQOmPVHnI= 74 | google.golang.org/genproto/googleapis/api v0.0.0-20240520151616-dc85e6b867a5 h1:P8OJ/WCl/Xo4E4zoe4/bifHpSmmKwARqyqE4nW6J2GQ= 75 | google.golang.org/genproto/googleapis/api v0.0.0-20240520151616-dc85e6b867a5/go.mod h1:RGnPtTG7r4i8sPlNyDeikXF99hMM+hN6QMm4ooG9g2g= 76 | google.golang.org/genproto/googleapis/rpc v0.0.0-20240515191416-fc5f0ca64291 h1:AgADTJarZTBqgjiUzRgfaBchgYB3/WFTC80GPwsMcRI= 77 | google.golang.org/genproto/googleapis/rpc v0.0.0-20240515191416-fc5f0ca64291/go.mod h1:EfXuqaE1J41VCDicxHzUDm+8rk+7ZdXzHV0IhO/I6s0= 78 | google.golang.org/grpc v1.64.0 h1:KH3VH9y/MgNQg1dE7b3XfVK0GsPSIzJwdF617gUSbvY= 79 | google.golang.org/grpc v1.64.0/go.mod h1:oxjF8E3FBnjp+/gVFYdWacaLDx9na1aqy9oovLpxQYg= 80 | google.golang.org/protobuf v1.34.1 h1:9ddQBjfCyZPOHPUiPxpYESBLc+T8P3E+Vo4IbKZgFWg= 81 | google.golang.org/protobuf v1.34.1/go.mod h1:c6P6GXX6sHbq/GpV6MGZEdwhWPcYBgnhAHhKbcUYpos= 82 | gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= 83 | gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= 84 | gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= 85 | gopkg.in/yaml.v2 v2.4.0/go.mod h1:RDklbk79AGWmwhnvt/jBztapEOGDOx6ZbXqjP6csGnQ= 86 | gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= 87 | gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= 88 | -------------------------------------------------------------------------------- /kind/main.go: -------------------------------------------------------------------------------- 1 | // A generated module for Kind functions 2 | // 3 | // This module has been generated via dagger init and serves as a reference to 4 | // basic module structure as you get started with Dagger. 5 | // 6 | // Two functions have been pre-created. You can modify, delete, or add to them, 7 | // as needed. They demonstrate usage of arguments and return types using simple 8 | // echo and grep commands. The functions can be called from the dagger CLI or 9 | // from one of the SDKs. 10 | // 11 | // The first line in this comment block is a short description line and the 12 | // rest is a long description with more detail on the module's purpose or usage, 13 | // if appropriate. All modules should have a short description. 14 | 15 | package main 16 | 17 | import ( 18 | "fmt" 19 | "runtime" 20 | ) 21 | 22 | type Kind struct{} 23 | 24 | const ( 25 | default_version = "v0.22.0" 26 | docker_host = "dockerd" 27 | docker_version = "24.0" 28 | ) 29 | 30 | func (k *Kind) Cli( 31 | // +optional 32 | version string, 33 | ) *Container { 34 | if version == "" { 35 | version = default_version 36 | } 37 | 38 | binary := dag.HTTP(fmt.Sprintf("https://kind.sigs.k8s.io/dl/%s/kind-linux-%s", version, runtime.GOARCH)) 39 | 40 | return dag.Container().From(fmt.Sprintf("index.docker.io/docker:%s-cli", docker_version)). 41 | WithFile("/bin/kind", binary). 42 | WithExec([]string{"chmod", "+x", "/bin/kind"}) 43 | } 44 | 45 | func (k *Kind) Demo() *Container { 46 | config := ` 47 | kind: Cluster 48 | apiVersion: kind.x-k8s.io/v1alpha4 49 | networking: 50 | apiServerAddress: "0.0.0.0" 51 | kubeadmConfigPatches: 52 | - | 53 | kind: ClusterConfiguration 54 | apiServer: 55 | certSANs: 56 | - "dockerd" 57 | ` 58 | ctr := k.Cli(default_version). 59 | WithNewFile("/kind_config.yml", ContainerWithNewFileOpts{ Contents: config }). 60 | WithEnvVariable("KIND_EXPERIMENTAL_PROVIDER", "docker"). 61 | WithEnvVariable("DOCKER_HOST", fmt.Sprintf("tcp://%s:2375", docker_host)). 62 | WithServiceBinding(docker_host, dockerd()). 63 | WithExec([]string{"kind", "create", "cluster", "--retain", "--config", "/kind_config.yml"}) 64 | 65 | return ctr 66 | } 67 | 68 | func dockerd() *Service { 69 | return dag.Container(). 70 | From(fmt.Sprintf("index.docker.io/docker:%s-dind", docker_version)). 71 | WithoutEntrypoint(). 72 | WithExposedPort(2375). 73 | WithExec([]string{ 74 | "dockerd", 75 | "--host=tcp://0.0.0.0:2375", 76 | "--tls=false", 77 | }, ContainerWithExecOpts{ 78 | InsecureRootCapabilities: true, 79 | }). 80 | AsService() 81 | } 82 | -------------------------------------------------------------------------------- /mdk/.gitattributes: -------------------------------------------------------------------------------- 1 | /dagger.gen.go linguist-generated 2 | /internal/dagger/** linguist-generated 3 | /internal/querybuilder/** linguist-generated 4 | /internal/telemetry/** linguist-generated 5 | -------------------------------------------------------------------------------- /mdk/.gitignore: -------------------------------------------------------------------------------- 1 | /dagger.gen.go 2 | /internal/dagger 3 | /internal/querybuilder 4 | /internal/telemetry 5 | -------------------------------------------------------------------------------- /mdk/dagger.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "mdk", 3 | "sdk": "go", 4 | "source": ".", 5 | "engineVersion": "v0.13.3" 6 | } 7 | -------------------------------------------------------------------------------- /mdk/generate.go: -------------------------------------------------------------------------------- 1 | package main 2 | 3 | import ( 4 | "bytes" 5 | "context" 6 | "dagger/mdk/internal/dagger" 7 | "fmt" 8 | "text/template" 9 | 10 | "github.com/gobeam/stringy" 11 | ) 12 | 13 | // Utilities for generating module things 14 | type Generate struct { 15 | Source *dagger.Directory 16 | } 17 | 18 | // Generate Daggerverse examples for a module 19 | func (g *Generate) Examples(ctx context.Context) (*dagger.Directory, error) { 20 | dir := dag.Directory() 21 | 22 | examples := []string{"go", "python", "typescript"} 23 | 24 | for _, e := range examples { 25 | example := dag.Directory().WithNewFile("/dagger.json", fmt.Sprintf(` 26 | { 27 | "name": "example", 28 | "sdk": "%s", 29 | "engineVersion": "v0.13.3" 30 | } 31 | `, e)) 32 | 33 | exampleMod := example.AsModule() 34 | 35 | // Generate our specific functions 36 | name, funcs, err := g.getObjects(ctx) 37 | if err != nil { 38 | return nil, err 39 | } 40 | 41 | templateContent, err := templateExample(e, name, funcs) 42 | if err != nil { 43 | return nil, err 44 | } 45 | 46 | example = example.WithDirectory("/", exampleMod.GeneratedContextDirectory()) 47 | 48 | example = example.WithDirectory("/", templateContent) 49 | 50 | dir = dir.WithDirectory("/examples/"+e, example) 51 | } 52 | return dir, nil 53 | } 54 | 55 | // Get the name and functions of the objects in the g.Source module 56 | func (g *Generate) getObjects(ctx context.Context) (string, []string, error) { 57 | objs := []string{} 58 | mod := g.Source.AsModule().Initialize() 59 | name, err := mod.Name(ctx) 60 | if err != nil { 61 | return "", nil, err 62 | } 63 | 64 | objects, err := mod.Objects(ctx) 65 | if err != nil { 66 | return "", nil, err 67 | } 68 | 69 | for _, o := range objects { 70 | t, err := o.Kind(ctx) 71 | if err != nil { 72 | return "", nil, err 73 | } 74 | // Only look at Objects 75 | if t == "OBJECT_KIND" { 76 | objName, err := o.AsObject().Name(ctx) 77 | if err != nil { 78 | return "", nil, err 79 | } 80 | // Only look at objects that match the module name 81 | if toCamel(objName) == toCamel(name) { 82 | funcs, err := o.AsObject().Functions(ctx) 83 | if err != nil { 84 | return "", nil, err 85 | } 86 | for _, f := range funcs { 87 | funcName, err := f.Name(ctx) 88 | if err != nil { 89 | return "", nil, err 90 | } 91 | objs = append(objs, funcName) 92 | } 93 | return name, objs, nil 94 | } 95 | } 96 | 97 | } 98 | 99 | return name, objs, nil 100 | } 101 | 102 | // Generate a template for the given SDK 103 | func templateExample(sdk string, module string, objects []string) (*dagger.Directory, error) { 104 | templ := "" 105 | path := "" 106 | 107 | // figure out which SDK we're templating 108 | switch sdk { 109 | case "go": 110 | templ = goTemplate() 111 | path = "main.go" 112 | case "python": 113 | templ = pythonTemplate() 114 | path = "src/main/__init__.py" 115 | case "typescript": 116 | templ = typescriptTemplate() 117 | path = "src/index.ts" 118 | } 119 | 120 | // Write out template 121 | funcMap := template.FuncMap{ 122 | "ToPascal": toPascal, 123 | "ToSnake": toSnake, 124 | "ToCamel": toCamel, 125 | } 126 | t, err := template.New("examples").Funcs(funcMap).Parse(templ) 127 | if err != nil { 128 | return nil, err 129 | } 130 | 131 | templData := struct { 132 | Module string 133 | Objects []string 134 | }{Module: module, Objects: objects} 135 | var out bytes.Buffer 136 | err = t.Execute(&out, templData) 137 | if err != nil { 138 | return nil, err 139 | } 140 | 141 | // return directory with generated example file 142 | return dag.Directory().WithNewFile(path, out.String()), nil 143 | } 144 | 145 | // PascalCase 146 | func toPascal(s string) string { 147 | str := stringy.New(s) 148 | return str.PascalCase().Get() 149 | } 150 | 151 | // snake_case 152 | func toSnake(s string) string { 153 | str := stringy.New(s) 154 | return str.SnakeCase().ToLower() 155 | } 156 | 157 | // camelCase 158 | func toCamel(s string) string { 159 | str := stringy.New(s) 160 | return str.CamelCase().Get() 161 | } 162 | 163 | func goTemplate() string { 164 | return ` 165 | // {{ .Module | ToPascal }} examples in Go 166 | package main 167 | 168 | type Example struct{} 169 | 170 | {{ range .Objects }} 171 | // Example for {{ . | ToPascal }} function 172 | func (m *Example) {{ $.Module | ToPascal }}{{ . | ToPascal }} () { 173 | // TODO: implement example here 174 | } 175 | 176 | {{ end }} 177 | ` 178 | } 179 | 180 | func pythonTemplate() string { 181 | return ` 182 | """{{ .Module | ToSnake }} examples in Python""" 183 | import dagger 184 | from dagger import dag, function, object_type 185 | 186 | @object_type 187 | class Example: 188 | {{ range .Objects }} 189 | @function 190 | def {{ $.Module | ToSnake }}_{{ . | ToSnake }}(self): 191 | """Example for {{ . | ToSnake }} function""" 192 | 193 | {{ end }} 194 | ` 195 | } 196 | 197 | func typescriptTemplate() string { 198 | return ` 199 | // {{ .Module | ToCamel }} examples in TypeScript 200 | import { dag, object, func } from "@dagger.io/dagger"; 201 | 202 | @object() 203 | class Example { 204 | {{ range .Objects }} 205 | /** 206 | * example for {{ . | ToCamel }} function 207 | */ 208 | @func() 209 | {{ $.Module | ToCamel }}{{ . | ToPascal }}() { 210 | // TODO: implement example here 211 | } 212 | {{ end }} 213 | } 214 | ` 215 | } 216 | 217 | // Escape hatch for debugging 218 | func (g *Generate) Debug() *dagger.Container { 219 | return dag.Container().From("alpine").WithMountedDirectory("/src", g.Source).WithWorkdir("/src") 220 | } 221 | -------------------------------------------------------------------------------- /mdk/go.mod: -------------------------------------------------------------------------------- 1 | module dagger/mdk 2 | 3 | go 1.23.1 4 | 5 | require ( 6 | github.com/99designs/gqlgen v0.17.49 7 | github.com/Khan/genqlient v0.7.0 8 | github.com/vektah/gqlparser/v2 v2.5.16 9 | go.opentelemetry.io/otel v1.27.0 10 | go.opentelemetry.io/otel/exporters/otlp/otlplog/otlploggrpc v0.0.0-20240518090000-14441aefdf88 11 | go.opentelemetry.io/otel/exporters/otlp/otlplog/otlploghttp v0.3.0 12 | go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.27.0 13 | go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp v1.27.0 14 | go.opentelemetry.io/otel/log v0.3.0 15 | go.opentelemetry.io/otel/sdk v1.27.0 16 | go.opentelemetry.io/otel/sdk/log v0.3.0 17 | go.opentelemetry.io/otel/trace v1.27.0 18 | go.opentelemetry.io/proto/otlp v1.3.1 19 | golang.org/x/exp v0.0.0-20231110203233-9a3e6036ecaa 20 | golang.org/x/sync v0.8.0 21 | google.golang.org/grpc v1.65.0 22 | ) 23 | 24 | require ( 25 | github.com/cenkalti/backoff/v4 v4.3.0 // indirect 26 | github.com/go-logr/logr v1.4.2 // indirect 27 | github.com/go-logr/stdr v1.2.2 // indirect 28 | github.com/gobeam/stringy v0.0.7 29 | github.com/google/uuid v1.6.0 // indirect 30 | github.com/grpc-ecosystem/grpc-gateway/v2 v2.22.0 // indirect 31 | github.com/sosodev/duration v1.3.1 // indirect 32 | go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.27.0 // indirect 33 | go.opentelemetry.io/otel/metric v1.27.0 // indirect 34 | golang.org/x/net v0.29.0 // indirect 35 | golang.org/x/sys v0.25.0 // indirect 36 | golang.org/x/text v0.18.0 // indirect 37 | google.golang.org/genproto/googleapis/api v0.0.0-20240814211410-ddb44dafa142 // indirect 38 | google.golang.org/genproto/googleapis/rpc v0.0.0-20240814211410-ddb44dafa142 // indirect 39 | google.golang.org/protobuf v1.34.2 // indirect 40 | ) 41 | 42 | replace go.opentelemetry.io/otel/exporters/otlp/otlplog/otlploggrpc => go.opentelemetry.io/otel/exporters/otlp/otlplog/otlploggrpc v0.0.0-20240518090000-14441aefdf88 43 | 44 | replace go.opentelemetry.io/otel/exporters/otlp/otlplog/otlploghttp => go.opentelemetry.io/otel/exporters/otlp/otlplog/otlploghttp v0.3.0 45 | 46 | replace go.opentelemetry.io/otel/log => go.opentelemetry.io/otel/log v0.3.0 47 | 48 | replace go.opentelemetry.io/otel/sdk/log => go.opentelemetry.io/otel/sdk/log v0.3.0 49 | -------------------------------------------------------------------------------- /mdk/go.sum: -------------------------------------------------------------------------------- 1 | github.com/99designs/gqlgen v0.17.49 h1:b3hNGexHd33fBSAd4NDT/c3NCcQzcAVkknhN9ym36YQ= 2 | github.com/99designs/gqlgen v0.17.49/go.mod h1:tC8YFVZMed81x7UJ7ORUwXF4Kn6SXuucFqQBhN8+BU0= 3 | github.com/Khan/genqlient v0.7.0 h1:GZ1meyRnzcDTK48EjqB8t3bcfYvHArCUUvgOwpz1D4w= 4 | github.com/Khan/genqlient v0.7.0/go.mod h1:HNyy3wZvuYwmW3Y7mkoQLZsa/R5n5yIRajS1kPBvSFM= 5 | github.com/andreyvit/diff v0.0.0-20170406064948-c7f18ee00883 h1:bvNMNQO63//z+xNgfBlViaCIJKLlCJ6/fmUseuG0wVQ= 6 | github.com/andreyvit/diff v0.0.0-20170406064948-c7f18ee00883/go.mod h1:rCTlJbsFo29Kk6CurOXKm700vrz8f0KW0JNfpkRJY/8= 7 | github.com/cenkalti/backoff/v4 v4.3.0 h1:MyRJ/UdXutAwSAT+s3wNd7MfTIcy71VQueUuFK343L8= 8 | github.com/cenkalti/backoff/v4 v4.3.0/go.mod h1:Y3VNntkOUPxTVeUxJ/G5vcM//AlwfmyYozVcomhLiZE= 9 | github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= 10 | github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= 11 | github.com/go-logr/logr v1.2.2/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A= 12 | github.com/go-logr/logr v1.4.2 h1:6pFjapn8bFcIbiKo3XT4j/BhANplGihG6tvd+8rYgrY= 13 | github.com/go-logr/logr v1.4.2/go.mod h1:9T104GzyrTigFIr8wt5mBrctHMim0Nb2HLGrmQ40KvY= 14 | github.com/go-logr/stdr v1.2.2 h1:hSWxHoqTgW2S2qGc0LTAI563KZ5YKYRhT3MFKZMbjag= 15 | github.com/go-logr/stdr v1.2.2/go.mod h1:mMo/vtBO5dYbehREoey6XUKy/eSumjCCveDpRre4VKE= 16 | github.com/gobeam/stringy v0.0.7 h1:TD8SfhedUoiANhW88JlJqfrMsihskIRpU/VTsHGnAps= 17 | github.com/gobeam/stringy v0.0.7/go.mod h1:W3620X9dJHf2FSZF5fRnWekHcHQjwmCz8ZQ2d1qloqE= 18 | github.com/google/go-cmp v0.6.0 h1:ofyhxvXcZhMsU5ulbFiLKl/XBFqE1GSq7atu8tAmTRI= 19 | github.com/google/go-cmp v0.6.0/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= 20 | github.com/google/uuid v1.6.0 h1:NIvaJDMOsjHA8n1jAhLSgzrAzy1Hgr+hNrb57e+94F0= 21 | github.com/google/uuid v1.6.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= 22 | github.com/grpc-ecosystem/grpc-gateway/v2 v2.22.0 h1:asbCHRVmodnJTuQ3qamDwqVOIjwqUPTYmYuemVOx+Ys= 23 | github.com/grpc-ecosystem/grpc-gateway/v2 v2.22.0/go.mod h1:ggCgvZ2r7uOoQjOyu2Y1NhHmEPPzzuhWgcza5M1Ji1I= 24 | github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= 25 | github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= 26 | github.com/sergi/go-diff v1.3.1 h1:xkr+Oxo4BOQKmkn/B9eMK0g5Kg/983T9DqqPHwYqD+8= 27 | github.com/sergi/go-diff v1.3.1/go.mod h1:aMJSSKb2lpPvRNec0+w3fl7LP9IOFzdc9Pa4NFbPK1I= 28 | github.com/sosodev/duration v1.3.1 h1:qtHBDMQ6lvMQsL15g4aopM4HEfOaYuhWBw3NPTtlqq4= 29 | github.com/sosodev/duration v1.3.1/go.mod h1:RQIBBX0+fMLc/D9+Jb/fwvVmo0eZvDDEERAikUR6SDg= 30 | github.com/stretchr/testify v1.9.0 h1:HtqpIVDClZ4nwg75+f6Lvsy/wHu+3BoSGCbBAcpTsTg= 31 | github.com/stretchr/testify v1.9.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY= 32 | github.com/vektah/gqlparser/v2 v2.5.16 h1:1gcmLTvs3JLKXckwCwlUagVn/IlV2bwqle0vJ0vy5p8= 33 | github.com/vektah/gqlparser/v2 v2.5.16/go.mod h1:1lz1OeCqgQbQepsGxPVywrjdBHW2T08PUS3pJqepRww= 34 | go.opentelemetry.io/otel v1.27.0 h1:9BZoF3yMK/O1AafMiQTVu0YDj5Ea4hPhxCs7sGva+cg= 35 | go.opentelemetry.io/otel v1.27.0/go.mod h1:DMpAK8fzYRzs+bi3rS5REupisuqTheUlSZJ1WnZaPAQ= 36 | go.opentelemetry.io/otel/exporters/otlp/otlplog/otlploggrpc v0.0.0-20240518090000-14441aefdf88 h1:oM0GTNKGlc5qHctWeIGTVyda4iFFalOzMZ3Ehj5rwB4= 37 | go.opentelemetry.io/otel/exporters/otlp/otlplog/otlploggrpc v0.0.0-20240518090000-14441aefdf88/go.mod h1:JGG8ebaMO5nXOPnvKEl+DiA4MGwFjCbjsxT1WHIEBPY= 38 | go.opentelemetry.io/otel/exporters/otlp/otlplog/otlploghttp v0.3.0 h1:ccBrA8nCY5mM0y5uO7FT0ze4S0TuFcWdDB2FxGMTjkI= 39 | go.opentelemetry.io/otel/exporters/otlp/otlplog/otlploghttp v0.3.0/go.mod h1:/9pb6634zi2Lk8LYg9Q0X8Ar6jka4dkFOylBLbVQPCE= 40 | go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.27.0 h1:R9DE4kQ4k+YtfLI2ULwX82VtNQ2J8yZmA7ZIF/D+7Mc= 41 | go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.27.0/go.mod h1:OQFyQVrDlbe+R7xrEyDr/2Wr67Ol0hRUgsfA+V5A95s= 42 | go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.27.0 h1:qFffATk0X+HD+f1Z8lswGiOQYKHRlzfmdJm0wEaVrFA= 43 | go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.27.0/go.mod h1:MOiCmryaYtc+V0Ei+Tx9o5S1ZjA7kzLucuVuyzBZloQ= 44 | go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp v1.27.0 h1:QY7/0NeRPKlzusf40ZE4t1VlMKbqSNT7cJRYzWuja0s= 45 | go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp v1.27.0/go.mod h1:HVkSiDhTM9BoUJU8qE6j2eSWLLXvi1USXjyd2BXT8PY= 46 | go.opentelemetry.io/otel/log v0.3.0 h1:kJRFkpUFYtny37NQzL386WbznUByZx186DpEMKhEGZs= 47 | go.opentelemetry.io/otel/log v0.3.0/go.mod h1:ziCwqZr9soYDwGNbIL+6kAvQC+ANvjgG367HVcyR/ys= 48 | go.opentelemetry.io/otel/metric v1.27.0 h1:hvj3vdEKyeCi4YaYfNjv2NUje8FqKqUY8IlF0FxV/ik= 49 | go.opentelemetry.io/otel/metric v1.27.0/go.mod h1:mVFgmRlhljgBiuk/MP/oKylr4hs85GZAylncepAX/ak= 50 | go.opentelemetry.io/otel/sdk v1.27.0 h1:mlk+/Y1gLPLn84U4tI8d3GNJmGT/eXe3ZuOXN9kTWmI= 51 | go.opentelemetry.io/otel/sdk v1.27.0/go.mod h1:Ha9vbLwJE6W86YstIywK2xFfPjbWlCuwPtMkKdz/Y4A= 52 | go.opentelemetry.io/otel/sdk/log v0.3.0 h1:GEjJ8iftz2l+XO1GF2856r7yYVh74URiF9JMcAacr5U= 53 | go.opentelemetry.io/otel/sdk/log v0.3.0/go.mod h1:BwCxtmux6ACLuys1wlbc0+vGBd+xytjmjajwqqIul2g= 54 | go.opentelemetry.io/otel/trace v1.27.0 h1:IqYb813p7cmbHk0a5y6pD5JPakbVfftRXABGt5/Rscw= 55 | go.opentelemetry.io/otel/trace v1.27.0/go.mod h1:6RiD1hkAprV4/q+yd2ln1HG9GoPx39SuvvstaLBl+l4= 56 | go.opentelemetry.io/proto/otlp v1.3.1 h1:TrMUixzpM0yuc/znrFTP9MMRh8trP93mkCiDVeXrui0= 57 | go.opentelemetry.io/proto/otlp v1.3.1/go.mod h1:0X1WI4de4ZsLrrJNLAQbFeLCm3T7yBkR0XqQ7niQU+8= 58 | go.uber.org/goleak v1.3.0 h1:2K3zAYmnTNqV73imy9J1T3WC+gmCePx2hEGkimedGto= 59 | go.uber.org/goleak v1.3.0/go.mod h1:CoHD4mav9JJNrW/WLlf7HGZPjdw8EucARQHekz1X6bE= 60 | golang.org/x/exp v0.0.0-20231110203233-9a3e6036ecaa h1:FRnLl4eNAQl8hwxVVC17teOw8kdjVDVAiFMtgUdTSRQ= 61 | golang.org/x/exp v0.0.0-20231110203233-9a3e6036ecaa/go.mod h1:zk2irFbV9DP96SEBUUAy67IdHUaZuSnrz1n472HUCLE= 62 | golang.org/x/net v0.29.0 h1:5ORfpBpCs4HzDYoodCDBbwHzdR5UrLBZ3sOnUJmFoHo= 63 | golang.org/x/net v0.29.0/go.mod h1:gLkgy8jTGERgjzMic6DS9+SP0ajcu6Xu3Orq/SpETg0= 64 | golang.org/x/sync v0.8.0 h1:3NFvSEYkUoMifnESzZl15y791HH1qU2xm6eCJU5ZPXQ= 65 | golang.org/x/sync v0.8.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk= 66 | golang.org/x/sys v0.25.0 h1:r+8e+loiHxRqhXVl6ML1nO3l1+oFoWbnlu2Ehimmi34= 67 | golang.org/x/sys v0.25.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= 68 | golang.org/x/text v0.18.0 h1:XvMDiNzPAl0jr17s6W9lcaIhGUfUORdGCNsuLmPG224= 69 | golang.org/x/text v0.18.0/go.mod h1:BuEKDfySbSR4drPmRPG/7iBdf8hvFMuRexcpahXilzY= 70 | google.golang.org/genproto/googleapis/api v0.0.0-20240814211410-ddb44dafa142 h1:wKguEg1hsxI2/L3hUYrpo1RVi48K+uTyzKqprwLXsb8= 71 | google.golang.org/genproto/googleapis/api v0.0.0-20240814211410-ddb44dafa142/go.mod h1:d6be+8HhtEtucleCbxpPW9PA9XwISACu8nvpPqF0BVo= 72 | google.golang.org/genproto/googleapis/rpc v0.0.0-20240814211410-ddb44dafa142 h1:e7S5W7MGGLaSu8j3YjdezkZ+m1/Nm0uRVRMEMGk26Xs= 73 | google.golang.org/genproto/googleapis/rpc v0.0.0-20240814211410-ddb44dafa142/go.mod h1:UqMtugtsSgubUsoxbuAoiCXvqvErP7Gf0so0mK9tHxU= 74 | google.golang.org/grpc v1.65.0 h1:bs/cUb4lp1G5iImFFd3u5ixQzweKizoZJAwBNLR42lc= 75 | google.golang.org/grpc v1.65.0/go.mod h1:WgYC2ypjlB0EiQi6wdKixMqukr6lBc0Vo+oOgjrM5ZQ= 76 | google.golang.org/protobuf v1.34.2 h1:6xV6lTsCfpGD21XK49h7MhtcApnLqkfYgPcdHftf6hg= 77 | google.golang.org/protobuf v1.34.2/go.mod h1:qYOHts0dSfpeUzUFpOMr/WGzszTmLH+DiWniOlNbLDw= 78 | gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= 79 | gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= 80 | -------------------------------------------------------------------------------- /mdk/main.go: -------------------------------------------------------------------------------- 1 | // The unofficial MDK (Module Developer Kit) 2 | // 3 | // The MDK is the Module Developer Kit. It provides 4 | // utilities for develping modules. 5 | 6 | package main 7 | 8 | import "dagger/mdk/internal/dagger" 9 | 10 | type Mdk struct { 11 | Generate Generate 12 | } 13 | 14 | func New( 15 | // +defaultPath="/" 16 | source *dagger.Directory, 17 | ) *Mdk { 18 | return &Mdk{ 19 | Generate: Generate{Source: source}, 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /netlify/.gitattributes: -------------------------------------------------------------------------------- 1 | /sdk/** linguist-generated 2 | -------------------------------------------------------------------------------- /netlify/.gitignore: -------------------------------------------------------------------------------- 1 | /sdk 2 | /.venv 3 | /**/__pycache__ 4 | -------------------------------------------------------------------------------- /netlify/README.md: -------------------------------------------------------------------------------- 1 | Module for deploying sites to Netlify 2 | 3 | Example usage: 4 | ```go 5 | out, err := dag.Netlify().Deploy(ctx, build_dir, token, site_name) 6 | ``` 7 | -------------------------------------------------------------------------------- /netlify/build/lib/main.py: -------------------------------------------------------------------------------- 1 | """ 2 | Deploy apps to Netlify 3 | 4 | A utility module for deploying apps to Netlify 5 | """ 6 | 7 | import dagger 8 | from dagger.mod import function 9 | 10 | CLI = "netlify-cli@16.9.3" 11 | 12 | @function 13 | def deploy(dir: dagger.Directory, token: dagger.Secret, site: str) -> str: 14 | """Deploy a site to production""" 15 | return ( 16 | netlify_base(token) 17 | .with_mounted_directory("/src", dir) 18 | .with_exec(["netlify", "deploy", "--dir", "/src", "--site", site, "--prod"]) 19 | .stdout() 20 | ) 21 | 22 | @function 23 | def preview(dir: dagger.Directory, token: dagger.Secret, site: str) -> str: 24 | """Deploy a preview site""" 25 | return ( 26 | netlify_base(token) 27 | .with_mounted_directory("/src", dir) 28 | .with_exec(["netlify", "deploy", "--dir", "/src", "--site", site]) 29 | .stdout() 30 | ) 31 | 32 | @function 33 | def list(token: dagger.Secret) -> str: 34 | """List sites""" 35 | return ( 36 | netlify_base(token) 37 | .with_exec(["netlify", "sites:list"]) 38 | .stdout() 39 | ) 40 | 41 | 42 | def netlify_base(token: dagger.Secret) -> dagger.Container: 43 | return ( 44 | dagger.container().from_("node:21-alpine") 45 | .with_exec(["npm", "install", "-g", CLI]).with_entrypoint([]) 46 | .with_secret_variable("NETLIFY_AUTH_TOKEN", token) 47 | ) 48 | -------------------------------------------------------------------------------- /netlify/dagger.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "netlify", 3 | "engineVersion": "v0.14.0", 4 | "sdk": "python", 5 | "source": "." 6 | } 7 | -------------------------------------------------------------------------------- /netlify/pyproject.toml: -------------------------------------------------------------------------------- 1 | [project] 2 | name = "main" 3 | version = "0.0.0" 4 | -------------------------------------------------------------------------------- /netlify/src/main.egg-info/PKG-INFO: -------------------------------------------------------------------------------- 1 | Metadata-Version: 2.1 2 | Name: main 3 | Version: 0.0.0 4 | -------------------------------------------------------------------------------- /netlify/src/main.egg-info/SOURCES.txt: -------------------------------------------------------------------------------- 1 | README.md 2 | pyproject.toml 3 | src/main.py 4 | src/main.egg-info/PKG-INFO 5 | src/main.egg-info/SOURCES.txt 6 | src/main.egg-info/dependency_links.txt 7 | src/main.egg-info/top_level.txt -------------------------------------------------------------------------------- /netlify/src/main.egg-info/dependency_links.txt: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /netlify/src/main.egg-info/top_level.txt: -------------------------------------------------------------------------------- 1 | main 2 | -------------------------------------------------------------------------------- /netlify/src/main.py: -------------------------------------------------------------------------------- 1 | """ 2 | Deploy apps to Netlify 3 | 4 | A utility module for deploying apps to Netlify 5 | """ 6 | 7 | import dagger 8 | from dagger import function, dag, object_type 9 | 10 | CLI = "netlify-cli@16.9.3" 11 | 12 | @object_type 13 | class Netlify: 14 | @function 15 | def deploy(dir: dagger.Directory, token: dagger.Secret, site: str) -> str: 16 | """Deploy a site to production""" 17 | return ( 18 | netlify_base(token) 19 | .with_mounted_directory("/src", dir) 20 | .with_exec(["netlify", "deploy", "--dir", "/src", "--site", site, "--prod"]) 21 | .stdout() 22 | ) 23 | 24 | @function 25 | def preview(dir: dagger.Directory, token: dagger.Secret, site: str) -> str: 26 | """Deploy a preview site""" 27 | return ( 28 | netlify_base(token) 29 | .with_mounted_directory("/src", dir) 30 | .with_exec(["netlify", "deploy", "--dir", "/src", "--site", site]) 31 | .stdout() 32 | ) 33 | 34 | @function 35 | def list(token: dagger.Secret) -> str: 36 | """List sites""" 37 | return ( 38 | netlify_base(token) 39 | .with_exec(["netlify", "sites:list"]) 40 | .stdout() 41 | ) 42 | 43 | 44 | def netlify_base(token: dagger.Secret) -> dagger.Container: 45 | return ( 46 | dag.container().from_("node:21-alpine") 47 | .with_exec(["npm", "install", "-g", CLI]).with_entrypoint([]) 48 | .with_secret_variable("NETLIFY_AUTH_TOKEN", token) 49 | ) 50 | -------------------------------------------------------------------------------- /nginx/.gitattributes: -------------------------------------------------------------------------------- 1 | /dagger.gen.go linguist-generated 2 | /internal/dagger/** linguist-generated 3 | /internal/querybuilder/** linguist-generated 4 | /internal/telemetry/** linguist-generated 5 | -------------------------------------------------------------------------------- /nginx/.gitignore: -------------------------------------------------------------------------------- 1 | /dagger.gen.go 2 | /internal/dagger 3 | /internal/querybuilder 4 | /internal/telemetry 5 | -------------------------------------------------------------------------------- /nginx/dagger.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "nginx", 3 | "sdk": "go", 4 | "source": ".", 5 | "engineVersion": "v0.12.5" 6 | } 7 | -------------------------------------------------------------------------------- /nginx/go.mod: -------------------------------------------------------------------------------- 1 | module dagger/nginx 2 | 3 | go 1.21.7 4 | 5 | require ( 6 | github.com/99designs/gqlgen v0.17.49 7 | github.com/Khan/genqlient v0.7.0 8 | github.com/vektah/gqlparser/v2 v2.5.16 9 | golang.org/x/exp v0.0.0-20231110203233-9a3e6036ecaa 10 | golang.org/x/sync v0.7.0 11 | ) 12 | 13 | require ( 14 | github.com/cenkalti/backoff/v4 v4.3.0 // indirect 15 | github.com/go-logr/logr v1.4.1 // indirect 16 | github.com/go-logr/stdr v1.2.2 // indirect 17 | github.com/google/uuid v1.6.0 // indirect 18 | github.com/grpc-ecosystem/grpc-gateway/v2 v2.20.0 // indirect 19 | github.com/sergi/go-diff v1.3.2-0.20230802210424-5b0b94c5c0d3 // indirect 20 | github.com/sosodev/duration v1.3.1 // indirect 21 | go.opentelemetry.io/otel v1.27.0 22 | go.opentelemetry.io/otel/exporters/otlp/otlplog/otlploggrpc v0.0.0-20240518090000-14441aefdf88 23 | go.opentelemetry.io/otel/exporters/otlp/otlplog/otlploghttp v0.3.0 24 | go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.27.0 // indirect 25 | go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.27.0 26 | go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp v1.27.0 27 | go.opentelemetry.io/otel/log v0.3.0 28 | go.opentelemetry.io/otel/metric v1.27.0 // indirect 29 | go.opentelemetry.io/otel/sdk v1.27.0 30 | go.opentelemetry.io/otel/sdk/log v0.3.0 31 | go.opentelemetry.io/otel/trace v1.27.0 32 | go.opentelemetry.io/proto/otlp v1.3.1 33 | golang.org/x/net v0.26.0 // indirect 34 | golang.org/x/sys v0.21.0 // indirect 35 | golang.org/x/text v0.16.0 // indirect 36 | google.golang.org/genproto/googleapis/api v0.0.0-20240520151616-dc85e6b867a5 // indirect 37 | google.golang.org/genproto/googleapis/rpc v0.0.0-20240515191416-fc5f0ca64291 // indirect 38 | google.golang.org/grpc v1.64.0 39 | google.golang.org/protobuf v1.34.1 // indirect 40 | ) 41 | -------------------------------------------------------------------------------- /nginx/go.sum: -------------------------------------------------------------------------------- 1 | github.com/99designs/gqlgen v0.17.49 h1:b3hNGexHd33fBSAd4NDT/c3NCcQzcAVkknhN9ym36YQ= 2 | github.com/99designs/gqlgen v0.17.49/go.mod h1:tC8YFVZMed81x7UJ7ORUwXF4Kn6SXuucFqQBhN8+BU0= 3 | github.com/Khan/genqlient v0.7.0 h1:GZ1meyRnzcDTK48EjqB8t3bcfYvHArCUUvgOwpz1D4w= 4 | github.com/Khan/genqlient v0.7.0/go.mod h1:HNyy3wZvuYwmW3Y7mkoQLZsa/R5n5yIRajS1kPBvSFM= 5 | github.com/andreyvit/diff v0.0.0-20170406064948-c7f18ee00883 h1:bvNMNQO63//z+xNgfBlViaCIJKLlCJ6/fmUseuG0wVQ= 6 | github.com/andreyvit/diff v0.0.0-20170406064948-c7f18ee00883/go.mod h1:rCTlJbsFo29Kk6CurOXKm700vrz8f0KW0JNfpkRJY/8= 7 | github.com/cenkalti/backoff/v4 v4.3.0 h1:MyRJ/UdXutAwSAT+s3wNd7MfTIcy71VQueUuFK343L8= 8 | github.com/cenkalti/backoff/v4 v4.3.0/go.mod h1:Y3VNntkOUPxTVeUxJ/G5vcM//AlwfmyYozVcomhLiZE= 9 | github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= 10 | github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= 11 | github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= 12 | github.com/go-logr/logr v1.2.2/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A= 13 | github.com/go-logr/logr v1.4.1 h1:pKouT5E8xu9zeFC39JXRDukb6JFQPXM5p5I91188VAQ= 14 | github.com/go-logr/logr v1.4.1/go.mod h1:9T104GzyrTigFIr8wt5mBrctHMim0Nb2HLGrmQ40KvY= 15 | github.com/go-logr/stdr v1.2.2 h1:hSWxHoqTgW2S2qGc0LTAI563KZ5YKYRhT3MFKZMbjag= 16 | github.com/go-logr/stdr v1.2.2/go.mod h1:mMo/vtBO5dYbehREoey6XUKy/eSumjCCveDpRre4VKE= 17 | github.com/google/go-cmp v0.6.0 h1:ofyhxvXcZhMsU5ulbFiLKl/XBFqE1GSq7atu8tAmTRI= 18 | github.com/google/go-cmp v0.6.0/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= 19 | github.com/google/uuid v1.6.0 h1:NIvaJDMOsjHA8n1jAhLSgzrAzy1Hgr+hNrb57e+94F0= 20 | github.com/google/uuid v1.6.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= 21 | github.com/grpc-ecosystem/grpc-gateway/v2 v2.20.0 h1:bkypFPDjIYGfCYD5mRBvpqxfYX1YCS1PXdKYWi8FsN0= 22 | github.com/grpc-ecosystem/grpc-gateway/v2 v2.20.0/go.mod h1:P+Lt/0by1T8bfcF3z737NnSbmxQAppXMRziHUxPOC8k= 23 | github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo= 24 | github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ= 25 | github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI= 26 | github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= 27 | github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= 28 | github.com/sergi/go-diff v1.3.2-0.20230802210424-5b0b94c5c0d3 h1:n661drycOFuPLCN3Uc8sB6B/s6Z4t2xvBgU1htSHuq8= 29 | github.com/sergi/go-diff v1.3.2-0.20230802210424-5b0b94c5c0d3/go.mod h1:A0bzQcvG0E7Rwjx0REVgAGH58e96+X0MeOfepqsbeW4= 30 | github.com/sosodev/duration v1.3.1 h1:qtHBDMQ6lvMQsL15g4aopM4HEfOaYuhWBw3NPTtlqq4= 31 | github.com/sosodev/duration v1.3.1/go.mod h1:RQIBBX0+fMLc/D9+Jb/fwvVmo0eZvDDEERAikUR6SDg= 32 | github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= 33 | github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4= 34 | github.com/stretchr/testify v1.9.0 h1:HtqpIVDClZ4nwg75+f6Lvsy/wHu+3BoSGCbBAcpTsTg= 35 | github.com/stretchr/testify v1.9.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY= 36 | github.com/vektah/gqlparser/v2 v2.5.16 h1:1gcmLTvs3JLKXckwCwlUagVn/IlV2bwqle0vJ0vy5p8= 37 | github.com/vektah/gqlparser/v2 v2.5.16/go.mod h1:1lz1OeCqgQbQepsGxPVywrjdBHW2T08PUS3pJqepRww= 38 | go.opentelemetry.io/otel v1.27.0 h1:9BZoF3yMK/O1AafMiQTVu0YDj5Ea4hPhxCs7sGva+cg= 39 | go.opentelemetry.io/otel v1.27.0/go.mod h1:DMpAK8fzYRzs+bi3rS5REupisuqTheUlSZJ1WnZaPAQ= 40 | go.opentelemetry.io/otel/exporters/otlp/otlplog/otlploggrpc v0.0.0-20240518090000-14441aefdf88 h1:oM0GTNKGlc5qHctWeIGTVyda4iFFalOzMZ3Ehj5rwB4= 41 | go.opentelemetry.io/otel/exporters/otlp/otlplog/otlploggrpc v0.0.0-20240518090000-14441aefdf88/go.mod h1:JGG8ebaMO5nXOPnvKEl+DiA4MGwFjCbjsxT1WHIEBPY= 42 | go.opentelemetry.io/otel/exporters/otlp/otlplog/otlploghttp v0.3.0 h1:ccBrA8nCY5mM0y5uO7FT0ze4S0TuFcWdDB2FxGMTjkI= 43 | go.opentelemetry.io/otel/exporters/otlp/otlplog/otlploghttp v0.3.0/go.mod h1:/9pb6634zi2Lk8LYg9Q0X8Ar6jka4dkFOylBLbVQPCE= 44 | go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.27.0 h1:R9DE4kQ4k+YtfLI2ULwX82VtNQ2J8yZmA7ZIF/D+7Mc= 45 | go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.27.0/go.mod h1:OQFyQVrDlbe+R7xrEyDr/2Wr67Ol0hRUgsfA+V5A95s= 46 | go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.27.0 h1:qFffATk0X+HD+f1Z8lswGiOQYKHRlzfmdJm0wEaVrFA= 47 | go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.27.0/go.mod h1:MOiCmryaYtc+V0Ei+Tx9o5S1ZjA7kzLucuVuyzBZloQ= 48 | go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp v1.27.0 h1:QY7/0NeRPKlzusf40ZE4t1VlMKbqSNT7cJRYzWuja0s= 49 | go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp v1.27.0/go.mod h1:HVkSiDhTM9BoUJU8qE6j2eSWLLXvi1USXjyd2BXT8PY= 50 | go.opentelemetry.io/otel/log v0.3.0 h1:kJRFkpUFYtny37NQzL386WbznUByZx186DpEMKhEGZs= 51 | go.opentelemetry.io/otel/log v0.3.0/go.mod h1:ziCwqZr9soYDwGNbIL+6kAvQC+ANvjgG367HVcyR/ys= 52 | go.opentelemetry.io/otel/metric v1.27.0 h1:hvj3vdEKyeCi4YaYfNjv2NUje8FqKqUY8IlF0FxV/ik= 53 | go.opentelemetry.io/otel/metric v1.27.0/go.mod h1:mVFgmRlhljgBiuk/MP/oKylr4hs85GZAylncepAX/ak= 54 | go.opentelemetry.io/otel/sdk v1.27.0 h1:mlk+/Y1gLPLn84U4tI8d3GNJmGT/eXe3ZuOXN9kTWmI= 55 | go.opentelemetry.io/otel/sdk v1.27.0/go.mod h1:Ha9vbLwJE6W86YstIywK2xFfPjbWlCuwPtMkKdz/Y4A= 56 | go.opentelemetry.io/otel/sdk/log v0.3.0 h1:GEjJ8iftz2l+XO1GF2856r7yYVh74URiF9JMcAacr5U= 57 | go.opentelemetry.io/otel/sdk/log v0.3.0/go.mod h1:BwCxtmux6ACLuys1wlbc0+vGBd+xytjmjajwqqIul2g= 58 | go.opentelemetry.io/otel/trace v1.27.0 h1:IqYb813p7cmbHk0a5y6pD5JPakbVfftRXABGt5/Rscw= 59 | go.opentelemetry.io/otel/trace v1.27.0/go.mod h1:6RiD1hkAprV4/q+yd2ln1HG9GoPx39SuvvstaLBl+l4= 60 | go.opentelemetry.io/proto/otlp v1.3.1 h1:TrMUixzpM0yuc/znrFTP9MMRh8trP93mkCiDVeXrui0= 61 | go.opentelemetry.io/proto/otlp v1.3.1/go.mod h1:0X1WI4de4ZsLrrJNLAQbFeLCm3T7yBkR0XqQ7niQU+8= 62 | go.uber.org/goleak v1.3.0 h1:2K3zAYmnTNqV73imy9J1T3WC+gmCePx2hEGkimedGto= 63 | go.uber.org/goleak v1.3.0/go.mod h1:CoHD4mav9JJNrW/WLlf7HGZPjdw8EucARQHekz1X6bE= 64 | golang.org/x/exp v0.0.0-20231110203233-9a3e6036ecaa h1:FRnLl4eNAQl8hwxVVC17teOw8kdjVDVAiFMtgUdTSRQ= 65 | golang.org/x/exp v0.0.0-20231110203233-9a3e6036ecaa/go.mod h1:zk2irFbV9DP96SEBUUAy67IdHUaZuSnrz1n472HUCLE= 66 | golang.org/x/net v0.26.0 h1:soB7SVo0PWrY4vPW/+ay0jKDNScG2X9wFeYlXIvJsOQ= 67 | golang.org/x/net v0.26.0/go.mod h1:5YKkiSynbBIh3p6iOc/vibscux0x38BZDkn8sCUPxHE= 68 | golang.org/x/sync v0.7.0 h1:YsImfSBoP9QPYL0xyKJPq0gcaJdG3rInoqxTWbfQu9M= 69 | golang.org/x/sync v0.7.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk= 70 | golang.org/x/sys v0.21.0 h1:rF+pYz3DAGSQAxAu1CbC7catZg4ebC4UIeIhKxBZvws= 71 | golang.org/x/sys v0.21.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= 72 | golang.org/x/text v0.16.0 h1:a94ExnEXNtEwYLGJSIUxnWoxoRz/ZcCsV63ROupILh4= 73 | golang.org/x/text v0.16.0/go.mod h1:GhwF1Be+LQoKShO3cGOHzqOgRrGaYc9AvblQOmPVHnI= 74 | google.golang.org/genproto/googleapis/api v0.0.0-20240520151616-dc85e6b867a5 h1:P8OJ/WCl/Xo4E4zoe4/bifHpSmmKwARqyqE4nW6J2GQ= 75 | google.golang.org/genproto/googleapis/api v0.0.0-20240520151616-dc85e6b867a5/go.mod h1:RGnPtTG7r4i8sPlNyDeikXF99hMM+hN6QMm4ooG9g2g= 76 | google.golang.org/genproto/googleapis/rpc v0.0.0-20240515191416-fc5f0ca64291 h1:AgADTJarZTBqgjiUzRgfaBchgYB3/WFTC80GPwsMcRI= 77 | google.golang.org/genproto/googleapis/rpc v0.0.0-20240515191416-fc5f0ca64291/go.mod h1:EfXuqaE1J41VCDicxHzUDm+8rk+7ZdXzHV0IhO/I6s0= 78 | google.golang.org/grpc v1.64.0 h1:KH3VH9y/MgNQg1dE7b3XfVK0GsPSIzJwdF617gUSbvY= 79 | google.golang.org/grpc v1.64.0/go.mod h1:oxjF8E3FBnjp+/gVFYdWacaLDx9na1aqy9oovLpxQYg= 80 | google.golang.org/protobuf v1.34.1 h1:9ddQBjfCyZPOHPUiPxpYESBLc+T8P3E+Vo4IbKZgFWg= 81 | google.golang.org/protobuf v1.34.1/go.mod h1:c6P6GXX6sHbq/GpV6MGZEdwhWPcYBgnhAHhKbcUYpos= 82 | gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= 83 | gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= 84 | gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= 85 | gopkg.in/yaml.v2 v2.4.0/go.mod h1:RDklbk79AGWmwhnvt/jBztapEOGDOx6ZbXqjP6csGnQ= 86 | gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= 87 | gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= 88 | -------------------------------------------------------------------------------- /nginx/main.go: -------------------------------------------------------------------------------- 1 | // A module for building Nginx containers 2 | // 3 | // Module for building Nginx containers to serve the given 4 | // directory. 5 | 6 | package main 7 | 8 | type Nginx struct{ 9 | Version string 10 | Dir *Directory 11 | } 12 | 13 | func New( 14 | // The nginx container tag 15 | // +optional 16 | // +default="1.25" 17 | version string, 18 | ) *Nginx { 19 | return &Nginx{ 20 | Version: version, 21 | } 22 | } 23 | 24 | // Specify a tag of nginx to use 25 | func (n *Nginx) WithVersion( 26 | // The nginx container tag 27 | version string, 28 | ) *Nginx { 29 | n.Version = version 30 | return n 31 | } 32 | 33 | // Add a directory for nginx to serve 34 | func (n *Nginx) WithDirectory( 35 | // The directory for nginx to serve 36 | directory *Directory, 37 | ) *Nginx { 38 | n.Dir = directory 39 | return n 40 | } 41 | 42 | // Get the nginx container with the directory in it 43 | func (n *Nginx) Container( 44 | // The platform of the container 45 | // +optional 46 | platform string, 47 | ) *Container { 48 | opts := ContainerOpts{} 49 | if platform != "" { 50 | opts.Platform = Platform(platform) 51 | } 52 | ctr := dag.Container(opts). 53 | From("nginx:" + n.Version). 54 | WithExposedPort(80) 55 | 56 | if n.Dir != nil { 57 | ctr = ctr.WithDirectory("/usr/share/nginx/html", n.Dir) 58 | } 59 | 60 | return ctr 61 | } 62 | 63 | -------------------------------------------------------------------------------- /postgres/.gitattributes: -------------------------------------------------------------------------------- 1 | /dagger.gen.go linguist-generated 2 | /internal/dagger/** linguist-generated 3 | /internal/querybuilder/** linguist-generated 4 | /internal/telemetry/** linguist-generated 5 | -------------------------------------------------------------------------------- /postgres/.gitignore: -------------------------------------------------------------------------------- 1 | /dagger.gen.go 2 | /internal/dagger 3 | /internal/querybuilder 4 | /internal/telemetry 5 | -------------------------------------------------------------------------------- /postgres/dagger.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "postgres", 3 | "sdk": "go", 4 | "source": ".", 5 | "engineVersion": "v0.12.5" 6 | } 7 | -------------------------------------------------------------------------------- /postgres/go.mod: -------------------------------------------------------------------------------- 1 | module dagger/postgres 2 | 3 | go 1.21.7 4 | 5 | require ( 6 | github.com/99designs/gqlgen v0.17.49 7 | github.com/Khan/genqlient v0.7.0 8 | github.com/vektah/gqlparser/v2 v2.5.16 9 | golang.org/x/exp v0.0.0-20231110203233-9a3e6036ecaa 10 | golang.org/x/sync v0.7.0 11 | ) 12 | 13 | require ( 14 | github.com/cenkalti/backoff/v4 v4.3.0 // indirect 15 | github.com/go-logr/logr v1.4.1 // indirect 16 | github.com/go-logr/stdr v1.2.2 // indirect 17 | github.com/google/uuid v1.6.0 // indirect 18 | github.com/grpc-ecosystem/grpc-gateway/v2 v2.20.0 // indirect 19 | github.com/sergi/go-diff v1.3.2-0.20230802210424-5b0b94c5c0d3 // indirect 20 | github.com/sosodev/duration v1.3.1 // indirect 21 | go.opentelemetry.io/otel v1.27.0 22 | go.opentelemetry.io/otel/exporters/otlp/otlplog/otlploggrpc v0.0.0-20240518090000-14441aefdf88 23 | go.opentelemetry.io/otel/exporters/otlp/otlplog/otlploghttp v0.3.0 24 | go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.27.0 // indirect 25 | go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.27.0 26 | go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp v1.27.0 27 | go.opentelemetry.io/otel/log v0.3.0 28 | go.opentelemetry.io/otel/metric v1.27.0 // indirect 29 | go.opentelemetry.io/otel/sdk v1.27.0 30 | go.opentelemetry.io/otel/sdk/log v0.3.0 31 | go.opentelemetry.io/otel/trace v1.27.0 32 | go.opentelemetry.io/proto/otlp v1.3.1 33 | golang.org/x/net v0.26.0 // indirect 34 | golang.org/x/sys v0.21.0 // indirect 35 | golang.org/x/text v0.16.0 // indirect 36 | google.golang.org/genproto/googleapis/api v0.0.0-20240520151616-dc85e6b867a5 // indirect 37 | google.golang.org/genproto/googleapis/rpc v0.0.0-20240515191416-fc5f0ca64291 // indirect 38 | google.golang.org/grpc v1.64.0 39 | google.golang.org/protobuf v1.34.1 // indirect 40 | ) 41 | -------------------------------------------------------------------------------- /postgres/go.sum: -------------------------------------------------------------------------------- 1 | github.com/99designs/gqlgen v0.17.49 h1:b3hNGexHd33fBSAd4NDT/c3NCcQzcAVkknhN9ym36YQ= 2 | github.com/99designs/gqlgen v0.17.49/go.mod h1:tC8YFVZMed81x7UJ7ORUwXF4Kn6SXuucFqQBhN8+BU0= 3 | github.com/Khan/genqlient v0.7.0 h1:GZ1meyRnzcDTK48EjqB8t3bcfYvHArCUUvgOwpz1D4w= 4 | github.com/Khan/genqlient v0.7.0/go.mod h1:HNyy3wZvuYwmW3Y7mkoQLZsa/R5n5yIRajS1kPBvSFM= 5 | github.com/andreyvit/diff v0.0.0-20170406064948-c7f18ee00883 h1:bvNMNQO63//z+xNgfBlViaCIJKLlCJ6/fmUseuG0wVQ= 6 | github.com/andreyvit/diff v0.0.0-20170406064948-c7f18ee00883/go.mod h1:rCTlJbsFo29Kk6CurOXKm700vrz8f0KW0JNfpkRJY/8= 7 | github.com/cenkalti/backoff/v4 v4.3.0 h1:MyRJ/UdXutAwSAT+s3wNd7MfTIcy71VQueUuFK343L8= 8 | github.com/cenkalti/backoff/v4 v4.3.0/go.mod h1:Y3VNntkOUPxTVeUxJ/G5vcM//AlwfmyYozVcomhLiZE= 9 | github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= 10 | github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= 11 | github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= 12 | github.com/go-logr/logr v1.2.2/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A= 13 | github.com/go-logr/logr v1.4.1 h1:pKouT5E8xu9zeFC39JXRDukb6JFQPXM5p5I91188VAQ= 14 | github.com/go-logr/logr v1.4.1/go.mod h1:9T104GzyrTigFIr8wt5mBrctHMim0Nb2HLGrmQ40KvY= 15 | github.com/go-logr/stdr v1.2.2 h1:hSWxHoqTgW2S2qGc0LTAI563KZ5YKYRhT3MFKZMbjag= 16 | github.com/go-logr/stdr v1.2.2/go.mod h1:mMo/vtBO5dYbehREoey6XUKy/eSumjCCveDpRre4VKE= 17 | github.com/google/go-cmp v0.6.0 h1:ofyhxvXcZhMsU5ulbFiLKl/XBFqE1GSq7atu8tAmTRI= 18 | github.com/google/go-cmp v0.6.0/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= 19 | github.com/google/uuid v1.6.0 h1:NIvaJDMOsjHA8n1jAhLSgzrAzy1Hgr+hNrb57e+94F0= 20 | github.com/google/uuid v1.6.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= 21 | github.com/grpc-ecosystem/grpc-gateway/v2 v2.20.0 h1:bkypFPDjIYGfCYD5mRBvpqxfYX1YCS1PXdKYWi8FsN0= 22 | github.com/grpc-ecosystem/grpc-gateway/v2 v2.20.0/go.mod h1:P+Lt/0by1T8bfcF3z737NnSbmxQAppXMRziHUxPOC8k= 23 | github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo= 24 | github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ= 25 | github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI= 26 | github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= 27 | github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= 28 | github.com/sergi/go-diff v1.3.2-0.20230802210424-5b0b94c5c0d3 h1:n661drycOFuPLCN3Uc8sB6B/s6Z4t2xvBgU1htSHuq8= 29 | github.com/sergi/go-diff v1.3.2-0.20230802210424-5b0b94c5c0d3/go.mod h1:A0bzQcvG0E7Rwjx0REVgAGH58e96+X0MeOfepqsbeW4= 30 | github.com/sosodev/duration v1.3.1 h1:qtHBDMQ6lvMQsL15g4aopM4HEfOaYuhWBw3NPTtlqq4= 31 | github.com/sosodev/duration v1.3.1/go.mod h1:RQIBBX0+fMLc/D9+Jb/fwvVmo0eZvDDEERAikUR6SDg= 32 | github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= 33 | github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4= 34 | github.com/stretchr/testify v1.9.0 h1:HtqpIVDClZ4nwg75+f6Lvsy/wHu+3BoSGCbBAcpTsTg= 35 | github.com/stretchr/testify v1.9.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY= 36 | github.com/vektah/gqlparser/v2 v2.5.16 h1:1gcmLTvs3JLKXckwCwlUagVn/IlV2bwqle0vJ0vy5p8= 37 | github.com/vektah/gqlparser/v2 v2.5.16/go.mod h1:1lz1OeCqgQbQepsGxPVywrjdBHW2T08PUS3pJqepRww= 38 | go.opentelemetry.io/otel v1.27.0 h1:9BZoF3yMK/O1AafMiQTVu0YDj5Ea4hPhxCs7sGva+cg= 39 | go.opentelemetry.io/otel v1.27.0/go.mod h1:DMpAK8fzYRzs+bi3rS5REupisuqTheUlSZJ1WnZaPAQ= 40 | go.opentelemetry.io/otel/exporters/otlp/otlplog/otlploggrpc v0.0.0-20240518090000-14441aefdf88 h1:oM0GTNKGlc5qHctWeIGTVyda4iFFalOzMZ3Ehj5rwB4= 41 | go.opentelemetry.io/otel/exporters/otlp/otlplog/otlploggrpc v0.0.0-20240518090000-14441aefdf88/go.mod h1:JGG8ebaMO5nXOPnvKEl+DiA4MGwFjCbjsxT1WHIEBPY= 42 | go.opentelemetry.io/otel/exporters/otlp/otlplog/otlploghttp v0.3.0 h1:ccBrA8nCY5mM0y5uO7FT0ze4S0TuFcWdDB2FxGMTjkI= 43 | go.opentelemetry.io/otel/exporters/otlp/otlplog/otlploghttp v0.3.0/go.mod h1:/9pb6634zi2Lk8LYg9Q0X8Ar6jka4dkFOylBLbVQPCE= 44 | go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.27.0 h1:R9DE4kQ4k+YtfLI2ULwX82VtNQ2J8yZmA7ZIF/D+7Mc= 45 | go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.27.0/go.mod h1:OQFyQVrDlbe+R7xrEyDr/2Wr67Ol0hRUgsfA+V5A95s= 46 | go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.27.0 h1:qFffATk0X+HD+f1Z8lswGiOQYKHRlzfmdJm0wEaVrFA= 47 | go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.27.0/go.mod h1:MOiCmryaYtc+V0Ei+Tx9o5S1ZjA7kzLucuVuyzBZloQ= 48 | go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp v1.27.0 h1:QY7/0NeRPKlzusf40ZE4t1VlMKbqSNT7cJRYzWuja0s= 49 | go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp v1.27.0/go.mod h1:HVkSiDhTM9BoUJU8qE6j2eSWLLXvi1USXjyd2BXT8PY= 50 | go.opentelemetry.io/otel/log v0.3.0 h1:kJRFkpUFYtny37NQzL386WbznUByZx186DpEMKhEGZs= 51 | go.opentelemetry.io/otel/log v0.3.0/go.mod h1:ziCwqZr9soYDwGNbIL+6kAvQC+ANvjgG367HVcyR/ys= 52 | go.opentelemetry.io/otel/metric v1.27.0 h1:hvj3vdEKyeCi4YaYfNjv2NUje8FqKqUY8IlF0FxV/ik= 53 | go.opentelemetry.io/otel/metric v1.27.0/go.mod h1:mVFgmRlhljgBiuk/MP/oKylr4hs85GZAylncepAX/ak= 54 | go.opentelemetry.io/otel/sdk v1.27.0 h1:mlk+/Y1gLPLn84U4tI8d3GNJmGT/eXe3ZuOXN9kTWmI= 55 | go.opentelemetry.io/otel/sdk v1.27.0/go.mod h1:Ha9vbLwJE6W86YstIywK2xFfPjbWlCuwPtMkKdz/Y4A= 56 | go.opentelemetry.io/otel/sdk/log v0.3.0 h1:GEjJ8iftz2l+XO1GF2856r7yYVh74URiF9JMcAacr5U= 57 | go.opentelemetry.io/otel/sdk/log v0.3.0/go.mod h1:BwCxtmux6ACLuys1wlbc0+vGBd+xytjmjajwqqIul2g= 58 | go.opentelemetry.io/otel/trace v1.27.0 h1:IqYb813p7cmbHk0a5y6pD5JPakbVfftRXABGt5/Rscw= 59 | go.opentelemetry.io/otel/trace v1.27.0/go.mod h1:6RiD1hkAprV4/q+yd2ln1HG9GoPx39SuvvstaLBl+l4= 60 | go.opentelemetry.io/proto/otlp v1.3.1 h1:TrMUixzpM0yuc/znrFTP9MMRh8trP93mkCiDVeXrui0= 61 | go.opentelemetry.io/proto/otlp v1.3.1/go.mod h1:0X1WI4de4ZsLrrJNLAQbFeLCm3T7yBkR0XqQ7niQU+8= 62 | go.uber.org/goleak v1.3.0 h1:2K3zAYmnTNqV73imy9J1T3WC+gmCePx2hEGkimedGto= 63 | go.uber.org/goleak v1.3.0/go.mod h1:CoHD4mav9JJNrW/WLlf7HGZPjdw8EucARQHekz1X6bE= 64 | golang.org/x/exp v0.0.0-20231110203233-9a3e6036ecaa h1:FRnLl4eNAQl8hwxVVC17teOw8kdjVDVAiFMtgUdTSRQ= 65 | golang.org/x/exp v0.0.0-20231110203233-9a3e6036ecaa/go.mod h1:zk2irFbV9DP96SEBUUAy67IdHUaZuSnrz1n472HUCLE= 66 | golang.org/x/net v0.26.0 h1:soB7SVo0PWrY4vPW/+ay0jKDNScG2X9wFeYlXIvJsOQ= 67 | golang.org/x/net v0.26.0/go.mod h1:5YKkiSynbBIh3p6iOc/vibscux0x38BZDkn8sCUPxHE= 68 | golang.org/x/sync v0.7.0 h1:YsImfSBoP9QPYL0xyKJPq0gcaJdG3rInoqxTWbfQu9M= 69 | golang.org/x/sync v0.7.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk= 70 | golang.org/x/sys v0.21.0 h1:rF+pYz3DAGSQAxAu1CbC7catZg4ebC4UIeIhKxBZvws= 71 | golang.org/x/sys v0.21.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= 72 | golang.org/x/text v0.16.0 h1:a94ExnEXNtEwYLGJSIUxnWoxoRz/ZcCsV63ROupILh4= 73 | golang.org/x/text v0.16.0/go.mod h1:GhwF1Be+LQoKShO3cGOHzqOgRrGaYc9AvblQOmPVHnI= 74 | google.golang.org/genproto/googleapis/api v0.0.0-20240520151616-dc85e6b867a5 h1:P8OJ/WCl/Xo4E4zoe4/bifHpSmmKwARqyqE4nW6J2GQ= 75 | google.golang.org/genproto/googleapis/api v0.0.0-20240520151616-dc85e6b867a5/go.mod h1:RGnPtTG7r4i8sPlNyDeikXF99hMM+hN6QMm4ooG9g2g= 76 | google.golang.org/genproto/googleapis/rpc v0.0.0-20240515191416-fc5f0ca64291 h1:AgADTJarZTBqgjiUzRgfaBchgYB3/WFTC80GPwsMcRI= 77 | google.golang.org/genproto/googleapis/rpc v0.0.0-20240515191416-fc5f0ca64291/go.mod h1:EfXuqaE1J41VCDicxHzUDm+8rk+7ZdXzHV0IhO/I6s0= 78 | google.golang.org/grpc v1.64.0 h1:KH3VH9y/MgNQg1dE7b3XfVK0GsPSIzJwdF617gUSbvY= 79 | google.golang.org/grpc v1.64.0/go.mod h1:oxjF8E3FBnjp+/gVFYdWacaLDx9na1aqy9oovLpxQYg= 80 | google.golang.org/protobuf v1.34.1 h1:9ddQBjfCyZPOHPUiPxpYESBLc+T8P3E+Vo4IbKZgFWg= 81 | google.golang.org/protobuf v1.34.1/go.mod h1:c6P6GXX6sHbq/GpV6MGZEdwhWPcYBgnhAHhKbcUYpos= 82 | gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= 83 | gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= 84 | gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= 85 | gopkg.in/yaml.v2 v2.4.0/go.mod h1:RDklbk79AGWmwhnvt/jBztapEOGDOx6ZbXqjP6csGnQ= 86 | gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= 87 | gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= 88 | -------------------------------------------------------------------------------- /postgres/main.go: -------------------------------------------------------------------------------- 1 | // A module for working with Postgres 2 | // 3 | // Module for building Postgres containers, serving a postgres service, 4 | // or querying a running postgres database. 5 | 6 | package main 7 | 8 | import ( 9 | "fmt" 10 | ) 11 | 12 | type Postgres struct{ 13 | Version string 14 | } 15 | 16 | func New( 17 | // The postgres container tag 18 | // +optional 19 | // +default="16" 20 | version string, 21 | ) *Postgres { 22 | return &Postgres{ 23 | Version: version, 24 | } 25 | } 26 | 27 | // Specify a tag of postgres to use 28 | func (n *Postgres) WithVersion( 29 | // The postgres container tag 30 | version string, 31 | ) *Postgres { 32 | n.Version = version 33 | return n 34 | } 35 | 36 | // Get the postgres container with the directory in it 37 | func (n *Postgres) Container( 38 | // The platform of the container 39 | // +optional 40 | platform string, 41 | ) *Container { 42 | opts := ContainerOpts{} 43 | if platform != "" { 44 | opts.Platform = Platform(platform) 45 | } 46 | 47 | return dag.Container(opts). 48 | From("postgres:" + n.Version). 49 | WithExposedPort(5432) 50 | } 51 | 52 | // Get a postgres container as a service 53 | func (n *Postgres) Service( 54 | // The platform of the container 55 | // +optional 56 | platform string, 57 | ) *Service { 58 | return n.Container(platform).AsService() 59 | } 60 | 61 | // Get a terminal of a psql client connected to a Postgres database 62 | func (n *Postgres) Client( 63 | // The Postgres server to connect to 64 | server *Service, 65 | // The postgres database 66 | db string, 67 | // The postgres user 68 | user string, 69 | // The postgres password 70 | password string, 71 | // The postgres port 72 | // +optional 73 | // +default="5432" 74 | port string, 75 | // The postgres client container tag 76 | // +optional 77 | // +default="16" 78 | version string, 79 | ) *Terminal { 80 | connectionString := fmt.Sprintf("postgresql://%s:%s@postgres:%s/%s", user, password, port, db) 81 | return dag.Container(). 82 | From("postgres:" + version). 83 | WithoutEntrypoint(). 84 | WithServiceBinding("postgres", server). 85 | WithDefaultTerminalCmd([]string{"psql", connectionString}). 86 | Terminal() 87 | } 88 | 89 | -------------------------------------------------------------------------------- /proxy/.gitattributes: -------------------------------------------------------------------------------- 1 | /sdk/** linguist-generated 2 | -------------------------------------------------------------------------------- /proxy/.gitignore: -------------------------------------------------------------------------------- 1 | /sdk 2 | /.venv 3 | /**/__pycache__ 4 | -------------------------------------------------------------------------------- /proxy/README.md: -------------------------------------------------------------------------------- 1 | ## Usage: 2 | 3 | ```go 4 | dag.Proxy(). 5 | WithService(backendService, "backend", 8080, 8080). 6 | WithService(frontendService, "frontend", 8081, 80). 7 | Service() 8 | ``` 9 | 10 | -------------------------------------------------------------------------------- /proxy/dagger.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "proxy", 3 | "engineVersion": "v0.15.1", 4 | "sdk": "python", 5 | "source": "." 6 | } 7 | -------------------------------------------------------------------------------- /proxy/examples/go/.gitattributes: -------------------------------------------------------------------------------- 1 | /dagger.gen.go linguist-generated 2 | /internal/dagger/** linguist-generated 3 | /internal/querybuilder/** linguist-generated 4 | /internal/telemetry/** linguist-generated 5 | -------------------------------------------------------------------------------- /proxy/examples/go/.gitignore: -------------------------------------------------------------------------------- 1 | /dagger.gen.go 2 | /internal/dagger 3 | /internal/querybuilder 4 | /internal/telemetry 5 | -------------------------------------------------------------------------------- /proxy/examples/go/dagger.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "example", 3 | "engineVersion": "v0.13.3", 4 | "sdk": "go", 5 | "dependencies": [ 6 | { 7 | "name": "proxy", 8 | "source": "../..", 9 | "pin": "" 10 | } 11 | ], 12 | "source": "." 13 | } 14 | -------------------------------------------------------------------------------- /proxy/examples/go/go.mod: -------------------------------------------------------------------------------- 1 | module dagger/example 2 | 3 | go 1.23.2 4 | 5 | require ( 6 | github.com/99designs/gqlgen v0.17.55 7 | github.com/Khan/genqlient v0.7.0 8 | github.com/vektah/gqlparser/v2 v2.5.17 9 | go.opentelemetry.io/otel v1.27.0 10 | go.opentelemetry.io/otel/exporters/otlp/otlplog/otlploggrpc v0.0.0-20240518090000-14441aefdf88 11 | go.opentelemetry.io/otel/exporters/otlp/otlplog/otlploghttp v0.3.0 12 | go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetricgrpc v1.27.0 13 | go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetrichttp v1.27.0 14 | go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.27.0 15 | go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp v1.27.0 16 | go.opentelemetry.io/otel/log v0.3.0 17 | go.opentelemetry.io/otel/metric v1.27.0 18 | go.opentelemetry.io/otel/sdk v1.27.0 19 | go.opentelemetry.io/otel/sdk/log v0.3.0 20 | go.opentelemetry.io/otel/sdk/metric v1.27.0 21 | go.opentelemetry.io/otel/trace v1.27.0 22 | go.opentelemetry.io/proto/otlp v1.3.1 23 | golang.org/x/exp v0.0.0-20231110203233-9a3e6036ecaa 24 | golang.org/x/sync v0.8.0 25 | google.golang.org/grpc v1.65.0 26 | ) 27 | 28 | require ( 29 | github.com/cenkalti/backoff/v4 v4.3.0 // indirect 30 | github.com/go-logr/logr v1.4.2 // indirect 31 | github.com/go-logr/stdr v1.2.2 // indirect 32 | github.com/google/uuid v1.6.0 // indirect 33 | github.com/grpc-ecosystem/grpc-gateway/v2 v2.22.0 // indirect 34 | github.com/sosodev/duration v1.3.1 // indirect 35 | go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.27.0 // indirect 36 | golang.org/x/net v0.29.0 // indirect 37 | golang.org/x/sys v0.26.0 // indirect 38 | golang.org/x/text v0.18.0 // indirect 39 | google.golang.org/genproto/googleapis/api v0.0.0-20240814211410-ddb44dafa142 // indirect 40 | google.golang.org/genproto/googleapis/rpc v0.0.0-20240814211410-ddb44dafa142 // indirect 41 | google.golang.org/protobuf v1.34.2 // indirect 42 | ) 43 | 44 | replace go.opentelemetry.io/otel/exporters/otlp/otlplog/otlploggrpc => go.opentelemetry.io/otel/exporters/otlp/otlplog/otlploggrpc v0.0.0-20240518090000-14441aefdf88 45 | 46 | replace go.opentelemetry.io/otel/exporters/otlp/otlplog/otlploghttp => go.opentelemetry.io/otel/exporters/otlp/otlplog/otlploghttp v0.3.0 47 | 48 | replace go.opentelemetry.io/otel/log => go.opentelemetry.io/otel/log v0.3.0 49 | 50 | replace go.opentelemetry.io/otel/sdk/log => go.opentelemetry.io/otel/sdk/log v0.3.0 51 | -------------------------------------------------------------------------------- /proxy/examples/go/go.sum: -------------------------------------------------------------------------------- 1 | github.com/99designs/gqlgen v0.17.55 h1:3vzrNWYyzSZjGDFo68e5j9sSauLxfKvLp+6ioRokVtM= 2 | github.com/99designs/gqlgen v0.17.55/go.mod h1:3Bq768f8hgVPGZxL8aY9MaYmbxa6llPM/qu1IGH1EJo= 3 | github.com/Khan/genqlient v0.7.0 h1:GZ1meyRnzcDTK48EjqB8t3bcfYvHArCUUvgOwpz1D4w= 4 | github.com/Khan/genqlient v0.7.0/go.mod h1:HNyy3wZvuYwmW3Y7mkoQLZsa/R5n5yIRajS1kPBvSFM= 5 | github.com/andreyvit/diff v0.0.0-20170406064948-c7f18ee00883 h1:bvNMNQO63//z+xNgfBlViaCIJKLlCJ6/fmUseuG0wVQ= 6 | github.com/andreyvit/diff v0.0.0-20170406064948-c7f18ee00883/go.mod h1:rCTlJbsFo29Kk6CurOXKm700vrz8f0KW0JNfpkRJY/8= 7 | github.com/cenkalti/backoff/v4 v4.3.0 h1:MyRJ/UdXutAwSAT+s3wNd7MfTIcy71VQueUuFK343L8= 8 | github.com/cenkalti/backoff/v4 v4.3.0/go.mod h1:Y3VNntkOUPxTVeUxJ/G5vcM//AlwfmyYozVcomhLiZE= 9 | github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= 10 | github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= 11 | github.com/go-logr/logr v1.2.2/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A= 12 | github.com/go-logr/logr v1.4.2 h1:6pFjapn8bFcIbiKo3XT4j/BhANplGihG6tvd+8rYgrY= 13 | github.com/go-logr/logr v1.4.2/go.mod h1:9T104GzyrTigFIr8wt5mBrctHMim0Nb2HLGrmQ40KvY= 14 | github.com/go-logr/stdr v1.2.2 h1:hSWxHoqTgW2S2qGc0LTAI563KZ5YKYRhT3MFKZMbjag= 15 | github.com/go-logr/stdr v1.2.2/go.mod h1:mMo/vtBO5dYbehREoey6XUKy/eSumjCCveDpRre4VKE= 16 | github.com/google/go-cmp v0.6.0 h1:ofyhxvXcZhMsU5ulbFiLKl/XBFqE1GSq7atu8tAmTRI= 17 | github.com/google/go-cmp v0.6.0/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= 18 | github.com/google/uuid v1.6.0 h1:NIvaJDMOsjHA8n1jAhLSgzrAzy1Hgr+hNrb57e+94F0= 19 | github.com/google/uuid v1.6.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= 20 | github.com/grpc-ecosystem/grpc-gateway/v2 v2.22.0 h1:asbCHRVmodnJTuQ3qamDwqVOIjwqUPTYmYuemVOx+Ys= 21 | github.com/grpc-ecosystem/grpc-gateway/v2 v2.22.0/go.mod h1:ggCgvZ2r7uOoQjOyu2Y1NhHmEPPzzuhWgcza5M1Ji1I= 22 | github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= 23 | github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= 24 | github.com/sergi/go-diff v1.3.1 h1:xkr+Oxo4BOQKmkn/B9eMK0g5Kg/983T9DqqPHwYqD+8= 25 | github.com/sergi/go-diff v1.3.1/go.mod h1:aMJSSKb2lpPvRNec0+w3fl7LP9IOFzdc9Pa4NFbPK1I= 26 | github.com/sosodev/duration v1.3.1 h1:qtHBDMQ6lvMQsL15g4aopM4HEfOaYuhWBw3NPTtlqq4= 27 | github.com/sosodev/duration v1.3.1/go.mod h1:RQIBBX0+fMLc/D9+Jb/fwvVmo0eZvDDEERAikUR6SDg= 28 | github.com/stretchr/testify v1.9.0 h1:HtqpIVDClZ4nwg75+f6Lvsy/wHu+3BoSGCbBAcpTsTg= 29 | github.com/stretchr/testify v1.9.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY= 30 | github.com/vektah/gqlparser/v2 v2.5.17 h1:9At7WblLV7/36nulgekUgIaqHZWn5hxqluxrxGUhOmI= 31 | github.com/vektah/gqlparser/v2 v2.5.17/go.mod h1:1lz1OeCqgQbQepsGxPVywrjdBHW2T08PUS3pJqepRww= 32 | go.opentelemetry.io/otel v1.27.0 h1:9BZoF3yMK/O1AafMiQTVu0YDj5Ea4hPhxCs7sGva+cg= 33 | go.opentelemetry.io/otel v1.27.0/go.mod h1:DMpAK8fzYRzs+bi3rS5REupisuqTheUlSZJ1WnZaPAQ= 34 | go.opentelemetry.io/otel/exporters/otlp/otlplog/otlploggrpc v0.0.0-20240518090000-14441aefdf88 h1:oM0GTNKGlc5qHctWeIGTVyda4iFFalOzMZ3Ehj5rwB4= 35 | go.opentelemetry.io/otel/exporters/otlp/otlplog/otlploggrpc v0.0.0-20240518090000-14441aefdf88/go.mod h1:JGG8ebaMO5nXOPnvKEl+DiA4MGwFjCbjsxT1WHIEBPY= 36 | go.opentelemetry.io/otel/exporters/otlp/otlplog/otlploghttp v0.3.0 h1:ccBrA8nCY5mM0y5uO7FT0ze4S0TuFcWdDB2FxGMTjkI= 37 | go.opentelemetry.io/otel/exporters/otlp/otlplog/otlploghttp v0.3.0/go.mod h1:/9pb6634zi2Lk8LYg9Q0X8Ar6jka4dkFOylBLbVQPCE= 38 | go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetricgrpc v1.27.0 h1:bFgvUr3/O4PHj3VQcFEuYKvRZJX1SJDQ+11JXuSB3/w= 39 | go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetricgrpc v1.27.0/go.mod h1:xJntEd2KL6Qdg5lwp97HMLQDVeAhrYxmzFseAMDPQ8I= 40 | go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetrichttp v1.27.0 h1:CIHWikMsN3wO+wq1Tp5VGdVRTcON+DmOJSfDjXypKOc= 41 | go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetrichttp v1.27.0/go.mod h1:TNupZ6cxqyFEpLXAZW7On+mLFL0/g0TE3unIYL91xWc= 42 | go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.27.0 h1:R9DE4kQ4k+YtfLI2ULwX82VtNQ2J8yZmA7ZIF/D+7Mc= 43 | go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.27.0/go.mod h1:OQFyQVrDlbe+R7xrEyDr/2Wr67Ol0hRUgsfA+V5A95s= 44 | go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.27.0 h1:qFffATk0X+HD+f1Z8lswGiOQYKHRlzfmdJm0wEaVrFA= 45 | go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.27.0/go.mod h1:MOiCmryaYtc+V0Ei+Tx9o5S1ZjA7kzLucuVuyzBZloQ= 46 | go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp v1.27.0 h1:QY7/0NeRPKlzusf40ZE4t1VlMKbqSNT7cJRYzWuja0s= 47 | go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp v1.27.0/go.mod h1:HVkSiDhTM9BoUJU8qE6j2eSWLLXvi1USXjyd2BXT8PY= 48 | go.opentelemetry.io/otel/log v0.3.0 h1:kJRFkpUFYtny37NQzL386WbznUByZx186DpEMKhEGZs= 49 | go.opentelemetry.io/otel/log v0.3.0/go.mod h1:ziCwqZr9soYDwGNbIL+6kAvQC+ANvjgG367HVcyR/ys= 50 | go.opentelemetry.io/otel/metric v1.27.0 h1:hvj3vdEKyeCi4YaYfNjv2NUje8FqKqUY8IlF0FxV/ik= 51 | go.opentelemetry.io/otel/metric v1.27.0/go.mod h1:mVFgmRlhljgBiuk/MP/oKylr4hs85GZAylncepAX/ak= 52 | go.opentelemetry.io/otel/sdk v1.27.0 h1:mlk+/Y1gLPLn84U4tI8d3GNJmGT/eXe3ZuOXN9kTWmI= 53 | go.opentelemetry.io/otel/sdk v1.27.0/go.mod h1:Ha9vbLwJE6W86YstIywK2xFfPjbWlCuwPtMkKdz/Y4A= 54 | go.opentelemetry.io/otel/sdk/log v0.3.0 h1:GEjJ8iftz2l+XO1GF2856r7yYVh74URiF9JMcAacr5U= 55 | go.opentelemetry.io/otel/sdk/log v0.3.0/go.mod h1:BwCxtmux6ACLuys1wlbc0+vGBd+xytjmjajwqqIul2g= 56 | go.opentelemetry.io/otel/sdk/metric v1.27.0 h1:5uGNOlpXi+Hbo/DRoI31BSb1v+OGcpv2NemcCrOL8gI= 57 | go.opentelemetry.io/otel/sdk/metric v1.27.0/go.mod h1:we7jJVrYN2kh3mVBlswtPU22K0SA+769l93J6bsyvqw= 58 | go.opentelemetry.io/otel/trace v1.27.0 h1:IqYb813p7cmbHk0a5y6pD5JPakbVfftRXABGt5/Rscw= 59 | go.opentelemetry.io/otel/trace v1.27.0/go.mod h1:6RiD1hkAprV4/q+yd2ln1HG9GoPx39SuvvstaLBl+l4= 60 | go.opentelemetry.io/proto/otlp v1.3.1 h1:TrMUixzpM0yuc/znrFTP9MMRh8trP93mkCiDVeXrui0= 61 | go.opentelemetry.io/proto/otlp v1.3.1/go.mod h1:0X1WI4de4ZsLrrJNLAQbFeLCm3T7yBkR0XqQ7niQU+8= 62 | go.uber.org/goleak v1.3.0 h1:2K3zAYmnTNqV73imy9J1T3WC+gmCePx2hEGkimedGto= 63 | go.uber.org/goleak v1.3.0/go.mod h1:CoHD4mav9JJNrW/WLlf7HGZPjdw8EucARQHekz1X6bE= 64 | golang.org/x/exp v0.0.0-20231110203233-9a3e6036ecaa h1:FRnLl4eNAQl8hwxVVC17teOw8kdjVDVAiFMtgUdTSRQ= 65 | golang.org/x/exp v0.0.0-20231110203233-9a3e6036ecaa/go.mod h1:zk2irFbV9DP96SEBUUAy67IdHUaZuSnrz1n472HUCLE= 66 | golang.org/x/net v0.29.0 h1:5ORfpBpCs4HzDYoodCDBbwHzdR5UrLBZ3sOnUJmFoHo= 67 | golang.org/x/net v0.29.0/go.mod h1:gLkgy8jTGERgjzMic6DS9+SP0ajcu6Xu3Orq/SpETg0= 68 | golang.org/x/sync v0.8.0 h1:3NFvSEYkUoMifnESzZl15y791HH1qU2xm6eCJU5ZPXQ= 69 | golang.org/x/sync v0.8.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk= 70 | golang.org/x/sys v0.26.0 h1:KHjCJyddX0LoSTb3J+vWpupP9p0oznkqVk/IfjymZbo= 71 | golang.org/x/sys v0.26.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= 72 | golang.org/x/text v0.18.0 h1:XvMDiNzPAl0jr17s6W9lcaIhGUfUORdGCNsuLmPG224= 73 | golang.org/x/text v0.18.0/go.mod h1:BuEKDfySbSR4drPmRPG/7iBdf8hvFMuRexcpahXilzY= 74 | google.golang.org/genproto/googleapis/api v0.0.0-20240814211410-ddb44dafa142 h1:wKguEg1hsxI2/L3hUYrpo1RVi48K+uTyzKqprwLXsb8= 75 | google.golang.org/genproto/googleapis/api v0.0.0-20240814211410-ddb44dafa142/go.mod h1:d6be+8HhtEtucleCbxpPW9PA9XwISACu8nvpPqF0BVo= 76 | google.golang.org/genproto/googleapis/rpc v0.0.0-20240814211410-ddb44dafa142 h1:e7S5W7MGGLaSu8j3YjdezkZ+m1/Nm0uRVRMEMGk26Xs= 77 | google.golang.org/genproto/googleapis/rpc v0.0.0-20240814211410-ddb44dafa142/go.mod h1:UqMtugtsSgubUsoxbuAoiCXvqvErP7Gf0so0mK9tHxU= 78 | google.golang.org/grpc v1.65.0 h1:bs/cUb4lp1G5iImFFd3u5ixQzweKizoZJAwBNLR42lc= 79 | google.golang.org/grpc v1.65.0/go.mod h1:WgYC2ypjlB0EiQi6wdKixMqukr6lBc0Vo+oOgjrM5ZQ= 80 | google.golang.org/protobuf v1.34.2 h1:6xV6lTsCfpGD21XK49h7MhtcApnLqkfYgPcdHftf6hg= 81 | google.golang.org/protobuf v1.34.2/go.mod h1:qYOHts0dSfpeUzUFpOMr/WGzszTmLH+DiWniOlNbLDw= 82 | gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= 83 | gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= 84 | -------------------------------------------------------------------------------- /proxy/examples/go/main.go: -------------------------------------------------------------------------------- 1 | // Proxy examples in Go 2 | package main 3 | 4 | import "dagger/example/internal/dagger" 5 | 6 | type Example struct{} 7 | 8 | // Example for WithService function 9 | func (m *Example) ProxyWithService(service *dagger.Service) *dagger.Service { 10 | return dag.Proxy(). 11 | WithService( 12 | service, // Dagger service to proxy 13 | "MyService", // Name of the service 14 | 8080, // Port for the proxy to listen on 15 | 80, // Port for the proxy to forward to 16 | ).Service() 17 | } 18 | 19 | // Example for Service function 20 | func (m *Example) ProxyService(serviceA *dagger.Service, serviceB *dagger.Service) *dagger.Service { 21 | return dag.Proxy(). 22 | WithService( 23 | serviceA, // Dagger service to proxy 24 | "ServiceA", // Name of the service 25 | 8080, // Port for the proxy to listen on 26 | 80, // Port for the proxy to forward to 27 | ). 28 | WithService( 29 | serviceB, // Dagger service to proxy 30 | "ServiceB", // Name of the service 31 | 8081, // Port for the proxy to listen on 32 | 80, // Port for the proxy to forward to 33 | ). 34 | Service() // Return a Dagger service proxying to multiple services 35 | } 36 | -------------------------------------------------------------------------------- /proxy/examples/python/.gitattributes: -------------------------------------------------------------------------------- 1 | /sdk/** linguist-generated 2 | -------------------------------------------------------------------------------- /proxy/examples/python/.gitignore: -------------------------------------------------------------------------------- 1 | /sdk 2 | /.venv 3 | /**/__pycache__ 4 | -------------------------------------------------------------------------------- /proxy/examples/python/dagger.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "example", 3 | "engineVersion": "v0.13.7", 4 | "sdk": "python", 5 | "dependencies": [ 6 | { 7 | "name": "proxy", 8 | "source": "../..", 9 | "pin": "" 10 | } 11 | ], 12 | "source": "." 13 | } 14 | -------------------------------------------------------------------------------- /proxy/examples/python/pyproject.toml: -------------------------------------------------------------------------------- 1 | [project] 2 | name = "main" 3 | version = "0.1.0" 4 | requires-python = ">=3.12" 5 | dependencies = ["dagger-io"] 6 | 7 | [tool.uv.sources] 8 | dagger-io = { path = "sdk", editable = true } 9 | 10 | [build-system] 11 | requires = ["hatchling==1.25.0"] 12 | build-backend = "hatchling.build" 13 | -------------------------------------------------------------------------------- /proxy/examples/python/src/main/__init__.py: -------------------------------------------------------------------------------- 1 | 2 | """proxy examples in Python""" 3 | import dagger 4 | from dagger import dag, function, object_type, Service 5 | 6 | @object_type 7 | class Example: 8 | 9 | @function 10 | def proxy_with_service(self, service: Service) -> Service: 11 | """Example for with_service function""" 12 | return ( 13 | dag.proxy() 14 | .with_service( 15 | service, # Dagger service to proxy 16 | "my_service", # Name of the service 17 | 8080, # Port for the proxy to listen on 18 | 80 # Port for the proxy to forward to 19 | ).service() 20 | ) 21 | 22 | 23 | @function 24 | def proxy_service(self, service_a: Service, service_b: Service) -> Service: 25 | """Example for service function""" 26 | return ( 27 | dag.proxy() 28 | .with_service( 29 | service_a, # Dagger service to proxy 30 | "service_a", # Name of the service 31 | 8080, # Port for the proxy to listen on 32 | 80 # Port for the proxy to forward to 33 | ) 34 | .with_service( 35 | service_b, # Dagger service to proxy 36 | "service_b", # Name of the service 37 | 8081, # Port for the proxy to listen on 38 | 80 # Port for the proxy to forward to 39 | ) 40 | .service() # Return a Dagger service proxying to multiple services 41 | ) 42 | -------------------------------------------------------------------------------- /proxy/examples/shell/proxy_postgres.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | # Pass a local postgres database as a service to proxy 4 | dagger -m github.com/kpenfound/dagger-modules/proxy call \ 5 | with-service \ 6 | --service tcp://localhost:5432 --name postgres --frontend 5433 --backend 5432 7 | 8 | -------------------------------------------------------------------------------- /proxy/examples/shell/proxy_service.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env dagger shell 2 | 3 | github.com/kpenfound/dagger-modules/proxy | with-service "postgres" $(container | from "postgres" | as-service) 5433 5432 | service 4 | 5 | -------------------------------------------------------------------------------- /proxy/examples/shell/proxy_with_service.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | # Pass a local postgres database as a service to proxy 4 | dagger -m github.com/kpenfound/dagger-modules/proxy \ 5 | call with-service \ 6 | --service tcp://localhost:5432 --name postgres --frontend 5433 --backend 5432 7 | 8 | -------------------------------------------------------------------------------- /proxy/examples/typescript/.gitattributes: -------------------------------------------------------------------------------- 1 | /sdk/** linguist-generated 2 | -------------------------------------------------------------------------------- /proxy/examples/typescript/.gitignore: -------------------------------------------------------------------------------- 1 | /sdk 2 | /**/node_modules/** 3 | /**/.pnpm-store/** 4 | -------------------------------------------------------------------------------- /proxy/examples/typescript/dagger.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "example", 3 | "engineVersion": "v0.13.3", 4 | "sdk": "typescript", 5 | "dependencies": [ 6 | { 7 | "name": "proxy", 8 | "source": "../..", 9 | "pin": "" 10 | } 11 | ], 12 | "source": "." 13 | } 14 | -------------------------------------------------------------------------------- /proxy/examples/typescript/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "type": "module", 3 | "dependencies": { 4 | "@dagger.io/dagger": "./sdk", 5 | "typescript": "^5.5.4" 6 | }, 7 | "packageManager": "yarn@1.22.22+sha512.a6b2f7906b721bba3d67d4aff083df04dad64c399707841b7acf00f6b133b7ac24255f2652fa22ae3534329dc6180534e98d17432037ff6fd140556e2bb3137e" 8 | } 9 | -------------------------------------------------------------------------------- /proxy/examples/typescript/src/index.ts: -------------------------------------------------------------------------------- 1 | // proxy examples in TypeScript 2 | import { dag, object, func, Service, Proxy } from "@dagger.io/dagger"; 3 | 4 | @object() 5 | class Example { 6 | /** 7 | * example for withservice function 8 | */ 9 | @func() 10 | proxyWithService(service: Service): Service { 11 | return dag.proxy().withService(service, "myService", 8080, 80).service(); 12 | } 13 | 14 | /** 15 | * example for service function 16 | */ 17 | @func() 18 | proxyService(serviceA: Service, serviceB: Service): Service { 19 | return dag 20 | .proxy() 21 | .withService(serviceA, "serviceA", 8080, 80) 22 | .withService(serviceB, "serviceB", 8081, 80) 23 | .service(); 24 | } 25 | } 26 | -------------------------------------------------------------------------------- /proxy/examples/typescript/tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | "target": "ES2022", 4 | "moduleResolution": "Node", 5 | "experimentalDecorators": true, 6 | "paths": { 7 | "@dagger.io/dagger": ["./sdk"], 8 | "@dagger.io/dagger/telemetry": ["./sdk/telemetry"] 9 | } 10 | } 11 | } 12 | -------------------------------------------------------------------------------- /proxy/pyproject.toml: -------------------------------------------------------------------------------- 1 | [project] 2 | name = "main" 3 | version = "0.0.0" 4 | -------------------------------------------------------------------------------- /proxy/src/main.py: -------------------------------------------------------------------------------- 1 | """ 2 | Proxy multiple services though a single service 3 | 4 | This module allows you to proxy any number of Dagger Services 5 | through a single Dagger Service on specified ports 6 | """ 7 | 8 | import dagger 9 | from dagger import dag, function, field, object_type 10 | 11 | NGINX_CONFIG = "/etc/nginx/conf.d/default.conf" 12 | 13 | 14 | def init() -> dagger.Container: 15 | return ( 16 | dag.container() 17 | .from_("nginx:1.25.3") 18 | .with_new_file( 19 | "/etc/nginx/stream.conf", 20 | contents=f"""stream {{ include /etc/nginx/stream.d/*.conf; }}""", 21 | ) 22 | .with_new_file( 23 | "/etc/nginx/nginx.conf", 24 | contents=f""" 25 | user nginx; 26 | worker_processes auto; 27 | 28 | error_log /var/log/nginx/error.log notice; 29 | pid /var/run/nginx.pid; 30 | 31 | events {{ 32 | worker_connections 1024; 33 | }} 34 | 35 | include /etc/nginx/stream.conf; 36 | 37 | http {{ 38 | include /etc/nginx/mime.types; 39 | default_type application/octet-stream; 40 | 41 | log_format main '$remote_addr - $remote_user [$time_local] "$request" ' 42 | '$status $body_bytes_sent "$http_referer" ' 43 | '"$http_user_agent" "$http_x_forwarded_for"'; 44 | 45 | access_log /var/log/nginx/access.log main; 46 | 47 | sendfile on; 48 | #tcp_nopush on; 49 | 50 | keepalive_timeout 65; 51 | 52 | #gzip on; 53 | 54 | include /etc/nginx/conf.d/*.conf; 55 | }} 56 | """, 57 | ) 58 | ) 59 | 60 | 61 | @object_type 62 | class Proxy: 63 | """Forwards multiple services into a single service with multiple ports""" 64 | 65 | ctr: dagger.Container = field(default=init) 66 | 67 | @function 68 | def with_service( 69 | self, 70 | service: dagger.Service, 71 | name: str, 72 | frontend: int, 73 | backend: int, 74 | is_tcp: bool = False, 75 | ) -> "Proxy": 76 | """Add a service to proxy""" 77 | cfg = get_config(backend, name, frontend, is_tcp) 78 | conf_path = ( 79 | f"/etc/nginx/stream.d/{name}.conf" 80 | if is_tcp 81 | else f"/etc/nginx/conf.d/{name}.conf" 82 | ) 83 | self.ctr = ( 84 | self.ctr.with_new_file(conf_path, contents=cfg) 85 | .with_service_binding(name, service) 86 | .with_exposed_port(frontend) 87 | ) 88 | return self 89 | 90 | @function 91 | def service(self) -> dagger.Service: 92 | """Get the proxy Service""" 93 | return self.ctr.as_service(args=["nginx", "-g", "daemon off;"]) 94 | 95 | 96 | def get_config(port: int, name: str, frontend: int, is_tcp: bool) -> str: 97 | if is_tcp: 98 | return f""" 99 | server {{ 100 | listen {frontend}; 101 | listen [::]:{frontend}; 102 | proxy_pass {name}:{port}; 103 | }} 104 | """ 105 | else: 106 | return f""" 107 | server {{ 108 | listen {frontend}; 109 | listen [::]:{frontend}; 110 | 111 | server_name {name}; 112 | 113 | location / {{ 114 | proxy_pass http://{name}:{port}; 115 | proxy_set_header Host $http_host; 116 | proxy_set_header X-Forwarded-Host $http_host; 117 | proxy_set_header X-Real-IP $remote_addr; 118 | proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; 119 | proxy_set_header X-Forwarded-Proto $scheme; 120 | }} 121 | }}""" 122 | -------------------------------------------------------------------------------- /ruff/.gitattributes: -------------------------------------------------------------------------------- 1 | /sdk/** linguist-generated 2 | -------------------------------------------------------------------------------- /ruff/.gitignore: -------------------------------------------------------------------------------- 1 | /sdk 2 | -------------------------------------------------------------------------------- /ruff/dagger.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "ruff", 3 | "sdk": "python", 4 | "source": ".", 5 | "engineVersion": "v0.9.9" 6 | } 7 | -------------------------------------------------------------------------------- /ruff/pyproject.toml: -------------------------------------------------------------------------------- 1 | [project] 2 | name = "main" 3 | version = "0.0.0" 4 | -------------------------------------------------------------------------------- /ruff/src/main.py: -------------------------------------------------------------------------------- 1 | """ 2 | Execute Ruff on a Python project 3 | 4 | A utility module to run ruff check on a Python project 5 | """ 6 | 7 | import dagger 8 | from dagger import dag, function 9 | 10 | @function 11 | async def check(directory: dagger.Directory) -> str: 12 | """run ruff check""" 13 | return await ( 14 | dag.container() 15 | .from_("python:3.10-alpine") 16 | .with_exec(["pip", "install", "ruff"]) 17 | .with_mounted_directory("/src", directory) 18 | .with_workdir("/src") 19 | .with_exec(["ruff", "check", "."]) 20 | .stdout() 21 | ) 22 | -------------------------------------------------------------------------------- /secrets-provider/.gitattributes: -------------------------------------------------------------------------------- 1 | /dagger.gen.go linguist-generated 2 | /internal/dagger/** linguist-generated 3 | /internal/querybuilder/** linguist-generated 4 | /internal/telemetry/** linguist-generated 5 | -------------------------------------------------------------------------------- /secrets-provider/.gitignore: -------------------------------------------------------------------------------- 1 | /dagger.gen.go 2 | /internal/dagger 3 | /internal/querybuilder 4 | /internal/telemetry 5 | -------------------------------------------------------------------------------- /secrets-provider/dagger.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "secrets-provider", 3 | "sdk": "go", 4 | "source": ".", 5 | "engineVersion": "v0.13.3" 6 | } 7 | -------------------------------------------------------------------------------- /secrets-provider/example/go/.gitattributes: -------------------------------------------------------------------------------- 1 | /dagger.gen.go linguist-generated 2 | /internal/dagger/** linguist-generated 3 | /internal/querybuilder/** linguist-generated 4 | /internal/telemetry/** linguist-generated 5 | -------------------------------------------------------------------------------- /secrets-provider/example/go/.gitignore: -------------------------------------------------------------------------------- 1 | /dagger.gen.go 2 | /internal/dagger 3 | /internal/querybuilder 4 | /internal/telemetry 5 | -------------------------------------------------------------------------------- /secrets-provider/example/go/dagger.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "examples", 3 | "sdk": "go", 4 | "dependencies": [ 5 | { 6 | "name": "provider-infisical", 7 | "source": "../../providers/infisical" 8 | }, 9 | { 10 | "name": "provider-op", 11 | "source": "../../providers/1password" 12 | }, 13 | { 14 | "name": "secrets-provider", 15 | "source": "../.." 16 | } 17 | ], 18 | "source": ".", 19 | "engineVersion": "v0.13.3" 20 | } 21 | -------------------------------------------------------------------------------- /secrets-provider/example/go/go.mod: -------------------------------------------------------------------------------- 1 | module dagger/go 2 | 3 | go 1.23.1 4 | 5 | require ( 6 | github.com/99designs/gqlgen v0.17.49 7 | github.com/Khan/genqlient v0.7.0 8 | github.com/vektah/gqlparser/v2 v2.5.16 9 | go.opentelemetry.io/otel v1.27.0 10 | go.opentelemetry.io/otel/exporters/otlp/otlplog/otlploggrpc v0.0.0-20240518090000-14441aefdf88 11 | go.opentelemetry.io/otel/exporters/otlp/otlplog/otlploghttp v0.3.0 12 | go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.27.0 13 | go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp v1.27.0 14 | go.opentelemetry.io/otel/log v0.3.0 15 | go.opentelemetry.io/otel/sdk v1.27.0 16 | go.opentelemetry.io/otel/sdk/log v0.3.0 17 | go.opentelemetry.io/otel/trace v1.27.0 18 | go.opentelemetry.io/proto/otlp v1.3.1 19 | golang.org/x/exp v0.0.0-20231110203233-9a3e6036ecaa 20 | golang.org/x/sync v0.8.0 21 | google.golang.org/grpc v1.65.0 22 | ) 23 | 24 | require ( 25 | github.com/cenkalti/backoff/v4 v4.3.0 // indirect 26 | github.com/go-logr/logr v1.4.2 // indirect 27 | github.com/go-logr/stdr v1.2.2 // indirect 28 | github.com/google/uuid v1.6.0 // indirect 29 | github.com/grpc-ecosystem/grpc-gateway/v2 v2.22.0 // indirect 30 | github.com/sergi/go-diff v1.3.2-0.20230802210424-5b0b94c5c0d3 // indirect 31 | github.com/sosodev/duration v1.3.1 // indirect 32 | go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.27.0 // indirect 33 | go.opentelemetry.io/otel/metric v1.27.0 // indirect 34 | golang.org/x/net v0.29.0 // indirect 35 | golang.org/x/sys v0.25.0 // indirect 36 | golang.org/x/text v0.18.0 // indirect 37 | google.golang.org/genproto/googleapis/api v0.0.0-20240814211410-ddb44dafa142 // indirect 38 | google.golang.org/genproto/googleapis/rpc v0.0.0-20240814211410-ddb44dafa142 // indirect 39 | google.golang.org/protobuf v1.34.2 // indirect 40 | ) 41 | 42 | replace go.opentelemetry.io/otel/exporters/otlp/otlplog/otlploggrpc => go.opentelemetry.io/otel/exporters/otlp/otlplog/otlploggrpc v0.0.0-20240518090000-14441aefdf88 43 | 44 | replace go.opentelemetry.io/otel/exporters/otlp/otlplog/otlploghttp => go.opentelemetry.io/otel/exporters/otlp/otlplog/otlploghttp v0.3.0 45 | 46 | replace go.opentelemetry.io/otel/log => go.opentelemetry.io/otel/log v0.3.0 47 | 48 | replace go.opentelemetry.io/otel/sdk/log => go.opentelemetry.io/otel/sdk/log v0.3.0 49 | -------------------------------------------------------------------------------- /secrets-provider/example/go/go.sum: -------------------------------------------------------------------------------- 1 | github.com/99designs/gqlgen v0.17.49 h1:b3hNGexHd33fBSAd4NDT/c3NCcQzcAVkknhN9ym36YQ= 2 | github.com/99designs/gqlgen v0.17.49/go.mod h1:tC8YFVZMed81x7UJ7ORUwXF4Kn6SXuucFqQBhN8+BU0= 3 | github.com/Khan/genqlient v0.7.0 h1:GZ1meyRnzcDTK48EjqB8t3bcfYvHArCUUvgOwpz1D4w= 4 | github.com/Khan/genqlient v0.7.0/go.mod h1:HNyy3wZvuYwmW3Y7mkoQLZsa/R5n5yIRajS1kPBvSFM= 5 | github.com/andreyvit/diff v0.0.0-20170406064948-c7f18ee00883 h1:bvNMNQO63//z+xNgfBlViaCIJKLlCJ6/fmUseuG0wVQ= 6 | github.com/andreyvit/diff v0.0.0-20170406064948-c7f18ee00883/go.mod h1:rCTlJbsFo29Kk6CurOXKm700vrz8f0KW0JNfpkRJY/8= 7 | github.com/cenkalti/backoff/v4 v4.3.0 h1:MyRJ/UdXutAwSAT+s3wNd7MfTIcy71VQueUuFK343L8= 8 | github.com/cenkalti/backoff/v4 v4.3.0/go.mod h1:Y3VNntkOUPxTVeUxJ/G5vcM//AlwfmyYozVcomhLiZE= 9 | github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= 10 | github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= 11 | github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= 12 | github.com/go-logr/logr v1.2.2/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A= 13 | github.com/go-logr/logr v1.4.2 h1:6pFjapn8bFcIbiKo3XT4j/BhANplGihG6tvd+8rYgrY= 14 | github.com/go-logr/logr v1.4.2/go.mod h1:9T104GzyrTigFIr8wt5mBrctHMim0Nb2HLGrmQ40KvY= 15 | github.com/go-logr/stdr v1.2.2 h1:hSWxHoqTgW2S2qGc0LTAI563KZ5YKYRhT3MFKZMbjag= 16 | github.com/go-logr/stdr v1.2.2/go.mod h1:mMo/vtBO5dYbehREoey6XUKy/eSumjCCveDpRre4VKE= 17 | github.com/google/go-cmp v0.6.0 h1:ofyhxvXcZhMsU5ulbFiLKl/XBFqE1GSq7atu8tAmTRI= 18 | github.com/google/go-cmp v0.6.0/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= 19 | github.com/google/uuid v1.6.0 h1:NIvaJDMOsjHA8n1jAhLSgzrAzy1Hgr+hNrb57e+94F0= 20 | github.com/google/uuid v1.6.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= 21 | github.com/grpc-ecosystem/grpc-gateway/v2 v2.22.0 h1:asbCHRVmodnJTuQ3qamDwqVOIjwqUPTYmYuemVOx+Ys= 22 | github.com/grpc-ecosystem/grpc-gateway/v2 v2.22.0/go.mod h1:ggCgvZ2r7uOoQjOyu2Y1NhHmEPPzzuhWgcza5M1Ji1I= 23 | github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo= 24 | github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ= 25 | github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI= 26 | github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= 27 | github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= 28 | github.com/sergi/go-diff v1.3.2-0.20230802210424-5b0b94c5c0d3 h1:n661drycOFuPLCN3Uc8sB6B/s6Z4t2xvBgU1htSHuq8= 29 | github.com/sergi/go-diff v1.3.2-0.20230802210424-5b0b94c5c0d3/go.mod h1:A0bzQcvG0E7Rwjx0REVgAGH58e96+X0MeOfepqsbeW4= 30 | github.com/sosodev/duration v1.3.1 h1:qtHBDMQ6lvMQsL15g4aopM4HEfOaYuhWBw3NPTtlqq4= 31 | github.com/sosodev/duration v1.3.1/go.mod h1:RQIBBX0+fMLc/D9+Jb/fwvVmo0eZvDDEERAikUR6SDg= 32 | github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= 33 | github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4= 34 | github.com/stretchr/testify v1.9.0 h1:HtqpIVDClZ4nwg75+f6Lvsy/wHu+3BoSGCbBAcpTsTg= 35 | github.com/stretchr/testify v1.9.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY= 36 | github.com/vektah/gqlparser/v2 v2.5.16 h1:1gcmLTvs3JLKXckwCwlUagVn/IlV2bwqle0vJ0vy5p8= 37 | github.com/vektah/gqlparser/v2 v2.5.16/go.mod h1:1lz1OeCqgQbQepsGxPVywrjdBHW2T08PUS3pJqepRww= 38 | go.opentelemetry.io/otel v1.27.0 h1:9BZoF3yMK/O1AafMiQTVu0YDj5Ea4hPhxCs7sGva+cg= 39 | go.opentelemetry.io/otel v1.27.0/go.mod h1:DMpAK8fzYRzs+bi3rS5REupisuqTheUlSZJ1WnZaPAQ= 40 | go.opentelemetry.io/otel/exporters/otlp/otlplog/otlploggrpc v0.0.0-20240518090000-14441aefdf88 h1:oM0GTNKGlc5qHctWeIGTVyda4iFFalOzMZ3Ehj5rwB4= 41 | go.opentelemetry.io/otel/exporters/otlp/otlplog/otlploggrpc v0.0.0-20240518090000-14441aefdf88/go.mod h1:JGG8ebaMO5nXOPnvKEl+DiA4MGwFjCbjsxT1WHIEBPY= 42 | go.opentelemetry.io/otel/exporters/otlp/otlplog/otlploghttp v0.3.0 h1:ccBrA8nCY5mM0y5uO7FT0ze4S0TuFcWdDB2FxGMTjkI= 43 | go.opentelemetry.io/otel/exporters/otlp/otlplog/otlploghttp v0.3.0/go.mod h1:/9pb6634zi2Lk8LYg9Q0X8Ar6jka4dkFOylBLbVQPCE= 44 | go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.27.0 h1:R9DE4kQ4k+YtfLI2ULwX82VtNQ2J8yZmA7ZIF/D+7Mc= 45 | go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.27.0/go.mod h1:OQFyQVrDlbe+R7xrEyDr/2Wr67Ol0hRUgsfA+V5A95s= 46 | go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.27.0 h1:qFffATk0X+HD+f1Z8lswGiOQYKHRlzfmdJm0wEaVrFA= 47 | go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.27.0/go.mod h1:MOiCmryaYtc+V0Ei+Tx9o5S1ZjA7kzLucuVuyzBZloQ= 48 | go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp v1.27.0 h1:QY7/0NeRPKlzusf40ZE4t1VlMKbqSNT7cJRYzWuja0s= 49 | go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp v1.27.0/go.mod h1:HVkSiDhTM9BoUJU8qE6j2eSWLLXvi1USXjyd2BXT8PY= 50 | go.opentelemetry.io/otel/log v0.3.0 h1:kJRFkpUFYtny37NQzL386WbznUByZx186DpEMKhEGZs= 51 | go.opentelemetry.io/otel/log v0.3.0/go.mod h1:ziCwqZr9soYDwGNbIL+6kAvQC+ANvjgG367HVcyR/ys= 52 | go.opentelemetry.io/otel/metric v1.27.0 h1:hvj3vdEKyeCi4YaYfNjv2NUje8FqKqUY8IlF0FxV/ik= 53 | go.opentelemetry.io/otel/metric v1.27.0/go.mod h1:mVFgmRlhljgBiuk/MP/oKylr4hs85GZAylncepAX/ak= 54 | go.opentelemetry.io/otel/sdk v1.27.0 h1:mlk+/Y1gLPLn84U4tI8d3GNJmGT/eXe3ZuOXN9kTWmI= 55 | go.opentelemetry.io/otel/sdk v1.27.0/go.mod h1:Ha9vbLwJE6W86YstIywK2xFfPjbWlCuwPtMkKdz/Y4A= 56 | go.opentelemetry.io/otel/sdk/log v0.3.0 h1:GEjJ8iftz2l+XO1GF2856r7yYVh74URiF9JMcAacr5U= 57 | go.opentelemetry.io/otel/sdk/log v0.3.0/go.mod h1:BwCxtmux6ACLuys1wlbc0+vGBd+xytjmjajwqqIul2g= 58 | go.opentelemetry.io/otel/trace v1.27.0 h1:IqYb813p7cmbHk0a5y6pD5JPakbVfftRXABGt5/Rscw= 59 | go.opentelemetry.io/otel/trace v1.27.0/go.mod h1:6RiD1hkAprV4/q+yd2ln1HG9GoPx39SuvvstaLBl+l4= 60 | go.opentelemetry.io/proto/otlp v1.3.1 h1:TrMUixzpM0yuc/znrFTP9MMRh8trP93mkCiDVeXrui0= 61 | go.opentelemetry.io/proto/otlp v1.3.1/go.mod h1:0X1WI4de4ZsLrrJNLAQbFeLCm3T7yBkR0XqQ7niQU+8= 62 | go.uber.org/goleak v1.3.0 h1:2K3zAYmnTNqV73imy9J1T3WC+gmCePx2hEGkimedGto= 63 | go.uber.org/goleak v1.3.0/go.mod h1:CoHD4mav9JJNrW/WLlf7HGZPjdw8EucARQHekz1X6bE= 64 | golang.org/x/exp v0.0.0-20231110203233-9a3e6036ecaa h1:FRnLl4eNAQl8hwxVVC17teOw8kdjVDVAiFMtgUdTSRQ= 65 | golang.org/x/exp v0.0.0-20231110203233-9a3e6036ecaa/go.mod h1:zk2irFbV9DP96SEBUUAy67IdHUaZuSnrz1n472HUCLE= 66 | golang.org/x/net v0.29.0 h1:5ORfpBpCs4HzDYoodCDBbwHzdR5UrLBZ3sOnUJmFoHo= 67 | golang.org/x/net v0.29.0/go.mod h1:gLkgy8jTGERgjzMic6DS9+SP0ajcu6Xu3Orq/SpETg0= 68 | golang.org/x/sync v0.8.0 h1:3NFvSEYkUoMifnESzZl15y791HH1qU2xm6eCJU5ZPXQ= 69 | golang.org/x/sync v0.8.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk= 70 | golang.org/x/sys v0.25.0 h1:r+8e+loiHxRqhXVl6ML1nO3l1+oFoWbnlu2Ehimmi34= 71 | golang.org/x/sys v0.25.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= 72 | golang.org/x/text v0.18.0 h1:XvMDiNzPAl0jr17s6W9lcaIhGUfUORdGCNsuLmPG224= 73 | golang.org/x/text v0.18.0/go.mod h1:BuEKDfySbSR4drPmRPG/7iBdf8hvFMuRexcpahXilzY= 74 | google.golang.org/genproto/googleapis/api v0.0.0-20240814211410-ddb44dafa142 h1:wKguEg1hsxI2/L3hUYrpo1RVi48K+uTyzKqprwLXsb8= 75 | google.golang.org/genproto/googleapis/api v0.0.0-20240814211410-ddb44dafa142/go.mod h1:d6be+8HhtEtucleCbxpPW9PA9XwISACu8nvpPqF0BVo= 76 | google.golang.org/genproto/googleapis/rpc v0.0.0-20240814211410-ddb44dafa142 h1:e7S5W7MGGLaSu8j3YjdezkZ+m1/Nm0uRVRMEMGk26Xs= 77 | google.golang.org/genproto/googleapis/rpc v0.0.0-20240814211410-ddb44dafa142/go.mod h1:UqMtugtsSgubUsoxbuAoiCXvqvErP7Gf0so0mK9tHxU= 78 | google.golang.org/grpc v1.65.0 h1:bs/cUb4lp1G5iImFFd3u5ixQzweKizoZJAwBNLR42lc= 79 | google.golang.org/grpc v1.65.0/go.mod h1:WgYC2ypjlB0EiQi6wdKixMqukr6lBc0Vo+oOgjrM5ZQ= 80 | google.golang.org/protobuf v1.34.2 h1:6xV6lTsCfpGD21XK49h7MhtcApnLqkfYgPcdHftf6hg= 81 | google.golang.org/protobuf v1.34.2/go.mod h1:qYOHts0dSfpeUzUFpOMr/WGzszTmLH+DiWniOlNbLDw= 82 | gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= 83 | gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= 84 | gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= 85 | gopkg.in/yaml.v2 v2.4.0/go.mod h1:RDklbk79AGWmwhnvt/jBztapEOGDOx6ZbXqjP6csGnQ= 86 | gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= 87 | gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= 88 | -------------------------------------------------------------------------------- /secrets-provider/example/go/infdagger_call_demo: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | dagger call demo --provider infisical --client env:INFISICAL_CLIENT_ID --token env:INFISICAL_SECRET $@ 4 | -------------------------------------------------------------------------------- /secrets-provider/example/go/main.go: -------------------------------------------------------------------------------- 1 | // A module for Secrets Provider examples in Go 2 | 3 | package main 4 | 5 | import ( 6 | "context" 7 | "dagger/go/internal/dagger" 8 | ) 9 | 10 | type Examples struct{} 11 | 12 | // Demo the use of a secrets provider 13 | func (e *Examples) Demo( 14 | ctx context.Context, 15 | provider string, 16 | // +optional 17 | client *dagger.Secret, 18 | token *dagger.Secret, 19 | ) (string, error) { 20 | // TODO: HACK 21 | if client == nil { 22 | client = dag.SetSecret("client", "") 23 | } 24 | 25 | // TODO: 26 | // This part should ideally be configured on the client or engine 27 | var secretsProvider *dagger.SecretsProviderProvider 28 | switch provider { 29 | case "infisical": 30 | secretsProvider = dag.ProviderInfisical().AsSecretsProviderProvider().Configure(client, token) 31 | case "op": 32 | secretsProvider = dag.ProviderOp().AsSecretsProviderProvider().Configure(client, token) 33 | } 34 | 35 | // Call a function that needs access to a secret provider 36 | return genericSecretThing(ctx, secretsProvider) 37 | } 38 | 39 | // A function that needs access to a secret provider 40 | func genericSecretThing(ctx context.Context, provider *dagger.SecretsProviderProvider) (string, error) { 41 | // Read a secret 42 | 43 | // Information I probably know about the secret I want 44 | environment := "dev" // Maybe this is another client config? 45 | path := "Hackathon" 46 | key := "SUPER_SECRET" 47 | 48 | secret := provider.GetSecret(environment, path, key) 49 | 50 | return secret.Plaintext(ctx) 51 | } 52 | -------------------------------------------------------------------------------- /secrets-provider/example/go/opdagger_call_demo: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | dagger call demo --provider op --token env:OP_SERVICE_ACCOUNT_TOKEN $@ 4 | -------------------------------------------------------------------------------- /secrets-provider/go.mod: -------------------------------------------------------------------------------- 1 | module dagger/secrets-provider 2 | 3 | go 1.23.1 4 | 5 | require ( 6 | github.com/99designs/gqlgen v0.17.49 7 | github.com/Khan/genqlient v0.7.0 8 | github.com/vektah/gqlparser/v2 v2.5.16 9 | go.opentelemetry.io/otel v1.27.0 10 | go.opentelemetry.io/otel/exporters/otlp/otlplog/otlploggrpc v0.0.0-20240518090000-14441aefdf88 11 | go.opentelemetry.io/otel/exporters/otlp/otlplog/otlploghttp v0.3.0 12 | go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.27.0 13 | go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp v1.27.0 14 | go.opentelemetry.io/otel/log v0.3.0 15 | go.opentelemetry.io/otel/sdk v1.27.0 16 | go.opentelemetry.io/otel/sdk/log v0.3.0 17 | go.opentelemetry.io/otel/trace v1.27.0 18 | go.opentelemetry.io/proto/otlp v1.3.1 19 | golang.org/x/exp v0.0.0-20231110203233-9a3e6036ecaa 20 | golang.org/x/sync v0.8.0 21 | google.golang.org/grpc v1.65.0 22 | ) 23 | 24 | require ( 25 | github.com/cenkalti/backoff/v4 v4.3.0 // indirect 26 | github.com/go-logr/logr v1.4.2 // indirect 27 | github.com/go-logr/stdr v1.2.2 // indirect 28 | github.com/google/uuid v1.6.0 // indirect 29 | github.com/grpc-ecosystem/grpc-gateway/v2 v2.22.0 // indirect 30 | github.com/sergi/go-diff v1.3.2-0.20230802210424-5b0b94c5c0d3 // indirect 31 | github.com/sosodev/duration v1.3.1 // indirect 32 | go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.27.0 // indirect 33 | go.opentelemetry.io/otel/metric v1.27.0 // indirect 34 | golang.org/x/net v0.29.0 // indirect 35 | golang.org/x/sys v0.25.0 // indirect 36 | golang.org/x/text v0.18.0 // indirect 37 | google.golang.org/genproto/googleapis/api v0.0.0-20240814211410-ddb44dafa142 // indirect 38 | google.golang.org/genproto/googleapis/rpc v0.0.0-20240814211410-ddb44dafa142 // indirect 39 | google.golang.org/protobuf v1.34.2 // indirect 40 | ) 41 | 42 | replace go.opentelemetry.io/otel/exporters/otlp/otlplog/otlploggrpc => go.opentelemetry.io/otel/exporters/otlp/otlplog/otlploggrpc v0.0.0-20240518090000-14441aefdf88 43 | 44 | replace go.opentelemetry.io/otel/exporters/otlp/otlplog/otlploghttp => go.opentelemetry.io/otel/exporters/otlp/otlplog/otlploghttp v0.3.0 45 | 46 | replace go.opentelemetry.io/otel/log => go.opentelemetry.io/otel/log v0.3.0 47 | 48 | replace go.opentelemetry.io/otel/sdk/log => go.opentelemetry.io/otel/sdk/log v0.3.0 49 | -------------------------------------------------------------------------------- /secrets-provider/go.sum: -------------------------------------------------------------------------------- 1 | github.com/99designs/gqlgen v0.17.49 h1:b3hNGexHd33fBSAd4NDT/c3NCcQzcAVkknhN9ym36YQ= 2 | github.com/99designs/gqlgen v0.17.49/go.mod h1:tC8YFVZMed81x7UJ7ORUwXF4Kn6SXuucFqQBhN8+BU0= 3 | github.com/Khan/genqlient v0.7.0 h1:GZ1meyRnzcDTK48EjqB8t3bcfYvHArCUUvgOwpz1D4w= 4 | github.com/Khan/genqlient v0.7.0/go.mod h1:HNyy3wZvuYwmW3Y7mkoQLZsa/R5n5yIRajS1kPBvSFM= 5 | github.com/andreyvit/diff v0.0.0-20170406064948-c7f18ee00883 h1:bvNMNQO63//z+xNgfBlViaCIJKLlCJ6/fmUseuG0wVQ= 6 | github.com/andreyvit/diff v0.0.0-20170406064948-c7f18ee00883/go.mod h1:rCTlJbsFo29Kk6CurOXKm700vrz8f0KW0JNfpkRJY/8= 7 | github.com/cenkalti/backoff/v4 v4.3.0 h1:MyRJ/UdXutAwSAT+s3wNd7MfTIcy71VQueUuFK343L8= 8 | github.com/cenkalti/backoff/v4 v4.3.0/go.mod h1:Y3VNntkOUPxTVeUxJ/G5vcM//AlwfmyYozVcomhLiZE= 9 | github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= 10 | github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= 11 | github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= 12 | github.com/go-logr/logr v1.2.2/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A= 13 | github.com/go-logr/logr v1.4.2 h1:6pFjapn8bFcIbiKo3XT4j/BhANplGihG6tvd+8rYgrY= 14 | github.com/go-logr/logr v1.4.2/go.mod h1:9T104GzyrTigFIr8wt5mBrctHMim0Nb2HLGrmQ40KvY= 15 | github.com/go-logr/stdr v1.2.2 h1:hSWxHoqTgW2S2qGc0LTAI563KZ5YKYRhT3MFKZMbjag= 16 | github.com/go-logr/stdr v1.2.2/go.mod h1:mMo/vtBO5dYbehREoey6XUKy/eSumjCCveDpRre4VKE= 17 | github.com/google/go-cmp v0.6.0 h1:ofyhxvXcZhMsU5ulbFiLKl/XBFqE1GSq7atu8tAmTRI= 18 | github.com/google/go-cmp v0.6.0/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= 19 | github.com/google/uuid v1.6.0 h1:NIvaJDMOsjHA8n1jAhLSgzrAzy1Hgr+hNrb57e+94F0= 20 | github.com/google/uuid v1.6.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= 21 | github.com/grpc-ecosystem/grpc-gateway/v2 v2.22.0 h1:asbCHRVmodnJTuQ3qamDwqVOIjwqUPTYmYuemVOx+Ys= 22 | github.com/grpc-ecosystem/grpc-gateway/v2 v2.22.0/go.mod h1:ggCgvZ2r7uOoQjOyu2Y1NhHmEPPzzuhWgcza5M1Ji1I= 23 | github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo= 24 | github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ= 25 | github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI= 26 | github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= 27 | github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= 28 | github.com/sergi/go-diff v1.3.2-0.20230802210424-5b0b94c5c0d3 h1:n661drycOFuPLCN3Uc8sB6B/s6Z4t2xvBgU1htSHuq8= 29 | github.com/sergi/go-diff v1.3.2-0.20230802210424-5b0b94c5c0d3/go.mod h1:A0bzQcvG0E7Rwjx0REVgAGH58e96+X0MeOfepqsbeW4= 30 | github.com/sosodev/duration v1.3.1 h1:qtHBDMQ6lvMQsL15g4aopM4HEfOaYuhWBw3NPTtlqq4= 31 | github.com/sosodev/duration v1.3.1/go.mod h1:RQIBBX0+fMLc/D9+Jb/fwvVmo0eZvDDEERAikUR6SDg= 32 | github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= 33 | github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4= 34 | github.com/stretchr/testify v1.9.0 h1:HtqpIVDClZ4nwg75+f6Lvsy/wHu+3BoSGCbBAcpTsTg= 35 | github.com/stretchr/testify v1.9.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY= 36 | github.com/vektah/gqlparser/v2 v2.5.16 h1:1gcmLTvs3JLKXckwCwlUagVn/IlV2bwqle0vJ0vy5p8= 37 | github.com/vektah/gqlparser/v2 v2.5.16/go.mod h1:1lz1OeCqgQbQepsGxPVywrjdBHW2T08PUS3pJqepRww= 38 | go.opentelemetry.io/otel v1.27.0 h1:9BZoF3yMK/O1AafMiQTVu0YDj5Ea4hPhxCs7sGva+cg= 39 | go.opentelemetry.io/otel v1.27.0/go.mod h1:DMpAK8fzYRzs+bi3rS5REupisuqTheUlSZJ1WnZaPAQ= 40 | go.opentelemetry.io/otel/exporters/otlp/otlplog/otlploggrpc v0.0.0-20240518090000-14441aefdf88 h1:oM0GTNKGlc5qHctWeIGTVyda4iFFalOzMZ3Ehj5rwB4= 41 | go.opentelemetry.io/otel/exporters/otlp/otlplog/otlploggrpc v0.0.0-20240518090000-14441aefdf88/go.mod h1:JGG8ebaMO5nXOPnvKEl+DiA4MGwFjCbjsxT1WHIEBPY= 42 | go.opentelemetry.io/otel/exporters/otlp/otlplog/otlploghttp v0.3.0 h1:ccBrA8nCY5mM0y5uO7FT0ze4S0TuFcWdDB2FxGMTjkI= 43 | go.opentelemetry.io/otel/exporters/otlp/otlplog/otlploghttp v0.3.0/go.mod h1:/9pb6634zi2Lk8LYg9Q0X8Ar6jka4dkFOylBLbVQPCE= 44 | go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.27.0 h1:R9DE4kQ4k+YtfLI2ULwX82VtNQ2J8yZmA7ZIF/D+7Mc= 45 | go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.27.0/go.mod h1:OQFyQVrDlbe+R7xrEyDr/2Wr67Ol0hRUgsfA+V5A95s= 46 | go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.27.0 h1:qFffATk0X+HD+f1Z8lswGiOQYKHRlzfmdJm0wEaVrFA= 47 | go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.27.0/go.mod h1:MOiCmryaYtc+V0Ei+Tx9o5S1ZjA7kzLucuVuyzBZloQ= 48 | go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp v1.27.0 h1:QY7/0NeRPKlzusf40ZE4t1VlMKbqSNT7cJRYzWuja0s= 49 | go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp v1.27.0/go.mod h1:HVkSiDhTM9BoUJU8qE6j2eSWLLXvi1USXjyd2BXT8PY= 50 | go.opentelemetry.io/otel/log v0.3.0 h1:kJRFkpUFYtny37NQzL386WbznUByZx186DpEMKhEGZs= 51 | go.opentelemetry.io/otel/log v0.3.0/go.mod h1:ziCwqZr9soYDwGNbIL+6kAvQC+ANvjgG367HVcyR/ys= 52 | go.opentelemetry.io/otel/metric v1.27.0 h1:hvj3vdEKyeCi4YaYfNjv2NUje8FqKqUY8IlF0FxV/ik= 53 | go.opentelemetry.io/otel/metric v1.27.0/go.mod h1:mVFgmRlhljgBiuk/MP/oKylr4hs85GZAylncepAX/ak= 54 | go.opentelemetry.io/otel/sdk v1.27.0 h1:mlk+/Y1gLPLn84U4tI8d3GNJmGT/eXe3ZuOXN9kTWmI= 55 | go.opentelemetry.io/otel/sdk v1.27.0/go.mod h1:Ha9vbLwJE6W86YstIywK2xFfPjbWlCuwPtMkKdz/Y4A= 56 | go.opentelemetry.io/otel/sdk/log v0.3.0 h1:GEjJ8iftz2l+XO1GF2856r7yYVh74URiF9JMcAacr5U= 57 | go.opentelemetry.io/otel/sdk/log v0.3.0/go.mod h1:BwCxtmux6ACLuys1wlbc0+vGBd+xytjmjajwqqIul2g= 58 | go.opentelemetry.io/otel/trace v1.27.0 h1:IqYb813p7cmbHk0a5y6pD5JPakbVfftRXABGt5/Rscw= 59 | go.opentelemetry.io/otel/trace v1.27.0/go.mod h1:6RiD1hkAprV4/q+yd2ln1HG9GoPx39SuvvstaLBl+l4= 60 | go.opentelemetry.io/proto/otlp v1.3.1 h1:TrMUixzpM0yuc/znrFTP9MMRh8trP93mkCiDVeXrui0= 61 | go.opentelemetry.io/proto/otlp v1.3.1/go.mod h1:0X1WI4de4ZsLrrJNLAQbFeLCm3T7yBkR0XqQ7niQU+8= 62 | go.uber.org/goleak v1.3.0 h1:2K3zAYmnTNqV73imy9J1T3WC+gmCePx2hEGkimedGto= 63 | go.uber.org/goleak v1.3.0/go.mod h1:CoHD4mav9JJNrW/WLlf7HGZPjdw8EucARQHekz1X6bE= 64 | golang.org/x/exp v0.0.0-20231110203233-9a3e6036ecaa h1:FRnLl4eNAQl8hwxVVC17teOw8kdjVDVAiFMtgUdTSRQ= 65 | golang.org/x/exp v0.0.0-20231110203233-9a3e6036ecaa/go.mod h1:zk2irFbV9DP96SEBUUAy67IdHUaZuSnrz1n472HUCLE= 66 | golang.org/x/net v0.29.0 h1:5ORfpBpCs4HzDYoodCDBbwHzdR5UrLBZ3sOnUJmFoHo= 67 | golang.org/x/net v0.29.0/go.mod h1:gLkgy8jTGERgjzMic6DS9+SP0ajcu6Xu3Orq/SpETg0= 68 | golang.org/x/sync v0.8.0 h1:3NFvSEYkUoMifnESzZl15y791HH1qU2xm6eCJU5ZPXQ= 69 | golang.org/x/sync v0.8.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk= 70 | golang.org/x/sys v0.25.0 h1:r+8e+loiHxRqhXVl6ML1nO3l1+oFoWbnlu2Ehimmi34= 71 | golang.org/x/sys v0.25.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= 72 | golang.org/x/text v0.18.0 h1:XvMDiNzPAl0jr17s6W9lcaIhGUfUORdGCNsuLmPG224= 73 | golang.org/x/text v0.18.0/go.mod h1:BuEKDfySbSR4drPmRPG/7iBdf8hvFMuRexcpahXilzY= 74 | google.golang.org/genproto/googleapis/api v0.0.0-20240814211410-ddb44dafa142 h1:wKguEg1hsxI2/L3hUYrpo1RVi48K+uTyzKqprwLXsb8= 75 | google.golang.org/genproto/googleapis/api v0.0.0-20240814211410-ddb44dafa142/go.mod h1:d6be+8HhtEtucleCbxpPW9PA9XwISACu8nvpPqF0BVo= 76 | google.golang.org/genproto/googleapis/rpc v0.0.0-20240814211410-ddb44dafa142 h1:e7S5W7MGGLaSu8j3YjdezkZ+m1/Nm0uRVRMEMGk26Xs= 77 | google.golang.org/genproto/googleapis/rpc v0.0.0-20240814211410-ddb44dafa142/go.mod h1:UqMtugtsSgubUsoxbuAoiCXvqvErP7Gf0so0mK9tHxU= 78 | google.golang.org/grpc v1.65.0 h1:bs/cUb4lp1G5iImFFd3u5ixQzweKizoZJAwBNLR42lc= 79 | google.golang.org/grpc v1.65.0/go.mod h1:WgYC2ypjlB0EiQi6wdKixMqukr6lBc0Vo+oOgjrM5ZQ= 80 | google.golang.org/protobuf v1.34.2 h1:6xV6lTsCfpGD21XK49h7MhtcApnLqkfYgPcdHftf6hg= 81 | google.golang.org/protobuf v1.34.2/go.mod h1:qYOHts0dSfpeUzUFpOMr/WGzszTmLH+DiWniOlNbLDw= 82 | gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= 83 | gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= 84 | gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= 85 | gopkg.in/yaml.v2 v2.4.0/go.mod h1:RDklbk79AGWmwhnvt/jBztapEOGDOx6ZbXqjP6csGnQ= 86 | gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= 87 | gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= 88 | -------------------------------------------------------------------------------- /secrets-provider/main.go: -------------------------------------------------------------------------------- 1 | // A SecretsProvider interface 2 | 3 | package main 4 | 5 | import ( 6 | "context" 7 | "dagger/secrets-provider/internal/dagger" 8 | ) 9 | 10 | type SecretsProvider struct { 11 | P Provider // This needs to be here to access the type 12 | } 13 | 14 | // Secret Provider interface 15 | type Provider interface { 16 | dagger.DaggerObject 17 | // A function to configure the client ;TODO: add more parameters 18 | Configure(client dagger.Secret, token dagger.Secret) Provider 19 | // A function to write a secret 20 | PutSecret(ctx context.Context, path, key string, secret *dagger.Secret) error 21 | // A function to read a secret 22 | GetSecret(environment, path, key string) *dagger.Secret 23 | } 24 | -------------------------------------------------------------------------------- /secrets-provider/providers/1password/.gitattributes: -------------------------------------------------------------------------------- 1 | /dagger.gen.go linguist-generated 2 | /internal/dagger/** linguist-generated 3 | /internal/querybuilder/** linguist-generated 4 | /internal/telemetry/** linguist-generated 5 | -------------------------------------------------------------------------------- /secrets-provider/providers/1password/.gitignore: -------------------------------------------------------------------------------- 1 | /dagger.gen.go 2 | /internal/dagger 3 | /internal/querybuilder 4 | /internal/telemetry 5 | -------------------------------------------------------------------------------- /secrets-provider/providers/1password/dagger.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "provider-op", 3 | "sdk": "go", 4 | "dependencies": [ 5 | { 6 | "name": "onepassword", 7 | "source": "github.com/replicatedhq/daggerverse/onepassword@d358705cf754e7fbdcc0b5c7cee09a956226e2e2" 8 | }, 9 | { 10 | "name": "secrets-provider", 11 | "source": "../.." 12 | } 13 | ], 14 | "source": ".", 15 | "engineVersion": "v0.13.3" 16 | } 17 | -------------------------------------------------------------------------------- /secrets-provider/providers/1password/go.mod: -------------------------------------------------------------------------------- 1 | module dagger/1-password 2 | 3 | go 1.23.1 4 | 5 | require ( 6 | github.com/99designs/gqlgen v0.17.49 7 | github.com/Khan/genqlient v0.7.0 8 | github.com/vektah/gqlparser/v2 v2.5.16 9 | go.opentelemetry.io/otel v1.27.0 10 | go.opentelemetry.io/otel/exporters/otlp/otlplog/otlploggrpc v0.0.0-20240518090000-14441aefdf88 11 | go.opentelemetry.io/otel/exporters/otlp/otlplog/otlploghttp v0.3.0 12 | go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.27.0 13 | go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp v1.27.0 14 | go.opentelemetry.io/otel/log v0.3.0 15 | go.opentelemetry.io/otel/sdk v1.27.0 16 | go.opentelemetry.io/otel/sdk/log v0.3.0 17 | go.opentelemetry.io/otel/trace v1.27.0 18 | go.opentelemetry.io/proto/otlp v1.3.1 19 | golang.org/x/exp v0.0.0-20231110203233-9a3e6036ecaa 20 | golang.org/x/sync v0.8.0 21 | google.golang.org/grpc v1.65.0 22 | ) 23 | 24 | require ( 25 | github.com/cenkalti/backoff/v4 v4.3.0 // indirect 26 | github.com/go-logr/logr v1.4.2 // indirect 27 | github.com/go-logr/stdr v1.2.2 // indirect 28 | github.com/google/uuid v1.6.0 // indirect 29 | github.com/grpc-ecosystem/grpc-gateway/v2 v2.22.0 // indirect 30 | github.com/sergi/go-diff v1.3.2-0.20230802210424-5b0b94c5c0d3 // indirect 31 | github.com/sosodev/duration v1.3.1 // indirect 32 | go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.27.0 // indirect 33 | go.opentelemetry.io/otel/metric v1.27.0 // indirect 34 | golang.org/x/net v0.29.0 // indirect 35 | golang.org/x/sys v0.25.0 // indirect 36 | golang.org/x/text v0.18.0 // indirect 37 | google.golang.org/genproto/googleapis/api v0.0.0-20240814211410-ddb44dafa142 // indirect 38 | google.golang.org/genproto/googleapis/rpc v0.0.0-20240814211410-ddb44dafa142 // indirect 39 | google.golang.org/protobuf v1.34.2 // indirect 40 | ) 41 | 42 | replace go.opentelemetry.io/otel/exporters/otlp/otlplog/otlploggrpc => go.opentelemetry.io/otel/exporters/otlp/otlplog/otlploggrpc v0.0.0-20240518090000-14441aefdf88 43 | 44 | replace go.opentelemetry.io/otel/exporters/otlp/otlplog/otlploghttp => go.opentelemetry.io/otel/exporters/otlp/otlplog/otlploghttp v0.3.0 45 | 46 | replace go.opentelemetry.io/otel/log => go.opentelemetry.io/otel/log v0.3.0 47 | 48 | replace go.opentelemetry.io/otel/sdk/log => go.opentelemetry.io/otel/sdk/log v0.3.0 49 | -------------------------------------------------------------------------------- /secrets-provider/providers/1password/go.sum: -------------------------------------------------------------------------------- 1 | github.com/99designs/gqlgen v0.17.49 h1:b3hNGexHd33fBSAd4NDT/c3NCcQzcAVkknhN9ym36YQ= 2 | github.com/99designs/gqlgen v0.17.49/go.mod h1:tC8YFVZMed81x7UJ7ORUwXF4Kn6SXuucFqQBhN8+BU0= 3 | github.com/Khan/genqlient v0.7.0 h1:GZ1meyRnzcDTK48EjqB8t3bcfYvHArCUUvgOwpz1D4w= 4 | github.com/Khan/genqlient v0.7.0/go.mod h1:HNyy3wZvuYwmW3Y7mkoQLZsa/R5n5yIRajS1kPBvSFM= 5 | github.com/andreyvit/diff v0.0.0-20170406064948-c7f18ee00883 h1:bvNMNQO63//z+xNgfBlViaCIJKLlCJ6/fmUseuG0wVQ= 6 | github.com/andreyvit/diff v0.0.0-20170406064948-c7f18ee00883/go.mod h1:rCTlJbsFo29Kk6CurOXKm700vrz8f0KW0JNfpkRJY/8= 7 | github.com/cenkalti/backoff/v4 v4.3.0 h1:MyRJ/UdXutAwSAT+s3wNd7MfTIcy71VQueUuFK343L8= 8 | github.com/cenkalti/backoff/v4 v4.3.0/go.mod h1:Y3VNntkOUPxTVeUxJ/G5vcM//AlwfmyYozVcomhLiZE= 9 | github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= 10 | github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= 11 | github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= 12 | github.com/go-logr/logr v1.2.2/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A= 13 | github.com/go-logr/logr v1.4.2 h1:6pFjapn8bFcIbiKo3XT4j/BhANplGihG6tvd+8rYgrY= 14 | github.com/go-logr/logr v1.4.2/go.mod h1:9T104GzyrTigFIr8wt5mBrctHMim0Nb2HLGrmQ40KvY= 15 | github.com/go-logr/stdr v1.2.2 h1:hSWxHoqTgW2S2qGc0LTAI563KZ5YKYRhT3MFKZMbjag= 16 | github.com/go-logr/stdr v1.2.2/go.mod h1:mMo/vtBO5dYbehREoey6XUKy/eSumjCCveDpRre4VKE= 17 | github.com/google/go-cmp v0.6.0 h1:ofyhxvXcZhMsU5ulbFiLKl/XBFqE1GSq7atu8tAmTRI= 18 | github.com/google/go-cmp v0.6.0/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= 19 | github.com/google/uuid v1.6.0 h1:NIvaJDMOsjHA8n1jAhLSgzrAzy1Hgr+hNrb57e+94F0= 20 | github.com/google/uuid v1.6.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= 21 | github.com/grpc-ecosystem/grpc-gateway/v2 v2.22.0 h1:asbCHRVmodnJTuQ3qamDwqVOIjwqUPTYmYuemVOx+Ys= 22 | github.com/grpc-ecosystem/grpc-gateway/v2 v2.22.0/go.mod h1:ggCgvZ2r7uOoQjOyu2Y1NhHmEPPzzuhWgcza5M1Ji1I= 23 | github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo= 24 | github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ= 25 | github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI= 26 | github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= 27 | github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= 28 | github.com/sergi/go-diff v1.3.2-0.20230802210424-5b0b94c5c0d3 h1:n661drycOFuPLCN3Uc8sB6B/s6Z4t2xvBgU1htSHuq8= 29 | github.com/sergi/go-diff v1.3.2-0.20230802210424-5b0b94c5c0d3/go.mod h1:A0bzQcvG0E7Rwjx0REVgAGH58e96+X0MeOfepqsbeW4= 30 | github.com/sosodev/duration v1.3.1 h1:qtHBDMQ6lvMQsL15g4aopM4HEfOaYuhWBw3NPTtlqq4= 31 | github.com/sosodev/duration v1.3.1/go.mod h1:RQIBBX0+fMLc/D9+Jb/fwvVmo0eZvDDEERAikUR6SDg= 32 | github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= 33 | github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4= 34 | github.com/stretchr/testify v1.9.0 h1:HtqpIVDClZ4nwg75+f6Lvsy/wHu+3BoSGCbBAcpTsTg= 35 | github.com/stretchr/testify v1.9.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY= 36 | github.com/vektah/gqlparser/v2 v2.5.16 h1:1gcmLTvs3JLKXckwCwlUagVn/IlV2bwqle0vJ0vy5p8= 37 | github.com/vektah/gqlparser/v2 v2.5.16/go.mod h1:1lz1OeCqgQbQepsGxPVywrjdBHW2T08PUS3pJqepRww= 38 | go.opentelemetry.io/otel v1.27.0 h1:9BZoF3yMK/O1AafMiQTVu0YDj5Ea4hPhxCs7sGva+cg= 39 | go.opentelemetry.io/otel v1.27.0/go.mod h1:DMpAK8fzYRzs+bi3rS5REupisuqTheUlSZJ1WnZaPAQ= 40 | go.opentelemetry.io/otel/exporters/otlp/otlplog/otlploggrpc v0.0.0-20240518090000-14441aefdf88 h1:oM0GTNKGlc5qHctWeIGTVyda4iFFalOzMZ3Ehj5rwB4= 41 | go.opentelemetry.io/otel/exporters/otlp/otlplog/otlploggrpc v0.0.0-20240518090000-14441aefdf88/go.mod h1:JGG8ebaMO5nXOPnvKEl+DiA4MGwFjCbjsxT1WHIEBPY= 42 | go.opentelemetry.io/otel/exporters/otlp/otlplog/otlploghttp v0.3.0 h1:ccBrA8nCY5mM0y5uO7FT0ze4S0TuFcWdDB2FxGMTjkI= 43 | go.opentelemetry.io/otel/exporters/otlp/otlplog/otlploghttp v0.3.0/go.mod h1:/9pb6634zi2Lk8LYg9Q0X8Ar6jka4dkFOylBLbVQPCE= 44 | go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.27.0 h1:R9DE4kQ4k+YtfLI2ULwX82VtNQ2J8yZmA7ZIF/D+7Mc= 45 | go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.27.0/go.mod h1:OQFyQVrDlbe+R7xrEyDr/2Wr67Ol0hRUgsfA+V5A95s= 46 | go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.27.0 h1:qFffATk0X+HD+f1Z8lswGiOQYKHRlzfmdJm0wEaVrFA= 47 | go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.27.0/go.mod h1:MOiCmryaYtc+V0Ei+Tx9o5S1ZjA7kzLucuVuyzBZloQ= 48 | go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp v1.27.0 h1:QY7/0NeRPKlzusf40ZE4t1VlMKbqSNT7cJRYzWuja0s= 49 | go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp v1.27.0/go.mod h1:HVkSiDhTM9BoUJU8qE6j2eSWLLXvi1USXjyd2BXT8PY= 50 | go.opentelemetry.io/otel/log v0.3.0 h1:kJRFkpUFYtny37NQzL386WbznUByZx186DpEMKhEGZs= 51 | go.opentelemetry.io/otel/log v0.3.0/go.mod h1:ziCwqZr9soYDwGNbIL+6kAvQC+ANvjgG367HVcyR/ys= 52 | go.opentelemetry.io/otel/metric v1.27.0 h1:hvj3vdEKyeCi4YaYfNjv2NUje8FqKqUY8IlF0FxV/ik= 53 | go.opentelemetry.io/otel/metric v1.27.0/go.mod h1:mVFgmRlhljgBiuk/MP/oKylr4hs85GZAylncepAX/ak= 54 | go.opentelemetry.io/otel/sdk v1.27.0 h1:mlk+/Y1gLPLn84U4tI8d3GNJmGT/eXe3ZuOXN9kTWmI= 55 | go.opentelemetry.io/otel/sdk v1.27.0/go.mod h1:Ha9vbLwJE6W86YstIywK2xFfPjbWlCuwPtMkKdz/Y4A= 56 | go.opentelemetry.io/otel/sdk/log v0.3.0 h1:GEjJ8iftz2l+XO1GF2856r7yYVh74URiF9JMcAacr5U= 57 | go.opentelemetry.io/otel/sdk/log v0.3.0/go.mod h1:BwCxtmux6ACLuys1wlbc0+vGBd+xytjmjajwqqIul2g= 58 | go.opentelemetry.io/otel/trace v1.27.0 h1:IqYb813p7cmbHk0a5y6pD5JPakbVfftRXABGt5/Rscw= 59 | go.opentelemetry.io/otel/trace v1.27.0/go.mod h1:6RiD1hkAprV4/q+yd2ln1HG9GoPx39SuvvstaLBl+l4= 60 | go.opentelemetry.io/proto/otlp v1.3.1 h1:TrMUixzpM0yuc/znrFTP9MMRh8trP93mkCiDVeXrui0= 61 | go.opentelemetry.io/proto/otlp v1.3.1/go.mod h1:0X1WI4de4ZsLrrJNLAQbFeLCm3T7yBkR0XqQ7niQU+8= 62 | go.uber.org/goleak v1.3.0 h1:2K3zAYmnTNqV73imy9J1T3WC+gmCePx2hEGkimedGto= 63 | go.uber.org/goleak v1.3.0/go.mod h1:CoHD4mav9JJNrW/WLlf7HGZPjdw8EucARQHekz1X6bE= 64 | golang.org/x/exp v0.0.0-20231110203233-9a3e6036ecaa h1:FRnLl4eNAQl8hwxVVC17teOw8kdjVDVAiFMtgUdTSRQ= 65 | golang.org/x/exp v0.0.0-20231110203233-9a3e6036ecaa/go.mod h1:zk2irFbV9DP96SEBUUAy67IdHUaZuSnrz1n472HUCLE= 66 | golang.org/x/net v0.29.0 h1:5ORfpBpCs4HzDYoodCDBbwHzdR5UrLBZ3sOnUJmFoHo= 67 | golang.org/x/net v0.29.0/go.mod h1:gLkgy8jTGERgjzMic6DS9+SP0ajcu6Xu3Orq/SpETg0= 68 | golang.org/x/sync v0.8.0 h1:3NFvSEYkUoMifnESzZl15y791HH1qU2xm6eCJU5ZPXQ= 69 | golang.org/x/sync v0.8.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk= 70 | golang.org/x/sys v0.25.0 h1:r+8e+loiHxRqhXVl6ML1nO3l1+oFoWbnlu2Ehimmi34= 71 | golang.org/x/sys v0.25.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= 72 | golang.org/x/text v0.18.0 h1:XvMDiNzPAl0jr17s6W9lcaIhGUfUORdGCNsuLmPG224= 73 | golang.org/x/text v0.18.0/go.mod h1:BuEKDfySbSR4drPmRPG/7iBdf8hvFMuRexcpahXilzY= 74 | google.golang.org/genproto/googleapis/api v0.0.0-20240814211410-ddb44dafa142 h1:wKguEg1hsxI2/L3hUYrpo1RVi48K+uTyzKqprwLXsb8= 75 | google.golang.org/genproto/googleapis/api v0.0.0-20240814211410-ddb44dafa142/go.mod h1:d6be+8HhtEtucleCbxpPW9PA9XwISACu8nvpPqF0BVo= 76 | google.golang.org/genproto/googleapis/rpc v0.0.0-20240814211410-ddb44dafa142 h1:e7S5W7MGGLaSu8j3YjdezkZ+m1/Nm0uRVRMEMGk26Xs= 77 | google.golang.org/genproto/googleapis/rpc v0.0.0-20240814211410-ddb44dafa142/go.mod h1:UqMtugtsSgubUsoxbuAoiCXvqvErP7Gf0so0mK9tHxU= 78 | google.golang.org/grpc v1.65.0 h1:bs/cUb4lp1G5iImFFd3u5ixQzweKizoZJAwBNLR42lc= 79 | google.golang.org/grpc v1.65.0/go.mod h1:WgYC2ypjlB0EiQi6wdKixMqukr6lBc0Vo+oOgjrM5ZQ= 80 | google.golang.org/protobuf v1.34.2 h1:6xV6lTsCfpGD21XK49h7MhtcApnLqkfYgPcdHftf6hg= 81 | google.golang.org/protobuf v1.34.2/go.mod h1:qYOHts0dSfpeUzUFpOMr/WGzszTmLH+DiWniOlNbLDw= 82 | gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= 83 | gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= 84 | gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= 85 | gopkg.in/yaml.v2 v2.4.0/go.mod h1:RDklbk79AGWmwhnvt/jBztapEOGDOx6ZbXqjP6csGnQ= 86 | gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= 87 | gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= 88 | -------------------------------------------------------------------------------- /secrets-provider/providers/1password/main.go: -------------------------------------------------------------------------------- 1 | // A generated module for 1Password functions 2 | 3 | package main 4 | 5 | import ( 6 | "context" 7 | "dagger/1-password/internal/dagger" 8 | ) 9 | 10 | type ProviderOp struct { 11 | Token *dagger.Secret 12 | } 13 | 14 | // Configure the 1Password provider with a token 15 | func (m *ProviderOp) Configure(ctx context.Context, client, token *dagger.Secret) (*ProviderOp, error) { 16 | m.Token = token 17 | return m, nil 18 | } 19 | 20 | // TODO: implement 21 | func (m *ProviderOp) PutSecret(ctx context.Context, path, key string, secret *dagger.Secret) error { 22 | return nil 23 | } 24 | 25 | // Get a secret from 1Password 26 | func (m *ProviderOp) GetSecret(ctx context.Context, environment, path, key string) (*dagger.Secret, error) { 27 | return dag.Onepassword().FindSecret( 28 | m.Token, 29 | environment, 30 | path, 31 | key, 32 | ), nil 33 | } 34 | -------------------------------------------------------------------------------- /secrets-provider/providers/infisical/.gitattributes: -------------------------------------------------------------------------------- 1 | /dagger.gen.go linguist-generated 2 | /internal/dagger/** linguist-generated 3 | /internal/querybuilder/** linguist-generated 4 | /internal/telemetry/** linguist-generated 5 | -------------------------------------------------------------------------------- /secrets-provider/providers/infisical/.gitignore: -------------------------------------------------------------------------------- 1 | /dagger.gen.go 2 | /internal/dagger 3 | /internal/querybuilder 4 | /internal/telemetry 5 | -------------------------------------------------------------------------------- /secrets-provider/providers/infisical/dagger.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "provider-infisical", 3 | "sdk": "go", 4 | "dependencies": [ 5 | { 6 | "name": "infisical", 7 | "source": "github.com/Infisical/infisical-dagger@98042321db6b3995f2f0d874c61990c3c73d7d30" 8 | }, 9 | { 10 | "name": "secrets-provider", 11 | "source": "../.." 12 | } 13 | ], 14 | "source": ".", 15 | "engineVersion": "v0.13.3" 16 | } 17 | -------------------------------------------------------------------------------- /secrets-provider/providers/infisical/go.mod: -------------------------------------------------------------------------------- 1 | module dagger/infisical 2 | 3 | go 1.23.1 4 | 5 | require ( 6 | github.com/99designs/gqlgen v0.17.49 7 | github.com/Khan/genqlient v0.7.0 8 | github.com/vektah/gqlparser/v2 v2.5.16 9 | go.opentelemetry.io/otel v1.27.0 10 | go.opentelemetry.io/otel/exporters/otlp/otlplog/otlploggrpc v0.0.0-20240518090000-14441aefdf88 11 | go.opentelemetry.io/otel/exporters/otlp/otlplog/otlploghttp v0.3.0 12 | go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.27.0 13 | go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp v1.27.0 14 | go.opentelemetry.io/otel/log v0.3.0 15 | go.opentelemetry.io/otel/sdk v1.27.0 16 | go.opentelemetry.io/otel/sdk/log v0.3.0 17 | go.opentelemetry.io/otel/trace v1.27.0 18 | go.opentelemetry.io/proto/otlp v1.3.1 19 | golang.org/x/exp v0.0.0-20231110203233-9a3e6036ecaa 20 | golang.org/x/sync v0.8.0 21 | google.golang.org/grpc v1.65.0 22 | ) 23 | 24 | require ( 25 | github.com/cenkalti/backoff/v4 v4.3.0 // indirect 26 | github.com/go-logr/logr v1.4.2 // indirect 27 | github.com/go-logr/stdr v1.2.2 // indirect 28 | github.com/google/uuid v1.6.0 // indirect 29 | github.com/grpc-ecosystem/grpc-gateway/v2 v2.22.0 // indirect 30 | github.com/sergi/go-diff v1.3.2-0.20230802210424-5b0b94c5c0d3 // indirect 31 | github.com/sosodev/duration v1.3.1 // indirect 32 | go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.27.0 // indirect 33 | go.opentelemetry.io/otel/metric v1.27.0 // indirect 34 | golang.org/x/net v0.29.0 // indirect 35 | golang.org/x/sys v0.25.0 // indirect 36 | golang.org/x/text v0.18.0 // indirect 37 | google.golang.org/genproto/googleapis/api v0.0.0-20240814211410-ddb44dafa142 // indirect 38 | google.golang.org/genproto/googleapis/rpc v0.0.0-20240814211410-ddb44dafa142 // indirect 39 | google.golang.org/protobuf v1.34.2 // indirect 40 | ) 41 | 42 | replace go.opentelemetry.io/otel/exporters/otlp/otlplog/otlploggrpc => go.opentelemetry.io/otel/exporters/otlp/otlplog/otlploggrpc v0.0.0-20240518090000-14441aefdf88 43 | 44 | replace go.opentelemetry.io/otel/exporters/otlp/otlplog/otlploghttp => go.opentelemetry.io/otel/exporters/otlp/otlplog/otlploghttp v0.3.0 45 | 46 | replace go.opentelemetry.io/otel/log => go.opentelemetry.io/otel/log v0.3.0 47 | 48 | replace go.opentelemetry.io/otel/sdk/log => go.opentelemetry.io/otel/sdk/log v0.3.0 49 | -------------------------------------------------------------------------------- /secrets-provider/providers/infisical/go.sum: -------------------------------------------------------------------------------- 1 | github.com/99designs/gqlgen v0.17.49 h1:b3hNGexHd33fBSAd4NDT/c3NCcQzcAVkknhN9ym36YQ= 2 | github.com/99designs/gqlgen v0.17.49/go.mod h1:tC8YFVZMed81x7UJ7ORUwXF4Kn6SXuucFqQBhN8+BU0= 3 | github.com/Khan/genqlient v0.7.0 h1:GZ1meyRnzcDTK48EjqB8t3bcfYvHArCUUvgOwpz1D4w= 4 | github.com/Khan/genqlient v0.7.0/go.mod h1:HNyy3wZvuYwmW3Y7mkoQLZsa/R5n5yIRajS1kPBvSFM= 5 | github.com/andreyvit/diff v0.0.0-20170406064948-c7f18ee00883 h1:bvNMNQO63//z+xNgfBlViaCIJKLlCJ6/fmUseuG0wVQ= 6 | github.com/andreyvit/diff v0.0.0-20170406064948-c7f18ee00883/go.mod h1:rCTlJbsFo29Kk6CurOXKm700vrz8f0KW0JNfpkRJY/8= 7 | github.com/cenkalti/backoff/v4 v4.3.0 h1:MyRJ/UdXutAwSAT+s3wNd7MfTIcy71VQueUuFK343L8= 8 | github.com/cenkalti/backoff/v4 v4.3.0/go.mod h1:Y3VNntkOUPxTVeUxJ/G5vcM//AlwfmyYozVcomhLiZE= 9 | github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= 10 | github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= 11 | github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= 12 | github.com/go-logr/logr v1.2.2/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A= 13 | github.com/go-logr/logr v1.4.2 h1:6pFjapn8bFcIbiKo3XT4j/BhANplGihG6tvd+8rYgrY= 14 | github.com/go-logr/logr v1.4.2/go.mod h1:9T104GzyrTigFIr8wt5mBrctHMim0Nb2HLGrmQ40KvY= 15 | github.com/go-logr/stdr v1.2.2 h1:hSWxHoqTgW2S2qGc0LTAI563KZ5YKYRhT3MFKZMbjag= 16 | github.com/go-logr/stdr v1.2.2/go.mod h1:mMo/vtBO5dYbehREoey6XUKy/eSumjCCveDpRre4VKE= 17 | github.com/google/go-cmp v0.6.0 h1:ofyhxvXcZhMsU5ulbFiLKl/XBFqE1GSq7atu8tAmTRI= 18 | github.com/google/go-cmp v0.6.0/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= 19 | github.com/google/uuid v1.6.0 h1:NIvaJDMOsjHA8n1jAhLSgzrAzy1Hgr+hNrb57e+94F0= 20 | github.com/google/uuid v1.6.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= 21 | github.com/grpc-ecosystem/grpc-gateway/v2 v2.22.0 h1:asbCHRVmodnJTuQ3qamDwqVOIjwqUPTYmYuemVOx+Ys= 22 | github.com/grpc-ecosystem/grpc-gateway/v2 v2.22.0/go.mod h1:ggCgvZ2r7uOoQjOyu2Y1NhHmEPPzzuhWgcza5M1Ji1I= 23 | github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo= 24 | github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ= 25 | github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI= 26 | github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= 27 | github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= 28 | github.com/sergi/go-diff v1.3.2-0.20230802210424-5b0b94c5c0d3 h1:n661drycOFuPLCN3Uc8sB6B/s6Z4t2xvBgU1htSHuq8= 29 | github.com/sergi/go-diff v1.3.2-0.20230802210424-5b0b94c5c0d3/go.mod h1:A0bzQcvG0E7Rwjx0REVgAGH58e96+X0MeOfepqsbeW4= 30 | github.com/sosodev/duration v1.3.1 h1:qtHBDMQ6lvMQsL15g4aopM4HEfOaYuhWBw3NPTtlqq4= 31 | github.com/sosodev/duration v1.3.1/go.mod h1:RQIBBX0+fMLc/D9+Jb/fwvVmo0eZvDDEERAikUR6SDg= 32 | github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= 33 | github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4= 34 | github.com/stretchr/testify v1.9.0 h1:HtqpIVDClZ4nwg75+f6Lvsy/wHu+3BoSGCbBAcpTsTg= 35 | github.com/stretchr/testify v1.9.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY= 36 | github.com/vektah/gqlparser/v2 v2.5.16 h1:1gcmLTvs3JLKXckwCwlUagVn/IlV2bwqle0vJ0vy5p8= 37 | github.com/vektah/gqlparser/v2 v2.5.16/go.mod h1:1lz1OeCqgQbQepsGxPVywrjdBHW2T08PUS3pJqepRww= 38 | go.opentelemetry.io/otel v1.27.0 h1:9BZoF3yMK/O1AafMiQTVu0YDj5Ea4hPhxCs7sGva+cg= 39 | go.opentelemetry.io/otel v1.27.0/go.mod h1:DMpAK8fzYRzs+bi3rS5REupisuqTheUlSZJ1WnZaPAQ= 40 | go.opentelemetry.io/otel/exporters/otlp/otlplog/otlploggrpc v0.0.0-20240518090000-14441aefdf88 h1:oM0GTNKGlc5qHctWeIGTVyda4iFFalOzMZ3Ehj5rwB4= 41 | go.opentelemetry.io/otel/exporters/otlp/otlplog/otlploggrpc v0.0.0-20240518090000-14441aefdf88/go.mod h1:JGG8ebaMO5nXOPnvKEl+DiA4MGwFjCbjsxT1WHIEBPY= 42 | go.opentelemetry.io/otel/exporters/otlp/otlplog/otlploghttp v0.3.0 h1:ccBrA8nCY5mM0y5uO7FT0ze4S0TuFcWdDB2FxGMTjkI= 43 | go.opentelemetry.io/otel/exporters/otlp/otlplog/otlploghttp v0.3.0/go.mod h1:/9pb6634zi2Lk8LYg9Q0X8Ar6jka4dkFOylBLbVQPCE= 44 | go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.27.0 h1:R9DE4kQ4k+YtfLI2ULwX82VtNQ2J8yZmA7ZIF/D+7Mc= 45 | go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.27.0/go.mod h1:OQFyQVrDlbe+R7xrEyDr/2Wr67Ol0hRUgsfA+V5A95s= 46 | go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.27.0 h1:qFffATk0X+HD+f1Z8lswGiOQYKHRlzfmdJm0wEaVrFA= 47 | go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.27.0/go.mod h1:MOiCmryaYtc+V0Ei+Tx9o5S1ZjA7kzLucuVuyzBZloQ= 48 | go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp v1.27.0 h1:QY7/0NeRPKlzusf40ZE4t1VlMKbqSNT7cJRYzWuja0s= 49 | go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp v1.27.0/go.mod h1:HVkSiDhTM9BoUJU8qE6j2eSWLLXvi1USXjyd2BXT8PY= 50 | go.opentelemetry.io/otel/log v0.3.0 h1:kJRFkpUFYtny37NQzL386WbznUByZx186DpEMKhEGZs= 51 | go.opentelemetry.io/otel/log v0.3.0/go.mod h1:ziCwqZr9soYDwGNbIL+6kAvQC+ANvjgG367HVcyR/ys= 52 | go.opentelemetry.io/otel/metric v1.27.0 h1:hvj3vdEKyeCi4YaYfNjv2NUje8FqKqUY8IlF0FxV/ik= 53 | go.opentelemetry.io/otel/metric v1.27.0/go.mod h1:mVFgmRlhljgBiuk/MP/oKylr4hs85GZAylncepAX/ak= 54 | go.opentelemetry.io/otel/sdk v1.27.0 h1:mlk+/Y1gLPLn84U4tI8d3GNJmGT/eXe3ZuOXN9kTWmI= 55 | go.opentelemetry.io/otel/sdk v1.27.0/go.mod h1:Ha9vbLwJE6W86YstIywK2xFfPjbWlCuwPtMkKdz/Y4A= 56 | go.opentelemetry.io/otel/sdk/log v0.3.0 h1:GEjJ8iftz2l+XO1GF2856r7yYVh74URiF9JMcAacr5U= 57 | go.opentelemetry.io/otel/sdk/log v0.3.0/go.mod h1:BwCxtmux6ACLuys1wlbc0+vGBd+xytjmjajwqqIul2g= 58 | go.opentelemetry.io/otel/trace v1.27.0 h1:IqYb813p7cmbHk0a5y6pD5JPakbVfftRXABGt5/Rscw= 59 | go.opentelemetry.io/otel/trace v1.27.0/go.mod h1:6RiD1hkAprV4/q+yd2ln1HG9GoPx39SuvvstaLBl+l4= 60 | go.opentelemetry.io/proto/otlp v1.3.1 h1:TrMUixzpM0yuc/znrFTP9MMRh8trP93mkCiDVeXrui0= 61 | go.opentelemetry.io/proto/otlp v1.3.1/go.mod h1:0X1WI4de4ZsLrrJNLAQbFeLCm3T7yBkR0XqQ7niQU+8= 62 | go.uber.org/goleak v1.3.0 h1:2K3zAYmnTNqV73imy9J1T3WC+gmCePx2hEGkimedGto= 63 | go.uber.org/goleak v1.3.0/go.mod h1:CoHD4mav9JJNrW/WLlf7HGZPjdw8EucARQHekz1X6bE= 64 | golang.org/x/exp v0.0.0-20231110203233-9a3e6036ecaa h1:FRnLl4eNAQl8hwxVVC17teOw8kdjVDVAiFMtgUdTSRQ= 65 | golang.org/x/exp v0.0.0-20231110203233-9a3e6036ecaa/go.mod h1:zk2irFbV9DP96SEBUUAy67IdHUaZuSnrz1n472HUCLE= 66 | golang.org/x/net v0.29.0 h1:5ORfpBpCs4HzDYoodCDBbwHzdR5UrLBZ3sOnUJmFoHo= 67 | golang.org/x/net v0.29.0/go.mod h1:gLkgy8jTGERgjzMic6DS9+SP0ajcu6Xu3Orq/SpETg0= 68 | golang.org/x/sync v0.8.0 h1:3NFvSEYkUoMifnESzZl15y791HH1qU2xm6eCJU5ZPXQ= 69 | golang.org/x/sync v0.8.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk= 70 | golang.org/x/sys v0.25.0 h1:r+8e+loiHxRqhXVl6ML1nO3l1+oFoWbnlu2Ehimmi34= 71 | golang.org/x/sys v0.25.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= 72 | golang.org/x/text v0.18.0 h1:XvMDiNzPAl0jr17s6W9lcaIhGUfUORdGCNsuLmPG224= 73 | golang.org/x/text v0.18.0/go.mod h1:BuEKDfySbSR4drPmRPG/7iBdf8hvFMuRexcpahXilzY= 74 | google.golang.org/genproto/googleapis/api v0.0.0-20240814211410-ddb44dafa142 h1:wKguEg1hsxI2/L3hUYrpo1RVi48K+uTyzKqprwLXsb8= 75 | google.golang.org/genproto/googleapis/api v0.0.0-20240814211410-ddb44dafa142/go.mod h1:d6be+8HhtEtucleCbxpPW9PA9XwISACu8nvpPqF0BVo= 76 | google.golang.org/genproto/googleapis/rpc v0.0.0-20240814211410-ddb44dafa142 h1:e7S5W7MGGLaSu8j3YjdezkZ+m1/Nm0uRVRMEMGk26Xs= 77 | google.golang.org/genproto/googleapis/rpc v0.0.0-20240814211410-ddb44dafa142/go.mod h1:UqMtugtsSgubUsoxbuAoiCXvqvErP7Gf0so0mK9tHxU= 78 | google.golang.org/grpc v1.65.0 h1:bs/cUb4lp1G5iImFFd3u5ixQzweKizoZJAwBNLR42lc= 79 | google.golang.org/grpc v1.65.0/go.mod h1:WgYC2ypjlB0EiQi6wdKixMqukr6lBc0Vo+oOgjrM5ZQ= 80 | google.golang.org/protobuf v1.34.2 h1:6xV6lTsCfpGD21XK49h7MhtcApnLqkfYgPcdHftf6hg= 81 | google.golang.org/protobuf v1.34.2/go.mod h1:qYOHts0dSfpeUzUFpOMr/WGzszTmLH+DiWniOlNbLDw= 82 | gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= 83 | gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= 84 | gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= 85 | gopkg.in/yaml.v2 v2.4.0/go.mod h1:RDklbk79AGWmwhnvt/jBztapEOGDOx6ZbXqjP6csGnQ= 86 | gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= 87 | gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= 88 | -------------------------------------------------------------------------------- /secrets-provider/providers/infisical/main.go: -------------------------------------------------------------------------------- 1 | // A module that adheres the Infisical module to the SecretsProvider interface 2 | 3 | package main 4 | 5 | import ( 6 | "context" 7 | "dagger/infisical/internal/dagger" 8 | ) 9 | 10 | type ProviderInfisical struct { 11 | Client *dagger.Secret 12 | Secret *dagger.Secret 13 | } 14 | 15 | // Configure the Infisical provider with a client and secret 16 | func (m *ProviderInfisical) Configure(ctx context.Context, client, token *dagger.Secret) (*ProviderInfisical, error) { 17 | m.Client = client 18 | m.Secret = token 19 | return m, nil 20 | } 21 | 22 | // TODO: infisical module does not provide a function to write secrets 23 | func (m *ProviderInfisical) PutSecret(ctx context.Context, path, key string, secret *dagger.Secret) error { 24 | return nil 25 | } 26 | 27 | // Get a secret from Infisical 28 | func (m *ProviderInfisical) GetSecret(ctx context.Context, environment, path, key string) (*dagger.Secret, error) { 29 | // TODO: Implement 30 | project := "6545b31d52162a370f2141fe" 31 | 32 | secret := dag.Infisical(). 33 | WithUniversalAuth(m.Client, m.Secret). 34 | GetSecretByName( 35 | key, 36 | project, 37 | environment, 38 | "/"+path) 39 | return secret, nil 40 | } 41 | -------------------------------------------------------------------------------- /secretsmanager/.gitattributes: -------------------------------------------------------------------------------- 1 | /dagger.gen.go linguist-generated=true 2 | /internal/dagger/** linguist-generated 3 | /internal/querybuilder/** linguist-generated 4 | /internal/telemetry/** linguist-generated 5 | -------------------------------------------------------------------------------- /secretsmanager/.gitignore: -------------------------------------------------------------------------------- 1 | /dagger.gen.go 2 | /internal/querybuilder/ 3 | /querybuilder/ 4 | /internal/dagger 5 | /internal/telemetry 6 | -------------------------------------------------------------------------------- /secretsmanager/README.md: -------------------------------------------------------------------------------- 1 | # Secretsmanager 2 | 3 | Dagger module for interacting with AWS Secrets Manager 4 | 5 | ## Examples 6 | 7 | `echo "{secretsmanager { auth(key:\"$AWS_ACCESS_KEY_ID\", secret:\"$AWS_SECRET_ACCESS_KEY\") { putSecret(name:\"foo\", value:\"bar\") { getSecret(name:\"foo\")}}}}" | dagger query` 8 | -------------------------------------------------------------------------------- /secretsmanager/dagger.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "secretsmanager", 3 | "sdk": "go", 4 | "source": ".", 5 | "engineVersion": "v0.12.5" 6 | } 7 | -------------------------------------------------------------------------------- /secretsmanager/go.mod: -------------------------------------------------------------------------------- 1 | module secretsmanager 2 | 3 | go 1.21.1 4 | 5 | require ( 6 | github.com/99designs/gqlgen v0.17.49 7 | github.com/Khan/genqlient v0.7.0 8 | github.com/aws/aws-sdk-go v1.45.14 9 | golang.org/x/sync v0.7.0 10 | ) 11 | 12 | require ( 13 | github.com/cenkalti/backoff/v4 v4.3.0 // indirect 14 | github.com/go-logr/logr v1.4.1 // indirect 15 | github.com/go-logr/stdr v1.2.2 // indirect 16 | github.com/google/uuid v1.6.0 // indirect 17 | github.com/grpc-ecosystem/grpc-gateway/v2 v2.20.0 // indirect 18 | github.com/jmespath/go-jmespath v0.4.0 // indirect 19 | github.com/sergi/go-diff v1.3.2-0.20230802210424-5b0b94c5c0d3 // indirect 20 | github.com/sosodev/duration v1.3.1 // indirect 21 | github.com/vektah/gqlparser/v2 v2.5.16 22 | go.opentelemetry.io/otel v1.27.0 23 | go.opentelemetry.io/otel/exporters/otlp/otlplog/otlploggrpc v0.0.0-20240518090000-14441aefdf88 24 | go.opentelemetry.io/otel/exporters/otlp/otlplog/otlploghttp v0.3.0 25 | go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.27.0 // indirect 26 | go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.27.0 27 | go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp v1.27.0 28 | go.opentelemetry.io/otel/log v0.3.0 29 | go.opentelemetry.io/otel/metric v1.27.0 // indirect 30 | go.opentelemetry.io/otel/sdk v1.27.0 31 | go.opentelemetry.io/otel/sdk/log v0.3.0 32 | go.opentelemetry.io/otel/trace v1.27.0 33 | go.opentelemetry.io/proto/otlp v1.3.1 34 | golang.org/x/exp v0.0.0-20231110203233-9a3e6036ecaa 35 | golang.org/x/net v0.26.0 // indirect 36 | golang.org/x/sys v0.21.0 // indirect 37 | golang.org/x/text v0.16.0 // indirect 38 | google.golang.org/genproto/googleapis/api v0.0.0-20240520151616-dc85e6b867a5 // indirect 39 | google.golang.org/genproto/googleapis/rpc v0.0.0-20240515191416-fc5f0ca64291 // indirect 40 | google.golang.org/grpc v1.64.0 41 | google.golang.org/protobuf v1.34.1 // indirect 42 | ) 43 | -------------------------------------------------------------------------------- /secretsmanager/main.go: -------------------------------------------------------------------------------- 1 | // Interact with AWS SecretsManager 2 | // 3 | // A utility module to get and put secrets using AWS SecretsManager 4 | 5 | package main 6 | 7 | import ( 8 | "github.com/aws/aws-sdk-go/aws" 9 | "github.com/aws/aws-sdk-go/aws/credentials" 10 | "github.com/aws/aws-sdk-go/aws/session" 11 | awssm "github.com/aws/aws-sdk-go/service/secretsmanager" 12 | ) 13 | 14 | type Secretsmanager struct { 15 | Key string 16 | Secret string 17 | } 18 | 19 | // Authenticate to AWS using key and secret 20 | func (m *Secretsmanager) Auth(key, secret string) *Secretsmanager { 21 | m.Key = key 22 | m.Secret = secret 23 | 24 | return m 25 | } 26 | 27 | // Retrieve a secret from SecretsManager 28 | func (m *Secretsmanager) GetSecret(name string) (*Secret, error) { 29 | config := &aws.Config{ 30 | Region: aws.String("us-east-1"), 31 | Credentials: credentials.NewStaticCredentials(m.Key, m.Secret, ""), 32 | } 33 | sess, err := session.NewSession(config) 34 | if err != nil { 35 | return nil, err 36 | } 37 | svc := awssm.New(sess) 38 | 39 | input := &awssm.GetSecretValueInput{ 40 | SecretId: aws.String(name), 41 | } 42 | 43 | value, err := svc.GetSecretValue(input) 44 | if err != nil { 45 | return nil, err 46 | } 47 | dagSecret := dag.SetSecret(name, *(value.SecretString)) 48 | return dagSecret, nil 49 | } 50 | 51 | // Put a secret in SecretsManager 52 | func (m *Secretsmanager) PutSecret(name, value string) (*Secretsmanager, error) { 53 | config := &aws.Config{ 54 | Region: aws.String("us-east-1"), 55 | Credentials: credentials.NewStaticCredentials(m.Key, m.Secret, ""), 56 | } 57 | sess, err := session.NewSession(config) 58 | if err != nil { 59 | return nil, err 60 | } 61 | svc := awssm.New(sess) 62 | 63 | input := &awssm.PutSecretValueInput{ 64 | SecretId: aws.String(name), 65 | SecretString: aws.String(value), 66 | } 67 | 68 | _, err = svc.PutSecretValue(input) 69 | return m, err 70 | } 71 | 72 | -------------------------------------------------------------------------------- /secretsmanager/secretsmanager: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kpenfound/dagger-modules/f7964245d0146dd3810f247c6c09eb33518d4654/secretsmanager/secretsmanager -------------------------------------------------------------------------------- /utils/.gitattributes: -------------------------------------------------------------------------------- 1 | /dagger.gen.go linguist-generated 2 | /internal/dagger/** linguist-generated 3 | /internal/querybuilder/** linguist-generated 4 | /internal/telemetry/** linguist-generated 5 | -------------------------------------------------------------------------------- /utils/.gitignore: -------------------------------------------------------------------------------- 1 | /dagger.gen.go 2 | /internal/querybuilder/ 3 | /querybuilder/ 4 | /internal/dagger 5 | /internal/telemetry 6 | -------------------------------------------------------------------------------- /utils/dagger.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "utils", 3 | "sdk": "go", 4 | "source": ".", 5 | "engineVersion": "v0.12.5" 6 | } 7 | -------------------------------------------------------------------------------- /utils/go.mod: -------------------------------------------------------------------------------- 1 | module main 2 | 3 | go 1.21.3 4 | 5 | require ( 6 | github.com/99designs/gqlgen v0.17.49 7 | github.com/Khan/genqlient v0.7.0 8 | golang.org/x/exp v0.0.0-20231110203233-9a3e6036ecaa 9 | golang.org/x/sync v0.7.0 10 | ) 11 | 12 | require ( 13 | github.com/cenkalti/backoff/v4 v4.3.0 // indirect 14 | github.com/go-logr/logr v1.4.1 // indirect 15 | github.com/go-logr/stdr v1.2.2 // indirect 16 | github.com/google/uuid v1.6.0 // indirect 17 | github.com/grpc-ecosystem/grpc-gateway/v2 v2.20.0 // indirect 18 | github.com/sergi/go-diff v1.3.2-0.20230802210424-5b0b94c5c0d3 // indirect 19 | github.com/sosodev/duration v1.3.1 // indirect 20 | github.com/vektah/gqlparser/v2 v2.5.16 21 | go.opentelemetry.io/otel v1.27.0 22 | go.opentelemetry.io/otel/exporters/otlp/otlplog/otlploggrpc v0.0.0-20240518090000-14441aefdf88 23 | go.opentelemetry.io/otel/exporters/otlp/otlplog/otlploghttp v0.3.0 24 | go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.27.0 // indirect 25 | go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.27.0 26 | go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp v1.27.0 27 | go.opentelemetry.io/otel/log v0.3.0 28 | go.opentelemetry.io/otel/metric v1.27.0 // indirect 29 | go.opentelemetry.io/otel/sdk v1.27.0 30 | go.opentelemetry.io/otel/sdk/log v0.3.0 31 | go.opentelemetry.io/otel/trace v1.27.0 32 | go.opentelemetry.io/proto/otlp v1.3.1 33 | golang.org/x/net v0.26.0 // indirect 34 | golang.org/x/sys v0.21.0 // indirect 35 | golang.org/x/text v0.16.0 // indirect 36 | google.golang.org/genproto/googleapis/api v0.0.0-20240520151616-dc85e6b867a5 // indirect 37 | google.golang.org/genproto/googleapis/rpc v0.0.0-20240515191416-fc5f0ca64291 // indirect 38 | google.golang.org/grpc v1.64.0 39 | google.golang.org/protobuf v1.34.1 // indirect 40 | ) 41 | -------------------------------------------------------------------------------- /utils/go.sum: -------------------------------------------------------------------------------- 1 | github.com/99designs/gqlgen v0.17.49 h1:b3hNGexHd33fBSAd4NDT/c3NCcQzcAVkknhN9ym36YQ= 2 | github.com/99designs/gqlgen v0.17.49/go.mod h1:tC8YFVZMed81x7UJ7ORUwXF4Kn6SXuucFqQBhN8+BU0= 3 | github.com/Khan/genqlient v0.7.0 h1:GZ1meyRnzcDTK48EjqB8t3bcfYvHArCUUvgOwpz1D4w= 4 | github.com/Khan/genqlient v0.7.0/go.mod h1:HNyy3wZvuYwmW3Y7mkoQLZsa/R5n5yIRajS1kPBvSFM= 5 | github.com/andreyvit/diff v0.0.0-20170406064948-c7f18ee00883 h1:bvNMNQO63//z+xNgfBlViaCIJKLlCJ6/fmUseuG0wVQ= 6 | github.com/andreyvit/diff v0.0.0-20170406064948-c7f18ee00883/go.mod h1:rCTlJbsFo29Kk6CurOXKm700vrz8f0KW0JNfpkRJY/8= 7 | github.com/cenkalti/backoff/v4 v4.3.0 h1:MyRJ/UdXutAwSAT+s3wNd7MfTIcy71VQueUuFK343L8= 8 | github.com/cenkalti/backoff/v4 v4.3.0/go.mod h1:Y3VNntkOUPxTVeUxJ/G5vcM//AlwfmyYozVcomhLiZE= 9 | github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= 10 | github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= 11 | github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= 12 | github.com/go-logr/logr v1.2.2/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A= 13 | github.com/go-logr/logr v1.4.1 h1:pKouT5E8xu9zeFC39JXRDukb6JFQPXM5p5I91188VAQ= 14 | github.com/go-logr/logr v1.4.1/go.mod h1:9T104GzyrTigFIr8wt5mBrctHMim0Nb2HLGrmQ40KvY= 15 | github.com/go-logr/stdr v1.2.2 h1:hSWxHoqTgW2S2qGc0LTAI563KZ5YKYRhT3MFKZMbjag= 16 | github.com/go-logr/stdr v1.2.2/go.mod h1:mMo/vtBO5dYbehREoey6XUKy/eSumjCCveDpRre4VKE= 17 | github.com/google/go-cmp v0.6.0 h1:ofyhxvXcZhMsU5ulbFiLKl/XBFqE1GSq7atu8tAmTRI= 18 | github.com/google/go-cmp v0.6.0/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= 19 | github.com/google/uuid v1.6.0 h1:NIvaJDMOsjHA8n1jAhLSgzrAzy1Hgr+hNrb57e+94F0= 20 | github.com/google/uuid v1.6.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= 21 | github.com/grpc-ecosystem/grpc-gateway/v2 v2.20.0 h1:bkypFPDjIYGfCYD5mRBvpqxfYX1YCS1PXdKYWi8FsN0= 22 | github.com/grpc-ecosystem/grpc-gateway/v2 v2.20.0/go.mod h1:P+Lt/0by1T8bfcF3z737NnSbmxQAppXMRziHUxPOC8k= 23 | github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo= 24 | github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ= 25 | github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI= 26 | github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= 27 | github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= 28 | github.com/sergi/go-diff v1.3.2-0.20230802210424-5b0b94c5c0d3 h1:n661drycOFuPLCN3Uc8sB6B/s6Z4t2xvBgU1htSHuq8= 29 | github.com/sergi/go-diff v1.3.2-0.20230802210424-5b0b94c5c0d3/go.mod h1:A0bzQcvG0E7Rwjx0REVgAGH58e96+X0MeOfepqsbeW4= 30 | github.com/sosodev/duration v1.3.1 h1:qtHBDMQ6lvMQsL15g4aopM4HEfOaYuhWBw3NPTtlqq4= 31 | github.com/sosodev/duration v1.3.1/go.mod h1:RQIBBX0+fMLc/D9+Jb/fwvVmo0eZvDDEERAikUR6SDg= 32 | github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= 33 | github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4= 34 | github.com/stretchr/testify v1.9.0 h1:HtqpIVDClZ4nwg75+f6Lvsy/wHu+3BoSGCbBAcpTsTg= 35 | github.com/stretchr/testify v1.9.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY= 36 | github.com/vektah/gqlparser/v2 v2.5.16 h1:1gcmLTvs3JLKXckwCwlUagVn/IlV2bwqle0vJ0vy5p8= 37 | github.com/vektah/gqlparser/v2 v2.5.16/go.mod h1:1lz1OeCqgQbQepsGxPVywrjdBHW2T08PUS3pJqepRww= 38 | go.opentelemetry.io/otel v1.27.0 h1:9BZoF3yMK/O1AafMiQTVu0YDj5Ea4hPhxCs7sGva+cg= 39 | go.opentelemetry.io/otel v1.27.0/go.mod h1:DMpAK8fzYRzs+bi3rS5REupisuqTheUlSZJ1WnZaPAQ= 40 | go.opentelemetry.io/otel/exporters/otlp/otlplog/otlploggrpc v0.0.0-20240518090000-14441aefdf88 h1:oM0GTNKGlc5qHctWeIGTVyda4iFFalOzMZ3Ehj5rwB4= 41 | go.opentelemetry.io/otel/exporters/otlp/otlplog/otlploggrpc v0.0.0-20240518090000-14441aefdf88/go.mod h1:JGG8ebaMO5nXOPnvKEl+DiA4MGwFjCbjsxT1WHIEBPY= 42 | go.opentelemetry.io/otel/exporters/otlp/otlplog/otlploghttp v0.3.0 h1:ccBrA8nCY5mM0y5uO7FT0ze4S0TuFcWdDB2FxGMTjkI= 43 | go.opentelemetry.io/otel/exporters/otlp/otlplog/otlploghttp v0.3.0/go.mod h1:/9pb6634zi2Lk8LYg9Q0X8Ar6jka4dkFOylBLbVQPCE= 44 | go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.27.0 h1:R9DE4kQ4k+YtfLI2ULwX82VtNQ2J8yZmA7ZIF/D+7Mc= 45 | go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.27.0/go.mod h1:OQFyQVrDlbe+R7xrEyDr/2Wr67Ol0hRUgsfA+V5A95s= 46 | go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.27.0 h1:qFffATk0X+HD+f1Z8lswGiOQYKHRlzfmdJm0wEaVrFA= 47 | go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.27.0/go.mod h1:MOiCmryaYtc+V0Ei+Tx9o5S1ZjA7kzLucuVuyzBZloQ= 48 | go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp v1.27.0 h1:QY7/0NeRPKlzusf40ZE4t1VlMKbqSNT7cJRYzWuja0s= 49 | go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp v1.27.0/go.mod h1:HVkSiDhTM9BoUJU8qE6j2eSWLLXvi1USXjyd2BXT8PY= 50 | go.opentelemetry.io/otel/log v0.3.0 h1:kJRFkpUFYtny37NQzL386WbznUByZx186DpEMKhEGZs= 51 | go.opentelemetry.io/otel/log v0.3.0/go.mod h1:ziCwqZr9soYDwGNbIL+6kAvQC+ANvjgG367HVcyR/ys= 52 | go.opentelemetry.io/otel/metric v1.27.0 h1:hvj3vdEKyeCi4YaYfNjv2NUje8FqKqUY8IlF0FxV/ik= 53 | go.opentelemetry.io/otel/metric v1.27.0/go.mod h1:mVFgmRlhljgBiuk/MP/oKylr4hs85GZAylncepAX/ak= 54 | go.opentelemetry.io/otel/sdk v1.27.0 h1:mlk+/Y1gLPLn84U4tI8d3GNJmGT/eXe3ZuOXN9kTWmI= 55 | go.opentelemetry.io/otel/sdk v1.27.0/go.mod h1:Ha9vbLwJE6W86YstIywK2xFfPjbWlCuwPtMkKdz/Y4A= 56 | go.opentelemetry.io/otel/sdk/log v0.3.0 h1:GEjJ8iftz2l+XO1GF2856r7yYVh74URiF9JMcAacr5U= 57 | go.opentelemetry.io/otel/sdk/log v0.3.0/go.mod h1:BwCxtmux6ACLuys1wlbc0+vGBd+xytjmjajwqqIul2g= 58 | go.opentelemetry.io/otel/trace v1.27.0 h1:IqYb813p7cmbHk0a5y6pD5JPakbVfftRXABGt5/Rscw= 59 | go.opentelemetry.io/otel/trace v1.27.0/go.mod h1:6RiD1hkAprV4/q+yd2ln1HG9GoPx39SuvvstaLBl+l4= 60 | go.opentelemetry.io/proto/otlp v1.3.1 h1:TrMUixzpM0yuc/znrFTP9MMRh8trP93mkCiDVeXrui0= 61 | go.opentelemetry.io/proto/otlp v1.3.1/go.mod h1:0X1WI4de4ZsLrrJNLAQbFeLCm3T7yBkR0XqQ7niQU+8= 62 | go.uber.org/goleak v1.3.0 h1:2K3zAYmnTNqV73imy9J1T3WC+gmCePx2hEGkimedGto= 63 | go.uber.org/goleak v1.3.0/go.mod h1:CoHD4mav9JJNrW/WLlf7HGZPjdw8EucARQHekz1X6bE= 64 | golang.org/x/exp v0.0.0-20231110203233-9a3e6036ecaa h1:FRnLl4eNAQl8hwxVVC17teOw8kdjVDVAiFMtgUdTSRQ= 65 | golang.org/x/exp v0.0.0-20231110203233-9a3e6036ecaa/go.mod h1:zk2irFbV9DP96SEBUUAy67IdHUaZuSnrz1n472HUCLE= 66 | golang.org/x/net v0.26.0 h1:soB7SVo0PWrY4vPW/+ay0jKDNScG2X9wFeYlXIvJsOQ= 67 | golang.org/x/net v0.26.0/go.mod h1:5YKkiSynbBIh3p6iOc/vibscux0x38BZDkn8sCUPxHE= 68 | golang.org/x/sync v0.7.0 h1:YsImfSBoP9QPYL0xyKJPq0gcaJdG3rInoqxTWbfQu9M= 69 | golang.org/x/sync v0.7.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk= 70 | golang.org/x/sys v0.21.0 h1:rF+pYz3DAGSQAxAu1CbC7catZg4ebC4UIeIhKxBZvws= 71 | golang.org/x/sys v0.21.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= 72 | golang.org/x/text v0.16.0 h1:a94ExnEXNtEwYLGJSIUxnWoxoRz/ZcCsV63ROupILh4= 73 | golang.org/x/text v0.16.0/go.mod h1:GhwF1Be+LQoKShO3cGOHzqOgRrGaYc9AvblQOmPVHnI= 74 | google.golang.org/genproto/googleapis/api v0.0.0-20240520151616-dc85e6b867a5 h1:P8OJ/WCl/Xo4E4zoe4/bifHpSmmKwARqyqE4nW6J2GQ= 75 | google.golang.org/genproto/googleapis/api v0.0.0-20240520151616-dc85e6b867a5/go.mod h1:RGnPtTG7r4i8sPlNyDeikXF99hMM+hN6QMm4ooG9g2g= 76 | google.golang.org/genproto/googleapis/rpc v0.0.0-20240515191416-fc5f0ca64291 h1:AgADTJarZTBqgjiUzRgfaBchgYB3/WFTC80GPwsMcRI= 77 | google.golang.org/genproto/googleapis/rpc v0.0.0-20240515191416-fc5f0ca64291/go.mod h1:EfXuqaE1J41VCDicxHzUDm+8rk+7ZdXzHV0IhO/I6s0= 78 | google.golang.org/grpc v1.64.0 h1:KH3VH9y/MgNQg1dE7b3XfVK0GsPSIzJwdF617gUSbvY= 79 | google.golang.org/grpc v1.64.0/go.mod h1:oxjF8E3FBnjp+/gVFYdWacaLDx9na1aqy9oovLpxQYg= 80 | google.golang.org/protobuf v1.34.1 h1:9ddQBjfCyZPOHPUiPxpYESBLc+T8P3E+Vo4IbKZgFWg= 81 | google.golang.org/protobuf v1.34.1/go.mod h1:c6P6GXX6sHbq/GpV6MGZEdwhWPcYBgnhAHhKbcUYpos= 82 | gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= 83 | gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= 84 | gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= 85 | gopkg.in/yaml.v2 v2.4.0/go.mod h1:RDklbk79AGWmwhnvt/jBztapEOGDOx6ZbXqjP6csGnQ= 86 | gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= 87 | gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= 88 | -------------------------------------------------------------------------------- /utils/main.go: -------------------------------------------------------------------------------- 1 | package main 2 | 3 | import ( 4 | "context" 5 | "fmt" 6 | ) 7 | 8 | type Utils struct{} 9 | 10 | // Get a tarball of a Directory 11 | func (m *Utils) Tar(dir *Directory) *File { 12 | return dag.Container(). 13 | From("alpine:3.18"). 14 | WithMountedDirectory("/assets", dir). 15 | WithExec([]string{"tar", "czf", "out.tar.gz", "/assets"}). 16 | File("out.tar.gz") 17 | } 18 | 19 | // Concurrently Sync multiple Containers 20 | func (m *Utils) Multisync(ctx context.Context, ctrs []*Container) ([]*Container, error) { 21 | hck := dag.Directory() 22 | 23 | for i, ctr := range ctrs { 24 | ctrFile := fmt.Sprintf("/syncfile%v", i) 25 | // Magic link to directory 26 | ctr = ctr.WithNewFile("/syncfile") 27 | hck = hck.WithFile(ctrFile, ctr.File("/syncfile")) 28 | 29 | ctrs[i] = ctr 30 | } 31 | 32 | _, err := hck.Entries(ctx) 33 | 34 | return ctrs, err 35 | } 36 | -------------------------------------------------------------------------------- /vault/.gitattributes: -------------------------------------------------------------------------------- 1 | /dagger.gen.go linguist-generated=true 2 | /internal/dagger/** linguist-generated 3 | /internal/querybuilder/** linguist-generated 4 | /internal/telemetry/** linguist-generated 5 | -------------------------------------------------------------------------------- /vault/.gitignore: -------------------------------------------------------------------------------- 1 | /dagger.gen.go 2 | /internal/querybuilder/ 3 | /querybuilder/ 4 | /internal/dagger 5 | /internal/telemetry 6 | -------------------------------------------------------------------------------- /vault/README.md: -------------------------------------------------------------------------------- 1 | # Vault 2 | 3 | Dagger module for interacting with Vault 4 | 5 | ## Examples 6 | 7 | `echo "{vault { auth(approleID:\"$MY_APPROLE_ROLE_ID\", approleSecret:\"$MY_APPROLE_SECRET_ID\", address:\"$VAULT_ADDR\") { putSecret(secret:\"myapp\", key:\"foo\", value:\"bar\") { getSecret(secret:\"myapp\", key:\"foo\")}}}}" | dagger query` 8 | -------------------------------------------------------------------------------- /vault/dagger.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "vault", 3 | "sdk": "go", 4 | "source": ".", 5 | "engineVersion": "v0.12.5" 6 | } 7 | -------------------------------------------------------------------------------- /vault/go.mod: -------------------------------------------------------------------------------- 1 | module vault 2 | 3 | go 1.21.1 4 | 5 | require ( 6 | github.com/99designs/gqlgen v0.17.49 7 | github.com/Khan/genqlient v0.7.0 8 | github.com/hashicorp/vault-client-go v0.4.0 9 | golang.org/x/sync v0.7.0 10 | ) 11 | 12 | require ( 13 | github.com/cenkalti/backoff/v4 v4.3.0 // indirect 14 | github.com/go-logr/logr v1.4.1 // indirect 15 | github.com/go-logr/stdr v1.2.2 // indirect 16 | github.com/google/uuid v1.6.0 // indirect 17 | github.com/grpc-ecosystem/grpc-gateway/v2 v2.20.0 // indirect 18 | github.com/hashicorp/go-cleanhttp v0.5.2 // indirect 19 | github.com/hashicorp/go-retryablehttp v0.7.1 // indirect 20 | github.com/hashicorp/go-rootcerts v1.0.2 // indirect 21 | github.com/hashicorp/go-secure-stdlib/strutil v0.1.2 // indirect 22 | github.com/mitchellh/go-homedir v1.1.0 // indirect 23 | github.com/ryanuber/go-glob v1.0.0 // indirect 24 | github.com/sergi/go-diff v1.3.2-0.20230802210424-5b0b94c5c0d3 // indirect 25 | github.com/sosodev/duration v1.3.1 // indirect 26 | github.com/vektah/gqlparser/v2 v2.5.16 27 | go.opentelemetry.io/otel v1.27.0 28 | go.opentelemetry.io/otel/exporters/otlp/otlplog/otlploggrpc v0.0.0-20240518090000-14441aefdf88 29 | go.opentelemetry.io/otel/exporters/otlp/otlplog/otlploghttp v0.3.0 30 | go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.27.0 // indirect 31 | go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.27.0 32 | go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp v1.27.0 33 | go.opentelemetry.io/otel/log v0.3.0 34 | go.opentelemetry.io/otel/metric v1.27.0 // indirect 35 | go.opentelemetry.io/otel/sdk v1.27.0 36 | go.opentelemetry.io/otel/sdk/log v0.3.0 37 | go.opentelemetry.io/otel/trace v1.27.0 38 | go.opentelemetry.io/proto/otlp v1.3.1 39 | golang.org/x/exp v0.0.0-20231110203233-9a3e6036ecaa 40 | golang.org/x/net v0.26.0 // indirect 41 | golang.org/x/sys v0.21.0 // indirect 42 | golang.org/x/text v0.16.0 // indirect 43 | golang.org/x/time v0.0.0-20220922220347-f3bd1da661af // indirect 44 | google.golang.org/genproto/googleapis/api v0.0.0-20240520151616-dc85e6b867a5 // indirect 45 | google.golang.org/genproto/googleapis/rpc v0.0.0-20240515191416-fc5f0ca64291 // indirect 46 | google.golang.org/grpc v1.64.0 47 | google.golang.org/protobuf v1.34.1 // indirect 48 | ) 49 | -------------------------------------------------------------------------------- /vault/main.go: -------------------------------------------------------------------------------- 1 | // Interact with HashiCorp Vault 2 | // 3 | // A utility module for working with secrets in HashiCorp Vault 4 | 5 | package main 6 | 7 | import ( 8 | "context" 9 | "time" 10 | 11 | vcg "github.com/hashicorp/vault-client-go" 12 | "github.com/hashicorp/vault-client-go/schema" 13 | ) 14 | 15 | type Vault struct { 16 | ApproleID string 17 | ApproleSecret string 18 | Address string 19 | } 20 | 21 | // Authenticate to Vault with an approle secret 22 | func (v *Vault) Auth(approleID, approleSecret, address string) *Vault { 23 | v.ApproleID = approleID 24 | v.ApproleSecret = approleSecret 25 | v.Address = address 26 | 27 | return v 28 | } 29 | 30 | // Get a secret from Vault 31 | func (v *Vault) GetSecret(ctx context.Context, secret, key string) (*Secret, error) { 32 | client, err := getClient(ctx, v) 33 | if err != nil { 34 | return nil, err 35 | } 36 | s, err := client.Secrets.KvV2Read(ctx, secret, vcg.WithMountPath("secret")) 37 | if err != nil { 38 | return nil, err 39 | } 40 | dagSecret := dag.SetSecret(key, s.Data.Data[key].(string)) 41 | return dagSecret, nil 42 | } 43 | 44 | // Put a secret in Vault 45 | func (v *Vault) PutSecret(ctx context.Context, secret, key, value string) (*Vault, error) { 46 | client, err := getClient(ctx, v) 47 | if err != nil { 48 | return nil, err 49 | } 50 | _, err = client.Secrets.KvV2Write(ctx, secret, schema.KvV2WriteRequest{ 51 | Data: map[string]any{ 52 | key: value, 53 | }}, 54 | vcg.WithMountPath("secret"), 55 | ) 56 | return v, err 57 | } 58 | 59 | 60 | func getClient(ctx context.Context, v *Vault) (*vcg.Client, error) { 61 | client, err := vcg.New( 62 | vcg.WithAddress(v.Address), 63 | vcg.WithRequestTimeout(30*time.Second), 64 | ) 65 | if err != nil { 66 | return nil, err 67 | } 68 | resp, err := client.Auth.AppRoleLogin( 69 | ctx, 70 | schema.AppRoleLoginRequest{ 71 | RoleId: v.ApproleID, 72 | SecretId: v.ApproleSecret, 73 | }, 74 | ) 75 | if err != nil { 76 | return nil, err 77 | } 78 | 79 | if err := client.SetToken(resp.Auth.ClientToken); err != nil { 80 | return nil, err 81 | } 82 | return client, nil 83 | } 84 | -------------------------------------------------------------------------------- /vault/vault: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kpenfound/dagger-modules/f7964245d0146dd3810f247c6c09eb33518d4654/vault/vault --------------------------------------------------------------------------------