@@ -25,6 +25,8 @@ import (
2525 "strings"
2626
2727 "github.com/charmbracelet/huh"
28+ "github.com/moby/patternmatcher"
29+ "github.com/moby/patternmatcher/ignorefile"
2830 "github.com/pkg/errors"
2931
3032 "github.com/livekit/livekit-cli/v2/pkg/util"
@@ -72,7 +74,7 @@ func CreateDockerfile(dir string, settingsMap map[string]string) error {
7274
7375 // TODO: (@rektdeckard) support Node entrypoint validation
7476 if projectType .IsPython () {
75- dockerfileContent , err = validateEntrypoint (dir , dockerfileContent , projectType , settingsMap )
77+ dockerfileContent , err = validateEntrypoint (dir , dockerfileContent , dockerIgnoreContent , projectType , settingsMap )
7678 if err != nil {
7779 return err
7880 }
@@ -91,16 +93,32 @@ func CreateDockerfile(dir string, settingsMap map[string]string) error {
9193 return nil
9294}
9395
94- func validateEntrypoint (dir string , dockerfileContent []byte , projectType ProjectType , settingsMap map [string ]string ) ([]byte , error ) {
96+ func validateEntrypoint (dir string , dockerfileContent []byte , dockerignoreContent [] byte , projectType ProjectType , settingsMap map [string ]string ) ([]byte , error ) {
9597 valFile := func (fileName string ) (string , error ) {
9698 // NOTE: we need to recurse to find entrypoints which may exist in src/ or some other directory.
9799 // This could be a lot of files, so we omit any files in .dockerignore, since they cannot be
98100 // used as entrypoints.
101+
102+ reader := bytes .NewReader (dockerignoreContent )
103+ patterns , err := ignorefile .ReadAll (reader )
104+ if err != nil {
105+ return "" , err
106+ }
107+ matcher , err := patternmatcher .New (patterns )
108+ if err != nil {
109+ return "" , err
110+ }
111+
99112 var fileList []string
100113 if err := filepath .WalkDir (dir , func (path string , d os.DirEntry , err error ) error {
101114 if err != nil {
102115 return err
103116 }
117+ if ignored , err := matcher .MatchesOrParentMatches (path ); ignored {
118+ return nil
119+ } else if err != nil {
120+ return err
121+ }
104122 if ! d .IsDir () && strings .HasSuffix (d .Name (), ".py" ) {
105123 fileList = append (fileList , path )
106124 }
@@ -129,8 +147,7 @@ func validateEntrypoint(dir string, dockerfileContent []byte, projectType Projec
129147 ),
130148 )
131149
132- err := form .Run ()
133- if err != nil {
150+ if err := form .Run (); err != nil {
134151 return "" , err
135152 }
136153
@@ -153,7 +170,9 @@ func validateEntrypoint(dir string, dockerfileContent []byte, projectType Projec
153170 line := lines [i ]
154171 trimmedLine := bytes .TrimSpace (line )
155172
156- if bytes .HasPrefix (trimmedLine , []byte ("ENTRYPOINT" )) {
173+ if bytes .HasPrefix (trimmedLine , []byte ("ARG PROGRAM_MAIN" )) {
174+ result .WriteString (fmt .Sprintf ("ARG PROGRAM_MAIN=\" %s\" " , newEntrypoint ))
175+ } else if bytes .HasPrefix (trimmedLine , []byte ("ENTRYPOINT" )) {
157176 // Extract the current entrypoint file
158177 parts := bytes .Fields (trimmedLine )
159178 if len (parts ) < 2 {
0 commit comments