Sure so I think it's a few things.
- Our prior workflow (no modules) involved just calling
go run . - and we could add some args in the cli to do specific things. I think the modules workflow intended to have a similar flow, but it ended up requiring a ton more args and knowledge of the dagger cli. (Also in our case they didn't even have dagger installed previously ๐
)
Example: In our custom cli, I put all our secrets in vault, and just fetch the local ~/.vault_token or VAULT_TOKEN env var from the host. This isn't possible in modules - they have to be passed in. So now our command becomes something like dagger call build TARGET --dir MY_DIRECTORY --token FOO. Developers now need to know or discover more dagger specific args or language to accomplish tasks.
- Similar to above. Passing in source is no longer obvious or straightforward. We have a couple monorepo style projects, and I want to be careful about the context we're passing in. Devs might have huge files in their local directory, and that can nuke build times locally. With the "advanced" golang cli, we can specify in code which directories we want, and remove the responsibility of knowing the proper directories etc from the developer.
Example: A command that was previously go run . publish PROJECT_NAME - is now dagger call build-project --dir project_name --dir2 project_dependency_folder --token FOO - if they pass in the wrong directories, builds fail. If we just pass in the top level directory, now we have a huge context that we have to pass to the intermediate dagger engine before we do any host excludes.
- Additions / modifications to our CI. In the old , go native workflow, devs could literally just open up the ci directory and autocomplete and everything, justwork.jpg. Now they need to have dagger, call
dagger develop and do a few other things to get going.