I've tried to look through the Discord channel for an answer but I have not been able to find any. If this has already
been answered, please point me to the right post.
I'm working on a Dagger module that contains a plethora of functions that are used across several Dagger modules. One issue I'm having is
figuring out how to provide optional arguments, on par with the function signature for Container.WithFile:
func (r *Container) WithFile(path string, source *File, opts ...ContainerWithFileOpts) *Container
Consider this function, that sets up a container with git credentials configured with git config credential.helper:
type GitCredentialConfig struct {
Remote string
Secret *dagger.Secret
}
func (g *GitTest) SetupCredentials(
ctx context.Context,
container *dagger.Container,
githubCredentialSecret GitCredentialConfig,
additionalSecrets ...GitCredentialConfig,
) (*dagger.Container, error) {
var err error
for _, config := range additionalSecrets {
if container, err = g.setupCredentialsWithConfig(ctx, container, config); err != nil {
return nil, err
}
}
return g.setupCredentialsWithConfig(ctx, container, githubCredentialSecret)
}
func (g *GitTest) setupCredentialsWithConfig(
ctx context.Context,
container *dagger.Container,
config GitCredentialConfig,
) (*dagger.Container, error) {
secret := config.Secret
remote := config.Remote
id, err := secret.ID(ctx)
//...
abbrevID := id[:7]
secretFile := filepath.Join("/root", fmt.Sprintf("credentials-%s", abbrevID))
container = container.
WithExec([]string{"git", "config", "--global", fmt.Sprintf("credential.%s.helper", remote), fmt.Sprintf("store --file %s", secretFile)}).
WithMountedSecret(secretFile, secret)
return container, nil
}
Part 2: continuing in comments...