Skip to content

Update !store YAML function. Introduce atmos.Store template function - #1204

Merged
Andriy Knysh (aknysh) merged 38 commits into
mainfrom
update-store
Apr 15, 2025
Merged

Andriy Knysh (aknysh) merged 38 commits into
mainfrom
update-store

Conversation

@aknysh

@aknysh Andriy Knysh (aknysh) commented Apr 14, 2025 •

Copy link
Copy Markdown
Member

what

why

!store YAML function

  • In the !store YAML function, allow using YQ Expressions to retrieve individual values

To retrieve individual values from complex types such as maps and lists, or do any kind of filtering or querying,
you can utilize YQ expressions.

For example:

  • Retrieve the first item from a list
subnet_id1: !store <store_name> <stack> <component> <key> | query .private_subnet_ids[0]
  • Read a key from a map
username: !store <store_name> <stack> <component> <key> | query .config_map.username

atmos.Store template function

  • The atmos.Store template function allows reading the values from a remote store (e.g. SSM Parameter Store, Artifactory, Redis, etc.) into Atmos stack manifests

For example, we can read the vpc_id output of the vpc component in the current stack from the SSM Parameter Store
configured in atmos.yaml as ssm simply by doing:

components:
  terraform:
    cluster:
      vars:
        vpc_id: '{{ atmos.Store "ssm" .stack "vpc" "vpc_id" }}'

To access the configuration of a component in a different stack, you can specify the stack name as the second argument.
For example, here we're reading the vpc_id output of the vpc component in the staging stack:

components:
  terraform:
    cluster:
      vars:
        vpc_id: '{{ atmos.Store "ssm" "staging" "vpc" "vpc_id" }}'

Summary by CodeRabbit

Summary by CodeRabbit

  • New Features

    • Introduced the atmos.Store template function for accessing remote stores (SSM, Artifactory, Redis) in stack manifests.
    • Enhanced the !store YAML function to support YQ queries for extracting nested data from complex store values.
  • Bug Fixes

    • Improved error handling and messaging for invalid YAML function usage.
  • Documentation

    • Added detailed docs for atmos.Store and updated !store usage with Redis support and YQ query examples.
  • Tests

    • Added unit and integration tests for store template functions with Redis and YQ query support.
  • Chores

    • Updated dependency versions and bumped default Atmos version to 1.171.0.
    • Excluded forbidigo linter from running on test files.

Comment thread .golangci.yml Outdated
Comment thread internal/exec/yaml_func_store.go Fixed
Comment thread internal/exec/yaml_func_store.go Fixed
Comment thread internal/exec/yaml_func_store.go Fixed
if retParams.query != "" {
res, err = u.EvaluateYqExpression(&atmosConfig, value, retParams.query)
if err != nil {
log.Fatal(err)

Check failure

Code scanning / golangci-lint

deep-exit: calls to log.Fatal only in main() or init() functions

deep-exit: calls to log.Fatal only in main() or init() functions

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 0

♻️ Duplicate comments (1)
internal/exec/yaml_func_store.go (1)

29-29: Use of log.Fatal in library functions.

The code uses log.Fatal which terminates program execution. According to the retrieved learnings, there's a plan to refactor this approach in a separate PR.

Also applies to: 89-89, 98-98, 107-107

🧹 Nitpick comments (8)
internal/exec/yaml_func_store.go (2)

22-22: Consider using a consistent naming convention for constants.

The constant name invalidYamlFuncMsg uses camelCase while Go typically uses snake_case for constants.

-const invalidYamlFuncMsg = "invalid YAML function"
+const InvalidYAMLFunctionMsg = "invalid YAML function"

65-66: Extract string literal "function" as a constant.

The string literal "function" appears multiple times in the codebase and should be extracted as a constant.

+const functionKey = "function"

 // In line 65
-log.Error(invalidYamlFuncMsg, "function", input, "invalid number of parameters", partsLength)
+log.Error(invalidYamlFuncMsg, functionKey, input, "invalid number of parameters", partsLength)

 // Other instances should be updated similarly
🧰 Tools
🪛 GitHub Check: golangci-lint

[failure] 65-65:
add-constant: string literal "function" appears, at least, 4 times, create a named constant for it

website/docs/core-concepts/stacks/templates/functions/atmos.Store.mdx (6)

110-114: Use typographic quotes in code examples.

Consider using proper typographic quotes in explanatory text to improve readability and professionalism.

-By using the `printf "%s-%s-%s"` function, you are constructing stack names using the stack context variables/identifiers.
+By using the `printf "%s-%s-%s"` function, you are constructing stack names using the stack context variables/identifiers.
🧰 Tools
🪛 LanguageTool

[typographical] ~110-~110: Consider using a typographic opening quote here.
Context: ... }}' ``` :::tip Important By using the printf "%s-%s-%s" function, you are constructin...

