-
-
Notifications
You must be signed in to change notification settings - Fork 105
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Implement atmos packages
to install 3rd party tools
#927
Comments
There are several options:
The option 1 is simplest and easiest. The option 2 is not bad. This is an advanced topic, but one of problems is checksum verification in CI. The option 3 is good, but I guess most version managers are not Go Modules but CLI. I don't recommend the option 4. What do you think? |
My main concern is this: it defeats the purpose of the desired functionality, which is to avoid the need to manually install additional tools—including the tooling required to do so (besides Atmos itself). The goal is for everything to "just work" out of the box. I feel so strongly about this that I’d rather hold off until we find a solution that aligns with this principle.
Same response as (1).
Thank you for clarifying this point! This was definitely my preferred approach. I was hoping this approach could work, as I noticed that the packages were not strictly internal. However, I appreciate your warning about the unstable interface and its potential for changes without notice. This raises concerns and gives me pause. Let's see if there's a middle ground (see option 5).
I would prefer to rule this out as well. I’d like to propose two additional options based on your feedback. Option 5: Call Aqua (Preferred)We have an upcoming PR that introduces support for editorconfig. What’s notable about this implementation is that while many editorconfig packages are internal, we were able to call their public methods, achieving a near-native integration within Atmos. What if we did something similar with Aqua? In this model, if Aqua could expose a few stable APIs that provide command-line-like functionality from within Go, Atmos could call those directly. This way there's not a lot of work to maintain in Aqua, while providing other tooling the ability to leverage aqua. While this may sacrifice full flexibility, it offers the advantage of maintaining a native user experience within Atmos. As part of this if we could programmatically pass a string containing aqua configuration, we can then work very well with parts of aqua. We could generate that configuration inside of atmos, so the package manafement can feel more integrated with things like stacks, workflows and custom commands. Option 6: Go-based Aqua Bootstrapper (Less Preferred)This is a riff on your #2. If Aqua provided a method to bootstrap itself programmatically via Go, Atmos could invoke that as part of its process. This approach would enable similar functionality, but with a few limitations. Specifically, we’d be constrained to using Aqua’s configuration files without the ability to embed or extend those configurations directly within Atmos. This limitation concerns me because we’re introducing radical improvements to Atmos configuration handling in an upcoming PR that adds support for remote configurations, local overrides, imports, and more. All of that provides a consistent configuration interface for atmos, including the underlying tooling. I’d like those improvements to be universally applicable across Atmos functionality. |
Describe the Feature
Atmos should automatically add the packages base-path as a priority search PATH when executing any commands.
Expected Behavior
Packages are automatically installed and available to atmos.
Use Case
Install versions of opentofu or terraform
Install helmfile
Install terraform-docs, tflint, etc.
Support multiple concurrent versions
Install any other binaries needed by workflows, custom commands, etc
Describe Ideal Solution
Atmos Commands
Atmos Configuration
Stack Configuration
Alternatives Considered
No response
Additional Context
See https://github.com/suzuki-shunsuke/tfaction for example implementation
The text was updated successfully, but these errors were encountered: