dagger-env 1.3.0 → 1.3.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +3 -3
- package/dist/dagger-env.d.ts +1 -1
- package/dist/dagger-env.d.ts.map +1 -1
- package/dist/dagger-env.js +1 -1
- package/dist/dagger-env.js.map +1 -1
- package/dist/op.d.ts +1 -1
- package/dist/op.d.ts.map +1 -1
- package/dist/op.js +1 -1
- package/dist/op.js.map +1 -1
- package/dist/run-dagger-cmd.d.ts +1 -1
- package/dist/run-dagger-cmd.d.ts.map +1 -1
- package/dist/run-dagger-cmd.js +10 -6
- package/dist/run-dagger-cmd.js.map +1 -1
- package/package.json +5 -4
- package/src/dagger-env.spec.ts +1 -1
- package/src/dagger-env.ts +1 -1
- package/src/examples/run-dagger-cmd-usage.ts +1 -1
- package/src/op.ts +1 -1
- package/src/run-dagger-cmd.spec.ts +13 -1
- package/src/run-dagger-cmd.ts +13 -11
package/README.md
CHANGED
|
@@ -24,7 +24,7 @@ npm install dagger-env zod
|
|
|
24
24
|
|
|
25
25
|
```typescript
|
|
26
26
|
import { createDaggerEnv } from 'dagger-env'
|
|
27
|
-
import
|
|
27
|
+
import * as z from 'zod/v4'
|
|
28
28
|
|
|
29
29
|
// Define your environment configuration
|
|
30
30
|
const myDaggerEnv = createDaggerEnv({
|
|
@@ -80,7 +80,7 @@ export class MyModule {
|
|
|
80
80
|
```typescript
|
|
81
81
|
import { createDaggerEnv } from 'dagger-env'
|
|
82
82
|
import { createDaggerCommandRunner } from 'dagger-env/run'
|
|
83
|
-
import
|
|
83
|
+
import * as z from 'zod/v4'
|
|
84
84
|
|
|
85
85
|
// Create your DaggerEnv configuration
|
|
86
86
|
const myDaggerEnv = createDaggerEnv({
|
|
@@ -311,7 +311,7 @@ const multiEnvDaggerEnv = createDaggerEnv({
|
|
|
311
311
|
For advanced use cases where you need to extract TypeScript types:
|
|
312
312
|
|
|
313
313
|
```typescript
|
|
314
|
-
import
|
|
314
|
+
import * as z from 'zod/v4'
|
|
315
315
|
|
|
316
316
|
import type { DaggerOptionsFromConfig } from 'dagger-env'
|
|
317
317
|
|
package/dist/dagger-env.d.ts
CHANGED
package/dist/dagger-env.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"dagger-env.d.ts","sourceRoot":"","sources":["../src/dagger-env.ts"],"names":[],"mappings":"AACA,OAAO,
|
|
1
|
+
{"version":3,"file":"dagger-env.d.ts","sourceRoot":"","sources":["../src/dagger-env.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,CAAC,MAAM,QAAQ,CAAA;AAE3B,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAA;AAE1D;;GAEG;AACH,MAAM,MAAM,eAAe,GAAG;IAC7B,uBAAuB;IACvB,IAAI,EAAE,CAAC,CAAC,SAAS,CAAC,GAAG,CAAC,CAAA;IACtB,mCAAmC;IACnC,GAAG,EAAE,CAAC,CAAC,SAAS,CAAC,GAAG,CAAC,CAAA;IACrB,qBAAqB;IACrB,OAAO,EAAE,CAAC,CAAC,SAAS,CAAC,GAAG,CAAC,CAAA;IACzB,oEAAoE;IACpE,aAAa,EAAE,MAAM,CAAC,MAAM,EAAE,SAAS,MAAM,EAAE,CAAC,CAAA;IAChD,0DAA0D;IAC1D,cAAc,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAA;CACtD,CAAA;AAED;;GAEG;AACH,MAAM,MAAM,uBAAuB,CAAC,CAAC,SAAS,eAAe,IAAI;IAChE,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAA;IACzB,GAAG,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAA;IACvB,OAAO,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAA;CAC/B,CAAA;AAED;;GAEG;AACH,qBAAa,SAAS,CAAC,CAAC,SAAS,eAAe;IAOnC,OAAO,CAAC,QAAQ,CAAC,MAAM;IANnC,OAAO,CAAC,QAAQ,CAAC,aAAa,CAI5B;gBAE2B,MAAM,EAAE,CAAC;IAQtC;;OAEG;IACG,kBAAkB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,uBAAuB,CAAC,CAAC,CAAC,CAAC;IAM9E;;;OAGG;IACG,UAAU,CACf,aAAa,EAAE,MAAM,GAAG,uBAAuB,CAAC,CAAC,CAAC,EAClD,aAAa,EAAE,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,eAAe,CAAC,EAAE,MAAM,CAAC,CAAC,EAC/D,WAAW,CAAC,EAAE,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,GAChE,OAAO,CAAC;QACV;;WAEG;QACH,OAAO,EAAE,CAAC,GAAG,EAAE,SAAS,KAAK,SAAS,CAAA;QACtC;;WAEG;QACH,UAAU,EAAE,CAAC,GAAG,EAAE,SAAS,KAAK,SAAS,CAAA;KACzC,CAAC;IAyHF;;OAEG;IACH,gBAAgB;cAnKT,CAAC,CAAC,MAAM,CAAC;aACV,CAAC,CAAC,KAAK,CAAC;iBACJ,CAAC,CAAC,SAAS,CAAC;;IAqKtB;;OAEG;IACH,gBAAgB,IAAI,KAAK,CAAC,MAAM,CAAC,CAAC,eAAe,CAAC,CAAC;IAInD;;OAEG;IACH,gBAAgB,CAAC,MAAM,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC,eAAe,CAAC,EAAE,MAAM,CAAC,GAAG,SAAS,MAAM,EAAE;CAOtF;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,CAAC,SAAS,eAAe,EAAE,MAAM,EAAE,CAAC,GAAG,SAAS,CAAC,CAAC,CAAC,CAElF"}
|
package/dist/dagger-env.js
CHANGED
package/dist/dagger-env.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"dagger-env.js","sourceRoot":"","sources":["../src/dagger-env.ts"],"names":[],"mappings":"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","sourcesContent":["import { dag } from '@dagger.io/dagger'\nimport { z } from 'zod/v4'\n\nimport type { Container, Secret } from '@dagger.io/dagger'\n\n/**\n * Generic configuration for DaggerEnv\n */\nexport type DaggerEnvConfig = {\n\t/** Arguments schema */\n\targs: z.ZodObject<any>\n\t/** Environment variables schema */\n\tenv: z.ZodObject<any>\n\t/** Secrets schema */\n\tsecrets: z.ZodObject<any>\n\t/** Secret presets mapping preset names to arrays of secret names */\n\tsecretPresets: Record<string, readonly string[]>\n\t/** Derived environment variables based on secret names */\n\tderivedEnvVars: Record<string, Record<string, string>>\n}\n\n/**\n * Inferred options type from config\n */\nexport type DaggerOptionsFromConfig<T extends DaggerEnvConfig> = {\n\targs: z.output<T['args']>\n\tenv: z.output<T['env']>\n\tsecrets: z.output<T['secrets']>\n}\n\n/**\n * Reusable Dagger environment abstraction\n */\nexport class DaggerEnv<T extends DaggerEnvConfig> {\n\tprivate readonly optionsSchema: z.ZodObject<{\n\t\targs: T['args']\n\t\tenv: T['env']\n\t\tsecrets: T['secrets']\n\t}>\n\n\tconstructor(private readonly config: T) {\n\t\tthis.optionsSchema = z.object({\n\t\t\targs: config.args,\n\t\t\tenv: config.env,\n\t\t\tsecrets: config.secrets,\n\t\t})\n\t}\n\n\t/**\n\t * Parse dagger options from a Secret\n\t */\n\tasync parseDaggerOptions(options: Secret): Promise<DaggerOptionsFromConfig<T>> {\n\t\treturn this.optionsSchema.parse(\n\t\t\tJSON.parse(await options.plaintext())\n\t\t) as DaggerOptionsFromConfig<T>\n\t}\n\n\t/**\n\t * Create a function that applies environment variables and secrets to a container\n\t * based on the provided Dagger options, secret presets, and additional secret names.\n\t */\n\tasync getWithEnv(\n\t\tdaggerOptions: Secret | DaggerOptionsFromConfig<T>,\n\t\tsecretPresets: Array<Extract<keyof T['secretPresets'], string>>,\n\t\tsecretNames?: Array<Extract<keyof z.output<T['secrets']>, string>>\n\t): Promise<{\n\t\t/**\n\t\t * Apply environment variables and secrets to a container\n\t\t */\n\t\twithEnv: (con: Container) => Container\n\t\t/**\n\t\t * Remove environment variables and secrets from a container\n\t\t */\n\t\twithoutEnv: (con: Container) => Container\n\t}> {\n\t\tconst isSecret = (obj: any): obj is Secret =>\n\t\t\tobj &&\n\t\t\ttypeof obj === 'object' &&\n\t\t\t'id' in obj &&\n\t\t\t'plaintext' in obj &&\n\t\t\ttypeof obj.id === 'function' &&\n\t\t\ttypeof obj.plaintext === 'function'\n\n\t\tconst opts = isSecret(daggerOptions)\n\t\t\t? await this.parseDaggerOptions(daggerOptions)\n\t\t\t: daggerOptions\n\n\t\treturn {\n\t\t\twithEnv: (con: Container) => {\n\t\t\t\tlet c = con\n\n\t\t\t\t// Add individual secret names\n\t\t\t\tfor (const name of secretNames ?? []) {\n\t\t\t\t\tif (typeof name === 'string' && name in opts.secrets) {\n\t\t\t\t\t\tconst secret = (opts.secrets as Record<string, string>)[name]\n\t\t\t\t\t\tif (!secret) {\n\t\t\t\t\t\t\tthrow new Error(`Secret ${name} is undefined`)\n\t\t\t\t\t\t}\n\t\t\t\t\t\tc = c.withSecretVariable(name, dag.setSecret(name, secret))\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tconst allSecretNames: string[] = [...(secretNames ?? [])]\n\n\t\t\t\t// Add secret presets\n\t\t\t\tfor (const preset of secretPresets) {\n\t\t\t\t\tconst presetSecrets = this.config.secretPresets[preset]\n\t\t\t\t\tif (!presetSecrets) {\n\t\t\t\t\t\tthrow new Error(`Unknown secret preset: ${String(preset)}`)\n\t\t\t\t\t}\n\n\t\t\t\t\tfor (const secretName of presetSecrets) {\n\t\t\t\t\t\tconst secret = (opts.secrets as Record<string, string>)[secretName]\n\t\t\t\t\t\tif (!secret) {\n\t\t\t\t\t\t\tthrow new Error(`Secret ${secretName} is undefined`)\n\t\t\t\t\t\t}\n\t\t\t\t\t\tallSecretNames.push(secretName)\n\t\t\t\t\t\tc = c.withSecretVariable(secretName, dag.setSecret(secretName, secret))\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Add derived env vars based on secretNames\n\t\t\t\tfor (const name of allSecretNames) {\n\t\t\t\t\tconst derivedEnvVars = this.config.derivedEnvVars[name]\n\t\t\t\t\tif (derivedEnvVars) {\n\t\t\t\t\t\tfor (const [key, value] of Object.entries(derivedEnvVars)) {\n\t\t\t\t\t\t\tc = c.withEnvVariable(key, value)\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Add environment variables from options\n\t\t\t\tconst envVars = opts.env\n\t\t\t\tfor (const [key, value] of Object.entries(envVars)) {\n\t\t\t\t\tif (value !== undefined && typeof value === 'string') {\n\t\t\t\t\t\tc = c.withEnvVariable(key, value)\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\treturn c\n\t\t\t},\n\t\t\twithoutEnv: (con: Container) => {\n\t\t\t\tlet c = con\n\n\t\t\t\t// Add individual secret names\n\t\t\t\tfor (const name of secretNames ?? []) {\n\t\t\t\t\tif (typeof name === 'string' && name in opts.secrets) {\n\t\t\t\t\t\tconst secret = (opts.secrets as Record<string, string>)[name]\n\t\t\t\t\t\tif (!secret) {\n\t\t\t\t\t\t\tthrow new Error(`Secret ${name} is undefined`)\n\t\t\t\t\t\t}\n\t\t\t\t\t\tc = c.withoutSecretVariable(name)\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tconst allSecretNames: string[] = [...(secretNames ?? [])]\n\n\t\t\t\t// remove secret presets\n\t\t\t\tfor (const preset of secretPresets) {\n\t\t\t\t\tconst presetSecrets = this.config.secretPresets[preset]\n\t\t\t\t\tif (!presetSecrets) {\n\t\t\t\t\t\tthrow new Error(`Unknown secret preset: ${String(preset)}`)\n\t\t\t\t\t}\n\n\t\t\t\t\tfor (const secretName of presetSecrets) {\n\t\t\t\t\t\tconst secret = (opts.secrets as Record<string, string>)[secretName]\n\t\t\t\t\t\tif (!secret) {\n\t\t\t\t\t\t\tthrow new Error(`Secret ${secretName} is undefined`)\n\t\t\t\t\t\t}\n\t\t\t\t\t\tallSecretNames.push(secretName)\n\t\t\t\t\t\tc = c.withoutSecretVariable(secretName)\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// remove derived env vars based on secretNames\n\t\t\t\tfor (const name of allSecretNames) {\n\t\t\t\t\tconst derivedEnvVars = this.config.derivedEnvVars[name]\n\t\t\t\t\tif (derivedEnvVars) {\n\t\t\t\t\t\tfor (const key of Object.keys(derivedEnvVars)) {\n\t\t\t\t\t\t\tc = c.withoutEnvVariable(key)\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// remove environment variables from options\n\t\t\t\tconst envVars = opts.env\n\t\t\t\tfor (const key of Object.keys(envVars)) {\n\t\t\t\t\tc = c.withoutEnvVariable(key)\n\t\t\t\t}\n\n\t\t\t\treturn c\n\t\t\t},\n\t\t}\n\t}\n\n\t/**\n\t * Get the options schema for this DaggerEnv instance\n\t */\n\tgetOptionsSchema() {\n\t\treturn this.optionsSchema\n\t}\n\n\t/**\n\t * Get available secret presets\n\t */\n\tgetSecretPresets(): Array<keyof T['secretPresets']> {\n\t\treturn Object.keys(this.config.secretPresets)\n\t}\n\n\t/**\n\t * Get secrets for a specific preset\n\t */\n\tgetPresetSecrets(preset: Extract<keyof T['secretPresets'], string>): readonly string[] {\n\t\tconst secrets = this.config.secretPresets[preset]\n\t\tif (!secrets) {\n\t\t\tthrow new Error(`Unknown secret preset: ${String(preset)}`)\n\t\t}\n\t\treturn secrets\n\t}\n}\n\n/**\n * Helper function to create a DaggerEnv instance with proper typing\n */\nexport function createDaggerEnv<T extends DaggerEnvConfig>(config: T): DaggerEnv<T> {\n\treturn new DaggerEnv(config)\n}\n"]}
|
|
1
|
+
{"version":3,"file":"dagger-env.js","sourceRoot":"","sources":["../src/dagger-env.ts"],"names":[],"mappings":"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","sourcesContent":["import { dag } from '@dagger.io/dagger'\nimport * as z from 'zod/v4'\n\nimport type { Container, Secret } from '@dagger.io/dagger'\n\n/**\n * Generic configuration for DaggerEnv\n */\nexport type DaggerEnvConfig = {\n\t/** Arguments schema */\n\targs: z.ZodObject<any>\n\t/** Environment variables schema */\n\tenv: z.ZodObject<any>\n\t/** Secrets schema */\n\tsecrets: z.ZodObject<any>\n\t/** Secret presets mapping preset names to arrays of secret names */\n\tsecretPresets: Record<string, readonly string[]>\n\t/** Derived environment variables based on secret names */\n\tderivedEnvVars: Record<string, Record<string, string>>\n}\n\n/**\n * Inferred options type from config\n */\nexport type DaggerOptionsFromConfig<T extends DaggerEnvConfig> = {\n\targs: z.output<T['args']>\n\tenv: z.output<T['env']>\n\tsecrets: z.output<T['secrets']>\n}\n\n/**\n * Reusable Dagger environment abstraction\n */\nexport class DaggerEnv<T extends DaggerEnvConfig> {\n\tprivate readonly optionsSchema: z.ZodObject<{\n\t\targs: T['args']\n\t\tenv: T['env']\n\t\tsecrets: T['secrets']\n\t}>\n\n\tconstructor(private readonly config: T) {\n\t\tthis.optionsSchema = z.object({\n\t\t\targs: config.args,\n\t\t\tenv: config.env,\n\t\t\tsecrets: config.secrets,\n\t\t})\n\t}\n\n\t/**\n\t * Parse dagger options from a Secret\n\t */\n\tasync parseDaggerOptions(options: Secret): Promise<DaggerOptionsFromConfig<T>> {\n\t\treturn this.optionsSchema.parse(\n\t\t\tJSON.parse(await options.plaintext())\n\t\t) as DaggerOptionsFromConfig<T>\n\t}\n\n\t/**\n\t * Create a function that applies environment variables and secrets to a container\n\t * based on the provided Dagger options, secret presets, and additional secret names.\n\t */\n\tasync getWithEnv(\n\t\tdaggerOptions: Secret | DaggerOptionsFromConfig<T>,\n\t\tsecretPresets: Array<Extract<keyof T['secretPresets'], string>>,\n\t\tsecretNames?: Array<Extract<keyof z.output<T['secrets']>, string>>\n\t): Promise<{\n\t\t/**\n\t\t * Apply environment variables and secrets to a container\n\t\t */\n\t\twithEnv: (con: Container) => Container\n\t\t/**\n\t\t * Remove environment variables and secrets from a container\n\t\t */\n\t\twithoutEnv: (con: Container) => Container\n\t}> {\n\t\tconst isSecret = (obj: any): obj is Secret =>\n\t\t\tobj &&\n\t\t\ttypeof obj === 'object' &&\n\t\t\t'id' in obj &&\n\t\t\t'plaintext' in obj &&\n\t\t\ttypeof obj.id === 'function' &&\n\t\t\ttypeof obj.plaintext === 'function'\n\n\t\tconst opts = isSecret(daggerOptions)\n\t\t\t? await this.parseDaggerOptions(daggerOptions)\n\t\t\t: daggerOptions\n\n\t\treturn {\n\t\t\twithEnv: (con: Container) => {\n\t\t\t\tlet c = con\n\n\t\t\t\t// Add individual secret names\n\t\t\t\tfor (const name of secretNames ?? []) {\n\t\t\t\t\tif (typeof name === 'string' && name in opts.secrets) {\n\t\t\t\t\t\tconst secret = (opts.secrets as Record<string, string>)[name]\n\t\t\t\t\t\tif (!secret) {\n\t\t\t\t\t\t\tthrow new Error(`Secret ${name} is undefined`)\n\t\t\t\t\t\t}\n\t\t\t\t\t\tc = c.withSecretVariable(name, dag.setSecret(name, secret))\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tconst allSecretNames: string[] = [...(secretNames ?? [])]\n\n\t\t\t\t// Add secret presets\n\t\t\t\tfor (const preset of secretPresets) {\n\t\t\t\t\tconst presetSecrets = this.config.secretPresets[preset]\n\t\t\t\t\tif (!presetSecrets) {\n\t\t\t\t\t\tthrow new Error(`Unknown secret preset: ${String(preset)}`)\n\t\t\t\t\t}\n\n\t\t\t\t\tfor (const secretName of presetSecrets) {\n\t\t\t\t\t\tconst secret = (opts.secrets as Record<string, string>)[secretName]\n\t\t\t\t\t\tif (!secret) {\n\t\t\t\t\t\t\tthrow new Error(`Secret ${secretName} is undefined`)\n\t\t\t\t\t\t}\n\t\t\t\t\t\tallSecretNames.push(secretName)\n\t\t\t\t\t\tc = c.withSecretVariable(secretName, dag.setSecret(secretName, secret))\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Add derived env vars based on secretNames\n\t\t\t\tfor (const name of allSecretNames) {\n\t\t\t\t\tconst derivedEnvVars = this.config.derivedEnvVars[name]\n\t\t\t\t\tif (derivedEnvVars) {\n\t\t\t\t\t\tfor (const [key, value] of Object.entries(derivedEnvVars)) {\n\t\t\t\t\t\t\tc = c.withEnvVariable(key, value)\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Add environment variables from options\n\t\t\t\tconst envVars = opts.env\n\t\t\t\tfor (const [key, value] of Object.entries(envVars)) {\n\t\t\t\t\tif (value !== undefined && typeof value === 'string') {\n\t\t\t\t\t\tc = c.withEnvVariable(key, value)\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\treturn c\n\t\t\t},\n\t\t\twithoutEnv: (con: Container) => {\n\t\t\t\tlet c = con\n\n\t\t\t\t// Add individual secret names\n\t\t\t\tfor (const name of secretNames ?? []) {\n\t\t\t\t\tif (typeof name === 'string' && name in opts.secrets) {\n\t\t\t\t\t\tconst secret = (opts.secrets as Record<string, string>)[name]\n\t\t\t\t\t\tif (!secret) {\n\t\t\t\t\t\t\tthrow new Error(`Secret ${name} is undefined`)\n\t\t\t\t\t\t}\n\t\t\t\t\t\tc = c.withoutSecretVariable(name)\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tconst allSecretNames: string[] = [...(secretNames ?? [])]\n\n\t\t\t\t// remove secret presets\n\t\t\t\tfor (const preset of secretPresets) {\n\t\t\t\t\tconst presetSecrets = this.config.secretPresets[preset]\n\t\t\t\t\tif (!presetSecrets) {\n\t\t\t\t\t\tthrow new Error(`Unknown secret preset: ${String(preset)}`)\n\t\t\t\t\t}\n\n\t\t\t\t\tfor (const secretName of presetSecrets) {\n\t\t\t\t\t\tconst secret = (opts.secrets as Record<string, string>)[secretName]\n\t\t\t\t\t\tif (!secret) {\n\t\t\t\t\t\t\tthrow new Error(`Secret ${secretName} is undefined`)\n\t\t\t\t\t\t}\n\t\t\t\t\t\tallSecretNames.push(secretName)\n\t\t\t\t\t\tc = c.withoutSecretVariable(secretName)\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// remove derived env vars based on secretNames\n\t\t\t\tfor (const name of allSecretNames) {\n\t\t\t\t\tconst derivedEnvVars = this.config.derivedEnvVars[name]\n\t\t\t\t\tif (derivedEnvVars) {\n\t\t\t\t\t\tfor (const key of Object.keys(derivedEnvVars)) {\n\t\t\t\t\t\t\tc = c.withoutEnvVariable(key)\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// remove environment variables from options\n\t\t\t\tconst envVars = opts.env\n\t\t\t\tfor (const key of Object.keys(envVars)) {\n\t\t\t\t\tc = c.withoutEnvVariable(key)\n\t\t\t\t}\n\n\t\t\t\treturn c\n\t\t\t},\n\t\t}\n\t}\n\n\t/**\n\t * Get the options schema for this DaggerEnv instance\n\t */\n\tgetOptionsSchema() {\n\t\treturn this.optionsSchema\n\t}\n\n\t/**\n\t * Get available secret presets\n\t */\n\tgetSecretPresets(): Array<keyof T['secretPresets']> {\n\t\treturn Object.keys(this.config.secretPresets)\n\t}\n\n\t/**\n\t * Get secrets for a specific preset\n\t */\n\tgetPresetSecrets(preset: Extract<keyof T['secretPresets'], string>): readonly string[] {\n\t\tconst secrets = this.config.secretPresets[preset]\n\t\tif (!secrets) {\n\t\t\tthrow new Error(`Unknown secret preset: ${String(preset)}`)\n\t\t}\n\t\treturn secrets\n\t}\n}\n\n/**\n * Helper function to create a DaggerEnv instance with proper typing\n */\nexport function createDaggerEnv<T extends DaggerEnvConfig>(config: T): DaggerEnv<T> {\n\treturn new DaggerEnv(config)\n}\n"]}
|
package/dist/op.d.ts
CHANGED
package/dist/op.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"op.d.ts","sourceRoot":"","sources":["../src/op.ts"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"op.d.ts","sourceRoot":"","sources":["../src/op.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,CAAC,MAAM,QAAQ,CAAA;AAE3B;;GAEG;AACH,MAAM,MAAM,OAAO,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,OAAO,CAAC,CAAA;AAC7C,eAAO,MAAM,OAAO;;;iBAGlB,CAAA;AAEF;;GAEG;AACH,MAAM,MAAM,SAAS,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,SAAS,CAAC,CAAA;AACjD,eAAO,MAAM,SAAS;;;iBAGpB,CAAA;AAEF;;GAEG;AACH,MAAM,MAAM,OAAO,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,OAAO,CAAC,CAAA;AAC7C,eAAO,MAAM,OAAO;;;;;;;;;;;;;;;;;iBAQlB,CAAA;AAEF;;GAEG;AACH,MAAM,MAAM,UAAU,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,UAAU,CAAC,CAAA;AACnD,eAAO,MAAM,UAAU;;EAA0B,CAAA;AAEjD;;GAEG;AACH,MAAM,MAAM,MAAM,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,MAAM,CAAC,CAAA;AAC3C,eAAO,MAAM,MAAM;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBAajB,CAAA"}
|
package/dist/op.js
CHANGED
package/dist/op.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"op.js","sourceRoot":"","sources":["../src/op.ts"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"op.js","sourceRoot":"","sources":["../src/op.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,CAAC,MAAM,QAAQ,CAAA;AAM3B,MAAM,CAAC,MAAM,OAAO,GAAG,CAAC,CAAC,MAAM,CAAC;IAC/B,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE;IACd,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE;CAChB,CAAC,CAAA;AAMF,MAAM,CAAC,MAAM,SAAS,GAAG,CAAC,CAAC,MAAM,CAAC;IACjC,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE;IACd,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;CAC5B,CAAC,CAAA;AAMF,MAAM,CAAC,MAAM,OAAO,GAAG,CAAC,CAAC,MAAM,CAAC;IAC/B,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE;IACd,OAAO,EAAE,SAAS,CAAC,QAAQ,EAAE;IAC7B,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,QAAQ,EAAE,WAAW,EAAE,YAAY,CAAC,CAAC;IACnD,OAAO,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,QAAQ,EAAE;IACrC,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE;IACjB,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE;IACjB,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE;CACrB,CAAC,CAAA;AAMF,MAAM,CAAC,MAAM,UAAU,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,aAAa,CAAC,CAAC,CAAA;AAMjD,MAAM,CAAC,MAAM,MAAM,GAAG,CAAC,CAAC,MAAM,CAAC;IAC9B,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE;IACd,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE;IACjB,QAAQ,EAAE,CAAC,CAAC,OAAO,EAAE;IACrB,OAAO,EAAE,CAAC,CAAC,GAAG,EAAE;IAChB,KAAK,EAAE,OAAO;IACd,QAAQ,EAAE,UAAU;IACpB,cAAc,EAAE,CAAC,CAAC,MAAM,EAAE;IAC1B,UAAU,EAAE,CAAC,CAAC,GAAG,CAAC,QAAQ,EAAE;IAC5B,UAAU,EAAE,CAAC,CAAC,GAAG,CAAC,QAAQ,EAAE;IAC5B,sBAAsB,EAAE,CAAC,CAAC,MAAM,EAAE;IAClC,QAAQ,EAAE,CAAC,CAAC,KAAK,CAAC,SAAS,CAAC;IAC5B,MAAM,EAAE,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC;CACxB,CAAC,CAAA","sourcesContent":["import * as z from 'zod/v4'\n\n/**\n * 1Password vault information\n */\nexport type OPVault = z.infer<typeof OPVault>\nexport const OPVault = z.object({\n\tid: z.string(),\n\tname: z.string(),\n})\n\n/**\n * 1Password item section information\n */\nexport type OPSection = z.infer<typeof OPSection>\nexport const OPSection = z.object({\n\tid: z.string(),\n\tlabel: z.string().optional(),\n})\n\n/**\n * 1Password item field\n */\nexport type OPField = z.infer<typeof OPField>\nexport const OPField = z.object({\n\tid: z.string(),\n\tsection: OPSection.optional(),\n\ttype: z.enum(['STRING', 'CONCEALED', 'MONTH_YEAR']),\n\tpurpose: z.enum(['NOTES']).optional(),\n\tlabel: z.string(),\n\tvalue: z.string(),\n\treference: z.string(),\n})\n\n/**\n * 1Password item category\n */\nexport type OPCategory = z.infer<typeof OPCategory>\nexport const OPCategory = z.enum(['SECURE_NOTE'])\n\n/**\n * Complete 1Password item structure\n */\nexport type OPItem = z.infer<typeof OPItem>\nexport const OPItem = z.object({\n\tid: z.string(),\n\ttitle: z.string(),\n\tfavorite: z.boolean(),\n\tversion: z.int(),\n\tvault: OPVault,\n\tcategory: OPCategory,\n\tlast_edited_by: z.string(),\n\tcreated_at: z.iso.datetime(),\n\tupdated_at: z.iso.datetime(),\n\tadditional_information: z.string(),\n\tsections: z.array(OPSection),\n\tfields: z.array(OPField),\n})\n"]}
|
package/dist/run-dagger-cmd.d.ts
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"run-dagger-cmd.d.ts","sourceRoot":"","sources":["../src/run-dagger-cmd.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"run-dagger-cmd.d.ts","sourceRoot":"","sources":["../src/run-dagger-cmd.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,CAAC,MAAM,QAAQ,CAAA;AAK3B,OAAO,KAAK,EAAE,SAAS,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAA;AAEjE;;GAEG;AACH,MAAM,MAAM,eAAe,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,eAAe,CAAC,CAAA;AAC7D,eAAO,MAAM,eAAe;;;iBAG1B,CAAA;AAEF;;GAEG;AACH,MAAM,WAAW,uBAAuB;IACvC,2BAA2B;IAC3B,SAAS,EAAE,MAAM,CAAA;IACjB,+CAA+C;IAC/C,GAAG,EAAE,MAAM,CAAA;IACX,uEAAuE;IACvE,IAAI,EAAE,MAAM,CAAA;CACZ;AAED;;GAEG;AACH,MAAM,WAAW,yBAAyB;IACzC,yBAAyB;IACzB,OAAO,EAAE,MAAM,CAAA;IACf,wBAAwB;IACxB,MAAM,EAAE,MAAM,CAAA;IACd,gDAAgD;IAChD,UAAU,EAAE,KAAK,CAAC;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,EAAE,EAAE,MAAM,CAAA;KAAE,CAAC,CAAA;CAChD;AAED;;GAEG;AACH,MAAM,WAAW,0BAA0B,CAAC,CAAC,SAAS,eAAe,GAAG,eAAe;IACtF,8DAA8D;IAC9D,cAAc,CAAC,EAAE,MAAM,EAAE,CAAA;IACzB,yEAAyE;IACzE,aAAa,CAAC,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAA;IACnC,+DAA+D;IAC/D,SAAS,EAAE,SAAS,CAAC,CAAC,CAAC,CAAA;IACvB;;;;;OAKG;IACH,iBAAiB,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC,CAAA;CACtD;AAED;;GAEG;AACH,MAAM,MAAM,sBAAsB,CAAC,CAAC,SAAS,eAAe,GAAG,eAAe,IAC7E,0BAA0B,CAAC,CAAC,CAAC,GAAG,CAAC,uBAAuB,GAAG,yBAAyB,CAAC,CAAA;AAEtF;;GAEG;AACH,MAAM,WAAW,uBAAuB;IACvC,8CAA8C;IAC9C,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAA;IAC1B,uCAAuC;IACvC,GAAG,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;IAC5B,wCAAwC;IACxC,SAAS,CAAC,EAAE,MAAM,EAAE,CAAA;IACpB;;;OAGG;IACH,eAAe,CAAC,EAAE,MAAM,EAAE,CAAA;CAC1B;AA6CD;;;;GAIG;AACH,wBAAgB,yBAAyB,CAAC,CAAC,SAAS,eAAe,EAClE,MAAM,EAAE,0BAA0B,CAAC,CAAC,CAAC,GAAG,uBAAuB,GAC7D,CAAC,WAAW,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,uBAAuB,KAAK,OAAO,CAAC,IAAI,CAAC,CAAA;AAC5E,wBAAgB,yBAAyB,CAAC,CAAC,SAAS,eAAe,EAClE,MAAM,EAAE,0BAA0B,CAAC,CAAC,CAAC,GAAG,yBAAyB,GAC/D,CAAC,WAAW,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,uBAAuB,KAAK,OAAO,CAAC,IAAI,CAAC,CAAA"}
|
package/dist/run-dagger-cmd.js
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { Result } from 'better-result';
|
|
2
|
+
import * as z from 'zod/v4';
|
|
2
3
|
import { $, fs } from 'zx';
|
|
3
4
|
import { OPItem, OPSection } from './op.js';
|
|
4
5
|
export const InfisicalSecret = z.object({
|
|
@@ -9,11 +10,14 @@ export const InfisicalSecret = z.object({
|
|
|
9
10
|
* Fetches secrets from Infisical via `infisical export`
|
|
10
11
|
*/
|
|
11
12
|
async function fetchInfisicalSecrets(config) {
|
|
12
|
-
const
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
13
|
+
const exportResult = await Result.tryPromise(() => $({
|
|
14
|
+
quiet: true,
|
|
15
|
+
nothrow: false,
|
|
16
|
+
timeout: 5000,
|
|
17
|
+
timeoutSignal: 'SIGKILL',
|
|
18
|
+
}) `infisical export --silent --format=json --projectId ${config.projectId} --env ${config.env} --path ${config.path}`, { retry: { times: 2, delayMs: 1000, backoff: 'exponential' } });
|
|
19
|
+
const secrets = InfisicalSecret.array().parse(JSON.parse(exportResult.unwrap().stdout));
|
|
20
|
+
return Object.fromEntries(secrets.map((secret) => [secret.key, secret.value]));
|
|
17
21
|
}
|
|
18
22
|
/**
|
|
19
23
|
* Fetches secrets from a 1Password item, filtered to the configured sections
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"run-dagger-cmd.js","sourceRoot":"","sources":["../src/run-dagger-cmd.ts"],"names":[],"mappings":"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","sourcesContent":["import { z } from 'zod/v4'\nimport { $, fs } from 'zx'\n\nimport { OPItem, OPSection } from './op.js'\n\nimport type { DaggerEnv, DaggerEnvConfig } from './dagger-env.js'\n\n/**\n * A single secret returned by `infisical export --format=json`\n */\nexport type InfisicalSecret = z.infer<typeof InfisicalSecret>\nexport const InfisicalSecret = z.object({\n\tkey: z.string(),\n\tvalue: z.string(),\n})\n\n/**\n * Infisical secrets provider configuration\n */\nexport interface InfisicalProviderConfig {\n\t/** Infisical project ID */\n\tprojectId: string\n\t/** Infisical environment slug (e.g. `prod`) */\n\tenv: string\n\t/** Infisical folder path to fetch secrets from (e.g. `/ci/my-repo`) */\n\tpath: string\n}\n\n/**\n * 1Password secrets provider configuration\n */\nexport interface OnePasswordProviderConfig {\n\t/** 1Password vault ID */\n\topVault: string\n\t/** 1Password item ID */\n\topItem: string\n\t/** 1Password sections to include for secrets */\n\topSections: Array<{ label: string; id: string }>\n}\n\n/**\n * Configuration shared by all secrets providers\n */\nexport interface RunDaggerCommandBaseConfig<T extends DaggerEnvConfig = DaggerEnvConfig> {\n\t/** Commands that should include Docker socket if available */\n\tdockerCommands?: string[]\n\t/** Hook to run before executing the command (e.g., vendor file setup) */\n\tbeforeCommand?: () => Promise<void>\n\t/** DaggerEnv instance for schema validation and type safety */\n\tdaggerEnv: DaggerEnv<T>\n\t/**\n\t * Secrets to pass to Dagger alongside the ones fetched from the provider,\n\t * taking precedence on conflict. Entries with an undefined value are\n\t * skipped, so short-lived credentials that only exist in some environments\n\t * (e.g. a CI-issued token) can be forwarded without a separate config path.\n\t */\n\tadditionalSecrets?: Record<string, string | undefined>\n}\n\n/**\n * Configuration for running Dagger commands with Infisical or 1Password integration\n */\nexport type RunDaggerCommandConfig<T extends DaggerEnvConfig = DaggerEnvConfig> =\n\tRunDaggerCommandBaseConfig<T> & (InfisicalProviderConfig | OnePasswordProviderConfig)\n\n/**\n * Options for individual command execution\n */\nexport interface RunDaggerCommandOptions {\n\t/** Arguments to pass to the Dagger command */\n\targs?: Record<string, any>\n\t/** Additional environment variables */\n\tenv?: Record<string, string>\n\t/** Additional command-line arguments */\n\textraArgs?: string[]\n\t/**\n\t * Module constructor flags (e.g. `--source=.`). Placed before the command\n\t * name, which is where `dagger call` requires them.\n\t */\n\tconstructorArgs?: string[]\n}\n\n/**\n * Fetches secrets from Infisical via `infisical export`\n */\nasync function fetchInfisicalSecrets(\n\tconfig: InfisicalProviderConfig\n): Promise<Record<string, string>> {\n\tconst exportedSecrets = InfisicalSecret.array().parse(\n\t\tawait $`infisical export --silent --format=json --projectId ${config.projectId} --env ${config.env} --path ${config.path}`.json()\n\t)\n\n\treturn exportedSecrets.reduce(\n\t\t(acc, s) => {\n\t\t\tacc[s.key] = s.value\n\t\t\treturn acc\n\t\t},\n\t\t{} as Record<string, string>\n\t)\n}\n\n/**\n * Fetches secrets from a 1Password item, filtered to the configured sections\n */\nasync function fetchOnePasswordSecrets(\n\tconfig: OnePasswordProviderConfig\n): Promise<Record<string, string>> {\n\tconst opItem = OPItem.parse(\n\t\tawait $`op item get ${config.opItem} --vault ${config.opVault} --format json`.json()\n\t)\n\n\tconst sectionsToInclude = OPSection.array().parse(config.opSections)\n\n\treturn opItem.fields\n\t\t.filter((f) => sectionsToInclude.some((s) => s.id === f.section?.id))\n\t\t.reduce(\n\t\t\t(acc, f) => {\n\t\t\t\tacc[f.label] = f.value\n\t\t\t\treturn acc\n\t\t\t},\n\t\t\t{} as Record<string, string>\n\t\t)\n}\n\n/**\n * Creates a function to run Dagger commands with Infisical or 1Password integration\n * @param config Configuration for the command runner\n * @returns Function to execute Dagger commands\n */\nexport function createDaggerCommandRunner<T extends DaggerEnvConfig>(\n\tconfig: RunDaggerCommandBaseConfig<T> & InfisicalProviderConfig\n): (commandName: string, options?: RunDaggerCommandOptions) => Promise<void>\nexport function createDaggerCommandRunner<T extends DaggerEnvConfig>(\n\tconfig: RunDaggerCommandBaseConfig<T> & OnePasswordProviderConfig\n): (commandName: string, options?: RunDaggerCommandOptions) => Promise<void>\nexport function createDaggerCommandRunner<T extends DaggerEnvConfig>(\n\tconfig: RunDaggerCommandConfig<T>\n) {\n\treturn async function runDaggerCommand(\n\t\tcommandName: string,\n\t\toptions?: RunDaggerCommandOptions\n\t): Promise<void> {\n\t\tconst { args = {}, env = {}, extraArgs = [], constructorArgs = [] } = options ?? {}\n\n\t\t// Run any pre-command setup\n\t\tif (config.beforeCommand) {\n\t\t\tawait config.beforeCommand()\n\t\t}\n\n\t\t// Environment variables to pass to the spawned command\n\t\tconst envVars: Record<string, string> = {}\n\n\t\tconst commandArgs: string[] = [...extraArgs]\n\n\t\t// Add Docker socket for specific commands if available\n\t\tif (config.dockerCommands?.includes(commandName)) {\n\t\t\ttry {\n\t\t\t\tif (await fs.exists('/var/run/docker.sock')) {\n\t\t\t\t\tcommandArgs.push('--docker-socket=/var/run/docker.sock')\n\t\t\t\t}\n\t\t\t} catch {\n\t\t\t\t// Ignore if fs is not available or docker socket doesn't exist\n\t\t\t}\n\t\t}\n\n\t\t// Fetch secrets from the configured provider\n\t\tlet secrets: Record<string, string>\n\t\tif ('opVault' in config) {\n\t\t\tsecrets = await fetchOnePasswordSecrets(config)\n\n\t\t\t// Pass dagger cloud token in CI because we don't have user auth.\n\t\t\t// The op:// reference is resolved by the `op run` wrapper below.\n\t\t\tif (process.env.CI !== undefined) {\n\t\t\t\tenvVars.DAGGER_CLOUD_TOKEN = `op://${config.opVault}/${config.opItem}/DAGGER_CLOUD_TOKEN`\n\t\t\t}\n\t\t} else {\n\t\t\tsecrets = await fetchInfisicalSecrets(config)\n\n\t\t\t// Pass dagger cloud token in CI because we don't have user auth\n\t\t\tif (process.env.CI !== undefined && secrets.DAGGER_CLOUD_TOKEN !== undefined) {\n\t\t\t\tenvVars.DAGGER_CLOUD_TOKEN = secrets.DAGGER_CLOUD_TOKEN\n\t\t\t}\n\t\t}\n\n\t\tfor (const [name, value] of Object.entries(config.additionalSecrets ?? {})) {\n\t\t\tif (value !== undefined) {\n\t\t\t\tsecrets[name] = value\n\t\t\t}\n\t\t}\n\n\t\t// Build environment variables for Dagger\n\t\tconst daggerEnv: Record<string, string> = { ...env }\n\t\tif (process.env.CI !== undefined) {\n\t\t\tdaggerEnv.CI = process.env.CI\n\t\t}\n\t\tif (process.env.GITHUB_ACTIONS !== undefined) {\n\t\t\tdaggerEnv.GITHUB_ACTIONS = process.env.GITHUB_ACTIONS\n\t\t}\n\n\t\t// Validate and serialize dagger options\n\t\tconst daggerOptions = config.daggerEnv.getOptionsSchema().parse({\n\t\t\targs,\n\t\t\tenv: daggerEnv,\n\t\t\tsecrets,\n\t\t})\n\t\tenvVars.DAGGER_OPTIONS = JSON.stringify(daggerOptions)\n\n\t\t// Construct the command. 1Password wraps `dagger call` in `op run`\n\t\t// so that op:// references in the environment are resolved.\n\t\tconst cmd: string[] = [\n\t\t\t...('opVault' in config ? ['op', 'run', '--no-masking', '--'] : []),\n\t\t\t'dagger',\n\t\t\t'call',\n\t\t\t...constructorArgs,\n\t\t\tcommandName,\n\t\t\t...commandArgs,\n\t\t\t'--options=env://DAGGER_OPTIONS',\n\t\t]\n\n\t\t// Execute the command\n\t\tawait $({\n\t\t\tenv: {\n\t\t\t\t...process.env,\n\t\t\t\t...envVars,\n\t\t\t},\n\t\t\tstdio: 'inherit',\n\t\t})`${cmd}`\n\t}\n}\n"]}
|
|
1
|
+
{"version":3,"file":"run-dagger-cmd.js","sourceRoot":"","sources":["../src/run-dagger-cmd.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,eAAe,CAAA;AACtC,OAAO,KAAK,CAAC,MAAM,QAAQ,CAAA;AAC3B,OAAO,EAAE,CAAC,EAAE,EAAE,EAAE,MAAM,IAAI,CAAA;AAE1B,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,SAAS,CAAA;AAQ3C,MAAM,CAAC,MAAM,eAAe,GAAG,CAAC,CAAC,MAAM,CAAC;IACvC,GAAG,EAAE,CAAC,CAAC,MAAM,EAAE;IACf,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE;CACjB,CAAC,CAAA;AAoEF;;GAEG;AACH,KAAK,UAAU,qBAAqB,CACnC,MAA+B;IAE/B,MAAM,YAAY,GAAG,MAAM,MAAM,CAAC,UAAU,CAC3C,GAAG,EAAE,CACJ,CAAC,CAAC;QACD,KAAK,EAAE,IAAI;QACX,OAAO,EAAE,KAAK;QACd,OAAO,EAAE,IAAI;QACb,aAAa,EAAE,SAAS;KACxB,CAAC,CAAA,uDAAuD,MAAM,CAAC,SAAS,UAAU,MAAM,CAAC,GAAG,WAAW,MAAM,CAAC,IAAI,EAAE,EACtH,EAAE,KAAK,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,aAAa,EAAE,EAAE,CAC9D,CAAA;IACD,MAAM,OAAO,GAAG,eAAe,CAAC,KAAK,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,MAAM,EAAE,CAAC,MAAM,CAAC,CAAC,CAAA;IACvF,OAAO,MAAM,CAAC,WAAW,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,MAAM,CAAC,GAAG,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAA;AAC/E,CAAC;AAED;;GAEG;AACH,KAAK,UAAU,uBAAuB,CACrC,MAAiC;IAEjC,MAAM,MAAM,GAAG,MAAM,CAAC,KAAK,CAC1B,MAAM,CAAC,CAAA,eAAe,MAAM,CAAC,MAAM,YAAY,MAAM,CAAC,OAAO,gBAAgB,CAAC,IAAI,EAAE,CACpF,CAAA;IAED,MAAM,iBAAiB,GAAG,SAAS,CAAC,KAAK,EAAE,CAAC,KAAK,CAAC,MAAM,CAAC,UAAU,CAAC,CAAA;IAEpE,OAAO,MAAM,CAAC,MAAM;SAClB,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,iBAAiB,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;SACpE,MAAM,CACN,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE;QACV,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,KAAK,CAAA;QACtB,OAAO,GAAG,CAAA;IACX,CAAC,EACD,EAA4B,CAC5B,CAAA;AACH,CAAC;AAaD,MAAM,UAAU,yBAAyB,CACxC,MAAiC;IAEjC,OAAO,KAAK,UAAU,gBAAgB,CACrC,WAAmB,EACnB,OAAiC;QAEjC,MAAM,EAAE,IAAI,GAAG,EAAE,EAAE,GAAG,GAAG,EAAE,EAAE,SAAS,GAAG,EAAE,EAAE,eAAe,GAAG,EAAE,EAAE,GAAG,OAAO,IAAI,EAAE,CAAA;QAEnF,4BAA4B;QAC5B,IAAI,MAAM,CAAC,aAAa,EAAE,CAAC;YAC1B,MAAM,MAAM,CAAC,aAAa,EAAE,CAAA;QAC7B,CAAC;QAED,uDAAuD;QACvD,MAAM,OAAO,GAA2B,EAAE,CAAA;QAE1C,MAAM,WAAW,GAAa,CAAC,GAAG,SAAS,CAAC,CAAA;QAE5C,uDAAuD;QACvD,IAAI,MAAM,CAAC,cAAc,EAAE,QAAQ,CAAC,WAAW,CAAC,EAAE,CAAC;YAClD,IAAI,CAAC;gBACJ,IAAI,MAAM,EAAE,CAAC,MAAM,CAAC,sBAAsB,CAAC,EAAE,CAAC;oBAC7C,WAAW,CAAC,IAAI,CAAC,sCAAsC,CAAC,CAAA;gBACzD,CAAC;YACF,CAAC;YAAC,MAAM,CAAC;gBACR,+DAA+D;YAChE,CAAC;QACF,CAAC;QAED,6CAA6C;QAC7C,IAAI,OAA+B,CAAA;QACnC,IAAI,SAAS,IAAI,MAAM,EAAE,CAAC;YACzB,OAAO,GAAG,MAAM,uBAAuB,CAAC,MAAM,CAAC,CAAA;YAE/C,iEAAiE;YACjE,iEAAiE;YACjE,IAAI,OAAO,CAAC,GAAG,CAAC,EAAE,KAAK,SAAS,EAAE,CAAC;gBAClC,OAAO,CAAC,kBAAkB,GAAG,QAAQ,MAAM,CAAC,OAAO,IAAI,MAAM,CAAC,MAAM,qBAAqB,CAAA;YAC1F,CAAC;QACF,CAAC;aAAM,CAAC;YACP,OAAO,GAAG,MAAM,qBAAqB,CAAC,MAAM,CAAC,CAAA;YAE7C,gEAAgE;YAChE,IAAI,OAAO,CAAC,GAAG,CAAC,EAAE,KAAK,SAAS,IAAI,OAAO,CAAC,kBAAkB,KAAK,SAAS,EAAE,CAAC;gBAC9E,OAAO,CAAC,kBAAkB,GAAG,OAAO,CAAC,kBAAkB,CAAA;YACxD,CAAC;QACF,CAAC;QAED,KAAK,MAAM,CAAC,IAAI,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,iBAAiB,IAAI,EAAE,CAAC,EAAE,CAAC;YAC5E,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;gBACzB,OAAO,CAAC,IAAI,CAAC,GAAG,KAAK,CAAA;YACtB,CAAC;QACF,CAAC;QAED,yCAAyC;QACzC,MAAM,SAAS,GAA2B,EAAE,GAAG,GAAG,EAAE,CAAA;QACpD,IAAI,OAAO,CAAC,GAAG,CAAC,EAAE,KAAK,SAAS,EAAE,CAAC;YAClC,SAAS,CAAC,EAAE,GAAG,OAAO,CAAC,GAAG,CAAC,EAAE,CAAA;QAC9B,CAAC;QACD,IAAI,OAAO,CAAC,GAAG,CAAC,cAAc,KAAK,SAAS,EAAE,CAAC;YAC9C,SAAS,CAAC,cAAc,GAAG,OAAO,CAAC,GAAG,CAAC,cAAc,CAAA;QACtD,CAAC;QAED,wCAAwC;QACxC,MAAM,aAAa,GAAG,MAAM,CAAC,SAAS,CAAC,gBAAgB,EAAE,CAAC,KAAK,CAAC;YAC/D,IAAI;YACJ,GAAG,EAAE,SAAS;YACd,OAAO;SACP,CAAC,CAAA;QACF,OAAO,CAAC,cAAc,GAAG,IAAI,CAAC,SAAS,CAAC,aAAa,CAAC,CAAA;QAEtD,mEAAmE;QACnE,4DAA4D;QAC5D,MAAM,GAAG,GAAa;YACrB,GAAG,CAAC,SAAS,IAAI,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,cAAc,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;YACnE,QAAQ;YACR,MAAM;YACN,GAAG,eAAe;YAClB,WAAW;YACX,GAAG,WAAW;YACd,gCAAgC;SAChC,CAAA;QAED,sBAAsB;QACtB,MAAM,CAAC,CAAC;YACP,GAAG,EAAE;gBACJ,GAAG,OAAO,CAAC,GAAG;gBACd,GAAG,OAAO;aACV;YACD,KAAK,EAAE,SAAS;SAChB,CAAC,CAAA,GAAG,GAAG,EAAE,CAAA;IACX,CAAC,CAAA;AACF,CAAC","sourcesContent":["import { Result } from 'better-result'\nimport * as z from 'zod/v4'\nimport { $, fs } from 'zx'\n\nimport { OPItem, OPSection } from './op.js'\n\nimport type { DaggerEnv, DaggerEnvConfig } from './dagger-env.js'\n\n/**\n * A single secret returned by `infisical export --format=json`\n */\nexport type InfisicalSecret = z.infer<typeof InfisicalSecret>\nexport const InfisicalSecret = z.object({\n\tkey: z.string(),\n\tvalue: z.string(),\n})\n\n/**\n * Infisical secrets provider configuration\n */\nexport interface InfisicalProviderConfig {\n\t/** Infisical project ID */\n\tprojectId: string\n\t/** Infisical environment slug (e.g. `prod`) */\n\tenv: string\n\t/** Infisical folder path to fetch secrets from (e.g. `/ci/my-repo`) */\n\tpath: string\n}\n\n/**\n * 1Password secrets provider configuration\n */\nexport interface OnePasswordProviderConfig {\n\t/** 1Password vault ID */\n\topVault: string\n\t/** 1Password item ID */\n\topItem: string\n\t/** 1Password sections to include for secrets */\n\topSections: Array<{ label: string; id: string }>\n}\n\n/**\n * Configuration shared by all secrets providers\n */\nexport interface RunDaggerCommandBaseConfig<T extends DaggerEnvConfig = DaggerEnvConfig> {\n\t/** Commands that should include Docker socket if available */\n\tdockerCommands?: string[]\n\t/** Hook to run before executing the command (e.g., vendor file setup) */\n\tbeforeCommand?: () => Promise<void>\n\t/** DaggerEnv instance for schema validation and type safety */\n\tdaggerEnv: DaggerEnv<T>\n\t/**\n\t * Secrets to pass to Dagger alongside the ones fetched from the provider,\n\t * taking precedence on conflict. Entries with an undefined value are\n\t * skipped, so short-lived credentials that only exist in some environments\n\t * (e.g. a CI-issued token) can be forwarded without a separate config path.\n\t */\n\tadditionalSecrets?: Record<string, string | undefined>\n}\n\n/**\n * Configuration for running Dagger commands with Infisical or 1Password integration\n */\nexport type RunDaggerCommandConfig<T extends DaggerEnvConfig = DaggerEnvConfig> =\n\tRunDaggerCommandBaseConfig<T> & (InfisicalProviderConfig | OnePasswordProviderConfig)\n\n/**\n * Options for individual command execution\n */\nexport interface RunDaggerCommandOptions {\n\t/** Arguments to pass to the Dagger command */\n\targs?: Record<string, any>\n\t/** Additional environment variables */\n\tenv?: Record<string, string>\n\t/** Additional command-line arguments */\n\textraArgs?: string[]\n\t/**\n\t * Module constructor flags (e.g. `--source=.`). Placed before the command\n\t * name, which is where `dagger call` requires them.\n\t */\n\tconstructorArgs?: string[]\n}\n\n/**\n * Fetches secrets from Infisical via `infisical export`\n */\nasync function fetchInfisicalSecrets(\n\tconfig: InfisicalProviderConfig\n): Promise<Record<string, string>> {\n\tconst exportResult = await Result.tryPromise(\n\t\t() =>\n\t\t\t$({\n\t\t\t\tquiet: true,\n\t\t\t\tnothrow: false,\n\t\t\t\ttimeout: 5000,\n\t\t\t\ttimeoutSignal: 'SIGKILL',\n\t\t\t})`infisical export --silent --format=json --projectId ${config.projectId} --env ${config.env} --path ${config.path}`,\n\t\t{ retry: { times: 2, delayMs: 1000, backoff: 'exponential' } }\n\t)\n\tconst secrets = InfisicalSecret.array().parse(JSON.parse(exportResult.unwrap().stdout))\n\treturn Object.fromEntries(secrets.map((secret) => [secret.key, secret.value]))\n}\n\n/**\n * Fetches secrets from a 1Password item, filtered to the configured sections\n */\nasync function fetchOnePasswordSecrets(\n\tconfig: OnePasswordProviderConfig\n): Promise<Record<string, string>> {\n\tconst opItem = OPItem.parse(\n\t\tawait $`op item get ${config.opItem} --vault ${config.opVault} --format json`.json()\n\t)\n\n\tconst sectionsToInclude = OPSection.array().parse(config.opSections)\n\n\treturn opItem.fields\n\t\t.filter((f) => sectionsToInclude.some((s) => s.id === f.section?.id))\n\t\t.reduce(\n\t\t\t(acc, f) => {\n\t\t\t\tacc[f.label] = f.value\n\t\t\t\treturn acc\n\t\t\t},\n\t\t\t{} as Record<string, string>\n\t\t)\n}\n\n/**\n * Creates a function to run Dagger commands with Infisical or 1Password integration\n * @param config Configuration for the command runner\n * @returns Function to execute Dagger commands\n */\nexport function createDaggerCommandRunner<T extends DaggerEnvConfig>(\n\tconfig: RunDaggerCommandBaseConfig<T> & InfisicalProviderConfig\n): (commandName: string, options?: RunDaggerCommandOptions) => Promise<void>\nexport function createDaggerCommandRunner<T extends DaggerEnvConfig>(\n\tconfig: RunDaggerCommandBaseConfig<T> & OnePasswordProviderConfig\n): (commandName: string, options?: RunDaggerCommandOptions) => Promise<void>\nexport function createDaggerCommandRunner<T extends DaggerEnvConfig>(\n\tconfig: RunDaggerCommandConfig<T>\n) {\n\treturn async function runDaggerCommand(\n\t\tcommandName: string,\n\t\toptions?: RunDaggerCommandOptions\n\t): Promise<void> {\n\t\tconst { args = {}, env = {}, extraArgs = [], constructorArgs = [] } = options ?? {}\n\n\t\t// Run any pre-command setup\n\t\tif (config.beforeCommand) {\n\t\t\tawait config.beforeCommand()\n\t\t}\n\n\t\t// Environment variables to pass to the spawned command\n\t\tconst envVars: Record<string, string> = {}\n\n\t\tconst commandArgs: string[] = [...extraArgs]\n\n\t\t// Add Docker socket for specific commands if available\n\t\tif (config.dockerCommands?.includes(commandName)) {\n\t\t\ttry {\n\t\t\t\tif (await fs.exists('/var/run/docker.sock')) {\n\t\t\t\t\tcommandArgs.push('--docker-socket=/var/run/docker.sock')\n\t\t\t\t}\n\t\t\t} catch {\n\t\t\t\t// Ignore if fs is not available or docker socket doesn't exist\n\t\t\t}\n\t\t}\n\n\t\t// Fetch secrets from the configured provider\n\t\tlet secrets: Record<string, string>\n\t\tif ('opVault' in config) {\n\t\t\tsecrets = await fetchOnePasswordSecrets(config)\n\n\t\t\t// Pass dagger cloud token in CI because we don't have user auth.\n\t\t\t// The op:// reference is resolved by the `op run` wrapper below.\n\t\t\tif (process.env.CI !== undefined) {\n\t\t\t\tenvVars.DAGGER_CLOUD_TOKEN = `op://${config.opVault}/${config.opItem}/DAGGER_CLOUD_TOKEN`\n\t\t\t}\n\t\t} else {\n\t\t\tsecrets = await fetchInfisicalSecrets(config)\n\n\t\t\t// Pass dagger cloud token in CI because we don't have user auth\n\t\t\tif (process.env.CI !== undefined && secrets.DAGGER_CLOUD_TOKEN !== undefined) {\n\t\t\t\tenvVars.DAGGER_CLOUD_TOKEN = secrets.DAGGER_CLOUD_TOKEN\n\t\t\t}\n\t\t}\n\n\t\tfor (const [name, value] of Object.entries(config.additionalSecrets ?? {})) {\n\t\t\tif (value !== undefined) {\n\t\t\t\tsecrets[name] = value\n\t\t\t}\n\t\t}\n\n\t\t// Build environment variables for Dagger\n\t\tconst daggerEnv: Record<string, string> = { ...env }\n\t\tif (process.env.CI !== undefined) {\n\t\t\tdaggerEnv.CI = process.env.CI\n\t\t}\n\t\tif (process.env.GITHUB_ACTIONS !== undefined) {\n\t\t\tdaggerEnv.GITHUB_ACTIONS = process.env.GITHUB_ACTIONS\n\t\t}\n\n\t\t// Validate and serialize dagger options\n\t\tconst daggerOptions = config.daggerEnv.getOptionsSchema().parse({\n\t\t\targs,\n\t\t\tenv: daggerEnv,\n\t\t\tsecrets,\n\t\t})\n\t\tenvVars.DAGGER_OPTIONS = JSON.stringify(daggerOptions)\n\n\t\t// Construct the command. 1Password wraps `dagger call` in `op run`\n\t\t// so that op:// references in the environment are resolved.\n\t\tconst cmd: string[] = [\n\t\t\t...('opVault' in config ? ['op', 'run', '--no-masking', '--'] : []),\n\t\t\t'dagger',\n\t\t\t'call',\n\t\t\t...constructorArgs,\n\t\t\tcommandName,\n\t\t\t...commandArgs,\n\t\t\t'--options=env://DAGGER_OPTIONS',\n\t\t]\n\n\t\t// Execute the command\n\t\tawait $({\n\t\t\tenv: {\n\t\t\t\t...process.env,\n\t\t\t\t...envVars,\n\t\t\t},\n\t\t\tstdio: 'inherit',\n\t\t})`${cmd}`\n\t}\n}\n"]}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "dagger-env",
|
|
3
|
-
"version": "1.3.
|
|
3
|
+
"version": "1.3.2",
|
|
4
4
|
"private": false,
|
|
5
5
|
"description": "A type-safe, reusable environment configuration abstraction for Dagger modules.",
|
|
6
6
|
"keywords": [
|
|
@@ -48,14 +48,15 @@
|
|
|
48
48
|
"src"
|
|
49
49
|
],
|
|
50
50
|
"dependencies": {
|
|
51
|
+
"better-result": "2.7.0",
|
|
51
52
|
"zx": "8.8.4"
|
|
52
53
|
},
|
|
53
54
|
"devDependencies": {
|
|
54
|
-
"@dagger.io/dagger": "0.
|
|
55
|
+
"@dagger.io/dagger": "0.21.9",
|
|
55
56
|
"typescript": "5.8.2",
|
|
56
57
|
"vitest": "3.2.4",
|
|
57
|
-
"zod": "4.
|
|
58
|
-
"@repo/tools": "0.
|
|
58
|
+
"zod": "4.5.4",
|
|
59
|
+
"@repo/tools": "0.13.0",
|
|
59
60
|
"@repo/typescript-config": "0.3.10"
|
|
60
61
|
},
|
|
61
62
|
"peerDependencies": {
|
package/src/dagger-env.spec.ts
CHANGED
package/src/dagger-env.ts
CHANGED
|
@@ -11,7 +11,7 @@
|
|
|
11
11
|
|
|
12
12
|
import { createDaggerEnv } from 'dagger-env'
|
|
13
13
|
import { createDaggerCommandRunner } from 'dagger-env/run'
|
|
14
|
-
import
|
|
14
|
+
import * as z from 'zod/v4'
|
|
15
15
|
|
|
16
16
|
// Create a DaggerEnv instance with your project's specific configuration
|
|
17
17
|
const daggerEnv = createDaggerEnv({
|
package/src/op.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest'
|
|
2
|
-
import
|
|
2
|
+
import * as z from 'zod/v4'
|
|
3
3
|
|
|
4
4
|
import { createDaggerEnv } from './dagger-env'
|
|
5
5
|
import { createDaggerCommandRunner } from './run-dagger-cmd'
|
|
@@ -32,6 +32,18 @@ vi.mock('zx', () => {
|
|
|
32
32
|
mocks.fetchCmd(cmd)
|
|
33
33
|
return { json: mocks.fetchJson }
|
|
34
34
|
}
|
|
35
|
+
if (typeof firstArg === 'object' && firstArg !== null && 'timeout' in firstArg) {
|
|
36
|
+
return async (pieces: TemplateStringsArray, ...templateVals: unknown[]) => {
|
|
37
|
+
mocks.fetchCmd(
|
|
38
|
+
pieces.reduce(
|
|
39
|
+
(acc, piece, i) =>
|
|
40
|
+
acc + piece + (i < templateVals.length ? String(templateVals[i]) : ''),
|
|
41
|
+
''
|
|
42
|
+
)
|
|
43
|
+
)
|
|
44
|
+
return { exitCode: 0, stdout: JSON.stringify(await mocks.fetchJson()) }
|
|
45
|
+
}
|
|
46
|
+
}
|
|
35
47
|
// Options call: $({ env, stdio }) returns a template executor
|
|
36
48
|
return (_pieces: TemplateStringsArray, ...templateVals: unknown[]) =>
|
|
37
49
|
mocks.spawn(
|
package/src/run-dagger-cmd.ts
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { Result } from 'better-result'
|
|
2
|
+
import * as z from 'zod/v4'
|
|
2
3
|
import { $, fs } from 'zx'
|
|
3
4
|
|
|
4
5
|
import { OPItem, OPSection } from './op.js'
|
|
@@ -86,17 +87,18 @@ export interface RunDaggerCommandOptions {
|
|
|
86
87
|
async function fetchInfisicalSecrets(
|
|
87
88
|
config: InfisicalProviderConfig
|
|
88
89
|
): Promise<Record<string, string>> {
|
|
89
|
-
const
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
}
|
|
98
|
-
{} as Record<string, string>
|
|
90
|
+
const exportResult = await Result.tryPromise(
|
|
91
|
+
() =>
|
|
92
|
+
$({
|
|
93
|
+
quiet: true,
|
|
94
|
+
nothrow: false,
|
|
95
|
+
timeout: 5000,
|
|
96
|
+
timeoutSignal: 'SIGKILL',
|
|
97
|
+
})`infisical export --silent --format=json --projectId ${config.projectId} --env ${config.env} --path ${config.path}`,
|
|
98
|
+
{ retry: { times: 2, delayMs: 1000, backoff: 'exponential' } }
|
|
99
99
|
)
|
|
100
|
+
const secrets = InfisicalSecret.array().parse(JSON.parse(exportResult.unwrap().stdout))
|
|
101
|
+
return Object.fromEntries(secrets.map((secret) => [secret.key, secret.value]))
|
|
100
102
|
}
|
|
101
103
|
|
|
102
104
|
/**
|