(EN_QUOTES)


212-216: Add missing punctuation at the end of the section header.

The section header "Using atmos.Store function in YAML multi-line strings" should end with a period for consistency.

-## Using `atmos.Store` function in YAML multi-line strings
+## Using `atmos.Store` function in YAML multi-line strings.
🧰 Tools
🪛 LanguageTool

[grammar] ~212-~212: Please add a punctuation mark at the end of paragraph.
Context: ...tmos.Storefunction in YAML multi-line strings You can use theatmos.Store` template...

(PUNCTUATION_PARAGRAPH_END)


237-238: Simplify wording to avoid redundancy.

The phrase "their own advantages" is redundant as ownership is already implied.

-The `!store` YAML function is generally recommended for its simpler, more readable syntax, and it doesn't involve `Go` templates — which come with their own advantages and trade-offs.
+The `!store` YAML function is generally recommended for its simpler, more readable syntax, and it doesn't involve `Go` templates — which come with advantages and trade-offs.
🧰 Tools
🪛 LanguageTool

[style] ~237-~237: Since ownership is already implied, this phrasing can be redundant.
Context: ...nvolve Go templates — which come with their own advantages and trade-offs. ## Caching ...

(PRP_OWN)


239-248: Missing punctuation at the section header and missing comma after "e.g."

There's a missing period at the end of the section header and a missing comma after "e.g." in the paragraph.

-## Caching the result of `atmos.Store` function
+## Caching the result of `atmos.Store` function.

 Atmos caches (in memory) the results of `atmos.Store` template functions when executing any Atmos command that processes stacks
-(e.g. `atmos describe component` or `atmos terraform apply`).
+(e.g., `atmos describe component` or `atmos terraform apply`).
🧰 Tools
🪛 LanguageTool

[grammar] ~239-~239: Please add a punctuation mark at the end of paragraph.
Context: ... ## Caching the result of atmos.Store function Atmos caches (in memory) the results o...

(PUNCTUATION_PARAGRAPH_END)


[style] ~242-~242: A comma is missing here.
Context: ...ny Atmos command that processes stacks (e.g. atmos describe component or `atmos te...

(EG_NO_COMMA)


267-268: Strengthen wording for better impact.

Consider using a stronger verb than "makes" when describing the performance improvement.

-The caching makes the stack processing faster.
+The caching significantly accelerates stack processing.
🧰 Tools
🪛 LanguageTool

[style] ~267-~267: Consider using a different verb to strengthen your wording.
Context: ... two calls to the function. The caching makes the stack processing faster. ## Considerations - Using `atmos.Sto...

(MAKE_XXX_FASTER)


20-26: Use meaningful examples rather than placeholder component/key names.

The examples would be more instructive with realistic component and key names rather than generic placeholders.

For example, instead of:

var1: '{{ atmos.Store "<store_name>" "<stack>" "<component>" "<key>" }}'

Consider:

vpc_id: '{{ atmos.Store "ssm" "<stack>" "vpc" "vpc_id" }}'

Also applies to: 56-62, 76-82

📜 Review details

