github.com/octohelm/wagon@v0.0.0-20240308040401-88662650dc0b/pkg/engine/plan/task/client_filesystem_read.go (about)

     1  package task
     2  
     3  import (
     4  	"fmt"
     5  	"os"
     6  	"strings"
     7  
     8  	"dagger.io/dagger"
     9  	"github.com/octohelm/wagon/pkg/engine/daggerutil"
    10  	"github.com/octohelm/wagon/pkg/engine/plan/task/core"
    11  	"golang.org/x/net/context"
    12  )
    13  
    14  func init() {
    15  	core.DefaultFactory.Register(&ClientFilesystemRead{})
    16  }
    17  
    18  type ClientFilesystemRead struct {
    19  	core.Task
    20  
    21  	Path     string              `json:"path"`
    22  	Contents core.SecretOrString `json:"contents" wagon:"generated,name=contents"`
    23  }
    24  
    25  func (f *ClientFilesystemRead) Do(ctx context.Context) error {
    26  	return daggerutil.Do(ctx, func(c *dagger.Client) error {
    27  		p := f.Path
    28  		if strings.HasPrefix(p, "~") {
    29  			p = fmt.Sprintf("%s%s", os.Getenv("HOME"), p[1:])
    30  		}
    31  
    32  		contents, err := os.ReadFile(p)
    33  		if err != nil {
    34  			return err
    35  		}
    36  		if secret := f.Contents.Secret; secret != nil {
    37  			fsSecret := c.SetSecret(p, string(contents))
    38  
    39  			if err := secret.SetSecretIDBy(ctx, fsSecret); err != nil {
    40  				return err
    41  			}
    42  			f.Contents = core.SecretOrString{
    43  				Secret: secret,
    44  			}
    45  		} else {
    46  			f.Contents = core.SecretOrString{
    47  				Value: string(contents),
    48  			}
    49  		}
    50  		return nil
    51  	})
    52  }