github.com/tilt-dev/tilt@v0.33.15-0.20240515162809-0a22ed45d8a0/internal/tiltfile/api.go (about)

     1  package tiltfile
     2  
     3  import (
     4  	"bytes"
     5  	"embed"
     6  	"fmt"
     7  	"io/fs"
     8  	"os"
     9  	"path/filepath"
    10  
    11  	"github.com/tilt-dev/tilt/pkg/model"
    12  )
    13  
    14  //go:embed api/*.py api/*/*.py
    15  var api embed.FS
    16  
    17  const autoGeneratedHeader = `### AUTO-GENERATED ###
    18  # This file was auto-generated by 'tilt dump api-docs' as part of a Tilt release.
    19  # To make changes, modify the following file in the Tilt repository:
    20  #   internal/tiltfile/%s
    21  # Generated by Tilt version %s
    22  ### AUTO-GENERATED ###
    23  
    24  `
    25  
    26  func ApiStubs() fs.FS {
    27  	f, err := fs.Sub(api, "api")
    28  	if err != nil {
    29  		panic(err)
    30  	}
    31  	return f
    32  }
    33  
    34  func WalkApiStubs(fn fs.WalkDirFunc) error {
    35  	return fs.WalkDir(api, "api", fn)
    36  }
    37  
    38  func DumpApiStubs(dir string, info model.TiltBuild, callback func(string, error)) error {
    39  	return WalkApiStubs(func(path string, d fs.DirEntry, e error) error {
    40  		if e != nil {
    41  			return e
    42  		}
    43  		var err error
    44  		dest := filepath.Join(dir, path)
    45  		if d.IsDir() {
    46  			err = os.MkdirAll(dest, 0755)
    47  		} else {
    48  			buf := bytes.NewBufferString(fmt.Sprintf(autoGeneratedHeader, path, info.HumanBuildStamp()))
    49  			var bytes []byte
    50  			bytes, err = api.ReadFile(path)
    51  			if err != nil {
    52  				return err
    53  			}
    54  			buf.Write(bytes)
    55  			err = os.WriteFile(dest, buf.Bytes(), 0644)
    56  		}
    57  		callback(path, err)
    58  		return err
    59  	})
    60  }