Configuration used: .coderabbit.yaml
Review profile: CHILL
Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between 94fe44e and 36c78b0.

📒 Files selected for processing (6)
  • .golangci.yml (1 hunks)
  • internal/exec/error.go (1 hunks)
  • internal/exec/template_funcs_store.go (1 hunks)
  • internal/exec/template_funcs_store_test.go (1 hunks)
  • internal/exec/yaml_func_store.go (4 hunks)
  • website/docs/core-concepts/stacks/templates/functions/atmos.Store.mdx (1 hunks)
🚧 Files skipped from review as they are similar to previous changes (4)
  • .golangci.yml
  • internal/exec/template_funcs_store.go
  • internal/exec/error.go
  • internal/exec/template_funcs_store_test.go
🧰 Additional context used
🧠 Learnings (1)
internal/exec/yaml_func_store.go (1)
Learnt from: aknysh
PR: cloudposse/atmos#1185
File: internal/exec/yaml_func_store.go:71-72
Timestamp: 2025-04-04T02:03:21.906Z
Learning: The codebase currently uses `log.Fatal` for error handling in library functions, which terminates the program. There is a plan to refactor this approach in a separate PR to improve API design by returning error messages instead of terminating execution.
🪛 GitHub Check: golangci-lint
internal/exec/yaml_func_store.go

[failure] 65-65:
add-constant: string literal "function" appears, at least, 4 times, create a named constant for it


[failure] 89-89:
deep-exit: calls to log.Fatal only in main() or init() functions


[failure] 98-98:
deep-exit: calls to log.Fatal only in main() or init() functions


[failure] 107-107:
deep-exit: calls to log.Fatal only in main() or init() functions

🪛 LanguageTool
website/docs/core-concepts/stacks/templates/functions/atmos.Store.mdx

[typographical] ~110-~110: Consider using a typographic opening quote here.
Context: ... }}' ``` :::tip Important By using the printf "%s-%s-%s" function, you are constructin...

(EN_QUOTES)


[typographical] ~130-~130: Consider using typographic quotation marks here.
Context: ...onents/terraform" stacks: base_path: "stacks" included_paths: - "deploy/**/*" ...

(EN_QUOTES)


[typographical] ~132-~132: Consider using a typographic opening quote here.
Context: ..._path: "stacks" included_paths: - "deploy//*" excluded_paths: - "...

(EN_QUOTES)


[typographical] ~132-~132: Consider using a typographic close quote here.
Context: ...ks" included_paths: - "deploy//*" excluded_paths: - "/_defaults.y...

(EN_QUOTES)


[typographical] ~134-~134: Consider using a typographic opening quote here.
Context: ...- "deploy//*" excluded_paths: - "/_defaults.yaml" name_template: "{{ ...

(EN_QUOTES)


[typographical] ~134-~134: Consider using a typographic close quote here.
Context: ...excluded_paths: - "**/_defaults.yaml" name_template: "{{ .vars.stage }}" l...

(EN_QUOTES)


[typographical] ~135-~135: Consider using a typographic opening quote here.
Context: ... - "**/_defaults.yaml" name_template: "{{ .vars.stage }}" logs: file: "/dev/...

(EN_QUOTES)


[typographical] ~138-~138: Consider using a typographic opening quote here.
Context: ...ate: "{{ .vars.stage }}" logs: file: "/dev/stderr" level: Info # Go templ...

(EN_QUOTES)


[typographical] ~138-~138: Consider using a typographic close quote here.
Context: ...rs.stage }}" logs: file: "/dev/stderr" level: Info # Go templates in Atmo...

(EN_QUOTES)


[grammar] ~212-~212: Please add a punctuation mark at the end of paragraph.
Context: ...tmos.Storefunction in YAML multi-line strings You can use theatmos.Store` template...

(PUNCTUATION_PARAGRAPH_END)


[style] ~237-~237: Since ownership is already implied, this phrasing can be redundant.
Context: ...nvolve Go templates — which come with their own advantages and trade-offs. ## Caching ...

(PRP_OWN)


[grammar] ~239-~239: Please add a punctuation mark at the end of paragraph.
Context: ... ## Caching the result of atmos.Store function Atmos caches (in memory) the results o...

(PUNCTUATION_PARAGRAPH_END)


[style] ~242-~242: A comma is missing here.
Context: ...ny Atmos command that processes stacks (e.g. atmos describe component or `atmos te...

