MCPcopy Index your code
hub / github.com/coder/coder / Tar

Function Tar

provisionersdk/archive.go:44–147  ·  view source on GitHub ↗

Tar archives a Terraform directory.

(w io.Writer, logger slog.Logger, directory string, limit int64)

Source from the content-addressed store, hash-verified

42
43// Tar archives a Terraform directory.
44func Tar(w io.Writer, logger slog.Logger, directory string, limit int64) error {
45 // The total bytes written must be under the limit, so use -1
46 w = xio.NewLimitWriter(w, limit-1)
47 tarWriter := tar.NewWriter(w)
48
49 tfExts := []string{".tf", ".tf.json"}
50 hasTf, err := dirHasExt(directory, tfExts...)
51 if err != nil {
52 return err
53 }
54 if !hasTf {
55 absPath, err := filepath.Abs(directory)
56 if err != nil {
57 return err
58 }
59
60 // Show absolute path to aid in debugging. E.g. showing "." is
61 // useless.
62 return xerrors.Errorf(
63 "%s is not a valid template since it has no %s files",
64 absPath, tfExts,
65 )
66 }
67
68 err = filepath.Walk(directory, func(file string, fileInfo os.FileInfo, err error) error {
69 if err != nil {
70 return err
71 }
72 var link string
73 if fileInfo.Mode()&os.ModeSymlink == os.ModeSymlink {
74 link, err = os.Readlink(file)
75 if err != nil {
76 return err
77 }
78 }
79 header, err := tar.FileInfoHeader(fileInfo, link)
80 if err != nil {
81 return err
82 }
83 rel, err := filepath.Rel(directory, file)
84 if err != nil {
85 return err
86 }
87 // We want to allow .terraform.lock.hcl files to be archived. This
88 // allows provider plugins to be cached.
89 if (strings.HasPrefix(rel, ".") || strings.HasPrefix(filepath.Base(rel), ".")) && filepath.Base(rel) != ".terraform.lock.hcl" {
90 if fileInfo.IsDir() && rel != "." {
91 // Don't archive hidden files!
92 return filepath.SkipDir
93 }
94 // Don't archive hidden files!
95 return nil
96 }
97 if strings.Contains(rel, ".tfstate") {
98 // Don't store tfstate!
99 logger.Debug(context.Background(), "skip state", slog.F("name", rel))
100 return nil
101 }

Callers 3

TestTarFunction · 0.92
TestUntarFunction · 0.92
uploadMethod · 0.92

Calls 10

NewLimitWriterFunction · 0.92
dirHasExtFunction · 0.85
CloseMethod · 0.65
CopyMethod · 0.65
FlushMethod · 0.65
ErrorfMethod · 0.45
ContainsMethod · 0.45
WriteHeaderMethod · 0.45
OpenMethod · 0.45
IsMethod · 0.45

Tested by 2

TestTarFunction · 0.74
TestUntarFunction · 0.74