diff --git a/404.html b/404.html index 9cffb2c0..dd98befe 100644 --- a/404.html +++ b/404.html @@ -4,7 +4,7 @@
recipe.yml
)
Attribute | Type | Default | Description |
---|---|---|---|
apiVersion | string | v1 | Version of the recipe metadata API schema. Currently should have value "v1". |
name | string | Name of the recipe. | |
version | string | Version of the recipe. Must be valid semver. | |
description | string | Description of what the recipe does | |
sources | []string | A list of URLs to source code for this recipe. | |
templateExtension | string | File extension of files in "templates" directory which should be templated. Files not matched by this extension will be copied as-is. If left empty (the default), all files will be templated. | |
initHelp | string | A message which will be showed to an user after a succesful recipe execution. Can be used to guide the user what should be done next in the project directory. | |
ignorePatterns | []string | Glob patterns for ignoring generated files from future recipe upgrades. Ignored files will not be regenerated even if their templates change in future versions of the recipe. | |
vars | []Variable | An array of variables which can be used in templates. The user will be prompted to provide the value for the variable if not set with --set flag. |
Attribute | Type | Default | Description |
---|---|---|---|
apiVersion | string | v1 | Version of the recipe metadata API schema. Currently should have value "v1". |
name | string | Name of the recipe. | |
version | string | Version of the recipe. Must be valid semver. | |
description | string | Description of what the recipe does | |
source | string | URL to source code for this recipe. | |
templateExtension | string | File extension of files in "templates" directory which should be templated. Files not matched by this extension will be copied as-is. If left empty (the default), all files will be templated. | |
initHelp | string | A message which will be showed to an user after a succesful recipe execution. Can be used to guide the user what should be done next in the project directory. | |
ignorePatterns | []string | Glob patterns for ignoring generated files from future recipe upgrades. Ignored files will not be regenerated even if their templates change in future versions of the recipe. | |
vars | []Variable | An array of variables which can be used in templates. The user will be prompted to provide the value for the variable if not set with --set flag. |
Attribute | Type | Default | Description |
---|---|---|---|
name | string | The name of the variable. It is also used as unique identifier, so two variables can not have the same name. | |
description | string | Description of the variable. Will be shown to the user when "show help" is activated. | |
default | string | Default value of the variable. | |
confirm | bool | false | If set to true, the prompt will be yes/no question, and the value type will be boolean. |
optional | bool | false | If set to true, the variable can be left empty. |
options | []string | The user selects the value from a list of options. | |
validators | []Validator | Validators for the variable. | |
if | string | Makes the variable conditional based on the result of the expression. The result of the evaluation needs to be a boolean value. Uses https://github.com/expr-lang/expr. | |
columns | []string | Set the variable as a table type with columns defined by this property. |
jalapeno check
",id:"usage-jalapeno-check",level:4},{value:"Examples",id:"examples",level:4},{value:"Options",id:"check-options",level:4},{value:"create",id:"create",level:3},{value:"Usage: jalapeno create RECIPE_NAME
",id:"usage-jalapeno-create-recipe_name",level:4},{value:"Examples",id:"examples-1",level:4},{value:"Options",id:"create-options",level:4},{value:"eject",id:"eject",level:3},{value:"Usage: jalapeno eject
",id:"usage-jalapeno-eject",level:4},{value:"Examples",id:"examples-2",level:4},{value:"Options",id:"eject-options",level:4},{value:"execute",id:"execute",level:3},{value:"Usage: jalapeno execute RECIPE_URL
",id:"usage-jalapeno-execute-recipe_url",level:4},{value:"Examples",id:"examples-3",level:4},{value:"Options",id:"execute-options",level:4},{value:"pull",id:"pull",level:3},{value:"Usage: jalapeno pull URL
",id:"usage-jalapeno-pull-url",level:4},{value:"Examples",id:"examples-4",level:4},{value:"Options",id:"pull-options",level:4},{value:"push",id:"push",level:3},{value:"Usage: jalapeno push RECIPE_PATH TARGET_URL
",id:"usage-jalapeno-push-recipe_path-target_url",level:4},{value:"Examples",id:"examples-5",level:4},{value:"Options",id:"push-options",level:4},{value:"test",id:"test",level:3},{value:"Usage: jalapeno test RECIPE_PATH
",id:"usage-jalapeno-test-recipe_path",level:4},{value:"Examples",id:"examples-6",level:4},{value:"Options",id:"test-options",level:4},{value:"upgrade",id:"upgrade",level:3},{value:"Usage: jalapeno upgrade RECIPE_URL
",id:"usage-jalapeno-upgrade-recipe_url",level:4},{value:"Examples",id:"examples-7",level:4},{value:"Options",id:"upgrade-options",level:4},{value:"validate",id:"validate",level:3},{value:"Usage: jalapeno validate RECIPE_PATH
",id:"usage-jalapeno-validate-recipe_path",level:4},{value:"Examples",id:"examples-8",level:4},{value:"Options",id:"validate-options",level:4},{value:"why",id:"why",level:3},{value:"Usage: jalapeno why FILEPATH
",id:"usage-jalapeno-why-filepath",level:4},{value:"Examples",id:"examples-9",level:4},{value:"Options",id:"why-options",level:4},{value:"Recipe schema (recipe.yml
)",id:"recipe-schema-recipeyml",level:2},{value:"Variable",id:"variable",level:3},{value:"Validator",id:"validator",level:3},{value:"Test schema (test.yml
)",id:"test-schema-testyml",level:2},{value:"Sauce schema (sauces.yml
)",id:"sauce-schema-saucesyml",level:2}];function o(e){const d={a:"a",code:"code",h2:"h2",h3:"h3",h4:"h4",hr:"hr",p:"p",pre:"pre",strong:"strong",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",...(0,i.a)(),...e.components};return(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(d.h2,{id:"cli",children:"CLI"}),"\n",(0,r.jsx)(d.h3,{id:"check",children:"check"}),"\n",(0,r.jsxs)(d.p,{children:["Check if there are newer versions available for recipes used in the project. By default it checks updates for all recipes, but it is possible to check updates for a specific recipe by using the ",(0,r.jsx)(d.code,{children:"--recipe"})," flag."]}),"\n",(0,r.jsxs)(d.h4,{id:"usage-jalapeno-check",children:["Usage: ",(0,r.jsx)(d.code,{children:"jalapeno check"})]}),"\n",(0,r.jsx)(d.h4,{id:"examples",children:"Examples"}),"\n",(0,r.jsx)(d.pre,{children:(0,r.jsx)(d.code,{children:"# Check updates for all recipes in the project\njalapeno check\n\n# Check updates for a single recipe\njalapeno check --recipe my-recipe\n\n# Add check URL for recipe which does not have it yet\njalapeno check --recipe my-recipe --from oci://my-registry.com/my-recipe\n"})}),"\n",(0,r.jsx)(d.h4,{id:"check-options",children:"Options"}),"\n",(0,r.jsxs)(d.table,{children:[(0,r.jsx)(d.thead,{children:(0,r.jsxs)(d.tr,{children:[(0,r.jsx)(d.th,{children:"Name"}),(0,r.jsx)(d.th,{children:"Type"}),(0,r.jsx)(d.th,{children:"Default"}),(0,r.jsx)(d.th,{children:"Description"})]})}),(0,r.jsxs)(d.tbody,{children:[(0,r.jsxs)(d.tr,{children:[(0,r.jsx)(d.td,{children:(0,r.jsx)(d.code,{children:"--ca-file"})}),(0,r.jsx)(d.td,{children:(0,r.jsx)(d.code,{children:"string"})}),(0,r.jsx)(d.td,{}),(0,r.jsx)(d.td,{children:"Server certificate authority file for the remote registry"})]}),(0,r.jsxs)(d.tr,{children:[(0,r.jsx)(d.td,{children:(0,r.jsx)(d.code,{children:"--debug"})}),(0,r.jsx)(d.td,{children:(0,r.jsx)(d.code,{children:"bool"})}),(0,r.jsx)(d.td,{children:(0,r.jsx)(d.code,{children:"false"})}),(0,r.jsx)(d.td,{children:"Debug mode"})]}),(0,r.jsxs)(d.tr,{children:[(0,r.jsx)(d.td,{children:(0,r.jsx)(d.code,{children:"--detailed-exitcode"})}),(0,r.jsx)(d.td,{children:(0,r.jsx)(d.code,{children:"bool"})}),(0,r.jsx)(d.td,{children:(0,r.jsx)(d.code,{children:"false"})}),(0,r.jsx)(d.td,{children:"Returns a detailed exit code when the command exits. When provided, this argument changes the exit codes and their meanings to provide more granular information about what the resulting plan contains: 0 = Succeeded with no updates available, 1 = Error, 2 = Succeeded with updates available"})]}),(0,r.jsxs)(d.tr,{children:[(0,r.jsxs)(d.td,{children:[(0,r.jsx)(d.code,{children:"--dir"}),", ",(0,r.jsx)(d.code,{children:"-d"})]}),(0,r.jsx)(d.td,{children:(0,r.jsx)(d.code,{children:"string"})}),(0,r.jsx)(d.td,{children:(0,r.jsx)(d.code,{children:"."})}),(0,r.jsx)(d.td,{children:"Sets working directory"})]}),(0,r.jsxs)(d.tr,{children:[(0,r.jsx)(d.td,{children:(0,r.jsx)(d.code,{children:"--from"})}),(0,r.jsx)(d.td,{children:(0,r.jsx)(d.code,{children:"string"})}),(0,r.jsx)(d.td,{}),(0,r.jsx)(d.td,{children:"Add or override the URL used for checking updates for the recipe. Works only with --recipe flag"})]}),(0,r.jsxs)(d.tr,{children:[(0,r.jsx)(d.td,{children:(0,r.jsx)(d.code,{children:"--insecure"})}),(0,r.jsx)(d.td,{children:(0,r.jsx)(d.code,{children:"bool"})}),(0,r.jsx)(d.td,{children:(0,r.jsx)(d.code,{children:"false"})}),(0,r.jsx)(d.td,{children:"Allow connections to SSL registry without certs"})]}),(0,r.jsxs)(d.tr,{children:[(0,r.jsx)(d.td,{children:(0,r.jsx)(d.code,{children:"--no-color"})}),(0,r.jsx)(d.td,{children:(0,r.jsx)(d.code,{children:"bool"})}),(0,r.jsx)(d.td,{children:(0,r.jsx)(d.code,{children:"false"})}),(0,r.jsx)(d.td,{children:"If specified, output won't contain any color"})]}),(0,r.jsxs)(d.tr,{children:[(0,r.jsxs)(d.td,{children:[(0,r.jsx)(d.code,{children:"--password"}),", ",(0,r.jsx)(d.code,{children:"-p"})]}),(0,r.jsx)(d.td,{children:(0,r.jsx)(d.code,{children:"string"})}),(0,r.jsx)(d.td,{}),(0,r.jsx)(d.td,{children:"Password or personal access token used to log against the Docker registry"})]}),(0,r.jsxs)(d.tr,{children:[(0,r.jsx)(d.td,{children:(0,r.jsx)(d.code,{children:"--plain-http"})}),(0,r.jsx)(d.td,{children:(0,r.jsx)(d.code,{children:"bool"})}),(0,r.jsx)(d.td,{children:(0,r.jsx)(d.code,{children:"false"})}),(0,r.jsx)(d.td,{children:"Allow insecure connections to registry without SSL check"})]}),(0,r.jsxs)(d.tr,{children:[(0,r.jsxs)(d.td,{children:[(0,r.jsx)(d.code,{children:"--recipe"}),", ",(0,r.jsx)(d.code,{children:"-r"})]}),(0,r.jsx)(d.td,{children:(0,r.jsx)(d.code,{children:"string"})}),(0,r.jsx)(d.td,{}),(0,r.jsx)(d.td,{children:"Name of the recipe to check for new versions"})]}),(0,r.jsxs)(d.tr,{children:[(0,r.jsx)(d.td,{children:(0,r.jsx)(d.code,{children:"--registry-config"})}),(0,r.jsx)(d.td,{children:(0,r.jsx)(d.code,{children:"[]string"})}),(0,r.jsx)(d.td,{children:(0,r.jsx)(d.code,{children:"[]"})}),(0,r.jsx)(d.td,{children:"Path of the authentication file"})]}),(0,r.jsxs)(d.tr,{children:[(0,r.jsxs)(d.td,{children:[(0,r.jsx)(d.code,{children:"--username"}),", ",(0,r.jsx)(d.code,{children:"-u"})]}),(0,r.jsx)(d.td,{children:(0,r.jsx)(d.code,{children:"string"})}),(0,r.jsx)(d.td,{}),(0,r.jsx)(d.td,{children:"Username used to log against the Docker registry"})]}),(0,r.jsxs)(d.tr,{children:[(0,r.jsxs)(d.td,{children:[(0,r.jsx)(d.code,{children:"--verbose"}),", ",(0,r.jsx)(d.code,{children:"-v"})]}),(0,r.jsx)(d.td,{children:(0,r.jsx)(d.code,{children:"bool"})}),(0,r.jsx)(d.td,{children:(0,r.jsx)(d.code,{children:"false"})}),(0,r.jsx)(d.td,{children:"Verbose output"})]})]})]}),"\n",(0,r.jsx)(d.hr,{}),"\n",(0,r.jsx)(d.h3,{id:"create",children:"create"}),"\n",(0,r.jsx)(d.p,{children:"Create a new recipe with the given name."}),"\n",(0,r.jsx)(d.p,{children:"The following files will be created:"}),"\n",(0,r.jsx)(d.pre,{children:(0,r.jsx)(d.code,{children:"my-recipe\n\u251c\u2500\u2500 recipe.yml\n\u251c\u2500\u2500 templates\n\u2502 \u2514\u2500\u2500 README.md\n\u2514\u2500\u2500 tests\n \u2514\u2500\u2500 defaults\n \u251c\u2500\u2500 test.yml\n \u2514\u2500\u2500 files\n \u2514\u2500\u2500 README.md\n"})}),"\n",(0,r.jsxs)(d.h4,{id:"usage-jalapeno-create-recipe_name",children:["Usage: ",(0,r.jsx)(d.code,{children:"jalapeno create RECIPE_NAME"})]}),"\n",(0,r.jsx)(d.h4,{id:"examples-1",children:"Examples"}),"\n",(0,r.jsx)(d.pre,{children:(0,r.jsx)(d.code,{children:"jalapeno create my-recipe\n"})}),"\n",(0,r.jsx)(d.h4,{id:"create-options",children:"Options"}),"\n",(0,r.jsxs)(d.table,{children:[(0,r.jsx)(d.thead,{children:(0,r.jsxs)(d.tr,{children:[(0,r.jsx)(d.th,{children:"Name"}),(0,r.jsx)(d.th,{children:"Type"}),(0,r.jsx)(d.th,{children:"Default"}),(0,r.jsx)(d.th,{children:"Description"})]})}),(0,r.jsxs)(d.tbody,{children:[(0,r.jsxs)(d.tr,{children:[(0,r.jsx)(d.td,{children:(0,r.jsx)(d.code,{children:"--debug"})}),(0,r.jsx)(d.td,{children:(0,r.jsx)(d.code,{children:"bool"})}),(0,r.jsx)(d.td,{children:(0,r.jsx)(d.code,{children:"false"})}),(0,r.jsx)(d.td,{children:"Debug mode"})]}),(0,r.jsxs)(d.tr,{children:[(0,r.jsxs)(d.td,{children:[(0,r.jsx)(d.code,{children:"--dir"}),", ",(0,r.jsx)(d.code,{children:"-d"})]}),(0,r.jsx)(d.td,{children:(0,r.jsx)(d.code,{children:"string"})}),(0,r.jsx)(d.td,{children:(0,r.jsx)(d.code,{children:"."})}),(0,r.jsx)(d.td,{children:"Sets working directory"})]}),(0,r.jsxs)(d.tr,{children:[(0,r.jsx)(d.td,{children:(0,r.jsx)(d.code,{children:"--no-color"})}),(0,r.jsx)(d.td,{children:(0,r.jsx)(d.code,{children:"bool"})}),(0,r.jsx)(d.td,{children:(0,r.jsx)(d.code,{children:"false"})}),(0,r.jsx)(d.td,{children:"If specified, output won't contain any color"})]}),(0,r.jsxs)(d.tr,{children:[(0,r.jsxs)(d.td,{children:[(0,r.jsx)(d.code,{children:"--verbose"}),", ",(0,r.jsx)(d.code,{children:"-v"})]}),(0,r.jsx)(d.td,{children:(0,r.jsx)(d.code,{children:"bool"})}),(0,r.jsx)(d.td,{children:(0,r.jsx)(d.code,{children:"false"})}),(0,r.jsx)(d.td,{children:"Verbose output"})]})]})]}),"\n",(0,r.jsx)(d.hr,{}),"\n",(0,r.jsx)(d.h3,{id:"eject",children:"eject"}),"\n",(0,r.jsx)(d.p,{children:"Remove all the files and directories that are for Jalapeno internal use, and leave only the rendered project files."}),"\n",(0,r.jsxs)(d.h4,{id:"usage-jalapeno-eject",children:["Usage: ",(0,r.jsx)(d.code,{children:"jalapeno eject"})]}),"\n",(0,r.jsx)(d.h4,{id:"examples-2",children:"Examples"}),"\n",(0,r.jsx)(d.pre,{children:(0,r.jsx)(d.code,{children:"jalapeno eject\n"})}),"\n",(0,r.jsx)(d.h4,{id:"eject-options",children:"Options"}),"\n",(0,r.jsxs)(d.table,{children:[(0,r.jsx)(d.thead,{children:(0,r.jsxs)(d.tr,{children:[(0,r.jsx)(d.th,{children:"Name"}),(0,r.jsx)(d.th,{children:"Type"}),(0,r.jsx)(d.th,{children:"Default"}),(0,r.jsx)(d.th,{children:"Description"})]})}),(0,r.jsxs)(d.tbody,{children:[(0,r.jsxs)(d.tr,{children:[(0,r.jsx)(d.td,{children:(0,r.jsx)(d.code,{children:"--debug"})}),(0,r.jsx)(d.td,{children:(0,r.jsx)(d.code,{children:"bool"})}),(0,r.jsx)(d.td,{children:(0,r.jsx)(d.code,{children:"false"})}),(0,r.jsx)(d.td,{children:"Debug mode"})]}),(0,r.jsxs)(d.tr,{children:[(0,r.jsxs)(d.td,{children:[(0,r.jsx)(d.code,{children:"--dir"}),", ",(0,r.jsx)(d.code,{children:"-d"})]}),(0,r.jsx)(d.td,{children:(0,r.jsx)(d.code,{children:"string"})}),(0,r.jsx)(d.td,{children:(0,r.jsx)(d.code,{children:"."})}),(0,r.jsx)(d.td,{children:"Sets working directory"})]}),(0,r.jsxs)(d.tr,{children:[(0,r.jsx)(d.td,{children:(0,r.jsx)(d.code,{children:"--no-color"})}),(0,r.jsx)(d.td,{children:(0,r.jsx)(d.code,{children:"bool"})}),(0,r.jsx)(d.td,{children:(0,r.jsx)(d.code,{children:"false"})}),(0,r.jsx)(d.td,{children:"If specified, output won't contain any color"})]}),(0,r.jsxs)(d.tr,{children:[(0,r.jsxs)(d.td,{children:[(0,r.jsx)(d.code,{children:"--verbose"}),", ",(0,r.jsx)(d.code,{children:"-v"})]}),(0,r.jsx)(d.td,{children:(0,r.jsx)(d.code,{children:"bool"})}),(0,r.jsx)(d.td,{children:(0,r.jsx)(d.code,{children:"false"})}),(0,r.jsx)(d.td,{children:"Verbose output"})]})]})]}),"\n",(0,r.jsx)(d.hr,{}),"\n",(0,r.jsx)(d.h3,{id:"execute",children:"execute"}),"\n",(0,r.jsxs)(d.p,{children:[(0,r.jsx)(d.strong,{children:"Aliases"}),": ",(0,r.jsx)(d.code,{children:"exec"}),", ",(0,r.jsx)(d.code,{children:"e"}),", ",(0,r.jsx)(d.code,{children:"run"})]}),"\n",(0,r.jsx)(d.p,{children:"Executes (renders) a recipe and outputs the files to the directory. Recipe URL can be a local path or a remote URL (ex. 'oci://docker.io/my-recipe')."}),"\n",(0,r.jsxs)(d.h4,{id:"usage-jalapeno-execute-recipe_url",children:["Usage: ",(0,r.jsx)(d.code,{children:"jalapeno execute RECIPE_URL"})]}),"\n",(0,r.jsx)(d.h4,{id:"examples-3",children:"Examples"}),"\n",(0,r.jsx)(d.pre,{children:(0,r.jsx)(d.code,{children:"# Execute local recipe\njalapeno execute path/to/recipe\n\n# Execute recipe from OCI repository\njalapeno execute oci://ghcr.io/user/my-recipe:latest\n\n# Execute recipe from OCI repository with inline authentication\njalapeno execute oci://ghcr.io/user/my-recipe:latest --username user --password pass\n\n# Execute recipe from OCI repository with Docker authentication\ndocker login ghcr.io\njalapeno execute oci://ghcr.io/user/my-recipe:latest\n\n# Execute recipe to different directory\njalapeno execute path/to/recipe --dir other/dir\n\n# Set variable values with flags\njalapeno execute path/to/recipe --set MY_VAR=foo --set MY_OTHER_VAR=bar\n\n# Set variable values with environment variables\nexport JALAPENO_VAR_MY_VAR=foo\njalapeno execute path/to/recipe\n"})}),"\n",(0,r.jsx)(d.h4,{id:"execute-options",children:"Options"}),"\n",(0,r.jsxs)(d.table,{children:[(0,r.jsx)(d.thead,{children:(0,r.jsxs)(d.tr,{children:[(0,r.jsx)(d.th,{children:"Name"}),(0,r.jsx)(d.th,{children:"Type"}),(0,r.jsx)(d.th,{children:"Default"}),(0,r.jsx)(d.th,{children:"Description"})]})}),(0,r.jsxs)(d.tbody,{children:[(0,r.jsxs)(d.tr,{children:[(0,r.jsx)(d.td,{children:(0,r.jsx)(d.code,{children:"--ca-file"})}),(0,r.jsx)(d.td,{children:(0,r.jsx)(d.code,{children:"string"})}),(0,r.jsx)(d.td,{}),(0,r.jsx)(d.td,{children:"Server certificate authority file for the remote registry"})]}),(0,r.jsxs)(d.tr,{children:[(0,r.jsx)(d.td,{children:(0,r.jsx)(d.code,{children:"--debug"})}),(0,r.jsx)(d.td,{children:(0,r.jsx)(d.code,{children:"bool"})}),(0,r.jsx)(d.td,{children:(0,r.jsx)(d.code,{children:"false"})}),(0,r.jsx)(d.td,{children:"Debug mode"})]}),(0,r.jsxs)(d.tr,{children:[(0,r.jsx)(d.td,{children:(0,r.jsx)(d.code,{children:"--delimiter"})}),(0,r.jsx)(d.td,{children:(0,r.jsx)(d.code,{children:"string"})}),(0,r.jsx)(d.td,{children:(0,r.jsx)(d.code,{children:","})}),(0,r.jsx)(d.td,{children:"Delimiter used when setting table variables"})]}),(0,r.jsxs)(d.tr,{children:[(0,r.jsxs)(d.td,{children:[(0,r.jsx)(d.code,{children:"--dir"}),", ",(0,r.jsx)(d.code,{children:"-d"})]}),(0,r.jsx)(d.td,{children:(0,r.jsx)(d.code,{children:"string"})}),(0,r.jsx)(d.td,{children:(0,r.jsx)(d.code,{children:"."})}),(0,r.jsx)(d.td,{children:"Sets working directory"})]}),(0,r.jsxs)(d.tr,{children:[(0,r.jsx)(d.td,{children:(0,r.jsx)(d.code,{children:"--insecure"})}),(0,r.jsx)(d.td,{children:(0,r.jsx)(d.code,{children:"bool"})}),(0,r.jsx)(d.td,{children:(0,r.jsx)(d.code,{children:"false"})}),(0,r.jsx)(d.td,{children:"Allow connections to SSL registry without certs"})]}),(0,r.jsxs)(d.tr,{children:[(0,r.jsx)(d.td,{children:(0,r.jsx)(d.code,{children:"--no-color"})}),(0,r.jsx)(d.td,{children:(0,r.jsx)(d.code,{children:"bool"})}),(0,r.jsx)(d.td,{children:(0,r.jsx)(d.code,{children:"false"})}),(0,r.jsx)(d.td,{children:"If specified, output won't contain any color"})]}),(0,r.jsxs)(d.tr,{children:[(0,r.jsx)(d.td,{children:(0,r.jsx)(d.code,{children:"--no-input"})}),(0,r.jsx)(d.td,{children:(0,r.jsx)(d.code,{children:"bool"})}),(0,r.jsx)(d.td,{children:(0,r.jsx)(d.code,{children:"false"})}),(0,r.jsx)(d.td,{children:"If set to true, the program will exit with an error code if it needs to wait for any user input. This is useful when running the program in CI/CD environment"})]}),(0,r.jsxs)(d.tr,{children:[(0,r.jsxs)(d.td,{children:[(0,r.jsx)(d.code,{children:"--password"}),", ",(0,r.jsx)(d.code,{children:"-p"})]}),(0,r.jsx)(d.td,{children:(0,r.jsx)(d.code,{children:"string"})}),(0,r.jsx)(d.td,{}),(0,r.jsx)(d.td,{children:"Password or personal access token used to log against the Docker registry"})]}),(0,r.jsxs)(d.tr,{children:[(0,r.jsx)(d.td,{children:(0,r.jsx)(d.code,{children:"--plain-http"})}),(0,r.jsx)(d.td,{children:(0,r.jsx)(d.code,{children:"bool"})}),(0,r.jsx)(d.td,{children:(0,r.jsx)(d.code,{children:"false"})}),(0,r.jsx)(d.td,{children:"Allow insecure connections to registry without SSL check"})]}),(0,r.jsxs)(d.tr,{children:[(0,r.jsx)(d.td,{children:(0,r.jsx)(d.code,{children:"--registry-config"})}),(0,r.jsx)(d.td,{children:(0,r.jsx)(d.code,{children:"[]string"})}),(0,r.jsx)(d.td,{children:(0,r.jsx)(d.code,{children:"[]"})}),(0,r.jsx)(d.td,{children:"Path of the authentication file"})]}),(0,r.jsxs)(d.tr,{children:[(0,r.jsxs)(d.td,{children:[(0,r.jsx)(d.code,{children:"--reuse-other-sauce-values"}),", ",(0,r.jsx)(d.code,{children:"-r"})]}),(0,r.jsx)(d.td,{children:(0,r.jsx)(d.code,{children:"bool"})}),(0,r.jsx)(d.td,{children:(0,r.jsx)(d.code,{children:"false"})}),(0,r.jsxs)(d.td,{children:["By default each sauce has their own set of values even if the variable names are same in both recipes. Setting this to ",(0,r.jsx)(d.code,{children:"true"}),", values from other sauces will be reused if the variable names match"]})]}),(0,r.jsxs)(d.tr,{children:[(0,r.jsxs)(d.td,{children:[(0,r.jsx)(d.code,{children:"--set"}),", ",(0,r.jsx)(d.code,{children:"-s"})]}),(0,r.jsx)(d.td,{children:(0,r.jsx)(d.code,{children:"[]string"})}),(0,r.jsx)(d.td,{children:(0,r.jsx)(d.code,{children:"[]"})}),(0,r.jsxs)(d.td,{children:["Set values to be used in the templates. Example: ",(0,r.jsx)(d.code,{children:'--set "MY_VAR=foo"'})]})]}),(0,r.jsxs)(d.tr,{children:[(0,r.jsxs)(d.td,{children:[(0,r.jsx)(d.code,{children:"--username"}),", ",(0,r.jsx)(d.code,{children:"-u"})]}),(0,r.jsx)(d.td,{children:(0,r.jsx)(d.code,{children:"string"})}),(0,r.jsx)(d.td,{}),(0,r.jsx)(d.td,{children:"Username used to log against the Docker registry"})]}),(0,r.jsxs)(d.tr,{children:[(0,r.jsxs)(d.td,{children:[(0,r.jsx)(d.code,{children:"--verbose"}),", ",(0,r.jsx)(d.code,{children:"-v"})]}),(0,r.jsx)(d.td,{children:(0,r.jsx)(d.code,{children:"bool"})}),(0,r.jsx)(d.td,{children:(0,r.jsx)(d.code,{children:"false"})}),(0,r.jsx)(d.td,{children:"Verbose output"})]})]})]}),"\n",(0,r.jsx)(d.hr,{}),"\n",(0,r.jsx)(d.h3,{id:"pull",children:"pull"}),"\n",(0,r.jsxs)(d.p,{children:["Pull a recipe from OCI repository and save it locally. You can authenticate by using the ",(0,r.jsx)(d.code,{children:"--username"})," and ",(0,r.jsx)(d.code,{children:"--password"})," flags or logging in first with ",(0,r.jsx)(d.code,{children:"docker login"}),"."]}),"\n",(0,r.jsxs)(d.h4,{id:"usage-jalapeno-pull-url",children:["Usage: ",(0,r.jsx)(d.code,{children:"jalapeno pull URL"})]}),"\n",(0,r.jsx)(d.h4,{id:"examples-4",children:"Examples"}),"\n",(0,r.jsx)(d.pre,{children:(0,r.jsx)(d.code,{children:"# Pull recipe from OCI repository\njalapeno pull ghcr.io/user/recipe:latest\n\n# Pull recipe from OCI repository with inline authentication\njalapeno pull oci://ghcr.io/user/my-recipe:latest --username user --password pass\n\n# Pull recipe from OCI repository with Docker authentication\ndocker login ghcr.io\njalapeno pull oci://ghcr.io/user/my-recipe:latest\n\n# Pull recipe to different directory\njalapeno pull oci://ghcr.io/user/my-recipe:latest --dir other/dir\n"})}),"\n",(0,r.jsx)(d.h4,{id:"pull-options",children:"Options"}),"\n",(0,r.jsxs)(d.table,{children:[(0,r.jsx)(d.thead,{children:(0,r.jsxs)(d.tr,{children:[(0,r.jsx)(d.th,{children:"Name"}),(0,r.jsx)(d.th,{children:"Type"}),(0,r.jsx)(d.th,{children:"Default"}),(0,r.jsx)(d.th,{children:"Description"})]})}),(0,r.jsxs)(d.tbody,{children:[(0,r.jsxs)(d.tr,{children:[(0,r.jsx)(d.td,{children:(0,r.jsx)(d.code,{children:"--ca-file"})}),(0,r.jsx)(d.td,{children:(0,r.jsx)(d.code,{children:"string"})}),(0,r.jsx)(d.td,{}),(0,r.jsx)(d.td,{children:"Server certificate authority file for the remote registry"})]}),(0,r.jsxs)(d.tr,{children:[(0,r.jsx)(d.td,{children:(0,r.jsx)(d.code,{children:"--debug"})}),(0,r.jsx)(d.td,{children:(0,r.jsx)(d.code,{children:"bool"})}),(0,r.jsx)(d.td,{children:(0,r.jsx)(d.code,{children:"false"})}),(0,r.jsx)(d.td,{children:"Debug mode"})]}),(0,r.jsxs)(d.tr,{children:[(0,r.jsxs)(d.td,{children:[(0,r.jsx)(d.code,{children:"--dir"}),", ",(0,r.jsx)(d.code,{children:"-d"})]}),(0,r.jsx)(d.td,{children:(0,r.jsx)(d.code,{children:"string"})}),(0,r.jsx)(d.td,{children:(0,r.jsx)(d.code,{children:"."})}),(0,r.jsx)(d.td,{children:"Sets working directory"})]}),(0,r.jsxs)(d.tr,{children:[(0,r.jsx)(d.td,{children:(0,r.jsx)(d.code,{children:"--insecure"})}),(0,r.jsx)(d.td,{children:(0,r.jsx)(d.code,{children:"bool"})}),(0,r.jsx)(d.td,{children:(0,r.jsx)(d.code,{children:"false"})}),(0,r.jsx)(d.td,{children:"Allow connections to SSL registry without certs"})]}),(0,r.jsxs)(d.tr,{children:[(0,r.jsx)(d.td,{children:(0,r.jsx)(d.code,{children:"--no-color"})}),(0,r.jsx)(d.td,{children:(0,r.jsx)(d.code,{children:"bool"})}),(0,r.jsx)(d.td,{children:(0,r.jsx)(d.code,{children:"false"})}),(0,r.jsx)(d.td,{children:"If specified, output won't contain any color"})]}),(0,r.jsxs)(d.tr,{children:[(0,r.jsxs)(d.td,{children:[(0,r.jsx)(d.code,{children:"--password"}),", ",(0,r.jsx)(d.code,{children:"-p"})]}),(0,r.jsx)(d.td,{children:(0,r.jsx)(d.code,{children:"string"})}),(0,r.jsx)(d.td,{}),(0,r.jsx)(d.td,{children:"Password or personal access token used to log against the Docker registry"})]}),(0,r.jsxs)(d.tr,{children:[(0,r.jsx)(d.td,{children:(0,r.jsx)(d.code,{children:"--plain-http"})}),(0,r.jsx)(d.td,{children:(0,r.jsx)(d.code,{children:"bool"})}),(0,r.jsx)(d.td,{children:(0,r.jsx)(d.code,{children:"false"})}),(0,r.jsx)(d.td,{children:"Allow insecure connections to registry without SSL check"})]}),(0,r.jsxs)(d.tr,{children:[(0,r.jsx)(d.td,{children:(0,r.jsx)(d.code,{children:"--registry-config"})}),(0,r.jsx)(d.td,{children:(0,r.jsx)(d.code,{children:"[]string"})}),(0,r.jsx)(d.td,{children:(0,r.jsx)(d.code,{children:"[]"})}),(0,r.jsx)(d.td,{children:"Path of the authentication file"})]}),(0,r.jsxs)(d.tr,{children:[(0,r.jsxs)(d.td,{children:[(0,r.jsx)(d.code,{children:"--username"}),", ",(0,r.jsx)(d.code,{children:"-u"})]}),(0,r.jsx)(d.td,{children:(0,r.jsx)(d.code,{children:"string"})}),(0,r.jsx)(d.td,{}),(0,r.jsx)(d.td,{children:"Username used to log against the Docker registry"})]}),(0,r.jsxs)(d.tr,{children:[(0,r.jsxs)(d.td,{children:[(0,r.jsx)(d.code,{children:"--verbose"}),", ",(0,r.jsx)(d.code,{children:"-v"})]}),(0,r.jsx)(d.td,{children:(0,r.jsx)(d.code,{children:"bool"})}),(0,r.jsx)(d.td,{children:(0,r.jsx)(d.code,{children:"false"})}),(0,r.jsx)(d.td,{children:"Verbose output"})]})]})]}),"\n",(0,r.jsx)(d.hr,{}),"\n",(0,r.jsx)(d.h3,{id:"push",children:"push"}),"\n",(0,r.jsxs)(d.p,{children:["Push a recipe to OCI repository (e.g. Docker registry). You can authenticate by using the ",(0,r.jsx)(d.code,{children:"--username"})," and ",(0,r.jsx)(d.code,{children:"--password"})," flags or logging in first with ",(0,r.jsx)(d.code,{children:"docker login"}),"."]}),"\n",(0,r.jsxs)(d.h4,{id:"usage-jalapeno-push-recipe_path-target_url",children:["Usage: ",(0,r.jsx)(d.code,{children:"jalapeno push RECIPE_PATH TARGET_URL"})]}),"\n",(0,r.jsx)(d.h4,{id:"examples-5",children:"Examples"}),"\n",(0,r.jsx)(d.pre,{children:(0,r.jsx)(d.code,{children:"# Push recipe to OCI repository\njalapeno push path/to/recipe ghcr.io/user/recipe\n\n# Push recipe to OCI repository with inline authentication\njalapeno push path/to/recipe oci://ghcr.io/user/my-recipe --username user --password pass\n\n# Push recipe to OCI repository with Docker authentication\ndocker login ghcr.io\njalapeno push path/to/recipe oci://ghcr.io/user/my-recipe\n"})}),"\n",(0,r.jsx)(d.h4,{id:"push-options",children:"Options"}),"\n",(0,r.jsxs)(d.table,{children:[(0,r.jsx)(d.thead,{children:(0,r.jsxs)(d.tr,{children:[(0,r.jsx)(d.th,{children:"Name"}),(0,r.jsx)(d.th,{children:"Type"}),(0,r.jsx)(d.th,{children:"Default"}),(0,r.jsx)(d.th,{children:"Description"})]})}),(0,r.jsxs)(d.tbody,{children:[(0,r.jsxs)(d.tr,{children:[(0,r.jsx)(d.td,{children:(0,r.jsx)(d.code,{children:"--ca-file"})}),(0,r.jsx)(d.td,{children:(0,r.jsx)(d.code,{children:"string"})}),(0,r.jsx)(d.td,{}),(0,r.jsx)(d.td,{children:"Server certificate authority file for the remote registry"})]}),(0,r.jsxs)(d.tr,{children:[(0,r.jsx)(d.td,{children:(0,r.jsx)(d.code,{children:"--debug"})}),(0,r.jsx)(d.td,{children:(0,r.jsx)(d.code,{children:"bool"})}),(0,r.jsx)(d.td,{children:(0,r.jsx)(d.code,{children:"false"})}),(0,r.jsx)(d.td,{children:"Debug mode"})]}),(0,r.jsxs)(d.tr,{children:[(0,r.jsx)(d.td,{children:(0,r.jsx)(d.code,{children:"--insecure"})}),(0,r.jsx)(d.td,{children:(0,r.jsx)(d.code,{children:"bool"})}),(0,r.jsx)(d.td,{children:(0,r.jsx)(d.code,{children:"false"})}),(0,r.jsx)(d.td,{children:"Allow connections to SSL registry without certs"})]}),(0,r.jsxs)(d.tr,{children:[(0,r.jsx)(d.td,{children:(0,r.jsx)(d.code,{children:"--no-color"})}),(0,r.jsx)(d.td,{children:(0,r.jsx)(d.code,{children:"bool"})}),(0,r.jsx)(d.td,{children:(0,r.jsx)(d.code,{children:"false"})}),(0,r.jsx)(d.td,{children:"If specified, output won't contain any color"})]}),(0,r.jsxs)(d.tr,{children:[(0,r.jsxs)(d.td,{children:[(0,r.jsx)(d.code,{children:"--password"}),", ",(0,r.jsx)(d.code,{children:"-p"})]}),(0,r.jsx)(d.td,{children:(0,r.jsx)(d.code,{children:"string"})}),(0,r.jsx)(d.td,{}),(0,r.jsx)(d.td,{children:"Password or personal access token used to log against the Docker registry"})]}),(0,r.jsxs)(d.tr,{children:[(0,r.jsx)(d.td,{children:(0,r.jsx)(d.code,{children:"--plain-http"})}),(0,r.jsx)(d.td,{children:(0,r.jsx)(d.code,{children:"bool"})}),(0,r.jsx)(d.td,{children:(0,r.jsx)(d.code,{children:"false"})}),(0,r.jsx)(d.td,{children:"Allow insecure connections to registry without SSL check"})]}),(0,r.jsxs)(d.tr,{children:[(0,r.jsx)(d.td,{children:(0,r.jsx)(d.code,{children:"--registry-config"})}),(0,r.jsx)(d.td,{children:(0,r.jsx)(d.code,{children:"[]string"})}),(0,r.jsx)(d.td,{children:(0,r.jsx)(d.code,{children:"[]"})}),(0,r.jsx)(d.td,{children:"Path of the authentication file"})]}),(0,r.jsxs)(d.tr,{children:[(0,r.jsxs)(d.td,{children:[(0,r.jsx)(d.code,{children:"--username"}),", ",(0,r.jsx)(d.code,{children:"-u"})]}),(0,r.jsx)(d.td,{children:(0,r.jsx)(d.code,{children:"string"})}),(0,r.jsx)(d.td,{}),(0,r.jsx)(d.td,{children:"Username used to log against the Docker registry"})]}),(0,r.jsxs)(d.tr,{children:[(0,r.jsxs)(d.td,{children:[(0,r.jsx)(d.code,{children:"--verbose"}),", ",(0,r.jsx)(d.code,{children:"-v"})]}),(0,r.jsx)(d.td,{children:(0,r.jsx)(d.code,{children:"bool"})}),(0,r.jsx)(d.td,{children:(0,r.jsx)(d.code,{children:"false"})}),(0,r.jsx)(d.td,{children:"Verbose output"})]})]})]}),"\n",(0,r.jsx)(d.hr,{}),"\n",(0,r.jsx)(d.h3,{id:"test",children:"test"}),"\n",(0,r.jsx)(d.p,{children:"Run tests for the recipe."}),"\n",(0,r.jsxs)(d.h4,{id:"usage-jalapeno-test-recipe_path",children:["Usage: ",(0,r.jsx)(d.code,{children:"jalapeno test RECIPE_PATH"})]}),"\n",(0,r.jsx)(d.h4,{id:"examples-6",children:"Examples"}),"\n",(0,r.jsx)(d.pre,{children:(0,r.jsx)(d.code,{children:"# Run recipe tests\njalapeno test path/to/recipe\n\n# Bootstrap a new test case\njalapeno test path/to/recipe --create\n\n# Update test file snapshots with the current outputs\njalapeno test path/to/recipe --update-snapshots\n"})}),"\n",(0,r.jsx)(d.h4,{id:"test-options",children:"Options"}),"\n",(0,r.jsxs)(d.table,{children:[(0,r.jsx)(d.thead,{children:(0,r.jsxs)(d.tr,{children:[(0,r.jsx)(d.th,{children:"Name"}),(0,r.jsx)(d.th,{children:"Type"}),(0,r.jsx)(d.th,{children:"Default"}),(0,r.jsx)(d.th,{children:"Description"})]})}),(0,r.jsxs)(d.tbody,{children:[(0,r.jsxs)(d.tr,{children:[(0,r.jsxs)(d.td,{children:[(0,r.jsx)(d.code,{children:"--create"}),", ",(0,r.jsx)(d.code,{children:"-c"})]}),(0,r.jsx)(d.td,{children:(0,r.jsx)(d.code,{children:"bool"})}),(0,r.jsx)(d.td,{children:(0,r.jsx)(d.code,{children:"false"})}),(0,r.jsx)(d.td,{children:"Create a new test case"})]}),(0,r.jsxs)(d.tr,{children:[(0,r.jsx)(d.td,{children:(0,r.jsx)(d.code,{children:"--debug"})}),(0,r.jsx)(d.td,{children:(0,r.jsx)(d.code,{children:"bool"})}),(0,r.jsx)(d.td,{children:(0,r.jsx)(d.code,{children:"false"})}),(0,r.jsx)(d.td,{children:"Debug mode"})]}),(0,r.jsxs)(d.tr,{children:[(0,r.jsx)(d.td,{children:(0,r.jsx)(d.code,{children:"--no-color"})}),(0,r.jsx)(d.td,{children:(0,r.jsx)(d.code,{children:"bool"})}),(0,r.jsx)(d.td,{children:(0,r.jsx)(d.code,{children:"false"})}),(0,r.jsx)(d.td,{children:"If specified, output won't contain any color"})]}),(0,r.jsxs)(d.tr,{children:[(0,r.jsxs)(d.td,{children:[(0,r.jsx)(d.code,{children:"--update-snapshots"}),", ",(0,r.jsx)(d.code,{children:"-u"})]}),(0,r.jsx)(d.td,{children:(0,r.jsx)(d.code,{children:"bool"})}),(0,r.jsx)(d.td,{children:(0,r.jsx)(d.code,{children:"false"})}),(0,r.jsx)(d.td,{children:"Update test file snapshots"})]}),(0,r.jsxs)(d.tr,{children:[(0,r.jsxs)(d.td,{children:[(0,r.jsx)(d.code,{children:"--verbose"}),", ",(0,r.jsx)(d.code,{children:"-v"})]}),(0,r.jsx)(d.td,{children:(0,r.jsx)(d.code,{children:"bool"})}),(0,r.jsx)(d.td,{children:(0,r.jsx)(d.code,{children:"false"})}),(0,r.jsx)(d.td,{children:"Verbose output"})]})]})]}),"\n",(0,r.jsx)(d.hr,{}),"\n",(0,r.jsx)(d.h3,{id:"upgrade",children:"upgrade"}),"\n",(0,r.jsx)(d.p,{children:"Upgrade a recipe in a project with a newer version. Recipe URL can be a local path or a remote URL (ex. 'oci://docker.io/my-recipe')."}),"\n",(0,r.jsxs)(d.h4,{id:"usage-jalapeno-upgrade-recipe_url",children:["Usage: ",(0,r.jsx)(d.code,{children:"jalapeno upgrade RECIPE_URL"})]}),"\n",(0,r.jsx)(d.h4,{id:"examples-7",children:"Examples"}),"\n",(0,r.jsx)(d.pre,{children:(0,r.jsx)(d.code,{children:"# Upgrade recipe with local recipe\njalapeno upgrade path/to/recipe\n\n# Upgrade recipe with remote recipe from OCI repository\njalapeno upgrade oci://ghcr.io/user/my-recipe:v2.0.0\n\n# Upgrade recipe with remote recipe from OCI repository with inline authentication\njalapeno upgrade oci://ghcr.io/user/my-recipe:v2.0.0 --username user --password pass\n\n# Upgrade recipe with remote recipe from OCI repository with Docker authentication\ndocker login ghcr.io\njalapeno upgrade oci://ghcr.io/user/my-recipe:v2.0.0\n\n# Upgrade recipe to different directory\njalapeno upgrade path/to/recipe --dir other/dir\n\n# Set values for new variables introduced in the upgrade\njalapeno upgrade path/to/recipe --set NEW_VAR=foo\n"})}),"\n",(0,r.jsx)(d.h4,{id:"upgrade-options",children:"Options"}),"\n",(0,r.jsxs)(d.table,{children:[(0,r.jsx)(d.thead,{children:(0,r.jsxs)(d.tr,{children:[(0,r.jsx)(d.th,{children:"Name"}),(0,r.jsx)(d.th,{children:"Type"}),(0,r.jsx)(d.th,{children:"Default"}),(0,r.jsx)(d.th,{children:"Description"})]})}),(0,r.jsxs)(d.tbody,{children:[(0,r.jsxs)(d.tr,{children:[(0,r.jsx)(d.td,{children:(0,r.jsx)(d.code,{children:"--ca-file"})}),(0,r.jsx)(d.td,{children:(0,r.jsx)(d.code,{children:"string"})}),(0,r.jsx)(d.td,{}),(0,r.jsx)(d.td,{children:"Server certificate authority file for the remote registry"})]}),(0,r.jsxs)(d.tr,{children:[(0,r.jsx)(d.td,{children:(0,r.jsx)(d.code,{children:"--debug"})}),(0,r.jsx)(d.td,{children:(0,r.jsx)(d.code,{children:"bool"})}),(0,r.jsx)(d.td,{children:(0,r.jsx)(d.code,{children:"false"})}),(0,r.jsx)(d.td,{children:"Debug mode"})]}),(0,r.jsxs)(d.tr,{children:[(0,r.jsx)(d.td,{children:(0,r.jsx)(d.code,{children:"--delimiter"})}),(0,r.jsx)(d.td,{children:(0,r.jsx)(d.code,{children:"string"})}),(0,r.jsx)(d.td,{children:(0,r.jsx)(d.code,{children:","})}),(0,r.jsx)(d.td,{children:"Delimiter used when setting table variables"})]}),(0,r.jsxs)(d.tr,{children:[(0,r.jsxs)(d.td,{children:[(0,r.jsx)(d.code,{children:"--dir"}),", ",(0,r.jsx)(d.code,{children:"-d"})]}),(0,r.jsx)(d.td,{children:(0,r.jsx)(d.code,{children:"string"})}),(0,r.jsx)(d.td,{children:(0,r.jsx)(d.code,{children:"."})}),(0,r.jsx)(d.td,{children:"Sets working directory"})]}),(0,r.jsxs)(d.tr,{children:[(0,r.jsx)(d.td,{children:(0,r.jsx)(d.code,{children:"--insecure"})}),(0,r.jsx)(d.td,{children:(0,r.jsx)(d.code,{children:"bool"})}),(0,r.jsx)(d.td,{children:(0,r.jsx)(d.code,{children:"false"})}),(0,r.jsx)(d.td,{children:"Allow connections to SSL registry without certs"})]}),(0,r.jsxs)(d.tr,{children:[(0,r.jsx)(d.td,{children:(0,r.jsx)(d.code,{children:"--no-color"})}),(0,r.jsx)(d.td,{children:(0,r.jsx)(d.code,{children:"bool"})}),(0,r.jsx)(d.td,{children:(0,r.jsx)(d.code,{children:"false"})}),(0,r.jsx)(d.td,{children:"If specified, output won't contain any color"})]}),(0,r.jsxs)(d.tr,{children:[(0,r.jsx)(d.td,{children:(0,r.jsx)(d.code,{children:"--no-input"})}),(0,r.jsx)(d.td,{children:(0,r.jsx)(d.code,{children:"bool"})}),(0,r.jsx)(d.td,{children:(0,r.jsx)(d.code,{children:"false"})}),(0,r.jsx)(d.td,{children:"If set to true, the program will exit with an error code if it needs to wait for any user input. This is useful when running the program in CI/CD environment"})]}),(0,r.jsxs)(d.tr,{children:[(0,r.jsxs)(d.td,{children:[(0,r.jsx)(d.code,{children:"--password"}),", ",(0,r.jsx)(d.code,{children:"-p"})]}),(0,r.jsx)(d.td,{children:(0,r.jsx)(d.code,{children:"string"})}),(0,r.jsx)(d.td,{}),(0,r.jsx)(d.td,{children:"Password or personal access token used to log against the Docker registry"})]}),(0,r.jsxs)(d.tr,{children:[(0,r.jsx)(d.td,{children:(0,r.jsx)(d.code,{children:"--plain-http"})}),(0,r.jsx)(d.td,{children:(0,r.jsx)(d.code,{children:"bool"})}),(0,r.jsx)(d.td,{children:(0,r.jsx)(d.code,{children:"false"})}),(0,r.jsx)(d.td,{children:"Allow insecure connections to registry without SSL check"})]}),(0,r.jsxs)(d.tr,{children:[(0,r.jsx)(d.td,{children:(0,r.jsx)(d.code,{children:"--registry-config"})}),(0,r.jsx)(d.td,{children:(0,r.jsx)(d.code,{children:"[]string"})}),(0,r.jsx)(d.td,{children:(0,r.jsx)(d.code,{children:"[]"})}),(0,r.jsx)(d.td,{children:"Path of the authentication file"})]}),(0,r.jsxs)(d.tr,{children:[(0,r.jsx)(d.td,{children:(0,r.jsx)(d.code,{children:"--reuse-old-values"})}),(0,r.jsx)(d.td,{children:(0,r.jsx)(d.code,{children:"bool"})}),(0,r.jsx)(d.td,{children:(0,r.jsx)(d.code,{children:"true"})}),(0,r.jsx)(d.td,{children:"Automatically set values for variables which already have a value in the existing sauce"})]}),(0,r.jsxs)(d.tr,{children:[(0,r.jsxs)(d.td,{children:[(0,r.jsx)(d.code,{children:"--reuse-other-sauce-values"}),", ",(0,r.jsx)(d.code,{children:"-r"})]}),(0,r.jsx)(d.td,{children:(0,r.jsx)(d.code,{children:"bool"})}),(0,r.jsx)(d.td,{children:(0,r.jsx)(d.code,{children:"false"})}),(0,r.jsxs)(d.td,{children:["By default each sauce has their own set of values even if the variable names are same in both recipes. Setting this to ",(0,r.jsx)(d.code,{children:"true"}),", values from other sauces will be reused if the variable names match"]})]}),(0,r.jsxs)(d.tr,{children:[(0,r.jsxs)(d.td,{children:[(0,r.jsx)(d.code,{children:"--set"}),", ",(0,r.jsx)(d.code,{children:"-s"})]}),(0,r.jsx)(d.td,{children:(0,r.jsx)(d.code,{children:"[]string"})}),(0,r.jsx)(d.td,{children:(0,r.jsx)(d.code,{children:"[]"})}),(0,r.jsxs)(d.td,{children:["Set values to be used in the templates. Example: ",(0,r.jsx)(d.code,{children:'--set "MY_VAR=foo"'})]})]}),(0,r.jsxs)(d.tr,{children:[(0,r.jsxs)(d.td,{children:[(0,r.jsx)(d.code,{children:"--username"}),", ",(0,r.jsx)(d.code,{children:"-u"})]}),(0,r.jsx)(d.td,{children:(0,r.jsx)(d.code,{children:"string"})}),(0,r.jsx)(d.td,{}),(0,r.jsx)(d.td,{children:"Username used to log against the Docker registry"})]}),(0,r.jsxs)(d.tr,{children:[(0,r.jsxs)(d.td,{children:[(0,r.jsx)(d.code,{children:"--verbose"}),", ",(0,r.jsx)(d.code,{children:"-v"})]}),(0,r.jsx)(d.td,{children:(0,r.jsx)(d.code,{children:"bool"})}),(0,r.jsx)(d.td,{children:(0,r.jsx)(d.code,{children:"false"})}),(0,r.jsx)(d.td,{children:"Verbose output"})]})]})]}),"\n",(0,r.jsx)(d.hr,{}),"\n",(0,r.jsx)(d.h3,{id:"validate",children:"validate"}),"\n",(0,r.jsx)(d.p,{children:"Validate a recipe in a local path."}),"\n",(0,r.jsxs)(d.h4,{id:"usage-jalapeno-validate-recipe_path",children:["Usage: ",(0,r.jsx)(d.code,{children:"jalapeno validate RECIPE_PATH"})]}),"\n",(0,r.jsx)(d.h4,{id:"examples-8",children:"Examples"}),"\n",(0,r.jsx)(d.pre,{children:(0,r.jsx)(d.code,{children:"jalapeno validate path/to/recipe\n"})}),"\n",(0,r.jsx)(d.h4,{id:"validate-options",children:"Options"}),"\n",(0,r.jsxs)(d.table,{children:[(0,r.jsx)(d.thead,{children:(0,r.jsxs)(d.tr,{children:[(0,r.jsx)(d.th,{children:"Name"}),(0,r.jsx)(d.th,{children:"Type"}),(0,r.jsx)(d.th,{children:"Default"}),(0,r.jsx)(d.th,{children:"Description"})]})}),(0,r.jsxs)(d.tbody,{children:[(0,r.jsxs)(d.tr,{children:[(0,r.jsx)(d.td,{children:(0,r.jsx)(d.code,{children:"--debug"})}),(0,r.jsx)(d.td,{children:(0,r.jsx)(d.code,{children:"bool"})}),(0,r.jsx)(d.td,{children:(0,r.jsx)(d.code,{children:"false"})}),(0,r.jsx)(d.td,{children:"Debug mode"})]}),(0,r.jsxs)(d.tr,{children:[(0,r.jsxs)(d.td,{children:[(0,r.jsx)(d.code,{children:"--dir"}),", ",(0,r.jsx)(d.code,{children:"-d"})]}),(0,r.jsx)(d.td,{children:(0,r.jsx)(d.code,{children:"string"})}),(0,r.jsx)(d.td,{children:(0,r.jsx)(d.code,{children:"."})}),(0,r.jsx)(d.td,{children:"Sets working directory"})]}),(0,r.jsxs)(d.tr,{children:[(0,r.jsx)(d.td,{children:(0,r.jsx)(d.code,{children:"--no-color"})}),(0,r.jsx)(d.td,{children:(0,r.jsx)(d.code,{children:"bool"})}),(0,r.jsx)(d.td,{children:(0,r.jsx)(d.code,{children:"false"})}),(0,r.jsx)(d.td,{children:"If specified, output won't contain any color"})]}),(0,r.jsxs)(d.tr,{children:[(0,r.jsxs)(d.td,{children:[(0,r.jsx)(d.code,{children:"--verbose"}),", ",(0,r.jsx)(d.code,{children:"-v"})]}),(0,r.jsx)(d.td,{children:(0,r.jsx)(d.code,{children:"bool"})}),(0,r.jsx)(d.td,{children:(0,r.jsx)(d.code,{children:"false"})}),(0,r.jsx)(d.td,{children:"Verbose output"})]})]})]}),"\n",(0,r.jsx)(d.hr,{}),"\n",(0,r.jsx)(d.h3,{id:"why",children:"why"}),"\n",(0,r.jsx)(d.p,{children:"Explains where a file comes from in the project, e.g. is the file create by a recipe or user"}),"\n",(0,r.jsxs)(d.h4,{id:"usage-jalapeno-why-filepath",children:["Usage: ",(0,r.jsx)(d.code,{children:"jalapeno why FILEPATH"})]}),"\n",(0,r.jsx)(d.h4,{id:"examples-9",children:"Examples"}),"\n",(0,r.jsx)(d.pre,{children:(0,r.jsx)(d.code,{children:"jalapeno why path/to/file\n"})}),"\n",(0,r.jsx)(d.h4,{id:"why-options",children:"Options"}),"\n",(0,r.jsxs)(d.table,{children:[(0,r.jsx)(d.thead,{children:(0,r.jsxs)(d.tr,{children:[(0,r.jsx)(d.th,{children:"Name"}),(0,r.jsx)(d.th,{children:"Type"}),(0,r.jsx)(d.th,{children:"Default"}),(0,r.jsx)(d.th,{children:"Description"})]})}),(0,r.jsxs)(d.tbody,{children:[(0,r.jsxs)(d.tr,{children:[(0,r.jsx)(d.td,{children:(0,r.jsx)(d.code,{children:"--debug"})}),(0,r.jsx)(d.td,{children:(0,r.jsx)(d.code,{children:"bool"})}),(0,r.jsx)(d.td,{children:(0,r.jsx)(d.code,{children:"false"})}),(0,r.jsx)(d.td,{children:"Debug mode"})]}),(0,r.jsxs)(d.tr,{children:[(0,r.jsxs)(d.td,{children:[(0,r.jsx)(d.code,{children:"--dir"}),", ",(0,r.jsx)(d.code,{children:"-d"})]}),(0,r.jsx)(d.td,{children:(0,r.jsx)(d.code,{children:"string"})}),(0,r.jsx)(d.td,{children:(0,r.jsx)(d.code,{children:"."})}),(0,r.jsx)(d.td,{children:"Sets working directory"})]}),(0,r.jsxs)(d.tr,{children:[(0,r.jsx)(d.td,{children:(0,r.jsx)(d.code,{children:"--no-color"})}),(0,r.jsx)(d.td,{children:(0,r.jsx)(d.code,{children:"bool"})}),(0,r.jsx)(d.td,{children:(0,r.jsx)(d.code,{children:"false"})}),(0,r.jsx)(d.td,{children:"If specified, output won't contain any color"})]}),(0,r.jsxs)(d.tr,{children:[(0,r.jsxs)(d.td,{children:[(0,r.jsx)(d.code,{children:"--verbose"}),", ",(0,r.jsx)(d.code,{children:"-v"})]}),(0,r.jsx)(d.td,{children:(0,r.jsx)(d.code,{children:"bool"})}),(0,r.jsx)(d.td,{children:(0,r.jsx)(d.code,{children:"false"})}),(0,r.jsx)(d.td,{children:"Verbose output"})]})]})]}),"\n",(0,r.jsx)(d.hr,{}),"\n",(0,r.jsxs)(d.h2,{id:"recipe-schema-recipeyml",children:["Recipe schema (",(0,r.jsx)(d.code,{children:"recipe.yml"}),")"]}),"\n",(0,r.jsx)(d.p,{children:(0,r.jsx)(d.a,{href:"https://github.com/futurice/jalapeno/blob/main/pkg/recipe/recipe.go#L7",children:"Source code"})}),"\n",(0,r.jsxs)(d.table,{children:[(0,r.jsx)(d.thead,{children:(0,r.jsxs)(d.tr,{children:[(0,r.jsx)(d.th,{children:"Attribute"}),(0,r.jsx)(d.th,{children:"Type"}),(0,r.jsx)(d.th,{children:"Default"}),(0,r.jsx)(d.th,{children:"Description"})]})}),(0,r.jsxs)(d.tbody,{children:[(0,r.jsxs)(d.tr,{children:[(0,r.jsx)(d.td,{children:(0,r.jsx)(d.code,{children:"apiVersion"})}),(0,r.jsx)(d.td,{children:(0,r.jsx)(d.code,{children:"string"})}),(0,r.jsx)(d.td,{children:(0,r.jsx)(d.code,{children:"v1"})}),(0,r.jsx)(d.td,{children:'Version of the recipe metadata API schema. Currently should have value "v1".'})]}),(0,r.jsxs)(d.tr,{children:[(0,r.jsx)(d.td,{children:(0,r.jsx)(d.code,{children:"name"})}),(0,r.jsx)(d.td,{children:(0,r.jsx)(d.code,{children:"string"})}),(0,r.jsx)(d.td,{}),(0,r.jsx)(d.td,{children:"Name of the recipe."})]}),(0,r.jsxs)(d.tr,{children:[(0,r.jsx)(d.td,{children:(0,r.jsx)(d.code,{children:"version"})}),(0,r.jsx)(d.td,{children:(0,r.jsx)(d.code,{children:"string"})}),(0,r.jsx)(d.td,{}),(0,r.jsxs)(d.td,{children:["Version of the recipe. Must be valid ",(0,r.jsx)(d.a,{href:"https://semver.org/",children:"semver"}),"."]})]}),(0,r.jsxs)(d.tr,{children:[(0,r.jsx)(d.td,{children:(0,r.jsx)(d.code,{children:"description"})}),(0,r.jsx)(d.td,{children:(0,r.jsx)(d.code,{children:"string"})}),(0,r.jsx)(d.td,{}),(0,r.jsx)(d.td,{children:"Description of what the recipe does"})]}),(0,r.jsxs)(d.tr,{children:[(0,r.jsx)(d.td,{children:(0,r.jsx)(d.code,{children:"sources"})}),(0,r.jsx)(d.td,{children:(0,r.jsx)(d.code,{children:"[]string"})}),(0,r.jsx)(d.td,{}),(0,r.jsx)(d.td,{children:"A list of URLs to source code for this recipe."})]}),(0,r.jsxs)(d.tr,{children:[(0,r.jsx)(d.td,{children:(0,r.jsx)(d.code,{children:"templateExtension"})}),(0,r.jsx)(d.td,{children:(0,r.jsx)(d.code,{children:"string"})}),(0,r.jsx)(d.td,{}),(0,r.jsx)(d.td,{children:'File extension of files in "templates" directory which should be templated. Files not matched by this extension will be copied as-is. If left empty (the default), all files will be templated.'})]}),(0,r.jsxs)(d.tr,{children:[(0,r.jsx)(d.td,{children:(0,r.jsx)(d.code,{children:"initHelp"})}),(0,r.jsx)(d.td,{children:(0,r.jsx)(d.code,{children:"string"})}),(0,r.jsx)(d.td,{}),(0,r.jsx)(d.td,{children:"A message which will be showed to an user after a succesful recipe execution. Can be used to guide the user what should be done next in the project directory."})]}),(0,r.jsxs)(d.tr,{children:[(0,r.jsx)(d.td,{children:(0,r.jsx)(d.code,{children:"ignorePatterns"})}),(0,r.jsx)(d.td,{children:(0,r.jsx)(d.code,{children:"[]string"})}),(0,r.jsx)(d.td,{}),(0,r.jsx)(d.td,{children:"Glob patterns for ignoring generated files from future recipe upgrades. Ignored files will not be regenerated even if their templates change in future versions of the recipe."})]}),(0,r.jsxs)(d.tr,{children:[(0,r.jsx)(d.td,{children:(0,r.jsx)(d.code,{children:"vars"})}),(0,r.jsx)(d.td,{children:(0,r.jsx)(d.a,{href:"#variable",children:(0,r.jsx)(d.code,{children:"[]Variable"})})}),(0,r.jsx)(d.td,{}),(0,r.jsxs)(d.td,{children:["An array of variables which can be used in templates. The user will be prompted to provide the value for the variable if not set with ",(0,r.jsx)(d.code,{children:"--set"})," flag."]})]})]})]}),"\n",(0,r.jsx)(d.h3,{id:"variable",children:"Variable"}),"\n",(0,r.jsx)(d.p,{children:(0,r.jsx)(d.a,{href:"https://github.com/futurice/jalapeno/blob/main/pkg/recipe/variable.go#L13",children:"Source code"})}),"\n",(0,r.jsxs)(d.table,{children:[(0,r.jsx)(d.thead,{children:(0,r.jsxs)(d.tr,{children:[(0,r.jsx)(d.th,{children:"Attribute"}),(0,r.jsx)(d.th,{children:"Type"}),(0,r.jsx)(d.th,{children:"Default"}),(0,r.jsx)(d.th,{children:"Description"})]})}),(0,r.jsxs)(d.tbody,{children:[(0,r.jsxs)(d.tr,{children:[(0,r.jsx)(d.td,{children:(0,r.jsx)(d.code,{children:"name"})}),(0,r.jsx)(d.td,{children:(0,r.jsx)(d.code,{children:"string"})}),(0,r.jsx)(d.td,{}),(0,r.jsx)(d.td,{children:"The name of the variable. It is also used as unique identifier, so two variables can not have the same name."})]}),(0,r.jsxs)(d.tr,{children:[(0,r.jsx)(d.td,{children:(0,r.jsx)(d.code,{children:"description"})}),(0,r.jsx)(d.td,{children:(0,r.jsx)(d.code,{children:"string"})}),(0,r.jsx)(d.td,{}),(0,r.jsx)(d.td,{children:'Description of the variable. Will be shown to the user when "show help" is activated.'})]}),(0,r.jsxs)(d.tr,{children:[(0,r.jsx)(d.td,{children:(0,r.jsx)(d.code,{children:"default"})}),(0,r.jsx)(d.td,{children:(0,r.jsx)(d.code,{children:"string"})}),(0,r.jsx)(d.td,{}),(0,r.jsx)(d.td,{children:"Default value of the variable."})]}),(0,r.jsxs)(d.tr,{children:[(0,r.jsx)(d.td,{children:(0,r.jsx)(d.code,{children:"confirm"})}),(0,r.jsx)(d.td,{children:(0,r.jsx)(d.code,{children:"bool"})}),(0,r.jsx)(d.td,{children:(0,r.jsx)(d.code,{children:"false"})}),(0,r.jsx)(d.td,{children:"If set to true, the prompt will be yes/no question, and the value type will be boolean."})]}),(0,r.jsxs)(d.tr,{children:[(0,r.jsx)(d.td,{children:(0,r.jsx)(d.code,{children:"optional"})}),(0,r.jsx)(d.td,{children:(0,r.jsx)(d.code,{children:"bool"})}),(0,r.jsx)(d.td,{children:(0,r.jsx)(d.code,{children:"false"})}),(0,r.jsx)(d.td,{children:"If set to true, the variable can be left empty."})]}),(0,r.jsxs)(d.tr,{children:[(0,r.jsx)(d.td,{children:(0,r.jsx)(d.code,{children:"options"})}),(0,r.jsx)(d.td,{children:(0,r.jsx)(d.code,{children:"[]string"})}),(0,r.jsx)(d.td,{}),(0,r.jsx)(d.td,{children:"The user selects the value from a list of options."})]}),(0,r.jsxs)(d.tr,{children:[(0,r.jsx)(d.td,{children:(0,r.jsx)(d.code,{children:"validators"})}),(0,r.jsx)(d.td,{children:(0,r.jsx)(d.a,{href:"#validator",children:(0,r.jsx)(d.code,{children:"[]Validator"})})}),(0,r.jsx)(d.td,{}),(0,r.jsx)(d.td,{children:"Validators for the variable."})]}),(0,r.jsxs)(d.tr,{children:[(0,r.jsx)(d.td,{children:(0,r.jsx)(d.code,{children:"if"})}),(0,r.jsx)(d.td,{children:(0,r.jsx)(d.code,{children:"string"})}),(0,r.jsx)(d.td,{}),(0,r.jsxs)(d.td,{children:["Makes the variable conditional based on the result of the expression. The result of the evaluation needs to be a boolean value. Uses ",(0,r.jsx)(d.a,{href:"https://github.com/expr-lang/expr",children:"https://github.com/expr-lang/expr"}),"."]})]}),(0,r.jsxs)(d.tr,{children:[(0,r.jsx)(d.td,{children:(0,r.jsx)(d.code,{children:"columns"})}),(0,r.jsx)(d.td,{children:(0,r.jsx)(d.code,{children:"[]string"})}),(0,r.jsx)(d.td,{}),(0,r.jsx)(d.td,{children:"Set the variable as a table type with columns defined by this property."})]})]})]}),"\n",(0,r.jsx)(d.h3,{id:"validator",children:"Validator"}),"\n",(0,r.jsx)(d.p,{children:(0,r.jsx)(d.a,{href:"https://github.com/futurice/jalapeno/blob/main/pkg/recipe/variable.go#L50",children:"Source code"})}),"\n",(0,r.jsxs)(d.table,{children:[(0,r.jsx)(d.thead,{children:(0,r.jsxs)(d.tr,{children:[(0,r.jsx)(d.th,{children:"Attribute"}),(0,r.jsx)(d.th,{children:"Type"}),(0,r.jsx)(d.th,{children:"Default"}),(0,r.jsx)(d.th,{children:"Description"})]})}),(0,r.jsxs)(d.tbody,{children:[(0,r.jsxs)(d.tr,{children:[(0,r.jsx)(d.td,{children:(0,r.jsx)(d.code,{children:"pattern"})}),(0,r.jsx)(d.td,{children:(0,r.jsx)(d.code,{children:"string"})}),(0,r.jsx)(d.td,{}),(0,r.jsx)(d.td,{children:"Regular expression pattern to match the input against."})]}),(0,r.jsxs)(d.tr,{children:[(0,r.jsx)(d.td,{children:(0,r.jsx)(d.code,{children:"help"})}),(0,r.jsx)(d.td,{children:(0,r.jsx)(d.code,{children:"string"})}),(0,r.jsx)(d.td,{}),(0,r.jsx)(d.td,{children:"If the regular expression validation fails, this help message will be shown to the user."})]}),(0,r.jsxs)(d.tr,{children:[(0,r.jsx)(d.td,{children:(0,r.jsx)(d.code,{children:"column"})}),(0,r.jsx)(d.td,{children:(0,r.jsx)(d.code,{children:"string"})}),(0,r.jsx)(d.td,{}),(0,r.jsx)(d.td,{children:"Apply the validator to a column if the variable type is table."})]})]})]}),"\n",(0,r.jsxs)(d.h2,{id:"test-schema-testyml",children:["Test schema (",(0,r.jsx)(d.code,{children:"test.yml"}),")"]}),"\n",(0,r.jsx)(d.p,{children:(0,r.jsx)(d.a,{href:"https://github.com/futurice/jalapeno/blob/main/pkg/recipe/test.go#L13",children:"Source code"})}),"\n",(0,r.jsxs)(d.table,{children:[(0,r.jsx)(d.thead,{children:(0,r.jsxs)(d.tr,{children:[(0,r.jsx)(d.th,{children:"Attribute"}),(0,r.jsx)(d.th,{children:"Type"}),(0,r.jsx)(d.th,{children:"Default"}),(0,r.jsx)(d.th,{children:"Description"})]})}),(0,r.jsxs)(d.tbody,{children:[(0,r.jsxs)(d.tr,{children:[(0,r.jsx)(d.td,{children:(0,r.jsx)(d.code,{children:"values"})}),(0,r.jsx)(d.td,{children:(0,r.jsx)(d.code,{children:"map[string]any"})}),(0,r.jsx)(d.td,{}),(0,r.jsx)(d.td,{children:"Values to use to render the recipe templates. Map key is the name of the variable and value is the variable value."})]}),(0,r.jsxs)(d.tr,{children:[(0,r.jsx)(d.td,{children:(0,r.jsx)(d.code,{children:"ignoreExtraFiles"})}),(0,r.jsx)(d.td,{children:(0,r.jsx)(d.code,{children:"bool"})}),(0,r.jsx)(d.td,{}),(0,r.jsx)(d.td,{children:"If true, test will pass even though templates generated more files than the test specifies. This is useful when creating specific test cases for large recipes."})]})]})]}),"\n",(0,r.jsxs)(d.h2,{id:"sauce-schema-saucesyml",children:["Sauce schema (",(0,r.jsx)(d.code,{children:"sauces.yml"}),")"]}),"\n",(0,r.jsx)(d.p,{children:(0,r.jsx)(d.a,{href:"https://github.com/futurice/jalapeno/blob/main/pkg/recipe/sauce.go#L10",children:"Source code"})}),"\n",(0,r.jsxs)(d.table,{children:[(0,r.jsx)(d.thead,{children:(0,r.jsxs)(d.tr,{children:[(0,r.jsx)(d.th,{children:"Attribute"}),(0,r.jsx)(d.th,{children:"Type"}),(0,r.jsx)(d.th,{children:"Default"}),(0,r.jsx)(d.th,{children:"Description"})]})}),(0,r.jsxs)(d.tbody,{children:[(0,r.jsxs)(d.tr,{children:[(0,r.jsx)(d.td,{children:(0,r.jsx)(d.code,{children:"apiVersion"})}),(0,r.jsx)(d.td,{children:(0,r.jsx)(d.code,{children:"string"})}),(0,r.jsx)(d.td,{children:(0,r.jsx)(d.code,{children:"v1"})}),(0,r.jsx)(d.td,{children:'Version of the sauce API schema. Currently should have value "v1".'})]}),(0,r.jsxs)(d.tr,{children:[(0,r.jsx)(d.td,{children:(0,r.jsx)(d.code,{children:"recipe"})}),(0,r.jsx)(d.td,{children:(0,r.jsx)(d.a,{href:"#recipe-schema-recipeyml",children:(0,r.jsx)(d.code,{children:"Recipe"})})}),(0,r.jsx)(d.td,{}),(0,r.jsx)(d.td,{children:"The recipe which was used to render the sauce."})]}),(0,r.jsxs)(d.tr,{children:[(0,r.jsx)(d.td,{children:(0,r.jsx)(d.code,{children:"values"})}),(0,r.jsx)(d.td,{children:(0,r.jsx)(d.code,{children:"map[string]any"})}),(0,r.jsx)(d.td,{}),(0,r.jsx)(d.td,{children:"Values which was used to execute the recipe."})]}),(0,r.jsxs)(d.tr,{children:[(0,r.jsx)(d.td,{children:(0,r.jsx)(d.code,{children:"files"})}),(0,r.jsx)(d.td,{children:(0,r.jsx)(d.code,{children:"map[string]File"})}),(0,r.jsx)(d.td,{}),(0,r.jsx)(d.td,{children:"Files genereated from the recipe"})]}),(0,r.jsxs)(d.tr,{children:[(0,r.jsx)(d.td,{children:(0,r.jsx)(d.code,{children:"id"})}),(0,r.jsx)(d.td,{children:(0,r.jsx)(d.code,{children:"string"})}),(0,r.jsx)(d.td,{}),(0,r.jsx)(d.td,{children:"Random unique ID whose value is determined on first render and stays the same on subsequent re-renders (upgrades) of the sauce. Can be used for example as a seed for template random functions to provide same result on each template."})]}),(0,r.jsxs)(d.tr,{children:[(0,r.jsx)(d.td,{children:(0,r.jsx)(d.code,{children:"from"})}),(0,r.jsx)(d.td,{children:(0,r.jsx)(d.code,{children:"string"})}),(0,r.jsx)(d.td,{}),(0,r.jsx)(d.td,{children:"Defines the repository where updates should be checked for the recipe."})]})]})]})]})}function j(e={}){const{wrapper:d}={...(0,i.a)(),...e.components};return d?(0,r.jsx)(d,{...e,children:(0,r.jsx)(o,{...e})}):o(e)}}}]);
\ No newline at end of file
+"use strict";(self.webpackChunkjalapeno=self.webpackChunkjalapeno||[]).push([[207],{735:(e,d,s)=>{s.r(d),s.d(d,{assets:()=>t,contentTitle:()=>n,default:()=>j,frontMatter:()=>c,metadata:()=>l,toc:()=>h});var r=s(5893),i=s(1151);const c={sidebar_position:4,slug:"/api/",title:"API Reference"},n=void 0,l={id:"api",title:"API Reference",description:"CLI",source:"@site/docs/api.md",sourceDirName:".",slug:"/api/",permalink:"/jalapeno/api/",draft:!1,unlisted:!1,editUrl:"https://github.com/futurice/jalapeno/tree/main/docs/site/docs/api.md",tags:[],version:"current",sidebarPosition:4,frontMatter:{sidebar_position:4,slug:"/api/",title:"API Reference"},sidebar:"tutorialSidebar",previous:{title:"Usage",permalink:"/jalapeno/usage/"},next:{title:"Contributing",permalink:"/jalapeno/contributing/"}},t={},h=[{value:"CLI",id:"cli",level:2},{value:"check",id:"check",level:3},{value:"Usage: jalapeno check
",id:"usage-jalapeno-check",level:4},{value:"Examples",id:"examples",level:4},{value:"Options",id:"check-options",level:4},{value:"create",id:"create",level:3},{value:"Usage: jalapeno create RECIPE_NAME
",id:"usage-jalapeno-create-recipe_name",level:4},{value:"Examples",id:"examples-1",level:4},{value:"Options",id:"create-options",level:4},{value:"eject",id:"eject",level:3},{value:"Usage: jalapeno eject
",id:"usage-jalapeno-eject",level:4},{value:"Examples",id:"examples-2",level:4},{value:"Options",id:"eject-options",level:4},{value:"execute",id:"execute",level:3},{value:"Usage: jalapeno execute RECIPE_URL
",id:"usage-jalapeno-execute-recipe_url",level:4},{value:"Examples",id:"examples-3",level:4},{value:"Options",id:"execute-options",level:4},{value:"pull",id:"pull",level:3},{value:"Usage: jalapeno pull URL
",id:"usage-jalapeno-pull-url",level:4},{value:"Examples",id:"examples-4",level:4},{value:"Options",id:"pull-options",level:4},{value:"push",id:"push",level:3},{value:"Usage: jalapeno push RECIPE_PATH TARGET_URL
",id:"usage-jalapeno-push-recipe_path-target_url",level:4},{value:"Examples",id:"examples-5",level:4},{value:"Options",id:"push-options",level:4},{value:"test",id:"test",level:3},{value:"Usage: jalapeno test RECIPE_PATH
",id:"usage-jalapeno-test-recipe_path",level:4},{value:"Examples",id:"examples-6",level:4},{value:"Options",id:"test-options",level:4},{value:"upgrade",id:"upgrade",level:3},{value:"Usage: jalapeno upgrade RECIPE_URL
",id:"usage-jalapeno-upgrade-recipe_url",level:4},{value:"Examples",id:"examples-7",level:4},{value:"Options",id:"upgrade-options",level:4},{value:"validate",id:"validate",level:3},{value:"Usage: jalapeno validate RECIPE_PATH
",id:"usage-jalapeno-validate-recipe_path",level:4},{value:"Examples",id:"examples-8",level:4},{value:"Options",id:"validate-options",level:4},{value:"why",id:"why",level:3},{value:"Usage: jalapeno why FILEPATH
",id:"usage-jalapeno-why-filepath",level:4},{value:"Examples",id:"examples-9",level:4},{value:"Options",id:"why-options",level:4},{value:"Recipe schema (recipe.yml
)",id:"recipe-schema-recipeyml",level:2},{value:"Variable",id:"variable",level:3},{value:"Validator",id:"validator",level:3},{value:"Test schema (test.yml
)",id:"test-schema-testyml",level:2},{value:"Sauce schema (sauces.yml
)",id:"sauce-schema-saucesyml",level:2}];function o(e){const d={a:"a",code:"code",h2:"h2",h3:"h3",h4:"h4",hr:"hr",p:"p",pre:"pre",strong:"strong",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",...(0,i.a)(),...e.components};return(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(d.h2,{id:"cli",children:"CLI"}),"\n",(0,r.jsx)(d.h3,{id:"check",children:"check"}),"\n",(0,r.jsxs)(d.p,{children:["Check if there are newer versions available for recipes used in the project. By default it checks updates for all recipes, but it is possible to check updates for a specific recipe by using the ",(0,r.jsx)(d.code,{children:"--recipe"})," flag."]}),"\n",(0,r.jsxs)(d.h4,{id:"usage-jalapeno-check",children:["Usage: ",(0,r.jsx)(d.code,{children:"jalapeno check"})]}),"\n",(0,r.jsx)(d.h4,{id:"examples",children:"Examples"}),"\n",(0,r.jsx)(d.pre,{children:(0,r.jsx)(d.code,{children:"# Check updates for all recipes in the project\njalapeno check\n\n# Check updates for a single recipe\njalapeno check --recipe my-recipe\n\n# Add check URL for recipe which does not have it yet\njalapeno check --recipe my-recipe --from oci://my-registry.com/my-recipe\n"})}),"\n",(0,r.jsx)(d.h4,{id:"check-options",children:"Options"}),"\n",(0,r.jsxs)(d.table,{children:[(0,r.jsx)(d.thead,{children:(0,r.jsxs)(d.tr,{children:[(0,r.jsx)(d.th,{children:"Name"}),(0,r.jsx)(d.th,{children:"Type"}),(0,r.jsx)(d.th,{children:"Default"}),(0,r.jsx)(d.th,{children:"Description"})]})}),(0,r.jsxs)(d.tbody,{children:[(0,r.jsxs)(d.tr,{children:[(0,r.jsx)(d.td,{children:(0,r.jsx)(d.code,{children:"--ca-file"})}),(0,r.jsx)(d.td,{children:(0,r.jsx)(d.code,{children:"string"})}),(0,r.jsx)(d.td,{}),(0,r.jsx)(d.td,{children:"Server certificate authority file for the remote registry"})]}),(0,r.jsxs)(d.tr,{children:[(0,r.jsx)(d.td,{children:(0,r.jsx)(d.code,{children:"--debug"})}),(0,r.jsx)(d.td,{children:(0,r.jsx)(d.code,{children:"bool"})}),(0,r.jsx)(d.td,{children:(0,r.jsx)(d.code,{children:"false"})}),(0,r.jsx)(d.td,{children:"Debug mode"})]}),(0,r.jsxs)(d.tr,{children:[(0,r.jsx)(d.td,{children:(0,r.jsx)(d.code,{children:"--detailed-exitcode"})}),(0,r.jsx)(d.td,{children:(0,r.jsx)(d.code,{children:"bool"})}),(0,r.jsx)(d.td,{children:(0,r.jsx)(d.code,{children:"false"})}),(0,r.jsx)(d.td,{children:"Returns a detailed exit code when the command exits. When provided, this argument changes the exit codes and their meanings to provide more granular information about what the resulting plan contains: 0 = Succeeded with no updates available, 1 = Error, 2 = Succeeded with updates available"})]}),(0,r.jsxs)(d.tr,{children:[(0,r.jsxs)(d.td,{children:[(0,r.jsx)(d.code,{children:"--dir"}),", ",(0,r.jsx)(d.code,{children:"-d"})]}),(0,r.jsx)(d.td,{children:(0,r.jsx)(d.code,{children:"string"})}),(0,r.jsx)(d.td,{children:(0,r.jsx)(d.code,{children:"."})}),(0,r.jsx)(d.td,{children:"Sets working directory"})]}),(0,r.jsxs)(d.tr,{children:[(0,r.jsx)(d.td,{children:(0,r.jsx)(d.code,{children:"--from"})}),(0,r.jsx)(d.td,{children:(0,r.jsx)(d.code,{children:"string"})}),(0,r.jsx)(d.td,{}),(0,r.jsx)(d.td,{children:"Add or override the URL used for checking updates for the recipe. Works only with --recipe flag"})]}),(0,r.jsxs)(d.tr,{children:[(0,r.jsx)(d.td,{children:(0,r.jsx)(d.code,{children:"--insecure"})}),(0,r.jsx)(d.td,{children:(0,r.jsx)(d.code,{children:"bool"})}),(0,r.jsx)(d.td,{children:(0,r.jsx)(d.code,{children:"false"})}),(0,r.jsx)(d.td,{children:"Allow connections to SSL registry without certs"})]}),(0,r.jsxs)(d.tr,{children:[(0,r.jsx)(d.td,{children:(0,r.jsx)(d.code,{children:"--no-color"})}),(0,r.jsx)(d.td,{children:(0,r.jsx)(d.code,{children:"bool"})}),(0,r.jsx)(d.td,{children:(0,r.jsx)(d.code,{children:"false"})}),(0,r.jsx)(d.td,{children:"If specified, output won't contain any color"})]}),(0,r.jsxs)(d.tr,{children:[(0,r.jsxs)(d.td,{children:[(0,r.jsx)(d.code,{children:"--password"}),", ",(0,r.jsx)(d.code,{children:"-p"})]}),(0,r.jsx)(d.td,{children:(0,r.jsx)(d.code,{children:"string"})}),(0,r.jsx)(d.td,{}),(0,r.jsx)(d.td,{children:"Password or personal access token used to log against the Docker registry"})]}),(0,r.jsxs)(d.tr,{children:[(0,r.jsx)(d.td,{children:(0,r.jsx)(d.code,{children:"--plain-http"})}),(0,r.jsx)(d.td,{children:(0,r.jsx)(d.code,{children:"bool"})}),(0,r.jsx)(d.td,{children:(0,r.jsx)(d.code,{children:"false"})}),(0,r.jsx)(d.td,{children:"Allow insecure connections to registry without SSL check"})]}),(0,r.jsxs)(d.tr,{children:[(0,r.jsxs)(d.td,{children:[(0,r.jsx)(d.code,{children:"--recipe"}),", ",(0,r.jsx)(d.code,{children:"-r"})]}),(0,r.jsx)(d.td,{children:(0,r.jsx)(d.code,{children:"string"})}),(0,r.jsx)(d.td,{}),(0,r.jsx)(d.td,{children:"Name of the recipe to check for new versions"})]}),(0,r.jsxs)(d.tr,{children:[(0,r.jsx)(d.td,{children:(0,r.jsx)(d.code,{children:"--registry-config"})}),(0,r.jsx)(d.td,{children:(0,r.jsx)(d.code,{children:"[]string"})}),(0,r.jsx)(d.td,{children:(0,r.jsx)(d.code,{children:"[]"})}),(0,r.jsx)(d.td,{children:"Path of the authentication file"})]}),(0,r.jsxs)(d.tr,{children:[(0,r.jsxs)(d.td,{children:[(0,r.jsx)(d.code,{children:"--username"}),", ",(0,r.jsx)(d.code,{children:"-u"})]}),(0,r.jsx)(d.td,{children:(0,r.jsx)(d.code,{children:"string"})}),(0,r.jsx)(d.td,{}),(0,r.jsx)(d.td,{children:"Username used to log against the Docker registry"})]}),(0,r.jsxs)(d.tr,{children:[(0,r.jsxs)(d.td,{children:[(0,r.jsx)(d.code,{children:"--verbose"}),", ",(0,r.jsx)(d.code,{children:"-v"})]}),(0,r.jsx)(d.td,{children:(0,r.jsx)(d.code,{children:"bool"})}),(0,r.jsx)(d.td,{children:(0,r.jsx)(d.code,{children:"false"})}),(0,r.jsx)(d.td,{children:"Verbose output"})]})]})]}),"\n",(0,r.jsx)(d.hr,{}),"\n",(0,r.jsx)(d.h3,{id:"create",children:"create"}),"\n",(0,r.jsx)(d.p,{children:"Create a new recipe with the given name."}),"\n",(0,r.jsx)(d.p,{children:"The following files will be created:"}),"\n",(0,r.jsx)(d.pre,{children:(0,r.jsx)(d.code,{children:"my-recipe\n\u251c\u2500\u2500 recipe.yml\n\u251c\u2500\u2500 templates\n\u2502 \u2514\u2500\u2500 README.md\n\u2514\u2500\u2500 tests\n \u2514\u2500\u2500 defaults\n \u251c\u2500\u2500 test.yml\n \u2514\u2500\u2500 files\n \u2514\u2500\u2500 README.md\n"})}),"\n",(0,r.jsxs)(d.h4,{id:"usage-jalapeno-create-recipe_name",children:["Usage: ",(0,r.jsx)(d.code,{children:"jalapeno create RECIPE_NAME"})]}),"\n",(0,r.jsx)(d.h4,{id:"examples-1",children:"Examples"}),"\n",(0,r.jsx)(d.pre,{children:(0,r.jsx)(d.code,{children:"jalapeno create my-recipe\n"})}),"\n",(0,r.jsx)(d.h4,{id:"create-options",children:"Options"}),"\n",(0,r.jsxs)(d.table,{children:[(0,r.jsx)(d.thead,{children:(0,r.jsxs)(d.tr,{children:[(0,r.jsx)(d.th,{children:"Name"}),(0,r.jsx)(d.th,{children:"Type"}),(0,r.jsx)(d.th,{children:"Default"}),(0,r.jsx)(d.th,{children:"Description"})]})}),(0,r.jsxs)(d.tbody,{children:[(0,r.jsxs)(d.tr,{children:[(0,r.jsx)(d.td,{children:(0,r.jsx)(d.code,{children:"--debug"})}),(0,r.jsx)(d.td,{children:(0,r.jsx)(d.code,{children:"bool"})}),(0,r.jsx)(d.td,{children:(0,r.jsx)(d.code,{children:"false"})}),(0,r.jsx)(d.td,{children:"Debug mode"})]}),(0,r.jsxs)(d.tr,{children:[(0,r.jsxs)(d.td,{children:[(0,r.jsx)(d.code,{children:"--dir"}),", ",(0,r.jsx)(d.code,{children:"-d"})]}),(0,r.jsx)(d.td,{children:(0,r.jsx)(d.code,{children:"string"})}),(0,r.jsx)(d.td,{children:(0,r.jsx)(d.code,{children:"."})}),(0,r.jsx)(d.td,{children:"Sets working directory"})]}),(0,r.jsxs)(d.tr,{children:[(0,r.jsx)(d.td,{children:(0,r.jsx)(d.code,{children:"--no-color"})}),(0,r.jsx)(d.td,{children:(0,r.jsx)(d.code,{children:"bool"})}),(0,r.jsx)(d.td,{children:(0,r.jsx)(d.code,{children:"false"})}),(0,r.jsx)(d.td,{children:"If specified, output won't contain any color"})]}),(0,r.jsxs)(d.tr,{children:[(0,r.jsxs)(d.td,{children:[(0,r.jsx)(d.code,{children:"--verbose"}),", ",(0,r.jsx)(d.code,{children:"-v"})]}),(0,r.jsx)(d.td,{children:(0,r.jsx)(d.code,{children:"bool"})}),(0,r.jsx)(d.td,{children:(0,r.jsx)(d.code,{children:"false"})}),(0,r.jsx)(d.td,{children:"Verbose output"})]})]})]}),"\n",(0,r.jsx)(d.hr,{}),"\n",(0,r.jsx)(d.h3,{id:"eject",children:"eject"}),"\n",(0,r.jsx)(d.p,{children:"Remove all the files and directories that are for Jalapeno internal use, and leave only the rendered project files."}),"\n",(0,r.jsxs)(d.h4,{id:"usage-jalapeno-eject",children:["Usage: ",(0,r.jsx)(d.code,{children:"jalapeno eject"})]}),"\n",(0,r.jsx)(d.h4,{id:"examples-2",children:"Examples"}),"\n",(0,r.jsx)(d.pre,{children:(0,r.jsx)(d.code,{children:"jalapeno eject\n"})}),"\n",(0,r.jsx)(d.h4,{id:"eject-options",children:"Options"}),"\n",(0,r.jsxs)(d.table,{children:[(0,r.jsx)(d.thead,{children:(0,r.jsxs)(d.tr,{children:[(0,r.jsx)(d.th,{children:"Name"}),(0,r.jsx)(d.th,{children:"Type"}),(0,r.jsx)(d.th,{children:"Default"}),(0,r.jsx)(d.th,{children:"Description"})]})}),(0,r.jsxs)(d.tbody,{children:[(0,r.jsxs)(d.tr,{children:[(0,r.jsx)(d.td,{children:(0,r.jsx)(d.code,{children:"--debug"})}),(0,r.jsx)(d.td,{children:(0,r.jsx)(d.code,{children:"bool"})}),(0,r.jsx)(d.td,{children:(0,r.jsx)(d.code,{children:"false"})}),(0,r.jsx)(d.td,{children:"Debug mode"})]}),(0,r.jsxs)(d.tr,{children:[(0,r.jsxs)(d.td,{children:[(0,r.jsx)(d.code,{children:"--dir"}),", ",(0,r.jsx)(d.code,{children:"-d"})]}),(0,r.jsx)(d.td,{children:(0,r.jsx)(d.code,{children:"string"})}),(0,r.jsx)(d.td,{children:(0,r.jsx)(d.code,{children:"."})}),(0,r.jsx)(d.td,{children:"Sets working directory"})]}),(0,r.jsxs)(d.tr,{children:[(0,r.jsx)(d.td,{children:(0,r.jsx)(d.code,{children:"--no-color"})}),(0,r.jsx)(d.td,{children:(0,r.jsx)(d.code,{children:"bool"})}),(0,r.jsx)(d.td,{children:(0,r.jsx)(d.code,{children:"false"})}),(0,r.jsx)(d.td,{children:"If specified, output won't contain any color"})]}),(0,r.jsxs)(d.tr,{children:[(0,r.jsxs)(d.td,{children:[(0,r.jsx)(d.code,{children:"--verbose"}),", ",(0,r.jsx)(d.code,{children:"-v"})]}),(0,r.jsx)(d.td,{children:(0,r.jsx)(d.code,{children:"bool"})}),(0,r.jsx)(d.td,{children:(0,r.jsx)(d.code,{children:"false"})}),(0,r.jsx)(d.td,{children:"Verbose output"})]})]})]}),"\n",(0,r.jsx)(d.hr,{}),"\n",(0,r.jsx)(d.h3,{id:"execute",children:"execute"}),"\n",(0,r.jsxs)(d.p,{children:[(0,r.jsx)(d.strong,{children:"Aliases"}),": ",(0,r.jsx)(d.code,{children:"exec"}),", ",(0,r.jsx)(d.code,{children:"e"}),", ",(0,r.jsx)(d.code,{children:"run"})]}),"\n",(0,r.jsx)(d.p,{children:"Executes (renders) a recipe and outputs the files to the directory. Recipe URL can be a local path or a remote URL (ex. 'oci://docker.io/my-recipe')."}),"\n",(0,r.jsxs)(d.h4,{id:"usage-jalapeno-execute-recipe_url",children:["Usage: ",(0,r.jsx)(d.code,{children:"jalapeno execute RECIPE_URL"})]}),"\n",(0,r.jsx)(d.h4,{id:"examples-3",children:"Examples"}),"\n",(0,r.jsx)(d.pre,{children:(0,r.jsx)(d.code,{children:"# Execute local recipe\njalapeno execute path/to/recipe\n\n# Execute recipe from OCI repository\njalapeno execute oci://ghcr.io/user/my-recipe:latest\n\n# Execute recipe from OCI repository with inline authentication\njalapeno execute oci://ghcr.io/user/my-recipe:latest --username user --password pass\n\n# Execute recipe from OCI repository with Docker authentication\ndocker login ghcr.io\njalapeno execute oci://ghcr.io/user/my-recipe:latest\n\n# Execute recipe to different directory\njalapeno execute path/to/recipe --dir other/dir\n\n# Set variable values with flags\njalapeno execute path/to/recipe --set MY_VAR=foo --set MY_OTHER_VAR=bar\n\n# Set variable values with environment variables\nexport JALAPENO_VAR_MY_VAR=foo\njalapeno execute path/to/recipe\n"})}),"\n",(0,r.jsx)(d.h4,{id:"execute-options",children:"Options"}),"\n",(0,r.jsxs)(d.table,{children:[(0,r.jsx)(d.thead,{children:(0,r.jsxs)(d.tr,{children:[(0,r.jsx)(d.th,{children:"Name"}),(0,r.jsx)(d.th,{children:"Type"}),(0,r.jsx)(d.th,{children:"Default"}),(0,r.jsx)(d.th,{children:"Description"})]})}),(0,r.jsxs)(d.tbody,{children:[(0,r.jsxs)(d.tr,{children:[(0,r.jsx)(d.td,{children:(0,r.jsx)(d.code,{children:"--ca-file"})}),(0,r.jsx)(d.td,{children:(0,r.jsx)(d.code,{children:"string"})}),(0,r.jsx)(d.td,{}),(0,r.jsx)(d.td,{children:"Server certificate authority file for the remote registry"})]}),(0,r.jsxs)(d.tr,{children:[(0,r.jsx)(d.td,{children:(0,r.jsx)(d.code,{children:"--debug"})}),(0,r.jsx)(d.td,{children:(0,r.jsx)(d.code,{children:"bool"})}),(0,r.jsx)(d.td,{children:(0,r.jsx)(d.code,{children:"false"})}),(0,r.jsx)(d.td,{children:"Debug mode"})]}),(0,r.jsxs)(d.tr,{children:[(0,r.jsx)(d.td,{children:(0,r.jsx)(d.code,{children:"--delimiter"})}),(0,r.jsx)(d.td,{children:(0,r.jsx)(d.code,{children:"string"})}),(0,r.jsx)(d.td,{children:(0,r.jsx)(d.code,{children:","})}),(0,r.jsx)(d.td,{children:"Delimiter used when setting table variables"})]}),(0,r.jsxs)(d.tr,{children:[(0,r.jsxs)(d.td,{children:[(0,r.jsx)(d.code,{children:"--dir"}),", ",(0,r.jsx)(d.code,{children:"-d"})]}),(0,r.jsx)(d.td,{children:(0,r.jsx)(d.code,{children:"string"})}),(0,r.jsx)(d.td,{children:(0,r.jsx)(d.code,{children:"."})}),(0,r.jsx)(d.td,{children:"Sets working directory"})]}),(0,r.jsxs)(d.tr,{children:[(0,r.jsx)(d.td,{children:(0,r.jsx)(d.code,{children:"--insecure"})}),(0,r.jsx)(d.td,{children:(0,r.jsx)(d.code,{children:"bool"})}),(0,r.jsx)(d.td,{children:(0,r.jsx)(d.code,{children:"false"})}),(0,r.jsx)(d.td,{children:"Allow connections to SSL registry without certs"})]}),(0,r.jsxs)(d.tr,{children:[(0,r.jsx)(d.td,{children:(0,r.jsx)(d.code,{children:"--no-color"})}),(0,r.jsx)(d.td,{children:(0,r.jsx)(d.code,{children:"bool"})}),(0,r.jsx)(d.td,{children:(0,r.jsx)(d.code,{children:"false"})}),(0,r.jsx)(d.td,{children:"If specified, output won't contain any color"})]}),(0,r.jsxs)(d.tr,{children:[(0,r.jsx)(d.td,{children:(0,r.jsx)(d.code,{children:"--no-input"})}),(0,r.jsx)(d.td,{children:(0,r.jsx)(d.code,{children:"bool"})}),(0,r.jsx)(d.td,{children:(0,r.jsx)(d.code,{children:"false"})}),(0,r.jsx)(d.td,{children:"If set to true, the program will exit with an error code if it needs to wait for any user input. This is useful when running the program in CI/CD environment"})]}),(0,r.jsxs)(d.tr,{children:[(0,r.jsxs)(d.td,{children:[(0,r.jsx)(d.code,{children:"--password"}),", ",(0,r.jsx)(d.code,{children:"-p"})]}),(0,r.jsx)(d.td,{children:(0,r.jsx)(d.code,{children:"string"})}),(0,r.jsx)(d.td,{}),(0,r.jsx)(d.td,{children:"Password or personal access token used to log against the Docker registry"})]}),(0,r.jsxs)(d.tr,{children:[(0,r.jsx)(d.td,{children:(0,r.jsx)(d.code,{children:"--plain-http"})}),(0,r.jsx)(d.td,{children:(0,r.jsx)(d.code,{children:"bool"})}),(0,r.jsx)(d.td,{children:(0,r.jsx)(d.code,{children:"false"})}),(0,r.jsx)(d.td,{children:"Allow insecure connections to registry without SSL check"})]}),(0,r.jsxs)(d.tr,{children:[(0,r.jsx)(d.td,{children:(0,r.jsx)(d.code,{children:"--registry-config"})}),(0,r.jsx)(d.td,{children:(0,r.jsx)(d.code,{children:"[]string"})}),(0,r.jsx)(d.td,{children:(0,r.jsx)(d.code,{children:"[]"})}),(0,r.jsx)(d.td,{children:"Path of the authentication file"})]}),(0,r.jsxs)(d.tr,{children:[(0,r.jsxs)(d.td,{children:[(0,r.jsx)(d.code,{children:"--reuse-other-sauce-values"}),", ",(0,r.jsx)(d.code,{children:"-r"})]}),(0,r.jsx)(d.td,{children:(0,r.jsx)(d.code,{children:"bool"})}),(0,r.jsx)(d.td,{children:(0,r.jsx)(d.code,{children:"false"})}),(0,r.jsxs)(d.td,{children:["By default each sauce has their own set of values even if the variable names are same in both recipes. Setting this to ",(0,r.jsx)(d.code,{children:"true"}),", values from other sauces will be reused if the variable names match"]})]}),(0,r.jsxs)(d.tr,{children:[(0,r.jsxs)(d.td,{children:[(0,r.jsx)(d.code,{children:"--set"}),", ",(0,r.jsx)(d.code,{children:"-s"})]}),(0,r.jsx)(d.td,{children:(0,r.jsx)(d.code,{children:"[]string"})}),(0,r.jsx)(d.td,{children:(0,r.jsx)(d.code,{children:"[]"})}),(0,r.jsxs)(d.td,{children:["Set values to be used in the templates. Example: ",(0,r.jsx)(d.code,{children:'--set "MY_VAR=foo"'})]})]}),(0,r.jsxs)(d.tr,{children:[(0,r.jsxs)(d.td,{children:[(0,r.jsx)(d.code,{children:"--username"}),", ",(0,r.jsx)(d.code,{children:"-u"})]}),(0,r.jsx)(d.td,{children:(0,r.jsx)(d.code,{children:"string"})}),(0,r.jsx)(d.td,{}),(0,r.jsx)(d.td,{children:"Username used to log against the Docker registry"})]}),(0,r.jsxs)(d.tr,{children:[(0,r.jsxs)(d.td,{children:[(0,r.jsx)(d.code,{children:"--verbose"}),", ",(0,r.jsx)(d.code,{children:"-v"})]}),(0,r.jsx)(d.td,{children:(0,r.jsx)(d.code,{children:"bool"})}),(0,r.jsx)(d.td,{children:(0,r.jsx)(d.code,{children:"false"})}),(0,r.jsx)(d.td,{children:"Verbose output"})]})]})]}),"\n",(0,r.jsx)(d.hr,{}),"\n",(0,r.jsx)(d.h3,{id:"pull",children:"pull"}),"\n",(0,r.jsxs)(d.p,{children:["Pull a recipe from OCI repository and save it locally. You can authenticate by using the ",(0,r.jsx)(d.code,{children:"--username"})," and ",(0,r.jsx)(d.code,{children:"--password"})," flags or logging in first with ",(0,r.jsx)(d.code,{children:"docker login"}),"."]}),"\n",(0,r.jsxs)(d.h4,{id:"usage-jalapeno-pull-url",children:["Usage: ",(0,r.jsx)(d.code,{children:"jalapeno pull URL"})]}),"\n",(0,r.jsx)(d.h4,{id:"examples-4",children:"Examples"}),"\n",(0,r.jsx)(d.pre,{children:(0,r.jsx)(d.code,{children:"# Pull recipe from OCI repository\njalapeno pull ghcr.io/user/recipe:latest\n\n# Pull recipe from OCI repository with inline authentication\njalapeno pull oci://ghcr.io/user/my-recipe:latest --username user --password pass\n\n# Pull recipe from OCI repository with Docker authentication\ndocker login ghcr.io\njalapeno pull oci://ghcr.io/user/my-recipe:latest\n\n# Pull recipe to different directory\njalapeno pull oci://ghcr.io/user/my-recipe:latest --dir other/dir\n"})}),"\n",(0,r.jsx)(d.h4,{id:"pull-options",children:"Options"}),"\n",(0,r.jsxs)(d.table,{children:[(0,r.jsx)(d.thead,{children:(0,r.jsxs)(d.tr,{children:[(0,r.jsx)(d.th,{children:"Name"}),(0,r.jsx)(d.th,{children:"Type"}),(0,r.jsx)(d.th,{children:"Default"}),(0,r.jsx)(d.th,{children:"Description"})]})}),(0,r.jsxs)(d.tbody,{children:[(0,r.jsxs)(d.tr,{children:[(0,r.jsx)(d.td,{children:(0,r.jsx)(d.code,{children:"--ca-file"})}),(0,r.jsx)(d.td,{children:(0,r.jsx)(d.code,{children:"string"})}),(0,r.jsx)(d.td,{}),(0,r.jsx)(d.td,{children:"Server certificate authority file for the remote registry"})]}),(0,r.jsxs)(d.tr,{children:[(0,r.jsx)(d.td,{children:(0,r.jsx)(d.code,{children:"--debug"})}),(0,r.jsx)(d.td,{children:(0,r.jsx)(d.code,{children:"bool"})}),(0,r.jsx)(d.td,{children:(0,r.jsx)(d.code,{children:"false"})}),(0,r.jsx)(d.td,{children:"Debug mode"})]}),(0,r.jsxs)(d.tr,{children:[(0,r.jsxs)(d.td,{children:[(0,r.jsx)(d.code,{children:"--dir"}),", ",(0,r.jsx)(d.code,{children:"-d"})]}),(0,r.jsx)(d.td,{children:(0,r.jsx)(d.code,{children:"string"})}),(0,r.jsx)(d.td,{children:(0,r.jsx)(d.code,{children:"."})}),(0,r.jsx)(d.td,{children:"Sets working directory"})]}),(0,r.jsxs)(d.tr,{children:[(0,r.jsx)(d.td,{children:(0,r.jsx)(d.code,{children:"--insecure"})}),(0,r.jsx)(d.td,{children:(0,r.jsx)(d.code,{children:"bool"})}),(0,r.jsx)(d.td,{children:(0,r.jsx)(d.code,{children:"false"})}),(0,r.jsx)(d.td,{children:"Allow connections to SSL registry without certs"})]}),(0,r.jsxs)(d.tr,{children:[(0,r.jsx)(d.td,{children:(0,r.jsx)(d.code,{children:"--no-color"})}),(0,r.jsx)(d.td,{children:(0,r.jsx)(d.code,{children:"bool"})}),(0,r.jsx)(d.td,{children:(0,r.jsx)(d.code,{children:"false"})}),(0,r.jsx)(d.td,{children:"If specified, output won't contain any color"})]}),(0,r.jsxs)(d.tr,{children:[(0,r.jsxs)(d.td,{children:[(0,r.jsx)(d.code,{children:"--password"}),", ",(0,r.jsx)(d.code,{children:"-p"})]}),(0,r.jsx)(d.td,{children:(0,r.jsx)(d.code,{children:"string"})}),(0,r.jsx)(d.td,{}),(0,r.jsx)(d.td,{children:"Password or personal access token used to log against the Docker registry"})]}),(0,r.jsxs)(d.tr,{children:[(0,r.jsx)(d.td,{children:(0,r.jsx)(d.code,{children:"--plain-http"})}),(0,r.jsx)(d.td,{children:(0,r.jsx)(d.code,{children:"bool"})}),(0,r.jsx)(d.td,{children:(0,r.jsx)(d.code,{children:"false"})}),(0,r.jsx)(d.td,{children:"Allow insecure connections to registry without SSL check"})]}),(0,r.jsxs)(d.tr,{children:[(0,r.jsx)(d.td,{children:(0,r.jsx)(d.code,{children:"--registry-config"})}),(0,r.jsx)(d.td,{children:(0,r.jsx)(d.code,{children:"[]string"})}),(0,r.jsx)(d.td,{children:(0,r.jsx)(d.code,{children:"[]"})}),(0,r.jsx)(d.td,{children:"Path of the authentication file"})]}),(0,r.jsxs)(d.tr,{children:[(0,r.jsxs)(d.td,{children:[(0,r.jsx)(d.code,{children:"--username"}),", ",(0,r.jsx)(d.code,{children:"-u"})]}),(0,r.jsx)(d.td,{children:(0,r.jsx)(d.code,{children:"string"})}),(0,r.jsx)(d.td,{}),(0,r.jsx)(d.td,{children:"Username used to log against the Docker registry"})]}),(0,r.jsxs)(d.tr,{children:[(0,r.jsxs)(d.td,{children:[(0,r.jsx)(d.code,{children:"--verbose"}),", ",(0,r.jsx)(d.code,{children:"-v"})]}),(0,r.jsx)(d.td,{children:(0,r.jsx)(d.code,{children:"bool"})}),(0,r.jsx)(d.td,{children:(0,r.jsx)(d.code,{children:"false"})}),(0,r.jsx)(d.td,{children:"Verbose output"})]})]})]}),"\n",(0,r.jsx)(d.hr,{}),"\n",(0,r.jsx)(d.h3,{id:"push",children:"push"}),"\n",(0,r.jsxs)(d.p,{children:["Push a recipe to OCI repository (e.g. Docker registry). You can authenticate by using the ",(0,r.jsx)(d.code,{children:"--username"})," and ",(0,r.jsx)(d.code,{children:"--password"})," flags or logging in first with ",(0,r.jsx)(d.code,{children:"docker login"}),"."]}),"\n",(0,r.jsxs)(d.h4,{id:"usage-jalapeno-push-recipe_path-target_url",children:["Usage: ",(0,r.jsx)(d.code,{children:"jalapeno push RECIPE_PATH TARGET_URL"})]}),"\n",(0,r.jsx)(d.h4,{id:"examples-5",children:"Examples"}),"\n",(0,r.jsx)(d.pre,{children:(0,r.jsx)(d.code,{children:"# Push recipe to OCI repository\njalapeno push path/to/recipe ghcr.io/user/recipe\n\n# Push recipe to OCI repository with inline authentication\njalapeno push path/to/recipe oci://ghcr.io/user/my-recipe --username user --password pass\n\n# Push recipe to OCI repository with Docker authentication\ndocker login ghcr.io\njalapeno push path/to/recipe oci://ghcr.io/user/my-recipe\n"})}),"\n",(0,r.jsx)(d.h4,{id:"push-options",children:"Options"}),"\n",(0,r.jsxs)(d.table,{children:[(0,r.jsx)(d.thead,{children:(0,r.jsxs)(d.tr,{children:[(0,r.jsx)(d.th,{children:"Name"}),(0,r.jsx)(d.th,{children:"Type"}),(0,r.jsx)(d.th,{children:"Default"}),(0,r.jsx)(d.th,{children:"Description"})]})}),(0,r.jsxs)(d.tbody,{children:[(0,r.jsxs)(d.tr,{children:[(0,r.jsx)(d.td,{children:(0,r.jsx)(d.code,{children:"--ca-file"})}),(0,r.jsx)(d.td,{children:(0,r.jsx)(d.code,{children:"string"})}),(0,r.jsx)(d.td,{}),(0,r.jsx)(d.td,{children:"Server certificate authority file for the remote registry"})]}),(0,r.jsxs)(d.tr,{children:[(0,r.jsx)(d.td,{children:(0,r.jsx)(d.code,{children:"--debug"})}),(0,r.jsx)(d.td,{children:(0,r.jsx)(d.code,{children:"bool"})}),(0,r.jsx)(d.td,{children:(0,r.jsx)(d.code,{children:"false"})}),(0,r.jsx)(d.td,{children:"Debug mode"})]}),(0,r.jsxs)(d.tr,{children:[(0,r.jsx)(d.td,{children:(0,r.jsx)(d.code,{children:"--insecure"})}),(0,r.jsx)(d.td,{children:(0,r.jsx)(d.code,{children:"bool"})}),(0,r.jsx)(d.td,{children:(0,r.jsx)(d.code,{children:"false"})}),(0,r.jsx)(d.td,{children:"Allow connections to SSL registry without certs"})]}),(0,r.jsxs)(d.tr,{children:[(0,r.jsx)(d.td,{children:(0,r.jsx)(d.code,{children:"--no-color"})}),(0,r.jsx)(d.td,{children:(0,r.jsx)(d.code,{children:"bool"})}),(0,r.jsx)(d.td,{children:(0,r.jsx)(d.code,{children:"false"})}),(0,r.jsx)(d.td,{children:"If specified, output won't contain any color"})]}),(0,r.jsxs)(d.tr,{children:[(0,r.jsxs)(d.td,{children:[(0,r.jsx)(d.code,{children:"--password"}),", ",(0,r.jsx)(d.code,{children:"-p"})]}),(0,r.jsx)(d.td,{children:(0,r.jsx)(d.code,{children:"string"})}),(0,r.jsx)(d.td,{}),(0,r.jsx)(d.td,{children:"Password or personal access token used to log against the Docker registry"})]}),(0,r.jsxs)(d.tr,{children:[(0,r.jsx)(d.td,{children:(0,r.jsx)(d.code,{children:"--plain-http"})}),(0,r.jsx)(d.td,{children:(0,r.jsx)(d.code,{children:"bool"})}),(0,r.jsx)(d.td,{children:(0,r.jsx)(d.code,{children:"false"})}),(0,r.jsx)(d.td,{children:"Allow insecure connections to registry without SSL check"})]}),(0,r.jsxs)(d.tr,{children:[(0,r.jsx)(d.td,{children:(0,r.jsx)(d.code,{children:"--registry-config"})}),(0,r.jsx)(d.td,{children:(0,r.jsx)(d.code,{children:"[]string"})}),(0,r.jsx)(d.td,{children:(0,r.jsx)(d.code,{children:"[]"})}),(0,r.jsx)(d.td,{children:"Path of the authentication file"})]}),(0,r.jsxs)(d.tr,{children:[(0,r.jsxs)(d.td,{children:[(0,r.jsx)(d.code,{children:"--username"}),", ",(0,r.jsx)(d.code,{children:"-u"})]}),(0,r.jsx)(d.td,{children:(0,r.jsx)(d.code,{children:"string"})}),(0,r.jsx)(d.td,{}),(0,r.jsx)(d.td,{children:"Username used to log against the Docker registry"})]}),(0,r.jsxs)(d.tr,{children:[(0,r.jsxs)(d.td,{children:[(0,r.jsx)(d.code,{children:"--verbose"}),", ",(0,r.jsx)(d.code,{children:"-v"})]}),(0,r.jsx)(d.td,{children:(0,r.jsx)(d.code,{children:"bool"})}),(0,r.jsx)(d.td,{children:(0,r.jsx)(d.code,{children:"false"})}),(0,r.jsx)(d.td,{children:"Verbose output"})]})]})]}),"\n",(0,r.jsx)(d.hr,{}),"\n",(0,r.jsx)(d.h3,{id:"test",children:"test"}),"\n",(0,r.jsx)(d.p,{children:"Run tests for the recipe."}),"\n",(0,r.jsxs)(d.h4,{id:"usage-jalapeno-test-recipe_path",children:["Usage: ",(0,r.jsx)(d.code,{children:"jalapeno test RECIPE_PATH"})]}),"\n",(0,r.jsx)(d.h4,{id:"examples-6",children:"Examples"}),"\n",(0,r.jsx)(d.pre,{children:(0,r.jsx)(d.code,{children:"# Run recipe tests\njalapeno test path/to/recipe\n\n# Bootstrap a new test case\njalapeno test path/to/recipe --create\n\n# Update test file snapshots with the current outputs\njalapeno test path/to/recipe --update-snapshots\n"})}),"\n",(0,r.jsx)(d.h4,{id:"test-options",children:"Options"}),"\n",(0,r.jsxs)(d.table,{children:[(0,r.jsx)(d.thead,{children:(0,r.jsxs)(d.tr,{children:[(0,r.jsx)(d.th,{children:"Name"}),(0,r.jsx)(d.th,{children:"Type"}),(0,r.jsx)(d.th,{children:"Default"}),(0,r.jsx)(d.th,{children:"Description"})]})}),(0,r.jsxs)(d.tbody,{children:[(0,r.jsxs)(d.tr,{children:[(0,r.jsxs)(d.td,{children:[(0,r.jsx)(d.code,{children:"--create"}),", ",(0,r.jsx)(d.code,{children:"-c"})]}),(0,r.jsx)(d.td,{children:(0,r.jsx)(d.code,{children:"bool"})}),(0,r.jsx)(d.td,{children:(0,r.jsx)(d.code,{children:"false"})}),(0,r.jsx)(d.td,{children:"Create a new test case"})]}),(0,r.jsxs)(d.tr,{children:[(0,r.jsx)(d.td,{children:(0,r.jsx)(d.code,{children:"--debug"})}),(0,r.jsx)(d.td,{children:(0,r.jsx)(d.code,{children:"bool"})}),(0,r.jsx)(d.td,{children:(0,r.jsx)(d.code,{children:"false"})}),(0,r.jsx)(d.td,{children:"Debug mode"})]}),(0,r.jsxs)(d.tr,{children:[(0,r.jsx)(d.td,{children:(0,r.jsx)(d.code,{children:"--no-color"})}),(0,r.jsx)(d.td,{children:(0,r.jsx)(d.code,{children:"bool"})}),(0,r.jsx)(d.td,{children:(0,r.jsx)(d.code,{children:"false"})}),(0,r.jsx)(d.td,{children:"If specified, output won't contain any color"})]}),(0,r.jsxs)(d.tr,{children:[(0,r.jsxs)(d.td,{children:[(0,r.jsx)(d.code,{children:"--update-snapshots"}),", ",(0,r.jsx)(d.code,{children:"-u"})]}),(0,r.jsx)(d.td,{children:(0,r.jsx)(d.code,{children:"bool"})}),(0,r.jsx)(d.td,{children:(0,r.jsx)(d.code,{children:"false"})}),(0,r.jsx)(d.td,{children:"Update test file snapshots"})]}),(0,r.jsxs)(d.tr,{children:[(0,r.jsxs)(d.td,{children:[(0,r.jsx)(d.code,{children:"--verbose"}),", ",(0,r.jsx)(d.code,{children:"-v"})]}),(0,r.jsx)(d.td,{children:(0,r.jsx)(d.code,{children:"bool"})}),(0,r.jsx)(d.td,{children:(0,r.jsx)(d.code,{children:"false"})}),(0,r.jsx)(d.td,{children:"Verbose output"})]})]})]}),"\n",(0,r.jsx)(d.hr,{}),"\n",(0,r.jsx)(d.h3,{id:"upgrade",children:"upgrade"}),"\n",(0,r.jsx)(d.p,{children:"Upgrade a recipe in a project with a newer version. Recipe URL can be a local path or a remote URL (ex. 'oci://docker.io/my-recipe')."}),"\n",(0,r.jsxs)(d.h4,{id:"usage-jalapeno-upgrade-recipe_url",children:["Usage: ",(0,r.jsx)(d.code,{children:"jalapeno upgrade RECIPE_URL"})]}),"\n",(0,r.jsx)(d.h4,{id:"examples-7",children:"Examples"}),"\n",(0,r.jsx)(d.pre,{children:(0,r.jsx)(d.code,{children:"# Upgrade recipe with local recipe\njalapeno upgrade path/to/recipe\n\n# Upgrade recipe with remote recipe from OCI repository\njalapeno upgrade oci://ghcr.io/user/my-recipe:v2.0.0\n\n# Upgrade recipe with remote recipe from OCI repository with inline authentication\njalapeno upgrade oci://ghcr.io/user/my-recipe:v2.0.0 --username user --password pass\n\n# Upgrade recipe with remote recipe from OCI repository with Docker authentication\ndocker login ghcr.io\njalapeno upgrade oci://ghcr.io/user/my-recipe:v2.0.0\n\n# Upgrade recipe to different directory\njalapeno upgrade path/to/recipe --dir other/dir\n\n# Set values for new variables introduced in the upgrade\njalapeno upgrade path/to/recipe --set NEW_VAR=foo\n"})}),"\n",(0,r.jsx)(d.h4,{id:"upgrade-options",children:"Options"}),"\n",(0,r.jsxs)(d.table,{children:[(0,r.jsx)(d.thead,{children:(0,r.jsxs)(d.tr,{children:[(0,r.jsx)(d.th,{children:"Name"}),(0,r.jsx)(d.th,{children:"Type"}),(0,r.jsx)(d.th,{children:"Default"}),(0,r.jsx)(d.th,{children:"Description"})]})}),(0,r.jsxs)(d.tbody,{children:[(0,r.jsxs)(d.tr,{children:[(0,r.jsx)(d.td,{children:(0,r.jsx)(d.code,{children:"--ca-file"})}),(0,r.jsx)(d.td,{children:(0,r.jsx)(d.code,{children:"string"})}),(0,r.jsx)(d.td,{}),(0,r.jsx)(d.td,{children:"Server certificate authority file for the remote registry"})]}),(0,r.jsxs)(d.tr,{children:[(0,r.jsx)(d.td,{children:(0,r.jsx)(d.code,{children:"--debug"})}),(0,r.jsx)(d.td,{children:(0,r.jsx)(d.code,{children:"bool"})}),(0,r.jsx)(d.td,{children:(0,r.jsx)(d.code,{children:"false"})}),(0,r.jsx)(d.td,{children:"Debug mode"})]}),(0,r.jsxs)(d.tr,{children:[(0,r.jsx)(d.td,{children:(0,r.jsx)(d.code,{children:"--delimiter"})}),(0,r.jsx)(d.td,{children:(0,r.jsx)(d.code,{children:"string"})}),(0,r.jsx)(d.td,{children:(0,r.jsx)(d.code,{children:","})}),(0,r.jsx)(d.td,{children:"Delimiter used when setting table variables"})]}),(0,r.jsxs)(d.tr,{children:[(0,r.jsxs)(d.td,{children:[(0,r.jsx)(d.code,{children:"--dir"}),", ",(0,r.jsx)(d.code,{children:"-d"})]}),(0,r.jsx)(d.td,{children:(0,r.jsx)(d.code,{children:"string"})}),(0,r.jsx)(d.td,{children:(0,r.jsx)(d.code,{children:"."})}),(0,r.jsx)(d.td,{children:"Sets working directory"})]}),(0,r.jsxs)(d.tr,{children:[(0,r.jsx)(d.td,{children:(0,r.jsx)(d.code,{children:"--insecure"})}),(0,r.jsx)(d.td,{children:(0,r.jsx)(d.code,{children:"bool"})}),(0,r.jsx)(d.td,{children:(0,r.jsx)(d.code,{children:"false"})}),(0,r.jsx)(d.td,{children:"Allow connections to SSL registry without certs"})]}),(0,r.jsxs)(d.tr,{children:[(0,r.jsx)(d.td,{children:(0,r.jsx)(d.code,{children:"--no-color"})}),(0,r.jsx)(d.td,{children:(0,r.jsx)(d.code,{children:"bool"})}),(0,r.jsx)(d.td,{children:(0,r.jsx)(d.code,{children:"false"})}),(0,r.jsx)(d.td,{children:"If specified, output won't contain any color"})]}),(0,r.jsxs)(d.tr,{children:[(0,r.jsx)(d.td,{children:(0,r.jsx)(d.code,{children:"--no-input"})}),(0,r.jsx)(d.td,{children:(0,r.jsx)(d.code,{children:"bool"})}),(0,r.jsx)(d.td,{children:(0,r.jsx)(d.code,{children:"false"})}),(0,r.jsx)(d.td,{children:"If set to true, the program will exit with an error code if it needs to wait for any user input. This is useful when running the program in CI/CD environment"})]}),(0,r.jsxs)(d.tr,{children:[(0,r.jsxs)(d.td,{children:[(0,r.jsx)(d.code,{children:"--password"}),", ",(0,r.jsx)(d.code,{children:"-p"})]}),(0,r.jsx)(d.td,{children:(0,r.jsx)(d.code,{children:"string"})}),(0,r.jsx)(d.td,{}),(0,r.jsx)(d.td,{children:"Password or personal access token used to log against the Docker registry"})]}),(0,r.jsxs)(d.tr,{children:[(0,r.jsx)(d.td,{children:(0,r.jsx)(d.code,{children:"--plain-http"})}),(0,r.jsx)(d.td,{children:(0,r.jsx)(d.code,{children:"bool"})}),(0,r.jsx)(d.td,{children:(0,r.jsx)(d.code,{children:"false"})}),(0,r.jsx)(d.td,{children:"Allow insecure connections to registry without SSL check"})]}),(0,r.jsxs)(d.tr,{children:[(0,r.jsx)(d.td,{children:(0,r.jsx)(d.code,{children:"--registry-config"})}),(0,r.jsx)(d.td,{children:(0,r.jsx)(d.code,{children:"[]string"})}),(0,r.jsx)(d.td,{children:(0,r.jsx)(d.code,{children:"[]"})}),(0,r.jsx)(d.td,{children:"Path of the authentication file"})]}),(0,r.jsxs)(d.tr,{children:[(0,r.jsx)(d.td,{children:(0,r.jsx)(d.code,{children:"--reuse-old-values"})}),(0,r.jsx)(d.td,{children:(0,r.jsx)(d.code,{children:"bool"})}),(0,r.jsx)(d.td,{children:(0,r.jsx)(d.code,{children:"true"})}),(0,r.jsx)(d.td,{children:"Automatically set values for variables which already have a value in the existing sauce"})]}),(0,r.jsxs)(d.tr,{children:[(0,r.jsxs)(d.td,{children:[(0,r.jsx)(d.code,{children:"--reuse-other-sauce-values"}),", ",(0,r.jsx)(d.code,{children:"-r"})]}),(0,r.jsx)(d.td,{children:(0,r.jsx)(d.code,{children:"bool"})}),(0,r.jsx)(d.td,{children:(0,r.jsx)(d.code,{children:"false"})}),(0,r.jsxs)(d.td,{children:["By default each sauce has their own set of values even if the variable names are same in both recipes. Setting this to ",(0,r.jsx)(d.code,{children:"true"}),", values from other sauces will be reused if the variable names match"]})]}),(0,r.jsxs)(d.tr,{children:[(0,r.jsxs)(d.td,{children:[(0,r.jsx)(d.code,{children:"--set"}),", ",(0,r.jsx)(d.code,{children:"-s"})]}),(0,r.jsx)(d.td,{children:(0,r.jsx)(d.code,{children:"[]string"})}),(0,r.jsx)(d.td,{children:(0,r.jsx)(d.code,{children:"[]"})}),(0,r.jsxs)(d.td,{children:["Set values to be used in the templates. Example: ",(0,r.jsx)(d.code,{children:'--set "MY_VAR=foo"'})]})]}),(0,r.jsxs)(d.tr,{children:[(0,r.jsxs)(d.td,{children:[(0,r.jsx)(d.code,{children:"--username"}),", ",(0,r.jsx)(d.code,{children:"-u"})]}),(0,r.jsx)(d.td,{children:(0,r.jsx)(d.code,{children:"string"})}),(0,r.jsx)(d.td,{}),(0,r.jsx)(d.td,{children:"Username used to log against the Docker registry"})]}),(0,r.jsxs)(d.tr,{children:[(0,r.jsxs)(d.td,{children:[(0,r.jsx)(d.code,{children:"--verbose"}),", ",(0,r.jsx)(d.code,{children:"-v"})]}),(0,r.jsx)(d.td,{children:(0,r.jsx)(d.code,{children:"bool"})}),(0,r.jsx)(d.td,{children:(0,r.jsx)(d.code,{children:"false"})}),(0,r.jsx)(d.td,{children:"Verbose output"})]})]})]}),"\n",(0,r.jsx)(d.hr,{}),"\n",(0,r.jsx)(d.h3,{id:"validate",children:"validate"}),"\n",(0,r.jsx)(d.p,{children:"Validate a recipe in a local path."}),"\n",(0,r.jsxs)(d.h4,{id:"usage-jalapeno-validate-recipe_path",children:["Usage: ",(0,r.jsx)(d.code,{children:"jalapeno validate RECIPE_PATH"})]}),"\n",(0,r.jsx)(d.h4,{id:"examples-8",children:"Examples"}),"\n",(0,r.jsx)(d.pre,{children:(0,r.jsx)(d.code,{children:"jalapeno validate path/to/recipe\n"})}),"\n",(0,r.jsx)(d.h4,{id:"validate-options",children:"Options"}),"\n",(0,r.jsxs)(d.table,{children:[(0,r.jsx)(d.thead,{children:(0,r.jsxs)(d.tr,{children:[(0,r.jsx)(d.th,{children:"Name"}),(0,r.jsx)(d.th,{children:"Type"}),(0,r.jsx)(d.th,{children:"Default"}),(0,r.jsx)(d.th,{children:"Description"})]})}),(0,r.jsxs)(d.tbody,{children:[(0,r.jsxs)(d.tr,{children:[(0,r.jsx)(d.td,{children:(0,r.jsx)(d.code,{children:"--debug"})}),(0,r.jsx)(d.td,{children:(0,r.jsx)(d.code,{children:"bool"})}),(0,r.jsx)(d.td,{children:(0,r.jsx)(d.code,{children:"false"})}),(0,r.jsx)(d.td,{children:"Debug mode"})]}),(0,r.jsxs)(d.tr,{children:[(0,r.jsxs)(d.td,{children:[(0,r.jsx)(d.code,{children:"--dir"}),", ",(0,r.jsx)(d.code,{children:"-d"})]}),(0,r.jsx)(d.td,{children:(0,r.jsx)(d.code,{children:"string"})}),(0,r.jsx)(d.td,{children:(0,r.jsx)(d.code,{children:"."})}),(0,r.jsx)(d.td,{children:"Sets working directory"})]}),(0,r.jsxs)(d.tr,{children:[(0,r.jsx)(d.td,{children:(0,r.jsx)(d.code,{children:"--no-color"})}),(0,r.jsx)(d.td,{children:(0,r.jsx)(d.code,{children:"bool"})}),(0,r.jsx)(d.td,{children:(0,r.jsx)(d.code,{children:"false"})}),(0,r.jsx)(d.td,{children:"If specified, output won't contain any color"})]}),(0,r.jsxs)(d.tr,{children:[(0,r.jsxs)(d.td,{children:[(0,r.jsx)(d.code,{children:"--verbose"}),", ",(0,r.jsx)(d.code,{children:"-v"})]}),(0,r.jsx)(d.td,{children:(0,r.jsx)(d.code,{children:"bool"})}),(0,r.jsx)(d.td,{children:(0,r.jsx)(d.code,{children:"false"})}),(0,r.jsx)(d.td,{children:"Verbose output"})]})]})]}),"\n",(0,r.jsx)(d.hr,{}),"\n",(0,r.jsx)(d.h3,{id:"why",children:"why"}),"\n",(0,r.jsx)(d.p,{children:"Explains where a file comes from in the project, e.g. is the file create by a recipe or user"}),"\n",(0,r.jsxs)(d.h4,{id:"usage-jalapeno-why-filepath",children:["Usage: ",(0,r.jsx)(d.code,{children:"jalapeno why FILEPATH"})]}),"\n",(0,r.jsx)(d.h4,{id:"examples-9",children:"Examples"}),"\n",(0,r.jsx)(d.pre,{children:(0,r.jsx)(d.code,{children:"jalapeno why path/to/file\n"})}),"\n",(0,r.jsx)(d.h4,{id:"why-options",children:"Options"}),"\n",(0,r.jsxs)(d.table,{children:[(0,r.jsx)(d.thead,{children:(0,r.jsxs)(d.tr,{children:[(0,r.jsx)(d.th,{children:"Name"}),(0,r.jsx)(d.th,{children:"Type"}),(0,r.jsx)(d.th,{children:"Default"}),(0,r.jsx)(d.th,{children:"Description"})]})}),(0,r.jsxs)(d.tbody,{children:[(0,r.jsxs)(d.tr,{children:[(0,r.jsx)(d.td,{children:(0,r.jsx)(d.code,{children:"--debug"})}),(0,r.jsx)(d.td,{children:(0,r.jsx)(d.code,{children:"bool"})}),(0,r.jsx)(d.td,{children:(0,r.jsx)(d.code,{children:"false"})}),(0,r.jsx)(d.td,{children:"Debug mode"})]}),(0,r.jsxs)(d.tr,{children:[(0,r.jsxs)(d.td,{children:[(0,r.jsx)(d.code,{children:"--dir"}),", ",(0,r.jsx)(d.code,{children:"-d"})]}),(0,r.jsx)(d.td,{children:(0,r.jsx)(d.code,{children:"string"})}),(0,r.jsx)(d.td,{children:(0,r.jsx)(d.code,{children:"."})}),(0,r.jsx)(d.td,{children:"Sets working directory"})]}),(0,r.jsxs)(d.tr,{children:[(0,r.jsx)(d.td,{children:(0,r.jsx)(d.code,{children:"--no-color"})}),(0,r.jsx)(d.td,{children:(0,r.jsx)(d.code,{children:"bool"})}),(0,r.jsx)(d.td,{children:(0,r.jsx)(d.code,{children:"false"})}),(0,r.jsx)(d.td,{children:"If specified, output won't contain any color"})]}),(0,r.jsxs)(d.tr,{children:[(0,r.jsxs)(d.td,{children:[(0,r.jsx)(d.code,{children:"--verbose"}),", ",(0,r.jsx)(d.code,{children:"-v"})]}),(0,r.jsx)(d.td,{children:(0,r.jsx)(d.code,{children:"bool"})}),(0,r.jsx)(d.td,{children:(0,r.jsx)(d.code,{children:"false"})}),(0,r.jsx)(d.td,{children:"Verbose output"})]})]})]}),"\n",(0,r.jsx)(d.hr,{}),"\n",(0,r.jsxs)(d.h2,{id:"recipe-schema-recipeyml",children:["Recipe schema (",(0,r.jsx)(d.code,{children:"recipe.yml"}),")"]}),"\n",(0,r.jsx)(d.p,{children:(0,r.jsx)(d.a,{href:"https://github.com/futurice/jalapeno/blob/main/pkg/recipe/recipe.go#L7",children:"Source code"})}),"\n",(0,r.jsxs)(d.table,{children:[(0,r.jsx)(d.thead,{children:(0,r.jsxs)(d.tr,{children:[(0,r.jsx)(d.th,{children:"Attribute"}),(0,r.jsx)(d.th,{children:"Type"}),(0,r.jsx)(d.th,{children:"Default"}),(0,r.jsx)(d.th,{children:"Description"})]})}),(0,r.jsxs)(d.tbody,{children:[(0,r.jsxs)(d.tr,{children:[(0,r.jsx)(d.td,{children:(0,r.jsx)(d.code,{children:"apiVersion"})}),(0,r.jsx)(d.td,{children:(0,r.jsx)(d.code,{children:"string"})}),(0,r.jsx)(d.td,{children:(0,r.jsx)(d.code,{children:"v1"})}),(0,r.jsx)(d.td,{children:'Version of the recipe metadata API schema. Currently should have value "v1".'})]}),(0,r.jsxs)(d.tr,{children:[(0,r.jsx)(d.td,{children:(0,r.jsx)(d.code,{children:"name"})}),(0,r.jsx)(d.td,{children:(0,r.jsx)(d.code,{children:"string"})}),(0,r.jsx)(d.td,{}),(0,r.jsx)(d.td,{children:"Name of the recipe."})]}),(0,r.jsxs)(d.tr,{children:[(0,r.jsx)(d.td,{children:(0,r.jsx)(d.code,{children:"version"})}),(0,r.jsx)(d.td,{children:(0,r.jsx)(d.code,{children:"string"})}),(0,r.jsx)(d.td,{}),(0,r.jsxs)(d.td,{children:["Version of the recipe. Must be valid ",(0,r.jsx)(d.a,{href:"https://semver.org/",children:"semver"}),"."]})]}),(0,r.jsxs)(d.tr,{children:[(0,r.jsx)(d.td,{children:(0,r.jsx)(d.code,{children:"description"})}),(0,r.jsx)(d.td,{children:(0,r.jsx)(d.code,{children:"string"})}),(0,r.jsx)(d.td,{}),(0,r.jsx)(d.td,{children:"Description of what the recipe does"})]}),(0,r.jsxs)(d.tr,{children:[(0,r.jsx)(d.td,{children:(0,r.jsx)(d.code,{children:"source"})}),(0,r.jsx)(d.td,{children:(0,r.jsx)(d.code,{children:"string"})}),(0,r.jsx)(d.td,{}),(0,r.jsx)(d.td,{children:"URL to source code for this recipe."})]}),(0,r.jsxs)(d.tr,{children:[(0,r.jsx)(d.td,{children:(0,r.jsx)(d.code,{children:"templateExtension"})}),(0,r.jsx)(d.td,{children:(0,r.jsx)(d.code,{children:"string"})}),(0,r.jsx)(d.td,{}),(0,r.jsx)(d.td,{children:'File extension of files in "templates" directory which should be templated. Files not matched by this extension will be copied as-is. If left empty (the default), all files will be templated.'})]}),(0,r.jsxs)(d.tr,{children:[(0,r.jsx)(d.td,{children:(0,r.jsx)(d.code,{children:"initHelp"})}),(0,r.jsx)(d.td,{children:(0,r.jsx)(d.code,{children:"string"})}),(0,r.jsx)(d.td,{}),(0,r.jsx)(d.td,{children:"A message which will be showed to an user after a succesful recipe execution. Can be used to guide the user what should be done next in the project directory."})]}),(0,r.jsxs)(d.tr,{children:[(0,r.jsx)(d.td,{children:(0,r.jsx)(d.code,{children:"ignorePatterns"})}),(0,r.jsx)(d.td,{children:(0,r.jsx)(d.code,{children:"[]string"})}),(0,r.jsx)(d.td,{}),(0,r.jsx)(d.td,{children:"Glob patterns for ignoring generated files from future recipe upgrades. Ignored files will not be regenerated even if their templates change in future versions of the recipe."})]}),(0,r.jsxs)(d.tr,{children:[(0,r.jsx)(d.td,{children:(0,r.jsx)(d.code,{children:"vars"})}),(0,r.jsx)(d.td,{children:(0,r.jsx)(d.a,{href:"#variable",children:(0,r.jsx)(d.code,{children:"[]Variable"})})}),(0,r.jsx)(d.td,{}),(0,r.jsxs)(d.td,{children:["An array of variables which can be used in templates. The user will be prompted to provide the value for the variable if not set with ",(0,r.jsx)(d.code,{children:"--set"})," flag."]})]})]})]}),"\n",(0,r.jsx)(d.h3,{id:"variable",children:"Variable"}),"\n",(0,r.jsx)(d.p,{children:(0,r.jsx)(d.a,{href:"https://github.com/futurice/jalapeno/blob/main/pkg/recipe/variable.go#L13",children:"Source code"})}),"\n",(0,r.jsxs)(d.table,{children:[(0,r.jsx)(d.thead,{children:(0,r.jsxs)(d.tr,{children:[(0,r.jsx)(d.th,{children:"Attribute"}),(0,r.jsx)(d.th,{children:"Type"}),(0,r.jsx)(d.th,{children:"Default"}),(0,r.jsx)(d.th,{children:"Description"})]})}),(0,r.jsxs)(d.tbody,{children:[(0,r.jsxs)(d.tr,{children:[(0,r.jsx)(d.td,{children:(0,r.jsx)(d.code,{children:"name"})}),(0,r.jsx)(d.td,{children:(0,r.jsx)(d.code,{children:"string"})}),(0,r.jsx)(d.td,{}),(0,r.jsx)(d.td,{children:"The name of the variable. It is also used as unique identifier, so two variables can not have the same name."})]}),(0,r.jsxs)(d.tr,{children:[(0,r.jsx)(d.td,{children:(0,r.jsx)(d.code,{children:"description"})}),(0,r.jsx)(d.td,{children:(0,r.jsx)(d.code,{children:"string"})}),(0,r.jsx)(d.td,{}),(0,r.jsx)(d.td,{children:'Description of the variable. Will be shown to the user when "show help" is activated.'})]}),(0,r.jsxs)(d.tr,{children:[(0,r.jsx)(d.td,{children:(0,r.jsx)(d.code,{children:"default"})}),(0,r.jsx)(d.td,{children:(0,r.jsx)(d.code,{children:"string"})}),(0,r.jsx)(d.td,{}),(0,r.jsx)(d.td,{children:"Default value of the variable."})]}),(0,r.jsxs)(d.tr,{children:[(0,r.jsx)(d.td,{children:(0,r.jsx)(d.code,{children:"confirm"})}),(0,r.jsx)(d.td,{children:(0,r.jsx)(d.code,{children:"bool"})}),(0,r.jsx)(d.td,{children:(0,r.jsx)(d.code,{children:"false"})}),(0,r.jsx)(d.td,{children:"If set to true, the prompt will be yes/no question, and the value type will be boolean."})]}),(0,r.jsxs)(d.tr,{children:[(0,r.jsx)(d.td,{children:(0,r.jsx)(d.code,{children:"optional"})}),(0,r.jsx)(d.td,{children:(0,r.jsx)(d.code,{children:"bool"})}),(0,r.jsx)(d.td,{children:(0,r.jsx)(d.code,{children:"false"})}),(0,r.jsx)(d.td,{children:"If set to true, the variable can be left empty."})]}),(0,r.jsxs)(d.tr,{children:[(0,r.jsx)(d.td,{children:(0,r.jsx)(d.code,{children:"options"})}),(0,r.jsx)(d.td,{children:(0,r.jsx)(d.code,{children:"[]string"})}),(0,r.jsx)(d.td,{}),(0,r.jsx)(d.td,{children:"The user selects the value from a list of options."})]}),(0,r.jsxs)(d.tr,{children:[(0,r.jsx)(d.td,{children:(0,r.jsx)(d.code,{children:"validators"})}),(0,r.jsx)(d.td,{children:(0,r.jsx)(d.a,{href:"#validator",children:(0,r.jsx)(d.code,{children:"[]Validator"})})}),(0,r.jsx)(d.td,{}),(0,r.jsx)(d.td,{children:"Validators for the variable."})]}),(0,r.jsxs)(d.tr,{children:[(0,r.jsx)(d.td,{children:(0,r.jsx)(d.code,{children:"if"})}),(0,r.jsx)(d.td,{children:(0,r.jsx)(d.code,{children:"string"})}),(0,r.jsx)(d.td,{}),(0,r.jsxs)(d.td,{children:["Makes the variable conditional based on the result of the expression. The result of the evaluation needs to be a boolean value. Uses ",(0,r.jsx)(d.a,{href:"https://github.com/expr-lang/expr",children:"https://github.com/expr-lang/expr"}),"."]})]}),(0,r.jsxs)(d.tr,{children:[(0,r.jsx)(d.td,{children:(0,r.jsx)(d.code,{children:"columns"})}),(0,r.jsx)(d.td,{children:(0,r.jsx)(d.code,{children:"[]string"})}),(0,r.jsx)(d.td,{}),(0,r.jsx)(d.td,{children:"Set the variable as a table type with columns defined by this property."})]})]})]}),"\n",(0,r.jsx)(d.h3,{id:"validator",children:"Validator"}),"\n",(0,r.jsx)(d.p,{children:(0,r.jsx)(d.a,{href:"https://github.com/futurice/jalapeno/blob/main/pkg/recipe/variable.go#L50",children:"Source code"})}),"\n",(0,r.jsxs)(d.table,{children:[(0,r.jsx)(d.thead,{children:(0,r.jsxs)(d.tr,{children:[(0,r.jsx)(d.th,{children:"Attribute"}),(0,r.jsx)(d.th,{children:"Type"}),(0,r.jsx)(d.th,{children:"Default"}),(0,r.jsx)(d.th,{children:"Description"})]})}),(0,r.jsxs)(d.tbody,{children:[(0,r.jsxs)(d.tr,{children:[(0,r.jsx)(d.td,{children:(0,r.jsx)(d.code,{children:"pattern"})}),(0,r.jsx)(d.td,{children:(0,r.jsx)(d.code,{children:"string"})}),(0,r.jsx)(d.td,{}),(0,r.jsx)(d.td,{children:"Regular expression pattern to match the input against."})]}),(0,r.jsxs)(d.tr,{children:[(0,r.jsx)(d.td,{children:(0,r.jsx)(d.code,{children:"help"})}),(0,r.jsx)(d.td,{children:(0,r.jsx)(d.code,{children:"string"})}),(0,r.jsx)(d.td,{}),(0,r.jsx)(d.td,{children:"If the regular expression validation fails, this help message will be shown to the user."})]}),(0,r.jsxs)(d.tr,{children:[(0,r.jsx)(d.td,{children:(0,r.jsx)(d.code,{children:"column"})}),(0,r.jsx)(d.td,{children:(0,r.jsx)(d.code,{children:"string"})}),(0,r.jsx)(d.td,{}),(0,r.jsx)(d.td,{children:"Apply the validator to a column if the variable type is table."})]})]})]}),"\n",(0,r.jsxs)(d.h2,{id:"test-schema-testyml",children:["Test schema (",(0,r.jsx)(d.code,{children:"test.yml"}),")"]}),"\n",(0,r.jsx)(d.p,{children:(0,r.jsx)(d.a,{href:"https://github.com/futurice/jalapeno/blob/main/pkg/recipe/test.go#L13",children:"Source code"})}),"\n",(0,r.jsxs)(d.table,{children:[(0,r.jsx)(d.thead,{children:(0,r.jsxs)(d.tr,{children:[(0,r.jsx)(d.th,{children:"Attribute"}),(0,r.jsx)(d.th,{children:"Type"}),(0,r.jsx)(d.th,{children:"Default"}),(0,r.jsx)(d.th,{children:"Description"})]})}),(0,r.jsxs)(d.tbody,{children:[(0,r.jsxs)(d.tr,{children:[(0,r.jsx)(d.td,{children:(0,r.jsx)(d.code,{children:"values"})}),(0,r.jsx)(d.td,{children:(0,r.jsx)(d.code,{children:"map[string]any"})}),(0,r.jsx)(d.td,{}),(0,r.jsx)(d.td,{children:"Values to use to render the recipe templates. Map key is the name of the variable and value is the variable value."})]}),(0,r.jsxs)(d.tr,{children:[(0,r.jsx)(d.td,{children:(0,r.jsx)(d.code,{children:"ignoreExtraFiles"})}),(0,r.jsx)(d.td,{children:(0,r.jsx)(d.code,{children:"bool"})}),(0,r.jsx)(d.td,{}),(0,r.jsx)(d.td,{children:"If true, test will pass even though templates generated more files than the test specifies. This is useful when creating specific test cases for large recipes."})]})]})]}),"\n",(0,r.jsxs)(d.h2,{id:"sauce-schema-saucesyml",children:["Sauce schema (",(0,r.jsx)(d.code,{children:"sauces.yml"}),")"]}),"\n",(0,r.jsx)(d.p,{children:(0,r.jsx)(d.a,{href:"https://github.com/futurice/jalapeno/blob/main/pkg/recipe/sauce.go#L10",children:"Source code"})}),"\n",(0,r.jsxs)(d.table,{children:[(0,r.jsx)(d.thead,{children:(0,r.jsxs)(d.tr,{children:[(0,r.jsx)(d.th,{children:"Attribute"}),(0,r.jsx)(d.th,{children:"Type"}),(0,r.jsx)(d.th,{children:"Default"}),(0,r.jsx)(d.th,{children:"Description"})]})}),(0,r.jsxs)(d.tbody,{children:[(0,r.jsxs)(d.tr,{children:[(0,r.jsx)(d.td,{children:(0,r.jsx)(d.code,{children:"apiVersion"})}),(0,r.jsx)(d.td,{children:(0,r.jsx)(d.code,{children:"string"})}),(0,r.jsx)(d.td,{children:(0,r.jsx)(d.code,{children:"v1"})}),(0,r.jsx)(d.td,{children:'Version of the sauce API schema. Currently should have value "v1".'})]}),(0,r.jsxs)(d.tr,{children:[(0,r.jsx)(d.td,{children:(0,r.jsx)(d.code,{children:"recipe"})}),(0,r.jsx)(d.td,{children:(0,r.jsx)(d.a,{href:"#recipe-schema-recipeyml",children:(0,r.jsx)(d.code,{children:"Recipe"})})}),(0,r.jsx)(d.td,{}),(0,r.jsx)(d.td,{children:"The recipe which was used to render the sauce."})]}),(0,r.jsxs)(d.tr,{children:[(0,r.jsx)(d.td,{children:(0,r.jsx)(d.code,{children:"values"})}),(0,r.jsx)(d.td,{children:(0,r.jsx)(d.code,{children:"map[string]any"})}),(0,r.jsx)(d.td,{}),(0,r.jsx)(d.td,{children:"Values which was used to execute the recipe."})]}),(0,r.jsxs)(d.tr,{children:[(0,r.jsx)(d.td,{children:(0,r.jsx)(d.code,{children:"files"})}),(0,r.jsx)(d.td,{children:(0,r.jsx)(d.code,{children:"map[string]File"})}),(0,r.jsx)(d.td,{}),(0,r.jsx)(d.td,{children:"Files genereated from the recipe"})]}),(0,r.jsxs)(d.tr,{children:[(0,r.jsx)(d.td,{children:(0,r.jsx)(d.code,{children:"id"})}),(0,r.jsx)(d.td,{children:(0,r.jsx)(d.code,{children:"string"})}),(0,r.jsx)(d.td,{}),(0,r.jsx)(d.td,{children:"Random unique ID whose value is determined on first render and stays the same on subsequent re-renders (upgrades) of the sauce. Can be used for example as a seed for template random functions to provide same result on each template."})]}),(0,r.jsxs)(d.tr,{children:[(0,r.jsx)(d.td,{children:(0,r.jsx)(d.code,{children:"from"})}),(0,r.jsx)(d.td,{children:(0,r.jsx)(d.code,{children:"string"})}),(0,r.jsx)(d.td,{}),(0,r.jsx)(d.td,{children:"Defines the repository where updates should be checked for the recipe."})]})]})]})]})}function j(e={}){const{wrapper:d}={...(0,i.a)(),...e.components};return d?(0,r.jsx)(d,{...e,children:(0,r.jsx)(o,{...e})}):o(e)}}}]);
\ No newline at end of file
diff --git a/assets/js/6476eba6.903fb248.js b/assets/js/6476eba6.903fb248.js
deleted file mode 100644
index 7b7ebd44..00000000
--- a/assets/js/6476eba6.903fb248.js
+++ /dev/null
@@ -1 +0,0 @@
-"use strict";(self.webpackChunkjalapeno=self.webpackChunkjalapeno||[]).push([[827],{351:(e,i,n)=>{n.r(i),n.d(i,{assets:()=>l,contentTitle:()=>s,default:()=>d,frontMatter:()=>t,metadata:()=>c,toc:()=>o});var r=n(5893),a=n(1151);const t={sidebar_position:3,slug:"/usage/",title:"Usage"},s="Usage",c={id:"usage",title:"Usage",description:"Getting started",source:"@site/docs/usage.md",sourceDirName:".",slug:"/usage/",permalink:"/jalapeno/usage/",draft:!1,unlisted:!1,editUrl:"https://github.com/futurice/jalapeno/tree/main/docs/site/docs/usage.md",tags:[],version:"current",sidebarPosition:3,frontMatter:{sidebar_position:3,slug:"/usage/",title:"Usage"},sidebar:"tutorialSidebar",previous:{title:"Installation",permalink:"/jalapeno/installation/"},next:{title:"API Reference",permalink:"/jalapeno/api/"}},l={},o=[{value:"Getting started",id:"getting-started",level:2},{value:"Templating",id:"templating",level:2},{value:"Template only specific files",id:"template-only-specific-files",level:3},{value:"Variables",id:"variables",level:2},{value:"Variable types",id:"variable-types",level:3},{value:"Validation",id:"validation",level:3},{value:"Publishing recipes",id:"publishing-recipes",level:2},{value:"Pushing a recipe to Container registry",id:"pushing-a-recipe-to-container-registry",level:3},{value:"Executing a recipe from Container registry",id:"executing-a-recipe-from-container-registry",level:3},{value:"Checking updates for a recipe",id:"checking-updates-for-a-recipe",level:3},{value:"Upgrading recipes",id:"upgrading-recipes",level:2},{value:"Creating tests for a recipe",id:"creating-tests-for-a-recipe",level:2}];function h(e){const i={a:"a",admonition:"admonition",code:"code",em:"em",h1:"h1",h2:"h2",h3:"h3",li:"li",p:"p",pre:"pre",ul:"ul",...(0,a.a)(),...e.components};return(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(i.h1,{id:"usage",children:"Usage"}),"\n",(0,r.jsx)(i.h2,{id:"getting-started",children:"Getting started"}),"\n",(0,r.jsxs)(i.p,{children:["To get started with Jalapeno, you need to install the CLI tool. You can find the installation instructions ",(0,r.jsx)(i.a,{href:"/installation",children:"here"}),"."]}),"\n",(0,r.jsxs)(i.p,{children:["Then you can bootstrap a new ",(0,r.jsx)(i.em,{children:"recipe"})," (aka template) by running:"]}),"\n",(0,r.jsx)(i.pre,{children:(0,r.jsx)(i.code,{className:"language-bash",children:"jalapeno create my-recipe\n"})}),"\n",(0,r.jsxs)(i.p,{children:["After this you should have a new folder called ",(0,r.jsx)(i.code,{children:"my-recipe"})," with the following structure:"]}),"\n",(0,r.jsx)(i.pre,{children:(0,r.jsx)(i.code,{children:"my-recipe\n\u251c\u2500\u2500 recipe.yml\n\u251c\u2500\u2500 templates\n\u2502 \u2514\u2500\u2500 README.md\n\u2514\u2500\u2500 tests\n \u2514\u2500\u2500 defaults\n \u251c\u2500\u2500 test.yml\n \u2514\u2500\u2500 files\n \u2514\u2500\u2500 README.md\n"})}),"\n",(0,r.jsxs)(i.p,{children:["The ",(0,r.jsx)(i.code,{children:"templates"})," directory contains the templates which will be rendered to the project directory. You can add and edit files there or you can already ",(0,r.jsx)(i.em,{children:"execute the recipe"})," (render the templates) to your project directory by running:"]}),"\n",(0,r.jsx)(i.pre,{children:(0,r.jsx)(i.code,{className:"language-bash",children:"mkdir my-project && cd my-project\njalapeno execute my-recipe\n\n# OR\n\nmkdir my-project\njalapeno execute my-recipe -d my-project\n"})}),"\n",(0,r.jsxs)(i.admonition,{type:"tip",children:[(0,r.jsx)(i.p,{children:"You can also execute any of the examples from the Jalapeno repository, for example:"}),(0,r.jsx)(i.pre,{children:(0,r.jsx)(i.code,{className:"language-bash",children:"git clone git@github.com:futurice/jalapeno.git\njalapeno execute ./jalapeno/examples/variable-types\n"})}),(0,r.jsx)(i.p,{children:"Or execute them directly from GitHub Container Registry:"}),(0,r.jsx)(i.pre,{children:(0,r.jsx)(i.code,{className:"language-bash",children:"jalapeno execute oci://ghcr.io/futurice/jalapeno/examples/variable-types:v0.0.0\n"})})]}),"\n",(0,r.jsxs)(i.admonition,{type:"tip",children:[(0,r.jsxs)(i.p,{children:["You can also set the values with ",(0,r.jsx)(i.code,{children:"--set"})," flag or with environment variables when executing the recipe. For example:"]}),(0,r.jsx)(i.pre,{children:(0,r.jsx)(i.code,{className:"language-bash",children:"jalapeno execute my-recipe --set MY_VAR=foo\n\n# OR\n\nexport JALAPENO_VAR_MY_VAR=foo\njalapeno execute my-recipe\n"})})]}),"\n",(0,r.jsx)(i.p,{children:"After this, the project directory should have the following files:"}),"\n",(0,r.jsx)(i.pre,{children:(0,r.jsx)(i.code,{children:"my-project\n\u251c\u2500\u2500 .jalapeno\n\u2502 \u2514\u2500\u2500 sauces.yml\n\u2514\u2500\u2500 README.md\n"})}),"\n",(0,r.jsxs)(i.p,{children:["The ",(0,r.jsx)(i.code,{children:".jalapeno"})," directory contains files which Jalapeno uses internally. For example ",(0,r.jsx)(i.code,{children:"sauces.yml"})," is Jalapeno metadata file which contains information about the ",(0,r.jsx)(i.em,{children:"sauces"})," (aka executed recipes). This file is used to check for updates for the recipes later."]}),"\n",(0,r.jsx)(i.p,{children:"The rest of the files are rendered from the templates. You can edit the templates and execute the recipe again to update the files."}),"\n",(0,r.jsx)(i.h2,{id:"templating",children:"Templating"}),"\n",(0,r.jsxs)(i.p,{children:["Templates are done by using ",(0,r.jsx)(i.a,{href:"https://pkg.go.dev/text/template",children:"Go templates"}),"."]}),"\n",(0,r.jsx)(i.p,{children:"The following context is available on the templates:"}),"\n",(0,r.jsxs)(i.ul,{children:["\n",(0,r.jsxs)(i.li,{children:[(0,r.jsx)(i.code,{children:".Recipe"}),": Metadata object of the recipe","\n",(0,r.jsxs)(i.ul,{children:["\n",(0,r.jsxs)(i.li,{children:[(0,r.jsx)(i.code,{children:".Recipe.APIVersion"}),": The API version which the recipe file uses"]}),"\n",(0,r.jsxs)(i.li,{children:[(0,r.jsx)(i.code,{children:".Recipe.Name"}),": The name of the recipe"]}),"\n",(0,r.jsxs)(i.li,{children:[(0,r.jsx)(i.code,{children:".Recipe.Version"}),": The current version of the recipe"]}),"\n"]}),"\n"]}),"\n",(0,r.jsxs)(i.li,{children:[(0,r.jsx)(i.code,{children:".ID"}),": UUID which is generated after the first execution of the recipe. It will keep its value over upgrades. Can be used to generate unique pseudo-random values which stays the same over the upgrades, for example ",(0,r.jsx)(i.code,{children:"my-resource-{{ sha1sum .ID | trunc 5 }}"})]}),"\n",(0,r.jsxs)(i.li,{children:[(0,r.jsx)(i.code,{children:".Variables"}),": Object which contains the values of the variables defined for the recipe. Example: ",(0,r.jsx)(i.code,{children:"{{ .Variables.FOO }}"})]}),"\n"]}),"\n",(0,r.jsx)(i.h3,{id:"template-only-specific-files",children:"Template only specific files"}),"\n",(0,r.jsxs)(i.p,{children:["By defining ",(0,r.jsx)(i.code,{children:"templateExtension"})," property in the ",(0,r.jsx)(i.code,{children:"recipe.yml"})," file, you can define that only the files with the given file extensions should be rendered from the ",(0,r.jsx)(i.code,{children:"templates"})," directory. The rest of the files will be copied as is. This is useful when there are files that do not need templating, but you would still need to escape the ",(0,r.jsx)(i.code,{children:"{{"})," and ",(0,r.jsx)(i.code,{children:"}}"})," characters (for example ",(0,r.jsx)(i.a,{href:"https://taskfile.dev/usage/",children:"Taskfiles"}),")."]}),"\n",(0,r.jsx)(i.h2,{id:"variables",children:"Variables"}),"\n",(0,r.jsxs)(i.p,{children:["Recipe variables let you define values which user need to provide to be able to render the tempaltes. Variables are defined in the ",(0,r.jsx)(i.code,{children:"recipe.yml"})," file. You can check schema ",(0,r.jsx)(i.a,{href:"/api#variable",children:"here"}),"."]}),"\n",(0,r.jsx)(i.h3,{id:"variable-types",children:"Variable types"}),"\n",(0,r.jsx)(i.p,{children:"Recipe variables supports the following types:"}),"\n",(0,r.jsxs)(i.ul,{children:["\n",(0,r.jsx)(i.li,{children:(0,r.jsx)(i.a,{href:"https://github.com/futurice/jalapeno/blob/main/examples/variable-types/recipe.yml#L9-L11",children:"String"})}),"\n",(0,r.jsx)(i.li,{children:(0,r.jsx)(i.a,{href:"https://github.com/futurice/jalapeno/blob/main/examples/variable-types/recipe.yml#L13-L15",children:"Boolean"})}),"\n",(0,r.jsx)(i.li,{children:(0,r.jsx)(i.a,{href:"https://github.com/futurice/jalapeno/blob/main/examples/variable-types/recipe.yml#L20-L22",children:"Select (predefined options)"})}),"\n",(0,r.jsx)(i.li,{children:(0,r.jsx)(i.a,{href:"https://github.com/futurice/jalapeno/blob/main/examples/variable-types/recipe.yml#L29-L38",children:"Table"})}),"\n"]}),"\n",(0,r.jsxs)(i.p,{children:["You can see examples of all the possible variables in the ",(0,r.jsx)(i.a,{href:"https://github.com/futurice/jalapeno/blob/main/examples/variable-types/recipe.yml",children:"example recipe"}),"."]}),"\n",(0,r.jsx)(i.admonition,{type:"note",children:(0,r.jsxs)(i.p,{children:["If you need to use numbers in the templates, you can use the ",(0,r.jsx)(i.code,{children:"atoi"})," function to convert a string variable to integer: ",(0,r.jsx)(i.code,{children:"{{ .Variables.FOO | atoi }}"})]})}),"\n",(0,r.jsx)(i.h3,{id:"validation",children:"Validation"}),"\n",(0,r.jsxs)(i.p,{children:["Variables can be validated by defining ",(0,r.jsx)(i.a,{href:"/api#variable",children:(0,r.jsx)(i.code,{children:"validators"})})," property for the variable. Validators support regular expression pattern matching."]}),"\n",(0,r.jsx)(i.h2,{id:"publishing-recipes",children:"Publishing recipes"}),"\n",(0,r.jsx)(i.p,{children:"Jalapeno supports publishing and storing recipes in OCI compatible registries. This means that versioned recipes can be pushed and pulled to/from ordinary Container Registries. This is useful when you want to make your recipes available or you want to check for updates for the recipe manually or programatically from CI/CD pipeline."}),"\n",(0,r.jsx)(i.h3,{id:"pushing-a-recipe-to-container-registry",children:"Pushing a recipe to Container registry"}),"\n",(0,r.jsxs)(i.p,{children:["You can push a recipe to a Container registry by using ",(0,r.jsx)(i.code,{children:"jalapeno push"})," command. For authentication you can use ",(0,r.jsx)(i.code,{children:"docker login"})," before pushing the recipe or provide credentials directly to ",(0,r.jsx)(i.code,{children:"jalapeno push"})," command by using flags. For example:"]}),"\n",(0,r.jsx)(i.pre,{children:(0,r.jsx)(i.code,{className:"language-bash",children:"jalapeno create my-recipe\n\n# You can find possible authentication methods to Github Container Registry at https://docs.github.com/en/packages/working-with-a-github-packages-registry/working-with-the-container-registry#authenticating-to-the-container-registry\ndocker login ghcr.io -u my-user\n\njalapeno push my-recipe ghcr.io/my-user/my-recipe\n"})}),"\n",(0,r.jsx)(i.p,{children:"After this you should be able to see the recipe in the Container registry from the UI or by running:"}),"\n",(0,r.jsx)(i.pre,{children:(0,r.jsx)(i.code,{className:"language-bash",children:"docker inspect ghcr.io/my-user/my-recipe:v0.0.0\n"})}),"\n",(0,r.jsx)(i.admonition,{type:"note",children:(0,r.jsxs)(i.p,{children:["The tag of the recipe image in Container Registry is determined by the version in ",(0,r.jsx)(i.code,{children:"recipe.yml"})," file. So if you want to push a new version of the recipe, you need to update the version in ",(0,r.jsx)(i.code,{children:"recipe.yml"})," file first."]})}),"\n",(0,r.jsx)(i.h3,{id:"executing-a-recipe-from-container-registry",children:"Executing a recipe from Container registry"}),"\n",(0,r.jsxs)(i.p,{children:["You can execute a recipe directly from Container registry by using ",(0,r.jsx)(i.code,{children:"jalapeno execute"})," command. For example:"]}),"\n",(0,r.jsx)(i.pre,{children:(0,r.jsx)(i.code,{className:"language-bash",children:"mkdir my-project && cd my-project\njalapeno execute oci://ghcr.io/my-user/my-recipe:v0.0.0\n"})}),"\n",(0,r.jsx)(i.p,{children:"Another way is to pull the recipe first on your local machine and then execute it:"}),"\n",(0,r.jsx)(i.pre,{children:(0,r.jsx)(i.code,{className:"language-bash",children:"mkdir my-project && cd my-project\njalapeno pull oci://ghcr.io/my-user/my-recipe:v0.0.0\njalapeno execute my-recipe\n"})}),"\n",(0,r.jsx)(i.h3,{id:"checking-updates-for-a-recipe",children:"Checking updates for a recipe"}),"\n",(0,r.jsxs)(i.p,{children:["After you have executed a recipe, Jalapeno will create a ",(0,r.jsx)(i.code,{children:".jalapeno/sauces.yml"})," file to the project directory. This file contains information about the executed recipes and their versions. If the recipe was executed directly from a Container Registry, the registry URL is also stored in the file for checking for new versions. To check the new versions for the recipes, you can run:"]}),"\n",(0,r.jsx)(i.pre,{children:(0,r.jsx)(i.code,{className:"language-bash",children:"jalapeno check\n"})}),"\n",(0,r.jsx)(i.p,{children:"This will check for updates for all the recipes in the project directory. You can also check for updates for a specific recipe by running:"}),"\n",(0,r.jsx)(i.pre,{children:(0,r.jsx)(i.code,{className:"language-bash",children:"jalapeno check --recipe my-recipe\n"})}),"\n",(0,r.jsx)(i.p,{children:"If you've executed the recipe from local directory and the registry URL is still unknown, you can set the registry URL manually by running:"}),"\n",(0,r.jsx)(i.pre,{children:(0,r.jsx)(i.code,{className:"language-bash",children:"jalapeno check --recipe my-recipe --from oci://ghcr.io/my-user/my-recipe\n"})}),"\n",(0,r.jsx)(i.admonition,{type:"tip",children:(0,r.jsxs)(i.p,{children:["If you want to run the check in a CI/CD pipeline (like Github Actions), you can check the ",(0,r.jsx)(i.a,{href:"https://github.com/futurice/jalapeno/tree/main/examples/github-action",children:(0,r.jsx)(i.code,{children:"examples/github-action"})})," recipe how to do it or you can execute it to your project with ",(0,r.jsx)(i.code,{children:"jalapeno execute oci://ghcr.io/futurice/jalapeno/examples/github-action:v0.0.0"}),"."]})}),"\n",(0,r.jsx)(i.h2,{id:"upgrading-recipes",children:"Upgrading recipes"}),"\n",(0,r.jsx)(i.p,{children:"You can upgrade a recipe by running:"}),"\n",(0,r.jsx)(i.pre,{children:(0,r.jsx)(i.code,{className:"language-bash",children:"jalapeno upgrade oci://ghcr.io/my-user/my-recipe:v2.0.0\n"})}),"\n",(0,r.jsxs)(i.p,{children:["Note that the new recipe version needs to be newer than the previous version. Doing rollbacks with the ",(0,r.jsx)(i.code,{children:"upgrade"})," command is not supported at the moment."]}),"\n",(0,r.jsx)(i.p,{children:"If you've modified the files which were originally generated by the recipe, Jalapeno will notice them while doing the upgrade. It will ask if you want to overwrite the modified files with the newer versions or keep the modified ones."}),"\n",(0,r.jsx)(i.h2,{id:"creating-tests-for-a-recipe",children:"Creating tests for a recipe"}),"\n",(0,r.jsx)(i.p,{children:"..."})]})}function d(e={}){const{wrapper:i}={...(0,a.a)(),...e.components};return i?(0,r.jsx)(i,{...e,children:(0,r.jsx)(h,{...e})}):h(e)}}}]);
\ No newline at end of file
diff --git a/assets/js/6476eba6.94867b43.js b/assets/js/6476eba6.94867b43.js
new file mode 100644
index 00000000..136c3122
--- /dev/null
+++ b/assets/js/6476eba6.94867b43.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkjalapeno=self.webpackChunkjalapeno||[]).push([[827],{351:(e,i,n)=>{n.r(i),n.d(i,{assets:()=>l,contentTitle:()=>s,default:()=>d,frontMatter:()=>t,metadata:()=>c,toc:()=>o});var r=n(5893),a=n(1151);const t={sidebar_position:3,slug:"/usage/",title:"Usage"},s="Usage",c={id:"usage",title:"Usage",description:"Getting started",source:"@site/docs/usage.md",sourceDirName:".",slug:"/usage/",permalink:"/jalapeno/usage/",draft:!1,unlisted:!1,editUrl:"https://github.com/futurice/jalapeno/tree/main/docs/site/docs/usage.md",tags:[],version:"current",sidebarPosition:3,frontMatter:{sidebar_position:3,slug:"/usage/",title:"Usage"},sidebar:"tutorialSidebar",previous:{title:"Installation",permalink:"/jalapeno/installation/"},next:{title:"API Reference",permalink:"/jalapeno/api/"}},l={},o=[{value:"Getting started",id:"getting-started",level:2},{value:"Templating",id:"templating",level:2},{value:"Template only specific files",id:"template-only-specific-files",level:3},{value:"Variables",id:"variables",level:2},{value:"Variable types",id:"variable-types",level:3},{value:"Validation",id:"validation",level:3},{value:"Publishing recipes",id:"publishing-recipes",level:2},{value:"Pushing a recipe to Container registry",id:"pushing-a-recipe-to-container-registry",level:3},{value:"Executing a recipe from Container registry",id:"executing-a-recipe-from-container-registry",level:3},{value:"Checking updates for a recipe",id:"checking-updates-for-a-recipe",level:3},{value:"Upgrading recipes",id:"upgrading-recipes",level:2},{value:"Creating tests for a recipe",id:"creating-tests-for-a-recipe",level:2}];function h(e){const i={a:"a",admonition:"admonition",code:"code",em:"em",h1:"h1",h2:"h2",h3:"h3",li:"li",p:"p",pre:"pre",ul:"ul",...(0,a.a)(),...e.components};return(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(i.h1,{id:"usage",children:"Usage"}),"\n",(0,r.jsx)(i.h2,{id:"getting-started",children:"Getting started"}),"\n",(0,r.jsxs)(i.p,{children:["To get started with Jalapeno, you need to install the CLI tool. You can find the installation instructions ",(0,r.jsx)(i.a,{href:"/installation",children:"here"}),"."]}),"\n",(0,r.jsxs)(i.p,{children:["Then you can bootstrap a new ",(0,r.jsx)(i.em,{children:"recipe"})," (aka template) by running:"]}),"\n",(0,r.jsx)(i.pre,{children:(0,r.jsx)(i.code,{className:"language-bash",children:"jalapeno create my-recipe\n"})}),"\n",(0,r.jsxs)(i.p,{children:["After this you should have a new folder called ",(0,r.jsx)(i.code,{children:"my-recipe"})," with the following structure:"]}),"\n",(0,r.jsx)(i.pre,{children:(0,r.jsx)(i.code,{children:"my-recipe\n\u251c\u2500\u2500 recipe.yml\n\u251c\u2500\u2500 templates\n\u2502 \u2514\u2500\u2500 README.md\n\u2514\u2500\u2500 tests\n \u2514\u2500\u2500 defaults\n \u251c\u2500\u2500 test.yml\n \u2514\u2500\u2500 files\n \u2514\u2500\u2500 README.md\n"})}),"\n",(0,r.jsxs)(i.p,{children:["The ",(0,r.jsx)(i.code,{children:"templates"})," directory contains the templates which will be rendered to the project directory. You can add and edit files there or you can already ",(0,r.jsx)(i.em,{children:"execute the recipe"})," (render the templates) to your project directory by running:"]}),"\n",(0,r.jsx)(i.pre,{children:(0,r.jsx)(i.code,{className:"language-bash",children:"mkdir my-project && cd my-project\njalapeno execute my-recipe\n\n# OR\n\nmkdir my-project\njalapeno execute my-recipe -d my-project\n"})}),"\n",(0,r.jsxs)(i.admonition,{type:"tip",children:[(0,r.jsx)(i.p,{children:"You can also execute any of the examples from the Jalapeno repository, for example:"}),(0,r.jsx)(i.pre,{children:(0,r.jsx)(i.code,{className:"language-bash",children:"git clone git@github.com:futurice/jalapeno.git\njalapeno execute ./jalapeno/examples/variable-types\n"})}),(0,r.jsx)(i.p,{children:"Or execute them directly from GitHub Container Registry:"}),(0,r.jsx)(i.pre,{children:(0,r.jsx)(i.code,{className:"language-bash",children:"jalapeno execute oci://ghcr.io/futurice/jalapeno/examples/variable-types:v0.0.0\n"})})]}),"\n",(0,r.jsxs)(i.admonition,{type:"tip",children:[(0,r.jsxs)(i.p,{children:["You can also set the values with ",(0,r.jsx)(i.code,{children:"--set"})," flag or with environment variables when executing the recipe. For example:"]}),(0,r.jsx)(i.pre,{children:(0,r.jsx)(i.code,{className:"language-bash",children:"jalapeno execute my-recipe --set MY_VAR=foo\n\n# OR\n\nexport JALAPENO_VAR_MY_VAR=foo\njalapeno execute my-recipe\n"})})]}),"\n",(0,r.jsx)(i.p,{children:"After this, the project directory should have the following files:"}),"\n",(0,r.jsx)(i.pre,{children:(0,r.jsx)(i.code,{children:"my-project\n\u251c\u2500\u2500 .jalapeno\n\u2502 \u2514\u2500\u2500 sauces.yml\n\u2514\u2500\u2500 README.md\n"})}),"\n",(0,r.jsxs)(i.p,{children:["The ",(0,r.jsx)(i.code,{children:".jalapeno"})," directory contains files which Jalapeno uses internally. For example ",(0,r.jsx)(i.code,{children:"sauces.yml"})," is Jalapeno metadata file which contains information about the ",(0,r.jsx)(i.em,{children:"sauces"})," (aka executed recipes). This file is used to check for updates for the recipes later."]}),"\n",(0,r.jsx)(i.p,{children:"The rest of the files are rendered from the templates. You can edit the templates and execute the recipe again to update the files."}),"\n",(0,r.jsx)(i.h2,{id:"templating",children:"Templating"}),"\n",(0,r.jsxs)(i.p,{children:["Templates are done by using ",(0,r.jsx)(i.a,{href:"https://pkg.go.dev/text/template",children:"Go templates"}),"."]}),"\n",(0,r.jsx)(i.p,{children:"The following context is available on the templates:"}),"\n",(0,r.jsxs)(i.ul,{children:["\n",(0,r.jsxs)(i.li,{children:[(0,r.jsx)(i.code,{children:".Recipe"}),": Metadata object of the recipe","\n",(0,r.jsxs)(i.ul,{children:["\n",(0,r.jsxs)(i.li,{children:[(0,r.jsx)(i.code,{children:".Recipe.APIVersion"}),": The API version which the recipe file uses"]}),"\n",(0,r.jsxs)(i.li,{children:[(0,r.jsx)(i.code,{children:".Recipe.Name"}),": The name of the recipe"]}),"\n",(0,r.jsxs)(i.li,{children:[(0,r.jsx)(i.code,{children:".Recipe.Version"}),": The current version of the recipe"]}),"\n",(0,r.jsxs)(i.li,{children:[(0,r.jsx)(i.code,{children:".Recipe.Source"}),": URL to source code for this recipe"]}),"\n"]}),"\n"]}),"\n",(0,r.jsxs)(i.li,{children:[(0,r.jsx)(i.code,{children:".ID"}),": UUID which is generated after the first execution of the recipe. It will keep its value over upgrades. Can be used to generate unique pseudo-random values which stays the same over the upgrades, for example ",(0,r.jsx)(i.code,{children:"my-resource-{{ sha1sum .ID | trunc 5 }}"})]}),"\n",(0,r.jsxs)(i.li,{children:[(0,r.jsx)(i.code,{children:".Variables"}),": Object which contains the values of the variables defined for the recipe. Example: ",(0,r.jsx)(i.code,{children:"{{ .Variables.FOO }}"})]}),"\n"]}),"\n",(0,r.jsx)(i.h3,{id:"template-only-specific-files",children:"Template only specific files"}),"\n",(0,r.jsxs)(i.p,{children:["By defining ",(0,r.jsx)(i.code,{children:"templateExtension"})," property in the ",(0,r.jsx)(i.code,{children:"recipe.yml"})," file, you can define that only the files with the given file extensions should be rendered from the ",(0,r.jsx)(i.code,{children:"templates"})," directory. The rest of the files will be copied as is. This is useful when there are files that do not need templating, but you would still need to escape the ",(0,r.jsx)(i.code,{children:"{{"})," and ",(0,r.jsx)(i.code,{children:"}}"})," characters (for example ",(0,r.jsx)(i.a,{href:"https://taskfile.dev/usage/",children:"Taskfiles"}),")."]}),"\n",(0,r.jsx)(i.h2,{id:"variables",children:"Variables"}),"\n",(0,r.jsxs)(i.p,{children:["Recipe variables let you define values which user need to provide to be able to render the tempaltes. Variables are defined in the ",(0,r.jsx)(i.code,{children:"recipe.yml"})," file. You can check schema ",(0,r.jsx)(i.a,{href:"/api#variable",children:"here"}),"."]}),"\n",(0,r.jsx)(i.h3,{id:"variable-types",children:"Variable types"}),"\n",(0,r.jsx)(i.p,{children:"Recipe variables supports the following types:"}),"\n",(0,r.jsxs)(i.ul,{children:["\n",(0,r.jsx)(i.li,{children:(0,r.jsx)(i.a,{href:"https://github.com/futurice/jalapeno/blob/main/examples/variable-types/recipe.yml#L9-L11",children:"String"})}),"\n",(0,r.jsx)(i.li,{children:(0,r.jsx)(i.a,{href:"https://github.com/futurice/jalapeno/blob/main/examples/variable-types/recipe.yml#L13-L15",children:"Boolean"})}),"\n",(0,r.jsx)(i.li,{children:(0,r.jsx)(i.a,{href:"https://github.com/futurice/jalapeno/blob/main/examples/variable-types/recipe.yml#L20-L22",children:"Select (predefined options)"})}),"\n",(0,r.jsx)(i.li,{children:(0,r.jsx)(i.a,{href:"https://github.com/futurice/jalapeno/blob/main/examples/variable-types/recipe.yml#L29-L38",children:"Table"})}),"\n"]}),"\n",(0,r.jsxs)(i.p,{children:["You can see examples of all the possible variables in the ",(0,r.jsx)(i.a,{href:"https://github.com/futurice/jalapeno/blob/main/examples/variable-types/recipe.yml",children:"example recipe"}),"."]}),"\n",(0,r.jsx)(i.admonition,{type:"note",children:(0,r.jsxs)(i.p,{children:["If you need to use numbers in the templates, you can use the ",(0,r.jsx)(i.code,{children:"atoi"})," function to convert a string variable to integer: ",(0,r.jsx)(i.code,{children:"{{ .Variables.FOO | atoi }}"})]})}),"\n",(0,r.jsx)(i.h3,{id:"validation",children:"Validation"}),"\n",(0,r.jsxs)(i.p,{children:["Variables can be validated by defining ",(0,r.jsx)(i.a,{href:"/api#variable",children:(0,r.jsx)(i.code,{children:"validators"})})," property for the variable. Validators support regular expression pattern matching."]}),"\n",(0,r.jsx)(i.h2,{id:"publishing-recipes",children:"Publishing recipes"}),"\n",(0,r.jsx)(i.p,{children:"Jalapeno supports publishing and storing recipes in OCI compatible registries. This means that versioned recipes can be pushed and pulled to/from ordinary Container Registries. This is useful when you want to make your recipes available or you want to check for updates for the recipe manually or programatically from CI/CD pipeline."}),"\n",(0,r.jsx)(i.h3,{id:"pushing-a-recipe-to-container-registry",children:"Pushing a recipe to Container registry"}),"\n",(0,r.jsxs)(i.p,{children:["You can push a recipe to a Container registry by using ",(0,r.jsx)(i.code,{children:"jalapeno push"})," command. For authentication you can use ",(0,r.jsx)(i.code,{children:"docker login"})," before pushing the recipe or provide credentials directly to ",(0,r.jsx)(i.code,{children:"jalapeno push"})," command by using flags. For example:"]}),"\n",(0,r.jsx)(i.pre,{children:(0,r.jsx)(i.code,{className:"language-bash",children:"jalapeno create my-recipe\n\n# You can find possible authentication methods to Github Container Registry at https://docs.github.com/en/packages/working-with-a-github-packages-registry/working-with-the-container-registry#authenticating-to-the-container-registry\ndocker login ghcr.io -u my-user\n\njalapeno push my-recipe ghcr.io/my-user/my-recipe\n"})}),"\n",(0,r.jsx)(i.p,{children:"After this you should be able to see the recipe in the Container registry from the UI or by running:"}),"\n",(0,r.jsx)(i.pre,{children:(0,r.jsx)(i.code,{className:"language-bash",children:"docker inspect ghcr.io/my-user/my-recipe:v0.0.0\n"})}),"\n",(0,r.jsx)(i.admonition,{type:"note",children:(0,r.jsxs)(i.p,{children:["The tag of the recipe image in Container Registry is determined by the version in ",(0,r.jsx)(i.code,{children:"recipe.yml"})," file. So if you want to push a new version of the recipe, you need to update the version in ",(0,r.jsx)(i.code,{children:"recipe.yml"})," file first."]})}),"\n",(0,r.jsx)(i.h3,{id:"executing-a-recipe-from-container-registry",children:"Executing a recipe from Container registry"}),"\n",(0,r.jsxs)(i.p,{children:["You can execute a recipe directly from Container registry by using ",(0,r.jsx)(i.code,{children:"jalapeno execute"})," command. For example:"]}),"\n",(0,r.jsx)(i.pre,{children:(0,r.jsx)(i.code,{className:"language-bash",children:"mkdir my-project && cd my-project\njalapeno execute oci://ghcr.io/my-user/my-recipe:v0.0.0\n"})}),"\n",(0,r.jsx)(i.p,{children:"Another way is to pull the recipe first on your local machine and then execute it:"}),"\n",(0,r.jsx)(i.pre,{children:(0,r.jsx)(i.code,{className:"language-bash",children:"mkdir my-project && cd my-project\njalapeno pull oci://ghcr.io/my-user/my-recipe:v0.0.0\njalapeno execute my-recipe\n"})}),"\n",(0,r.jsx)(i.h3,{id:"checking-updates-for-a-recipe",children:"Checking updates for a recipe"}),"\n",(0,r.jsxs)(i.p,{children:["After you have executed a recipe, Jalapeno will create a ",(0,r.jsx)(i.code,{children:".jalapeno/sauces.yml"})," file to the project directory. This file contains information about the executed recipes and their versions. If the recipe was executed directly from a Container Registry, the registry URL is also stored in the file for checking for new versions. To check the new versions for the recipes, you can run:"]}),"\n",(0,r.jsx)(i.pre,{children:(0,r.jsx)(i.code,{className:"language-bash",children:"jalapeno check\n"})}),"\n",(0,r.jsx)(i.p,{children:"This will check for updates for all the recipes in the project directory. You can also check for updates for a specific recipe by running:"}),"\n",(0,r.jsx)(i.pre,{children:(0,r.jsx)(i.code,{className:"language-bash",children:"jalapeno check --recipe my-recipe\n"})}),"\n",(0,r.jsx)(i.p,{children:"If you've executed the recipe from local directory and the registry URL is still unknown, you can set the registry URL manually by running:"}),"\n",(0,r.jsx)(i.pre,{children:(0,r.jsx)(i.code,{className:"language-bash",children:"jalapeno check --recipe my-recipe --from oci://ghcr.io/my-user/my-recipe\n"})}),"\n",(0,r.jsx)(i.admonition,{type:"tip",children:(0,r.jsxs)(i.p,{children:["If you want to run the check in a CI/CD pipeline (like Github Actions), you can check the ",(0,r.jsx)(i.a,{href:"https://github.com/futurice/jalapeno/tree/main/examples/github-action",children:(0,r.jsx)(i.code,{children:"examples/github-action"})})," recipe how to do it or you can execute it to your project with ",(0,r.jsx)(i.code,{children:"jalapeno execute oci://ghcr.io/futurice/jalapeno/examples/github-action:v0.0.0"}),"."]})}),"\n",(0,r.jsx)(i.h2,{id:"upgrading-recipes",children:"Upgrading recipes"}),"\n",(0,r.jsx)(i.p,{children:"You can upgrade a recipe by running:"}),"\n",(0,r.jsx)(i.pre,{children:(0,r.jsx)(i.code,{className:"language-bash",children:"jalapeno upgrade oci://ghcr.io/my-user/my-recipe:v2.0.0\n"})}),"\n",(0,r.jsxs)(i.p,{children:["Note that the new recipe version needs to be newer than the previous version. Doing rollbacks with the ",(0,r.jsx)(i.code,{children:"upgrade"})," command is not supported at the moment."]}),"\n",(0,r.jsx)(i.p,{children:"If you've modified the files which were originally generated by the recipe, Jalapeno will notice them while doing the upgrade. It will ask if you want to overwrite the modified files with the newer versions or keep the modified ones."}),"\n",(0,r.jsx)(i.h2,{id:"creating-tests-for-a-recipe",children:"Creating tests for a recipe"}),"\n",(0,r.jsx)(i.p,{children:"..."})]})}function d(e={}){const{wrapper:i}={...(0,a.a)(),...e.components};return i?(0,r.jsx)(i,{...e,children:(0,r.jsx)(h,{...e})}):h(e)}}}]);
\ No newline at end of file
diff --git a/assets/js/runtime~main.b3e09afd.js b/assets/js/runtime~main.dd3d2a72.js
similarity index 96%
rename from assets/js/runtime~main.b3e09afd.js
rename to assets/js/runtime~main.dd3d2a72.js
index 817394d2..4ffd5439 100644
--- a/assets/js/runtime~main.b3e09afd.js
+++ b/assets/js/runtime~main.dd3d2a72.js
@@ -1 +1 @@
-(()=>{"use strict";var e,t,r,a,o,n={},c={};function f(e){var t=c[e];if(void 0!==t)return t.exports;var r=c[e]={exports:{}};return n[e].call(r.exports,r,r.exports,f),r.exports}f.m=n,e=[],f.O=(t,r,a,o)=>{if(!r){var n=1/0;for(d=0;d.Recipe.APIVersion
: The API version which the recipe file uses
.Recipe.Name
: The name of the recipe.Recipe.Version
: The current version of the recipe.Recipe.Source
: URL to source code for this recipe.ID
: UUID which is generated after the first execution of the recipe. It will keep its value over upgrades. Can be used to generate unique pseudo-random values which stays the same over the upgrades, for example my-resource-{{ sha1sum .ID | trunc 5 }}