(EG_NO_COMMA)


[style] ~267-~267: Consider using a different verb to strengthen your wording.
Context: ... two calls to the function. The caching makes the stack processing faster. ## Considerations - Using `atmos.Sto...

(MAKE_XXX_FASTER)

⏰ Context from checks skipped due to timeout of 90000ms (2)
  • GitHub Check: Build (windows-latest, windows)
  • GitHub Check: Summary
🔇 Additional comments (5)
internal/exec/yaml_func_store.go (4)

18-18: Good addition of the query field to the params struct.

This field appropriately supports the new YQ expression feature for extracting nested values from store results.


25-25: Improved debug logging with more context.

Including the entire function input under the "function" key provides better context for troubleshooting.


36-59: Well-implemented parsing logic for both default values and queries.

The code effectively handles multiple pipe-separated parameters with appropriate error handling. Great job on providing detailed error messages for invalid inputs.


101-109: Good implementation of YQ expression evaluation.

The implementation properly handles the YQ query parameter, passing it to the appropriate evaluation function and managing potential errors.

🧰 Tools
🪛 GitHub Check: golangci-lint

[failure] 107-107:
deep-exit: calls to log.Fatal only in main() or init() functions

website/docs/core-concepts/stacks/templates/functions/atmos.Store.mdx (1)

1-279: Comprehensive and well-structured documentation for the new feature.

The documentation clearly explains the purpose, usage, arguments, and considerations for the atmos.Store template function. Examples are thorough and demonstrate different use cases.

🧰 Tools
🪛 LanguageTool

[typographical] ~110-~110: Consider using a typographic opening quote here.
Context: ... }}' ``` :::tip Important By using the printf "%s-%s-%s" function, you are constructin...

(EN_QUOTES)


[typographical] ~130-~130: Consider using typographic quotation marks here.
Context: ...onents/terraform" stacks: base_path: "stacks" included_paths: - "deploy/**/*" ...

(EN_QUOTES)


[typographical] ~132-~132: Consider using a typographic opening quote here.
Context: ..._path: "stacks" included_paths: - "deploy//*" excluded_paths: - "...

(EN_QUOTES)


[typographical] ~132-~132: Consider using a typographic close quote here.
Context: ...ks" included_paths: - "deploy//*" excluded_paths: - "/_defaults.y...

(EN_QUOTES)


[typographical] ~134-~134: Consider using a typographic opening quote here.
Context: ...- "deploy//*" excluded_paths: - "/_defaults.yaml" name_template: "{{ ...

(EN_QUOTES)


[typographical] ~134-~134: Consider using a typographic close quote here.
Context: ...excluded_paths: - "**/_defaults.yaml" name_template: "{{ .vars.stage }}" l...

(EN_QUOTES)


[typographical] ~135-~135: Consider using a typographic opening quote here.
Context: ... - "**/_defaults.yaml" name_template: "{{ .vars.stage }}" logs: file: "/dev/...

(EN_QUOTES)


[typographical] ~138-~138: Consider using a typographic opening quote here.
Context: ...ate: "{{ .vars.stage }}" logs: file: "/dev/stderr" level: Info # Go templ...

(EN_QUOTES)


[typographical] ~138-~138: Consider using a typographic close quote here.
Context: ...rs.stage }}" logs: file: "/dev/stderr" level: Info # Go templates in Atmo...

(EN_QUOTES)


