Repository navigation
Update !store YAML function. Introduce atmos.Store template function - #1204
Conversation
| 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
There was a problem hiding this comment.
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.Fatalwhich 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
invalidYamlFuncMsguses 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 itwebsite/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 theprintf "%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.Storefunction 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: ...nvolveGotemplates — 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 ofatmos.Storefunction 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 componentor `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
📒 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 thequeryfield 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() functionswebsite/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.Storetemplate 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 theprintf "%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 #Gotempl...(EN_QUOTES)
[typographical] ~138-~138: Consider using a typographic close quote here.
Context: ...rs.stage }}" logs: file: "/dev/stderr" level: Info #Gotemplates 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: ...nvolveGotemplates — 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 ofatmos.Storefunction 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 componentor `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
| 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
There was a problem hiding this comment.
Actionable comments posted: 0
♻️ Duplicate comments (1)
internal/exec/yaml_func_store.go (1)
92-93:⚠️ Potential issueUse of log.Fatal should be refactored
The code uses
log.Fatalwhich 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.Fatalto 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 functionalityWhile 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:
- Test retrieval with valid YQ expressions
- Test behavior with invalid YQ expressions
- 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 functionalityThe 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
📒 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 accordinglyThe change to use
charmbracelet/logis consistent with the project's logging approach.
18-19: Good addition of the query field to params structThe new
queryfield 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 maintainabilityExtracting string literals into constants is a good practice. This addresses previous code scanning alerts about repeated string literals.
39-62: Well-structured parameter parsing logicThe enhanced parsing logic properly handles both
defaultandqueryparameters after the pipe symbol. The validation is thorough and provides clear error messages.
75-76: Query parameter correctly included in return structGood job ensuring the query parameter is properly added to the return params struct.
104-112: New YQ expression evaluation feature well implementedThe 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 resultsThe 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>
There was a problem hiding this comment.
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, andconfig_mapwith 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 ofatmos.Storefunction 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 componentor `atmos te...(EG_NO_COMMA)
📜 Review details
Configuration used: .coderabbit.yaml
Review profile: CHILL
Plan: Pro
📒 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.
|
These changes were released in v1.171.0. |
what
!storeYAML functionatmos.Storetemplate functionwhy
!storeYAML function!storeYAML function, allow using YQ Expressions to retrieve individual valuesTo 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:
atmos.Storetemplate functionatmos.Storetemplate function allows reading the values from a remote store (e.g. SSM Parameter Store, Artifactory, Redis, etc.) into Atmos stack manifestsFor example, we can read the
vpc_idoutput of thevpccomponent in the current stack from the SSM Parameter Storeconfigured in
atmos.yamlasssmsimply by doing: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_idoutput of thevpccomponent in thestagingstack:Summary by CodeRabbit
Summary by CodeRabbit
New Features
atmos.Storetemplate function for accessing remote stores (SSM, Artifactory, Redis) in stack manifests.!storeYAML function to support YQ queries for extracting nested data from complex store values.Bug Fixes
Documentation
atmos.Storeand updated!storeusage with Redis support and YQ query examples.Tests
Chores
forbidigolinter from running on test files.