@@ -16,12 +16,47 @@ const (
16
16
TemplateArchiveLimit = 1 << 20
17
17
)
18
18
19
- // Tar archives a directory.
19
+ func dirHasExt (dir string , ext string ) (bool , error ) {
20
+ dirEnts , err := os .ReadDir (dir )
21
+ if err != nil {
22
+ return false , err
23
+ }
24
+
25
+ for _ , fi := range dirEnts {
26
+ if strings .HasSuffix (fi .Name (), ext ) {
27
+ return true , nil
28
+ }
29
+ }
30
+
31
+ return false , nil
32
+ }
33
+
34
+ // Tar archives a Terraform directory.
20
35
func Tar (directory string , limit int64 ) ([]byte , error ) {
21
36
var buffer bytes.Buffer
22
37
tarWriter := tar .NewWriter (& buffer )
23
38
totalSize := int64 (0 )
24
- err := filepath .Walk (directory , func (file string , fileInfo os.FileInfo , err error ) error {
39
+
40
+ const tfExt = ".tf"
41
+ hasTf , err := dirHasExt (directory , tfExt )
42
+ if err != nil {
43
+ return nil , err
44
+ }
45
+ if ! hasTf {
46
+ absPath , err := filepath .Abs (directory )
47
+ if err != nil {
48
+ return nil , err
49
+ }
50
+
51
+ // Show absolute path to aid in debugging. E.g. showing "." is
52
+ // useless.
53
+ return nil , xerrors .Errorf (
54
+ "%s is not a valid template since it has no %s files" ,
55
+ absPath , tfExt ,
56
+ )
57
+ }
58
+
59
+ err = filepath .Walk (directory , func (file string , fileInfo os.FileInfo , err error ) error {
25
60
if err != nil {
26
61
return err
27
62
}
0 commit comments