[grammar] ~212-~212: Please add a punctuation mark at the end of paragraph.
Context: ...tmos.Storefunction in YAML multi-line strings You can use theatmos.Store` template...

(PUNCTUATION_PARAGRAPH_END)


[style] ~237-~237: Since ownership is already implied, this phrasing can be redundant.
Context: ...nvolve Go templates — which come with their own advantages and trade-offs. ## Caching ...

(PRP_OWN)


[grammar] ~239-~239: Please add a punctuation mark at the end of paragraph.
Context: ... ## Caching the result of atmos.Store function Atmos caches (in memory) the results o...

(PUNCTUATION_PARAGRAPH_END)


[style] ~242-~242: A comma is missing here.
Context: ...ny Atmos command that processes stacks (e.g. atmos describe component or `atmos te...

(EG_NO_COMMA)


[style] ~267-~267: Consider using a different verb to strengthen your wording.
Context: ... two calls to the function. The caching makes the stack processing faster. ## Considerations - Using `atmos.Sto...

(MAKE_XXX_FASTER)


if store == nil {
u.LogErrorAndExit(fmt.Errorf("invalid Atmos Store YAML function execution:: %s\nstore '%s' not found", input, retParams.storeName))
log.Fatal("store not found", function, input, "store", retParams.storeName)

Check failure

Code scanning / golangci-lint

deep-exit: calls to log.Fatal only in main() or init() functions

deep-exit: calls to log.Fatal only in main() or init() functions
return *retParams.defaultValue
}
u.LogErrorAndExit(fmt.Errorf("failed to get key: %s", err))
log.Fatal("failed to get key", function, input, "key", retParams.key, "error", err)

Check failure

Code scanning / golangci-lint

deep-exit: calls to log.Fatal only in main() or init() functions

deep-exit: calls to log.Fatal only in main() or init() functions

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 0

♻️ Duplicate comments (1)
internal/exec/yaml_func_store.go (1)

92-93: ⚠️ Potential issue

Use of log.Fatal should be refactored

The code uses log.Fatal which immediately terminates the program. This doesn't follow best practices for library functions which should return errors instead.

According to retrieved learnings and past comments, this will be addressed in a separate PR. Consider returning errors instead of using log.Fatal to allow callers to handle errors appropriately.

Also applies to: 101-102, 110-111

🧰 Tools
🪛 GitHub Check: golangci-lint

[failure] 92-92:
deep-exit: calls to log.Fatal only in main() or init() functions

🧹 Nitpick comments (2)
internal/exec/yaml_func_store.go (2)

27-115: Suggest adding a test case for YQ query functionality

While the implementation looks solid, consider adding test cases specifically for the new YQ query functionality to ensure it works as expected.

For example, add test cases that:

  1. Test retrieval with valid YQ expressions
  2. Test behavior with invalid YQ expressions
  3. Test the interaction between default values and YQ expressions
🧰 Tools
🪛 GitHub Check: golangci-lint

[failure] 92-92:
deep-exit: calls to log.Fatal only in main() or init() functions


[failure] 101-101:
deep-exit: calls to log.Fatal only in main() or init() functions


[failure] 110-110:
deep-exit: calls to log.Fatal only in main() or init() functions


27-115: Consider improving documentation for the new functionality

The function has been enhanced to support YQ expressions, but there are no comments explaining the expected format and behavior of this new functionality.

Consider adding a documentation comment at the top of the function explaining:

  • The format for specifying YQ queries (!store redis stack component key | query expression)
  • Examples of valid YQ expressions
  • Behavior when both default value and query are specified
🧰 Tools
🪛 GitHub Check: golangci-lint

[failure] 92-92:
deep-exit: calls to log.Fatal only in main() or init() functions


[failure] 101-101:
deep-exit: calls to log.Fatal only in main() or init() functions


[failure] 110-110:
deep-exit: calls to log.Fatal only in main() or init() functions

📜 Review details

Configuration used: .coderabbit.yaml
Review profile: CHILL
Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between 36c78b0 and c605928.

📒 Files selected for processing (1)
  • internal/exec/yaml_func_store.go (4 hunks)
