diff --git a/website/docs/cli/configuration/configuration.mdx b/website/docs/cli/configuration/configuration.mdx
index fc62ee03b..083b6f6c2 100644
--- a/website/docs/cli/configuration/configuration.mdx
+++ b/website/docs/cli/configuration/configuration.mdx
@@ -10,6 +10,7 @@ import Screengrab from '@site/src/components/Screengrab'
import Terminal from '@site/src/components/Terminal'
import File from '@site/src/components/File'
import Intro from '@site/src/components/Intro'
+import Admonition from '@theme/Admonition'
# CLI Configuration
@@ -182,7 +183,7 @@ The `settings` section configures Atmos global settings.
The items in the destination list are deep-merged with the items in the source list. The items in the source list take precedence. The items are processed starting from the first up to the length of the source list (the remaining items are not processed). If the source and destination lists have the same length, all items in the destination lists are deep-merged with all items in the source list.
-
+
`settings.terminal`
Specifies how content is displayed in the terminal.
@@ -204,9 +205,10 @@ The `settings` section configures Atmos global settings.
`settings.docs` (Deprecated)
- :::warning Deprecated
- The `settings.docs` section is deprecated and will be removed in a future version. Please use `settings.terminal` instead.
- :::
+
+
+ The `settings.docs` section is deprecated and will be removed in a future version. Please use `settings.terminal` instead.
+
- `max-width` (Deprecated)
@@ -648,7 +650,7 @@ Most YAML settings can also be defined by environment variables. This is helpful
setting `ATMOS_STACKS_BASE_PATH` to a path in `/localhost` to your local development folder, will enable you to rapidly iterate.
| Variable | YAML Path | Description |
-|:------------------------------------------------------|:------------------------------------------------|:-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
+| :---------------------------------------------------- | :---------------------------------------------- | :--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| ATMOS_CLI_CONFIG_PATH | N/A | Where to find `atmos.yaml`. Path to a folder where `atmos.yaml` CLI config file is located (e.g. `/config`) |
| ATMOS_BASE_PATH | base_path | Base path to `components` and `stacks` folders |
| ATMOS_VENDOR_BASE_PATH | vendor.base_path | Path to vendor configuration file or directory containing vendor files. If a directory is specified, all .yaml files in the directory will be processed in lexicographical order. Supports both absolute and relative paths. |
@@ -683,16 +685,16 @@ setting `ATMOS_STACKS_BASE_PATH` to a path in `/localhost` to your local develop
Some commands, like [`atmos terraform shell`](/cli/commands/terraform/shell),
spawn an interactive shell with certain environment variables set, in order to enable the user to use other tools
-(in the case of `atmos terraform shell`, the Terraform or Tofu CLI) natively, while still being configured for a
-specific component and stack. To accomplish this, and to provide visibility and context to the user regarding the
+(in the case of `atmos terraform shell`, the Terraform or Tofu CLI) natively, while still being configured for a
+specific component and stack. To accomplish this, and to provide visibility and context to the user regarding the
configuration, Atmos may set the following environment variables in the spawned shell:
-| Variable | Description |
-|:------------------------|:-------------------------------------------------------------------------------------------------------|
-| ATMOS_COMPONENT | The name of the active component |
-| ATMOS_SHELL_WORKING_DIR | The directory from which native commands should be run |
-| ATMOS_SHLVL | The depth of Atmos shell nesting. When present, it indicates that the shell has been spawned by Atmos. |
-| ATMOS_STACK | The name of the active stack |
+| Variable | Description |
+| :------------------------ | :----------------------------------------------------------------------------------------------------- |
+| ATMOS_COMPONENT | The name of the active component |
+| ATMOS_SHELL_WORKING_DIR | The directory from which native commands should be run |
+| ATMOS_SHLVL | The depth of Atmos shell nesting. When present, it indicates that the shell has been spawned by Atmos. |
+| ATMOS_STACK | The name of the active stack |
| ATMOS_TERRAFORM_WORKSPACE | The name of the Terraform workspace in which Terraform comamnds should be run |
-| PS1 | When a custom shell prompt has been configured in Atmos, the prompt will be set via `PS1` |
-| TF_CLI_ARGS_* | Terraform CLI arguments to be passed to Terraform commands |
+| PS1 | When a custom shell prompt has been configured in Atmos, the prompt will be set via `PS1` |
+| TF_CLI_ARGS_* | Terraform CLI arguments to be passed to Terraform commands |
diff --git a/website/docs/schemas/cli.mdx b/website/docs/schemas/cli.mdx
new file mode 100644
index 000000000..30f04abc3
--- /dev/null
+++ b/website/docs/schemas/cli.mdx
@@ -0,0 +1,10 @@
+---
+title: Atmos Configuration Schema
+sidebar_position: 1
+sidebar_label: CLI Configuration
+description: Atmos CLI Configuration Schema
+---
+import Schema from '@site/static/schemas/atmos/1.0/cli.json'
+import JSONSchemaViewer from "@theme/JSONSchemaViewer";
+
+
diff --git a/website/docs/cli/schemas.mdx b/website/docs/schemas/schemas.mdx
similarity index 99%
rename from website/docs/cli/schemas.mdx
rename to website/docs/schemas/schemas.mdx
index bb77436e9..d4d3890a3 100644
--- a/website/docs/cli/schemas.mdx
+++ b/website/docs/schemas/schemas.mdx
@@ -3,6 +3,8 @@ title: Atmos Manifest JSON Schema
description: Atmos Schemas
sidebar_label: Schemas
sidebar_position: 5
+sidebar_class_name: hidden
+slug: /cli/schemas
---
import Terminal from '@site/src/components/Terminal'
import Intro from '@site/src/components/Intro'
diff --git a/website/docs/schemas/stack.mdx b/website/docs/schemas/stack.mdx
new file mode 100644
index 000000000..61f6ec26d
--- /dev/null
+++ b/website/docs/schemas/stack.mdx
@@ -0,0 +1,10 @@
+---
+title: Stack Schema
+sidebar_position: 1
+sidebar_label: Stacks
+description: Stack Schema
+---
+import Schema from '@site/static/schemas/atmos/1.0/stack.json'
+import JSONSchemaViewer from "@theme/JSONSchemaViewer";
+
+
diff --git a/website/docs/schemas/vendor.mdx b/website/docs/schemas/vendor.mdx
new file mode 100644
index 000000000..20e4037e6
--- /dev/null
+++ b/website/docs/schemas/vendor.mdx
@@ -0,0 +1,10 @@
+---
+title: Vendor Schema
+sidebar_position: 1
+sidebar_label: Vendor
+description: Vendor Schema
+---
+import Schema from '@site/static/schemas/atmos/1.0/vendor.json'
+import JSONSchemaViewer from "@theme/JSONSchemaViewer";
+
+
diff --git a/website/docs/schemas/workflow.mdx b/website/docs/schemas/workflow.mdx
new file mode 100644
index 000000000..c30728bd4
--- /dev/null
+++ b/website/docs/schemas/workflow.mdx
@@ -0,0 +1,10 @@
+---
+title: Workflow Schema
+sidebar_position: 1
+sidebar_label: Workflows
+description: Workflow Schema
+---
+import Schema from '@site/static/schemas/atmos/1.0/vendor.json'
+import JSONSchemaViewer from "@theme/JSONSchemaViewer";
+
+
diff --git a/website/docusaurus.config.js b/website/docusaurus.config.js
index eb3ba8272..f102816e8 100644
--- a/website/docusaurus.config.js
+++ b/website/docusaurus.config.js
@@ -236,7 +236,7 @@ const config = {
mermaid: true,
},
- themes: ['@docusaurus/theme-mermaid']
+ themes: ['@docusaurus/theme-mermaid', 'docusaurus-json-schema-plugin']
};
module.exports = config;
diff --git a/website/package-lock.json b/website/package-lock.json
index 2f06cd64c..c2a521d34 100644
--- a/website/package-lock.json
+++ b/website/package-lock.json
@@ -24,6 +24,7 @@
"@mdx-js/react": "^3.1.0",
"clsx": "^2.1.1",
"custom-loaders": "file:plugins/custom-loaders",
+ "docusaurus-json-schema-plugin": "^1.12.2",
"docusaurus-plugin-image-zoom": "^2.0.0",
"docusaurus-plugin-sentry": "^2.0.0",
"html-loader": "^5.1.0",
@@ -4845,6 +4846,75 @@
"micromark-util-symbol": "^1.0.1"
}
},
+ "node_modules/@stoplight/json": {
+ "version": "3.21.7",
+ "resolved": "https://registry.npmjs.org/@stoplight/json/-/json-3.21.7.tgz",
+ "integrity": "sha512-xcJXgKFqv/uCEgtGlPxy3tPA+4I+ZI4vAuMJ885+ThkTHFVkC+0Fm58lA9NlsyjnkpxFh4YiQWpH+KefHdbA0A==",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "@stoplight/ordered-object-literal": "^1.0.3",
+ "@stoplight/path": "^1.3.2",
+ "@stoplight/types": "^13.6.0",
+ "jsonc-parser": "~2.2.1",
+ "lodash": "^4.17.21",
+ "safe-stable-stringify": "^1.1"
+ },
+ "engines": {
+ "node": ">=8.3.0"
+ }
+ },
+ "node_modules/@stoplight/json-ref-resolver": {
+ "version": "3.1.6",
+ "resolved": "https://registry.npmjs.org/@stoplight/json-ref-resolver/-/json-ref-resolver-3.1.6.tgz",
+ "integrity": "sha512-YNcWv3R3n3U6iQYBsFOiWSuRGE5su1tJSiX6pAPRVk7dP0L7lqCteXGzuVRQ0gMZqUl8v1P0+fAKxF6PLo9B5A==",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "@stoplight/json": "^3.21.0",
+ "@stoplight/path": "^1.3.2",
+ "@stoplight/types": "^12.3.0 || ^13.0.0",
+ "@types/urijs": "^1.19.19",
+ "dependency-graph": "~0.11.0",
+ "fast-memoize": "^2.5.2",
+ "immer": "^9.0.6",
+ "lodash": "^4.17.21",
+ "tslib": "^2.6.0",
+ "urijs": "^1.19.11"
+ },
+ "engines": {
+ "node": ">=8.3.0"
+ }
+ },
+ "node_modules/@stoplight/ordered-object-literal": {
+ "version": "1.0.5",
+ "resolved": "https://registry.npmjs.org/@stoplight/ordered-object-literal/-/ordered-object-literal-1.0.5.tgz",
+ "integrity": "sha512-COTiuCU5bgMUtbIFBuyyh2/yVVzlr5Om0v5utQDgBCuQUOPgU1DwoffkTfg4UBQOvByi5foF4w4T+H9CoRe5wg==",
+ "license": "Apache-2.0",
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/@stoplight/path": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/@stoplight/path/-/path-1.3.2.tgz",
+ "integrity": "sha512-lyIc6JUlUA8Ve5ELywPC8I2Sdnh1zc1zmbYgVarhXIp9YeAB0ReeqmGEOWNtlHkbP2DAA1AL65Wfn2ncjK/jtQ==",
+ "license": "Apache-2.0",
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/@stoplight/types": {
+ "version": "13.20.0",
+ "resolved": "https://registry.npmjs.org/@stoplight/types/-/types-13.20.0.tgz",
+ "integrity": "sha512-2FNTv05If7ib79VPDA/r9eUet76jewXFH2y2K5vuge6SXbRHtWBhcaRmu+6QpF4/WRNoJj5XYRSwLGXDxysBGA==",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "@types/json-schema": "^7.0.4",
+ "utility-types": "^3.10.0"
+ },
+ "engines": {
+ "node": "^12.20 || >=14.13"
+ }
+ },
"node_modules/@svgr/babel-plugin-add-jsx-attribute": {
"version": "8.0.0",
"resolved": "https://registry.npmjs.org/@svgr/babel-plugin-add-jsx-attribute/-/babel-plugin-add-jsx-attribute-8.0.0.tgz",
@@ -5853,6 +5923,12 @@
"integrity": "sha512-ko/gIFJRv177XgZsZcBwnqJN5x/Gien8qNOn0D5bQU/zAzVf9Zt3BlcUiLqhV9y4ARk0GbT3tnUiPNgnTXzc/Q==",
"license": "MIT"
},
+ "node_modules/@types/urijs": {
+ "version": "1.19.25",
+ "resolved": "https://registry.npmjs.org/@types/urijs/-/urijs-1.19.25.tgz",
+ "integrity": "sha512-XOfUup9r3Y06nFAZh3WvO0rBU4OtlfPB/vgxpjg+NRdGU6CN6djdc6OEiH+PcqHCY6eFLo9Ista73uarf4gnBg==",
+ "license": "MIT"
+ },
"node_modules/@types/ws": {
"version": "8.5.13",
"resolved": "https://registry.npmjs.org/@types/ws/-/ws-8.5.13.tgz",
@@ -8758,6 +8834,15 @@
"node": ">= 0.8"
}
},
+ "node_modules/dependency-graph": {
+ "version": "0.11.0",
+ "resolved": "https://registry.npmjs.org/dependency-graph/-/dependency-graph-0.11.0.tgz",
+ "integrity": "sha512-JeMq7fEshyepOWDfcfHK06N3MhyPhz++vtqWhMT5O9A3K42rdsEDpfdVqjaqaAhsw6a+ZqeDvQVtD0hFHQWrzg==",
+ "license": "MIT",
+ "engines": {
+ "node": ">= 0.6.0"
+ }
+ },
"node_modules/dequal": {
"version": "2.0.3",
"resolved": "https://registry.npmjs.org/dequal/-/dequal-2.0.3.tgz",
@@ -8869,6 +8954,23 @@
"node": ">=6"
}
},
+ "node_modules/docusaurus-json-schema-plugin": {
+ "version": "1.12.2",
+ "resolved": "https://registry.npmjs.org/docusaurus-json-schema-plugin/-/docusaurus-json-schema-plugin-1.12.2.tgz",
+ "integrity": "sha512-UEeXFAf8WeRk194sAJu9Hms4/OVLQCMOFP3uU5i72EJu8AZGEgQIieNTxe1a163X1r+2IeNU//oGi+pacwLFOA==",
+ "license": "AGPL-3.0-or-later",
+ "dependencies": {
+ "@stoplight/json-ref-resolver": "^3.1.5",
+ "monaco-editor": "^0.44.0",
+ "monaco-editor-webpack-plugin": "^7.0.1",
+ "react-monaco-editor": "^0.55.0"
+ },
+ "peerDependencies": {
+ "@docusaurus/core": "^3.0.0",
+ "@docusaurus/theme-classic": "^3.0.0",
+ "react": ">=17 <= 18"
+ }
+ },
"node_modules/docusaurus-plugin-image-zoom": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/docusaurus-plugin-image-zoom/-/docusaurus-plugin-image-zoom-2.0.0.tgz",
@@ -9601,6 +9703,12 @@
"integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==",
"license": "MIT"
},
+ "node_modules/fast-memoize": {
+ "version": "2.5.2",
+ "resolved": "https://registry.npmjs.org/fast-memoize/-/fast-memoize-2.5.2.tgz",
+ "integrity": "sha512-Ue0LwpDYErFbmNnZSF0UH6eImUwDmogUO1jyE+JbN2gsQz/jICm1Ve7t9QT0rNSsfJt+Hs4/S3GnsDVjL4HVrw==",
+ "license": "MIT"
+ },
"node_modules/fast-uri": {
"version": "3.0.3",
"resolved": "https://registry.npmjs.org/fast-uri/-/fast-uri-3.0.3.tgz",
@@ -11696,6 +11804,12 @@
"node": ">=6"
}
},
+ "node_modules/jsonc-parser": {
+ "version": "2.2.1",
+ "resolved": "https://registry.npmjs.org/jsonc-parser/-/jsonc-parser-2.2.1.tgz",
+ "integrity": "sha512-o6/yDBYccGvTz1+QFevz6l6OBZ2+fMVu2JZ9CIhzsYRX4mjaK5IyX9eldUdCmga16zlgQxyrj5pt9kzuj2C02w==",
+ "license": "MIT"
+ },
"node_modules/jsonfile": {
"version": "6.1.0",
"resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz",
@@ -14519,6 +14633,25 @@
"ufo": "^1.5.4"
}
},
+ "node_modules/monaco-editor": {
+ "version": "0.44.0",
+ "resolved": "https://registry.npmjs.org/monaco-editor/-/monaco-editor-0.44.0.tgz",
+ "integrity": "sha512-5SmjNStN6bSuSE5WPT2ZV+iYn1/yI9sd4Igtk23ChvqB7kDk9lZbB9F5frsuvpB+2njdIeGGFf2G4gbE6rCC9Q==",
+ "license": "MIT"
+ },
+ "node_modules/monaco-editor-webpack-plugin": {
+ "version": "7.1.0",
+ "resolved": "https://registry.npmjs.org/monaco-editor-webpack-plugin/-/monaco-editor-webpack-plugin-7.1.0.tgz",
+ "integrity": "sha512-ZjnGINHN963JQkFqjjcBtn1XBtUATDZBMgNQhDQwd78w2ukRhFXAPNgWuacaQiDZsUr4h1rWv5Mv6eriKuOSzA==",
+ "license": "MIT",
+ "dependencies": {
+ "loader-utils": "^2.0.2"
+ },
+ "peerDependencies": {
+ "monaco-editor": ">= 0.31.0",
+ "webpack": "^4.5.0 || 5.x"
+ }
+ },
"node_modules/mrmime": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/mrmime/-/mrmime-2.0.0.tgz",
@@ -17677,6 +17810,20 @@
"webpack": ">=4.41.1 || 5.x"
}
},
+ "node_modules/react-monaco-editor": {
+ "version": "0.55.0",
+ "resolved": "https://registry.npmjs.org/react-monaco-editor/-/react-monaco-editor-0.55.0.tgz",
+ "integrity": "sha512-GdEP0Q3Rn1dczfKEEyY08Nes5plWwIYU4sWRBQO0+jsQWQsKMHKCC6+hPRwR7G/4aA3V/iU9jSmWPzVJYMVFSQ==",
+ "license": "MIT",
+ "dependencies": {
+ "prop-types": "^15.8.1"
+ },
+ "peerDependencies": {
+ "@types/react": ">=16 <= 18",
+ "monaco-editor": "^0.44.0",
+ "react": ">=16 <= 18"
+ }
+ },
"node_modules/react-player": {
"version": "2.16.0",
"resolved": "https://registry.npmjs.org/react-player/-/react-player-2.16.0.tgz",
@@ -19006,6 +19153,12 @@
],
"license": "MIT"
},
+ "node_modules/safe-stable-stringify": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/safe-stable-stringify/-/safe-stable-stringify-1.1.1.tgz",
+ "integrity": "sha512-ERq4hUjKDbJfE4+XtZLFPCDi8Vb1JqaxAPTxWFLBx8XcAlf9Bda/ZJdVezs/NAfsMQScyIlUMx+Yeu7P7rx5jw==",
+ "license": "MIT"
+ },
"node_modules/safer-buffer": {
"version": "2.1.2",
"resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz",
@@ -20508,6 +20661,12 @@
"punycode": "^2.1.0"
}
},
+ "node_modules/urijs": {
+ "version": "1.19.11",
+ "resolved": "https://registry.npmjs.org/urijs/-/urijs-1.19.11.tgz",
+ "integrity": "sha512-HXgFDgDommxn5/bIv0cnQZsPhHDA90NPHD6+c/v21U5+Sx5hoP8+dP9IZXBU1gIfvdRfhG8cel9QNPeionfcCQ==",
+ "license": "MIT"
+ },
"node_modules/url-loader": {
"version": "4.1.1",
"resolved": "https://registry.npmjs.org/url-loader/-/url-loader-4.1.1.tgz",
diff --git a/website/package.json b/website/package.json
index cfdef3159..66db1942b 100644
--- a/website/package.json
+++ b/website/package.json
@@ -30,6 +30,7 @@
"@mdx-js/react": "^3.1.0",
"clsx": "^2.1.1",
"custom-loaders": "file:plugins/custom-loaders",
+ "docusaurus-json-schema-plugin": "^1.12.2",
"docusaurus-plugin-image-zoom": "^2.0.0",
"docusaurus-plugin-sentry": "^2.0.0",
"html-loader": "^5.1.0",
diff --git a/website/sidebars.js b/website/sidebars.js
index 5b107af9b..9c655572c 100644
--- a/website/sidebars.js
+++ b/website/sidebars.js
@@ -165,6 +165,19 @@ module.exports = {
type: 'autogenerated',
dirName: 'cli',
},
+ {
+ type: 'category',
+ label: 'Schemas',
+ collapsible: true,
+ collapsed: true,
+ link: {type: 'doc', id: 'schemas/schemas'},
+ items: [
+ {
+ type: 'autogenerated',
+ dirName: 'schemas',
+ },
+ ]
+ }
]
},
diff --git a/website/static/schemas/atmos/1.0/cli.json b/website/static/schemas/atmos/1.0/cli.json
new file mode 100644
index 000000000..fa878e7ae
--- /dev/null
+++ b/website/static/schemas/atmos/1.0/cli.json
@@ -0,0 +1,258 @@
+{
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
+ "title": "Atmos CLI Configuration",
+ "description": "Schema for Atmos CLI configuration",
+ "fileMatch": [
+ "atmos.{yml,yaml}",
+ "*.atmos.{yml,yaml}",
+ ".atmos.{yml,yaml}",
+ "atmos.d/**/*.{yml,yaml}"
+ ],
+ "type": "object",
+ "properties": {
+ "base_path": {
+ "type": "string",
+ "description": "Base path for components, stacks, and workflows configurations. Supports absolute and relative paths."
+ },
+ "vendor": {
+ "type": "object",
+ "description": "Vendor configuration settings",
+ "properties": {
+ "base_path": {
+ "type": "string",
+ "description": "Path to vendor configuration file or directory containing vendor files"
+ }
+ },
+ "required": ["base_path"]
+ },
+ "components": {
+ "type": "object",
+ "description": "Configuration for components",
+ "properties": {
+ "terraform": {
+ "type": "object",
+ "description": "Terraform component configuration",
+ "properties": {
+ "command": {
+ "type": "string",
+ "description": "Command to execute Terraform (e.g., terraform or tofu)"
+ },
+ "base_path": {
+ "type": "string",
+ "description": "Path to Terraform components directory"
+ },
+ "apply_auto_approve": {
+ "type": "boolean",
+ "description": "Automatically approve Terraform apply"
+ },
+ "deploy_run_init": {
+ "type": "boolean",
+ "description": "Run 'terraform init' before deploying"
+ },
+ "init_run_reconfigure": {
+ "type": "boolean",
+ "description": "Run 'terraform init -reconfigure'"
+ },
+ "auto_generate_backend_file": {
+ "type": "boolean",
+ "description": "Automatically generate backend file"
+ }
+ }
+ },
+ "helmfile": {
+ "type": "object",
+ "description": "Helmfile component configuration",
+ "properties": {
+ "base_path": {
+ "type": "string",
+ "description": "Path to Helmfile components directory"
+ },
+ "use_eks": {
+ "type": "boolean",
+ "description": "Enable EKS integration"
+ },
+ "kubeconfig_path": {
+ "type": "string",
+ "description": "Path to kubeconfig file"
+ },
+ "helm_aws_profile_pattern": {
+ "type": "string",
+ "description": "Pattern for AWS profiles used by Helm"
+ },
+ "cluster_name_pattern": {
+ "type": "string",
+ "description": "Pattern for cluster names"
+ }
+ }
+ }
+ }
+ },
+ "stacks": {
+ "type": "object",
+ "description": "Configuration for stacks",
+ "properties": {
+ "base_path": {
+ "type": "string",
+ "description": "Path to stacks directory"
+ },
+ "included_paths": {
+ "type": "array",
+ "description": "Glob patterns for included paths",
+ "items": {
+ "type": "string"
+ }
+ },
+ "excluded_paths": {
+ "type": "array",
+ "description": "Glob patterns for excluded paths",
+ "items": {
+ "type": "string"
+ }
+ },
+ "name_pattern": {
+ "type": "string",
+ "description": "Pattern for stack names"
+ }
+ }
+ },
+ "workflows": {
+ "type": "object",
+ "description": "Configuration for workflows",
+ "properties": {
+ "base_path": {
+ "type": "string",
+ "description": "Path to workflows directory"
+ }
+ }
+ },
+ "logs": {
+ "type": "object",
+ "description": "Logging configuration",
+ "properties": {
+ "file": {
+ "type": "string",
+ "description": "File or descriptor to write logs to (e.g., /dev/stderr)"
+ },
+ "level": {
+ "type": "string",
+ "description": "Log level (Trace, Debug, Info, Warning, Off)",
+ "enum": ["Trace", "Debug", "Info", "Warning", "Off"]
+ }
+ }
+ },
+ "validate": {
+ "type": "object",
+ "description": "Validation configuration",
+ "properties": {
+ "editorconfig": {
+ "type": "object",
+ "description": "EditorConfig validation settings",
+ "properties": {
+ "exclude": {
+ "type": "array",
+ "description": "List of file paths or patterns to exclude from checks",
+ "items": {
+ "type": "string"
+ }
+ },
+ "ignore_defaults": {
+ "type": "boolean",
+ "description": "Ignore default patterns (e.g., .git/*)"
+ },
+ "dry_run": {
+ "type": "boolean",
+ "description": "Run checks in dry-run mode"
+ },
+ "format": {
+ "type": "string",
+ "description": "Output format for validation (default or json)",
+ "enum": ["default", "json"]
+ },
+ "color": {
+ "type": "boolean",
+ "description": "Enable colored output"
+ }
+ }
+ }
+ }
+ },
+ "commands": {
+ "type": "array",
+ "description": "Custom CLI commands",
+ "items": {
+ "type": "object",
+ "properties": {
+ "name": {
+ "type": "string",
+ "description": "Name of the command"
+ },
+ "description": {
+ "type": "string",
+ "description": "Description of the command"
+ },
+ "commands": {
+ "type": "array",
+ "description": "Subcommands",
+ "items": {
+ "type": "object",
+ "properties": {
+ "name": {
+ "type": "string",
+ "description": "Name of the subcommand"
+ },
+ "description": {
+ "type": "string",
+ "description": "Description of the subcommand"
+ },
+ "arguments": {
+ "type": "array",
+ "description": "Arguments for the subcommand",
+ "items": {
+ "type": "object",
+ "properties": {
+ "name": {
+ "type": "string",
+ "description": "Argument name"
+ },
+ "description": {
+ "type": "string",
+ "description": "Argument description"
+ }
+ }
+ }
+ },
+ "flags": {
+ "type": "array",
+ "description": "Flags for the subcommand",
+ "items": {
+ "type": "object",
+ "properties": {
+ "name": {
+ "type": "string",
+ "description": "Flag name"
+ },
+ "shorthand": {
+ "type": "string",
+ "description": "Shorthand for the flag"
+ },
+ "description": {
+ "type": "string",
+ "description": "Flag description"
+ },
+ "required": {
+ "type": "boolean",
+ "description": "Whether the flag is required"
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ },
+ "required": ["name", "description"]
+ }
+ }
+ },
+ "required": ["base_path", "components", "stacks", "logs"]
+ }
diff --git a/website/static/schemas/atmos/1.0/stack.json b/website/static/schemas/atmos/1.0/stack.json
new file mode 100644
index 000000000..099cdcb42
--- /dev/null
+++ b/website/static/schemas/atmos/1.0/stack.json
@@ -0,0 +1,743 @@
+{
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
+ "$id": "https://json.schemastore.org/atmos-manifest.json",
+ "title": "JSON Schema for Atmos Stack Manifest files. Version 1.0. https://atmos.tools",
+ "fileMatch": [
+ "stacks/**/*.{yml,yaml}"
+ ],
+ "type": "object",
+ "properties": {
+ "import": {
+ "$ref": "#/definitions/import"
+ },
+ "terraform": {
+ "$ref": "#/definitions/terraform"
+ },
+ "helmfile": {
+ "$ref": "#/definitions/helmfile"
+ },
+ "vars": {
+ "$ref": "#/definitions/vars"
+ },
+ "env": {
+ "$ref": "#/definitions/env"
+ },
+ "settings": {
+ "$ref": "#/definitions/settings"
+ },
+ "components": {
+ "$ref": "#/definitions/components"
+ },
+ "overrides": {
+ "$ref": "#/definitions/overrides"
+ },
+ "workflows": {
+ "$ref": "#/definitions/workflows"
+ }
+ },
+ "additionalProperties": true,
+ "oneOf": [
+ {
+ "required": [
+ "workflows"
+ ]
+ },
+ {
+ "anyOf": [
+ {
+ "additionalProperties": true,
+ "not": {
+ "required": [
+ "workflows"
+ ]
+ }
+ },
+ {
+ "required": [
+ "import"
+ ]
+ },
+ {
+ "required": [
+ "terraform"
+ ]
+ },
+ {
+ "required": [
+ "helmfile"
+ ]
+ },
+ {
+ "required": [
+ "vars"
+ ]
+ },
+ {
+ "required": [
+ "env"
+ ]
+ },
+ {
+ "required": [
+ "settings"
+ ]
+ },
+ {
+ "required": [
+ "components"
+ ]
+ },
+ {
+ "required": [
+ "overrides"
+ ]
+ }
+ ]
+ }
+ ],
+ "definitions": {
+ "import": {
+ "type": "array",
+ "description": "Import section",
+ "items": {
+ "oneOf": [
+ {
+ "type": "string"
+ },
+ {
+ "type": "object",
+ "additionalProperties": false,
+ "properties": {
+ "path": {
+ "type": "string"
+ },
+ "skip_templates_processing": {
+ "type": "boolean"
+ },
+ "ignore_missing_template_values": {
+ "type": "boolean"
+ },
+ "skip_if_missing": {
+ "type": "boolean"
+ },
+ "context": {
+ "type": "object",
+ "additionalProperties": true
+ }
+ },
+ "required": [
+ "path"
+ ]
+ }
+ ]
+ }
+ },
+ "components": {
+ "type": "object",
+ "description": "Components section",
+ "additionalProperties": false,
+ "properties": {
+ "terraform": {
+ "$ref": "#/definitions/terraform_components"
+ },
+ "helmfile": {
+ "$ref": "#/definitions/helmfile_components"
+ }
+ },
+ "required": [],
+ "title": "components"
+ },
+ "terraform": {
+ "type": "object",
+ "description": "Terraform section",
+ "additionalProperties": false,
+ "properties": {
+ "vars": {
+ "$ref": "#/definitions/vars"
+ },
+ "env": {
+ "$ref": "#/definitions/env"
+ },
+ "settings": {
+ "$ref": "#/definitions/settings"
+ },
+ "command": {
+ "$ref": "#/definitions/command"
+ },
+ "backend_type": {
+ "$ref": "#/definitions/backend_type"
+ },
+ "backend": {
+ "$ref": "#/definitions/backend"
+ },
+ "remote_state_backend_type": {
+ "$ref": "#/definitions/remote_state_backend_type"
+ },
+ "remote_state_backend": {
+ "$ref": "#/definitions/remote_state_backend"
+ },
+ "overrides": {
+ "$ref": "#/definitions/overrides"
+ },
+ "providers": {
+ "$ref": "#/definitions/providers"
+ }
+ },
+ "required": [],
+ "title": "terraform"
+ },
+ "terraform_components": {
+ "type": "object",
+ "description": "Terraform components section",
+ "patternProperties": {
+ "^[\/a-zA-Z0-9-_{}. ]+$": {
+ "$ref": "#/definitions/terraform_component_manifest"
+ }
+ },
+ "additionalProperties": false,
+ "title": "terraform_components"
+ },
+ "terraform_component_manifest": {
+ "type": "object",
+ "description": "Terraform component manifest",
+ "additionalProperties": false,
+ "properties": {
+ "metadata": {
+ "$ref": "#/definitions/metadata"
+ },
+ "component": {
+ "$ref": "#/definitions/component"
+ },
+ "vars": {
+ "$ref": "#/definitions/vars"
+ },
+ "env": {
+ "$ref": "#/definitions/env"
+ },
+ "settings": {
+ "$ref": "#/definitions/settings"
+ },
+ "command": {
+ "$ref": "#/definitions/command"
+ },
+ "backend_type": {
+ "$ref": "#/definitions/backend_type"
+ },
+ "backend": {
+ "$ref": "#/definitions/backend"
+ },
+ "remote_state_backend_type": {
+ "$ref": "#/definitions/remote_state_backend_type"
+ },
+ "remote_state_backend": {
+ "$ref": "#/definitions/remote_state_backend"
+ },
+ "providers": {
+ "$ref": "#/definitions/providers"
+ }
+ },
+ "required": [],
+ "title": "terraform_component_manifest"
+ },
+ "helmfile": {
+ "type": "object",
+ "description": "Helmfile section",
+ "additionalProperties": false,
+ "properties": {
+ "vars": {
+ "$ref": "#/definitions/vars"
+ },
+ "env": {
+ "$ref": "#/definitions/env"
+ },
+ "settings": {
+ "$ref": "#/definitions/settings"
+ },
+ "command": {
+ "$ref": "#/definitions/command"
+ },
+ "overrides": {
+ "$ref": "#/definitions/overrides"
+ }
+ },
+ "required": [],
+ "title": "helmfile"
+ },
+ "helmfile_components": {
+ "type": "object",
+ "description": "Helmfile components section",
+ "patternProperties": {
+ "^[\/a-zA-Z0-9-_{}. ]+$": {
+ "$ref": "#/definitions/helmfile_component_manifest"
+ }
+ },
+ "additionalProperties": false,
+ "title": "helmfile_components"
+ },
+ "helmfile_component_manifest": {
+ "type": "object",
+ "description": "Helmfile component manifest",
+ "additionalProperties": false,
+ "properties": {
+ "metadata": {
+ "$ref": "#/definitions/metadata"
+ },
+ "component": {
+ "$ref": "#/definitions/component"
+ },
+ "vars": {
+ "$ref": "#/definitions/vars"
+ },
+ "env": {
+ "$ref": "#/definitions/env"
+ },
+ "settings": {
+ "$ref": "#/definitions/settings"
+ },
+ "command": {
+ "$ref": "#/definitions/command"
+ }
+ },
+ "required": [],
+ "title": "helmfile_component_manifest"
+ },
+ "command": {
+ "type": "string",
+ "description": "Command to execute",
+ "title": "command"
+ },
+ "component": {
+ "type": "string",
+ "description": "Component section",
+ "title": "component"
+ },
+ "metadata": {
+ "type": "object",
+ "description": "Metadata section",
+ "additionalProperties": false,
+ "properties": {
+ "type": {
+ "type": "string",
+ "enum": [
+ "abstract",
+ "real"
+ ]
+ },
+ "enabled": {
+ "type": "boolean",
+ "description": "Flag to enable or disable the component"
+ },
+ "component": {
+ "type": "string",
+ "description": "Terraform/OpenTofu/Helmfile component"
+ },
+ "inherits": {
+ "type": "array",
+ "description": "A list of Atmos components that the current component inherits from",
+ "uniqueItems": true,
+ "items": {
+ "type": "string"
+ }
+ },
+ "terraform_workspace": {
+ "type": "string",
+ "description": "Terraform workspace"
+ },
+ "terraform_workspace_pattern": {
+ "type": "string",
+ "description": "Terraform workspace pattern"
+ },
+ "custom": {
+ "type": "object",
+ "description": "Custom configuration per component, not inherited by derived components",
+ "additionalProperties": true,
+ "title": "custom"
+ },
+ "locked": {
+ "type": "boolean",
+ "description": "Flag to lock the component and prevent modifications while allowing read operations"
+ }
+ },
+ "required": [],
+ "title": "metadata"
+ },
+ "settings": {
+ "type": "object",
+ "description": "Settings section",
+ "additionalProperties": true,
+ "properties": {
+ "validation": {
+ "$ref": "#/definitions/validation"
+ },
+ "depends_on": {
+ "$ref": "#/definitions/depends_on"
+ },
+ "spacelift": {
+ "$ref": "#/definitions/spacelift"
+ },
+ "atlantis": {
+ "$ref": "#/definitions/atlantis"
+ },
+ "templates": {
+ "$ref": "#/definitions/templates"
+ }
+ },
+ "required": [],
+ "title": "settings"
+ },
+ "validation": {
+ "type": "object",
+ "description": "Validation section",
+ "patternProperties": {
+ "^[\/a-zA-Z0-9-_{}. ]+$": {
+ "$ref": "#/definitions/validation_manifest"
+ }
+ },
+ "additionalProperties": false,
+ "title": "validation"
+ },
+ "validation_manifest": {
+ "type": "object",
+ "description": "Validation manifest",
+ "properties": {
+ "schema_type": {
+ "type": "string",
+ "enum": [
+ "jsonschema",
+ "opa"
+ ]
+ },
+ "schema_path": {
+ "type": "string"
+ },
+ "description": {
+ "type": "string"
+ },
+ "disabled": {
+ "type": "boolean"
+ },
+ "timeout": {
+ "type": "integer",
+ "minimum": 0
+ },
+ "module_paths": {
+ "type": "array",
+ "uniqueItems": true,
+ "items": {
+ "type": "string"
+ },
+ "description": "List of paths to validation modules"
+ }
+ },
+ "additionalProperties": false,
+ "required": [
+ "schema_type",
+ "schema_path"
+ ],
+ "title": "validation_manifest"
+ },
+ "vars": {
+ "type": "object",
+ "description": "Vars section",
+ "additionalProperties": true,
+ "title": "vars"
+ },
+ "env": {
+ "type": "object",
+ "description": "Env section",
+ "additionalProperties": true,
+ "required": [],
+ "title": "env"
+ },
+ "backend_type": {
+ "type": "string",
+ "enum": [
+ "local",
+ "s3",
+ "remote",
+ "vault",
+ "static",
+ "azurerm",
+ "gcs",
+ "cloud"
+ ],
+ "description": "Backend type",
+ "title": "backend_type"
+ },
+ "backend": {
+ "$ref": "#/definitions/backend_manifest",
+ "title": "backend"
+ },
+ "remote_state_backend_type": {
+ "type": "string",
+ "enum": [
+ "local",
+ "s3",
+ "remote",
+ "vault",
+ "static",
+ "azurerm",
+ "gcs",
+ "cloud"
+ ],
+ "description": "Remote state backend type",
+ "title": "remote_state_backend_type"
+ },
+ "remote_state_backend": {
+ "$ref": "#/definitions/backend_manifest",
+ "title": "remote_state_backend"
+ },
+ "backend_manifest": {
+ "type": "object",
+ "description": "Backend manifest",
+ "additionalProperties": false,
+ "properties": {
+ "local": {
+ "type": "object",
+ "additionalProperties": true
+ },
+ "s3": {
+ "type": "object",
+ "additionalProperties": true
+ },
+ "remote": {
+ "type": "object",
+ "additionalProperties": true
+ },
+ "vault": {
+ "type": "object",
+ "additionalProperties": true
+ },
+ "static": {
+ "type": "object",
+ "additionalProperties": true
+ },
+ "azurerm": {
+ "type": "object",
+ "additionalProperties": true
+ },
+ "gcs": {
+ "type": "object",
+ "additionalProperties": true
+ },
+ "cloud": {
+ "type": "object",
+ "additionalProperties": true
+ }
+ },
+ "required": [],
+ "title": "backend"
+ },
+ "overrides": {
+ "type": "object",
+ "description": "Overrides section",
+ "additionalProperties": false,
+ "properties": {
+ "command": {
+ "$ref": "#/definitions/command"
+ },
+ "vars": {
+ "$ref": "#/definitions/vars"
+ },
+ "env": {
+ "$ref": "#/definitions/env"
+ },
+ "settings": {
+ "$ref": "#/definitions/settings"
+ },
+ "providers": {
+ "$ref": "#/definitions/providers"
+ }
+ },
+ "required": [],
+ "title": "overrides"
+ },
+ "depends_on": {
+ "type": "object",
+ "description": "Depends_on section",
+ "patternProperties": {
+ "^[\/a-zA-Z0-9-_{}. ]+$": {
+ "$ref": "#/definitions/depends_on_manifest"
+ }
+ },
+ "additionalProperties": false,
+ "title": "depends_on"
+ },
+ "depends_on_manifest": {
+ "type": "object",
+ "description": "Depends_on manifest",
+ "properties": {
+ "namespace": {
+ "type": "string"
+ },
+ "tenant": {
+ "type": "string"
+ },
+ "environment": {
+ "type": "string"
+ },
+ "stage": {
+ "type": "string"
+ },
+ "component": {
+ "type": "string"
+ },
+ "file": {
+ "type": "string"
+ },
+ "folder": {
+ "type": "string"
+ }
+ },
+ "oneOf": [
+ {
+ "required": [
+ "component"
+ ]
+ },
+ {
+ "required": [
+ "file"
+ ]
+ },
+ {
+ "required": [
+ "folder"
+ ]
+ }
+ ],
+ "additionalProperties": false,
+ "title": "depends_on_manifest"
+ },
+ "spacelift": {
+ "type": "object",
+ "description": "Spacelift section",
+ "additionalProperties": true,
+ "properties": {
+ "workspace_enabled": {
+ "type": "boolean"
+ },
+ "stack_destructor_enabled": {
+ "type": "boolean"
+ },
+ "protect_from_deletion": {
+ "type": "boolean"
+ },
+ "autodeploy": {
+ "type": "boolean"
+ },
+ "terraform_version": {
+ "anyOf": [
+ {
+ "type": "number"
+ },
+ {
+ "type": "string"
+ }
+ ]
+ }
+ },
+ "required": [],
+ "title": "spacelift"
+ },
+ "atlantis": {
+ "type": "object",
+ "description": "Atlantis section",
+ "additionalProperties": false,
+ "properties": {
+ "config_template_name": {
+ "type": "string"
+ },
+ "config_template": {
+ "type": "object",
+ "additionalProperties": true
+ },
+ "project_template_name": {
+ "type": "string"
+ },
+ "project_template": {
+ "type": "object",
+ "additionalProperties": true
+ },
+ "workflow_templates": {
+ "type": "object",
+ "additionalProperties": true
+ }
+ },
+ "required": [],
+ "title": "atlantis"
+ },
+ "workflows": {
+ "type": "object",
+ "description": "Workflows section",
+ "properties": {
+ "name": {
+ "type": "string"
+ },
+ "description": {
+ "type": "string"
+ }
+ },
+ "patternProperties": {
+ "^[\/a-zA-Z0-9-_{}. ]+$": {
+ "$ref": "#/definitions/workflow_manifest"
+ }
+ },
+ "additionalProperties": false,
+ "title": "workflows"
+ },
+ "workflow_manifest": {
+ "type": "object",
+ "description": "Atmos workflow manifest",
+ "additionalProperties": false,
+ "properties": {
+ "description": {
+ "type": "string"
+ },
+ "stack": {
+ "type": "string"
+ },
+ "steps": {
+ "type": "array",
+ "items": {
+ "type": "object",
+ "additionalProperties": false,
+ "properties": {
+ "name": {
+ "type": "string"
+ },
+ "command": {
+ "type": "string"
+ },
+ "stack": {
+ "type": "string"
+ },
+ "type": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "command"
+ ]
+ }
+ }
+ },
+ "required": [
+ "steps"
+ ],
+ "title": "workflow_manifest"
+ },
+ "providers": {
+ "type": "object",
+ "description": "Providers section",
+ "additionalProperties": true,
+ "title": "providers"
+ },
+ "templates": {
+ "type": "object",
+ "description": "Templates section",
+ "additionalProperties": true,
+ "title": "templates"
+ }
+ }
+ }
diff --git a/website/static/schemas/atmos/1.0/vendor.json b/website/static/schemas/atmos/1.0/vendor.json
new file mode 100644
index 000000000..f5a87a3ed
--- /dev/null
+++ b/website/static/schemas/atmos/1.0/vendor.json
@@ -0,0 +1,102 @@
+{
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
+ "title": "Atmos Vendor Config",
+ "description": "Schema for Atmos vendoring manifest",
+ "fileMatch": [
+ "vendor.{yml,yaml}",
+ "vendor.d/**/*.{yml,yaml}"
+ ],
+ "type": "object",
+ "properties": {
+ "apiVersion": {
+ "type": "string",
+ "enum": ["atmos/v1"],
+ "description": "API version of the Atmos configuration"
+ },
+ "kind": {
+ "type": "string",
+ "enum": ["AtmosVendorConfig"],
+ "description": "The type of configuration, must be AtmosVendorConfig"
+ },
+ "metadata": {
+ "type": "object",
+ "description": "Metadata for the vendoring configuration",
+ "properties": {
+ "name": {
+ "type": "string",
+ "description": "Name of the vendoring configuration"
+ },
+ "description": {
+ "type": "string",
+ "description": "Description of the vendoring configuration"
+ }
+ },
+ "required": ["name", "description"]
+ },
+ "spec": {
+ "type": "object",
+ "description": "Specification of the vendoring configuration",
+ "properties": {
+ "imports": {
+ "type": "array",
+ "description": "List of imports for the vendoring configuration",
+ "items": {
+ "type": "string"
+ }
+ },
+ "sources": {
+ "type": "array",
+ "description": "List of sources for the vendoring configuration",
+ "items": {
+ "type": "object",
+ "properties": {
+ "component": {
+ "type": "string",
+ "description": "Name of the component"
+ },
+ "source": {
+ "type": "string",
+ "description": "Source URL for the component. Supports Git, HTTP, S3, etc."
+ },
+ "version": {
+ "type": "string",
+ "description": "Version of the component to fetch"
+ },
+ "targets": {
+ "type": "array",
+ "description": "List of target paths where the component will be vendored",
+ "items": {
+ "type": "string"
+ }
+ },
+ "included_paths": {
+ "type": "array",
+ "description": "Glob patterns for files to include",
+ "items": {
+ "type": "string"
+ }
+ },
+ "excluded_paths": {
+ "type": "array",
+ "description": "Glob patterns for files to exclude",
+ "items": {
+ "type": "string"
+ }
+ },
+ "tags": {
+ "type": "array",
+ "description": "Tags associated with the component",
+ "items": {
+ "type": "string"
+ }
+ }
+ },
+ "required": ["component", "source", "version", "targets"]
+ }
+ }
+ },
+ "required": ["sources"]
+ }
+ },
+ "required": ["apiVersion", "kind", "metadata", "spec"]
+ }
diff --git a/website/static/schemas/atmos/1.0/workflow.json b/website/static/schemas/atmos/1.0/workflow.json
new file mode 100644
index 000000000..29ff66766
--- /dev/null
+++ b/website/static/schemas/atmos/1.0/workflow.json
@@ -0,0 +1,49 @@
+{
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
+ "$id": "https://json.schemastore.org/workflow-manifest.json",
+ "title": "Atmos Workflow Manifest",
+ "fileMatch": [
+ "workflows/**/*.{yml,yaml}"
+ ],
+ "type": "object",
+ "description": "Atmos workflow manifest",
+ "additionalProperties": false,
+ "properties": {
+ "description": {
+ "type": "string",
+ "description": "A description of the workflow."
+ },
+ "stack": {
+ "type": "string",
+ "description": "The stack associated with this workflow."
+ },
+ "steps": {
+ "type": "array",
+ "description": "The list of steps to execute in the workflow.",
+ "items": {
+ "type": "object",
+ "additionalProperties": false,
+ "properties": {
+ "name": {
+ "type": "string",
+ "description": "The name of the step."
+ },
+ "command": {
+ "type": "string",
+ "description": "The command to execute for this step."
+ },
+ "stack": {
+ "type": "string",
+ "description": "The stack to use for this step."
+ },
+ "type": {
+ "type": "string",
+ "description": "The type of step (e.g., shell, script, etc.)."
+ }
+ },
+ "required": ["command"]
+ }
+ }
+ },
+ "required": ["steps"]
+ }