🧰 Additional context used
🧠 Learnings (1)
internal/exec/yaml_func_store.go (1)
Learnt from: aknysh
PR: cloudposse/atmos#1185
File: internal/exec/yaml_func_store.go:71-72
Timestamp: 2025-04-04T02:03:21.906Z
Learning: The codebase currently uses `log.Fatal` for error handling in library functions, which terminates the program. There is a plan to refactor this approach in a separate PR to improve API design by returning error messages instead of terminating execution.
🪛 GitHub Check: golangci-lint
internal/exec/yaml_func_store.go

[failure] 92-92:
deep-exit: calls to log.Fatal only in main() or init() functions


[failure] 101-101:
deep-exit: calls to log.Fatal only in main() or init() functions


[failure] 110-110:
deep-exit: calls to log.Fatal only in main() or init() functions

⏰ Context from checks skipped due to timeout of 90000ms (2)
  • GitHub Check: Build (windows-latest, windows)
  • GitHub Check: Summary
🔇 Additional comments (7)
internal/exec/yaml_func_store.go (7)

7-8: Import dependencies updated accordingly

The change to use charmbracelet/log is consistent with the project's logging approach.


18-19: Good addition of the query field to params struct

The new query field properly extends the existing params struct to support YQ expressions. This cleanly supports the new functionality without breaking existing code.


22-25: Constants added to improve code maintainability

Extracting string literals into constants is a good practice. This addresses previous code scanning alerts about repeated string literals.


39-62: Well-structured parameter parsing logic

The enhanced parsing logic properly handles both default and query parameters after the pipe symbol. The validation is thorough and provides clear error messages.


75-76: Query parameter correctly included in return struct

Good job ensuring the query parameter is properly added to the return params struct.


104-112: New YQ expression evaluation feature well implemented

The implementation of YQ expression evaluation is clean and straightforward. The code properly handles errors and falls back to the original value if no query is provided.

🧰 Tools
🪛 GitHub Check: golangci-lint

[failure] 110-110:
deep-exit: calls to log.Fatal only in main() or init() functions


114-115: Return value updated to support YQ query results

The function now correctly returns the result of YQ expression evaluation when a query is provided.

Co-authored-by: Erik Osterman (CEO @ Cloud Posse) <erik@cloudposse.com>

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 0

🧹 Nitpick comments (2)
website/docs/core-concepts/stacks/templates/functions/atmos.Store.mdx (2)

168-186: Use meaningful example names for clarity.

Consider replacing generic names like component-1, config, and config_map with more descriptive, real-world names (e.g., web_server, app_config, network_settings). This helps users better understand the context and intent of the examples.

Let me know if you want suggestions for more realistic names.


240-249: Add punctuation for completeness.

Consider ending the introductory sentence with a period for consistency:

-## Caching the result of `atmos.Store` function
-Atmos caches (in memory) the results of `atmos.Store` template functions when executing any Atmos command that processes stacks
-(e.g. `atmos describe component` or `atmos terraform apply`).
+## Caching the result of `atmos.Store` function
+Atmos caches (in memory) the results of `atmos.Store` template functions when executing any Atmos command that processes stacks
+(e.g. `atmos describe component` or `atmos terraform apply`).

This is a minor style point and doesn't affect comprehension.

🧰 Tools
🪛 LanguageTool

[grammar] ~240-~240: Please add a punctuation mark at the end of paragraph.
Context: ... ## Caching the result of atmos.Store function Atmos caches (in memory) the results o...

(PUNCTUATION_PARAGRAPH_END)


[style] ~243-~243: A comma is missing here.
Context: ...ny Atmos command that processes stacks (e.g. atmos describe component or `atmos te...

(EG_NO_COMMA)

📜 Review details

Configuration used: .coderabbit.yaml
Review profile: CHILL
Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between c605928 and e7f4221.

📒 Files selected for processing (1)
  • website/docs/core-concepts/stacks/templates/functions/atmos.Store.mdx (1 hunks)
🧰 Additional context used
🪛 LanguageTool
website/docs/core-concepts/stacks/templates/functions/atmos.Store.mdx

[typographical] ~110-~110: Consider using a typographic opening quote here.
Context: ... }}' ``` :::tip Important By using the printf "%s-%s-%s" function, you are constructin...

(EN_QUOTES)


[typographical] ~130-~130: Consider using typographic quotation marks here.
Context: ...onents/terraform" stacks: base_path: "stacks" included_paths: - "deploy/**/*" ...

(EN_QUOTES)


[typographical] ~132-~132: Consider using a typographic opening quote here.
Context: ..._path: "stacks" included_paths: - "deploy//*" excluded_paths: - "...

(EN_QUOTES)


[typographical] ~132-~132: Consider using a typographic close quote here.
Context: ...ks" included_paths: - "deploy//*" excluded_paths: - "/_defaults.y...

(EN_QUOTES)


[typographical] ~134-~134: Consider using a typographic opening quote here.
Context: ...- "deploy//*" excluded_paths: - "/_defaults.yaml" name_template: "{{ ...

(EN_QUOTES)


[typographical] ~134-~134: Consider using a typographic close quote here.
Context: ...excluded_paths: - "**/_defaults.yaml" name_template: "{{ .vars.stage }}" l...

(EN_QUOTES)


[typographical] ~135-~135: Consider using a typographic opening quote here.
Context: ... - "**/_defaults.yaml" name_template: "{{ .vars.stage }}" logs: file: "/dev/...

(EN_QUOTES)


[typographical] ~138-~138: Consider using a typographic opening quote here.
Context: ...ate: "{{ .vars.stage }}" logs: file: "/dev/stderr" level: Info # Go templ...

(EN_QUOTES)


[typographical] ~138-~138: Consider using a typographic close quote here.
Context: ...rs.stage }}" logs: file: "/dev/stderr" level: Info # Go templates in Atmo...

(EN_QUOTES)


[grammar] ~212-~212: Please add a punctuation mark at the end of paragraph.
Context: ...tmos.Storefunction in YAML multi-line strings You can use theatmos.Store` template...

(PUNCTUATION_PARAGRAPH_END)


[grammar] ~240-~240: Please add a punctuation mark at the end of paragraph.
Context: ... ## Caching the result of atmos.Store function Atmos caches (in memory) the results o...

(PUNCTUATION_PARAGRAPH_END)


[style] ~243-~243: A comma is missing here.
Context: ...ny Atmos command that processes stacks (e.g. atmos describe component or `atmos te...

(EG_NO_COMMA)


[style] ~268-~268: Consider using a different verb to strengthen your wording.
Context: ... two calls to the function. The caching makes the stack processing faster. ## Considerations - Using `atmos.Sto...

(MAKE_XXX_FASTER)

⏰ Context from checks skipped due to timeout of 90000ms (6)
  • GitHub Check: Analyze (go)
  • GitHub Check: Build (windows-latest, windows)
  • GitHub Check: Build (ubuntu-latest, linux)
  • GitHub Check: website-deploy-preview
  • GitHub Check: Lint (golangci)
  • GitHub Check: Summary
🔇 Additional comments (2)
website/docs/core-concepts/stacks/templates/functions/atmos.Store.mdx (2)

233-238: Good use of tip block and clear comparison.

The explanation here is clear and the tip is helpful for users deciding between YAML and template functions. No changes needed.


270-280: Excellent section on considerations.

This section is thorough and anticipates real-world issues. No changes needed.

@aknysh
Andriy Knysh (aknysh) merged commit a62050b into main Apr 15, 2025
@aknysh
Andriy Knysh (aknysh) deleted the update-store branch April 15, 2025 16:52
@mergify mergify Bot removed the needs-cloudposse Needs Cloud Posse assistance label Apr 15, 2025
@github-actions

Copy link
Copy Markdown

These changes were released in v1.171.0.

This branch was successfully deployed

No deployments
preview — e7f42210 Deployed Apr 15, 2025 by github-actions[bot]
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

minor New features that do not break anything

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants