From 22a68b2581986cb510b15a50df905d94076cc92e Mon Sep 17 00:00:00 2001 From: Steve Yoon Date: Tue, 5 Aug 2025 13:34:27 -0400 Subject: [PATCH 1/3] set custom dockerfile path --- cmd/lk/agent.go | 29 +++++++++++++++++++++++++---- pkg/agentfs/build.go | 6 +++++- pkg/config/livekit.go | 5 +++-- 3 files changed, 33 insertions(+), 7 deletions(-) diff --git a/cmd/lk/agent.go b/cmd/lk/agent.go index 0b0ba263..5b9b555a 100644 --- a/cmd/lk/agent.go +++ b/cmd/lk/agent.go @@ -82,10 +82,19 @@ var ( Hidden: true, } +<<<<<<< HEAD skipSDKCheckFlag = &cli.BoolFlag{ Name: "skip-sdk-check", Required: false, Hidden: true, +||||||| parent of 031d559 (set custom dockerfile path) +======= + dockerFileFlag = &cli.StringFlag{ + Name: "dockerfile", + Usage: "Path to the Dockerfile to use for the agent. If unset, will use the Dockerfile in the working directory.", + Required: false, + Aliases: []string{"f"}, +>>>>>>> 031d559 (set custom dockerfile path) } AgentCommands = []*cli.Command{ @@ -104,7 +113,12 @@ var ( secretsFileFlag, silentFlag, regionFlag, +<<<<<<< HEAD skipSDKCheckFlag, +||||||| parent of 031d559 (set custom dockerfile path) +======= + dockerFileFlag, +>>>>>>> 031d559 (set custom dockerfile path) }, // NOTE: since secrets may contain commas, or indeed any special character we might want to treat as a flag separator, // we disable it entirely here and require multiple --secrets flags to be used. @@ -129,6 +143,7 @@ var ( Flags: []cli.Flag{ secretsFlag, secretsFileFlag, + dockerFileFlag, }, // NOTE: since secrets may contain commas, or indeed any special character we might want to treat as a flag separator, // we disable it entirely here and require multiple --secrets flags to be used. @@ -381,8 +396,11 @@ func createAgent(ctx context.Context, cmd *cli.Command) error { return fmt.Errorf("unable to determine project type: %w, please use a supported project type, or create your own Dockerfile in the current directory", err) } - if err := requireDockerfile(ctx, cmd, workingDir, projectType, settingsMap); err != nil { - return err + dockerfile := cmd.String("dockerfile") + if dockerfile == "" { + if err := requireDockerfile(ctx, cmd, workingDir, settingsMap); err != nil { + return err + } } if err := agentfs.CheckSDKVersion(workingDir, projectType, settingsMap); err != nil { @@ -409,6 +427,7 @@ func createAgent(ctx context.Context, cmd *cli.Command) error { } lkConfig.Agent.ID = resp.AgentId + lkConfig.Agent.Dockerfile = dockerfile if err := lkConfig.SaveTOMLFile(workingDir, tomlFilename); err != nil { return err } @@ -419,7 +438,7 @@ func createAgent(ctx context.Context, cmd *cli.Command) error { } fmt.Printf("Created agent with ID [%s]\n", util.Accented(resp.AgentId)) - err = agentfs.Build(ctx, resp.AgentId, project) + err = agentfs.Build(ctx, resp.AgentId, project, dockerfile) if err != nil { return err } @@ -527,6 +546,8 @@ func deployAgent(ctx context.Context, cmd *cli.Command) error { return err } + dockerfile := cmd.String("dockerfile") + req = &lkproto.DeployAgentRequest{ AgentId: agentId, } @@ -578,7 +599,7 @@ func deployAgent(ctx context.Context, cmd *cli.Command) error { } fmt.Printf("Updated agent [%s]\n", util.Accented(resp.AgentId)) - err = agentfs.Build(ctx, resp.AgentId, project) + err = agentfs.Build(ctx, resp.AgentId, project, dockerfile) if err != nil { return err } diff --git a/pkg/agentfs/build.go b/pkg/agentfs/build.go index dcd7a312..5c3319a3 100644 --- a/pkg/agentfs/build.go +++ b/pkg/agentfs/build.go @@ -35,7 +35,7 @@ import ( "github.com/livekit/protocol/logger" ) -func Build(ctx context.Context, id string, projectConfig *config.ProjectConfig) error { +func Build(ctx context.Context, id string, projectConfig *config.ProjectConfig, dockerfile string) error { baseUrl := projectConfig.URL if strings.HasPrefix(projectConfig.URL, "ws") { baseUrl = strings.Replace(projectConfig.URL, "ws", "http", 1) @@ -58,6 +58,10 @@ func Build(ctx context.Context, id string, projectConfig *config.ProjectConfig) params.Add("agent_id", id) fullUrl := fmt.Sprintf("%s/build?%s", agentsUrl, params.Encode()) + if dockerfile != "" { + params.Add("dockerfile", dockerfile) + } + at := auth.NewAccessToken(projectConfig.APIKey, projectConfig.APISecret) at.SetAgentGrant(&auth.AgentGrant{ Admin: true, diff --git a/pkg/config/livekit.go b/pkg/config/livekit.go index 0416840c..660720f3 100644 --- a/pkg/config/livekit.go +++ b/pkg/config/livekit.go @@ -52,8 +52,9 @@ type LiveKitTOMLProjectConfig struct { } type LiveKitTOMLAgentConfig struct { - ID string `toml:"id"` - Regions []string `toml:"regions"` + ID string `toml:"id"` + Regions []string `toml:"regions"` + Dockerfile string `toml:"dockerfile"` } func NewLiveKitTOML(forSubdomain string) *LiveKitTOML { From be00c8d3a836b3d186c2c7b24983c5a1abe2890e Mon Sep 17 00:00:00 2001 From: Steve Yoon Date: Tue, 5 Aug 2025 14:31:29 -0400 Subject: [PATCH 2/3] fix url param override --- pkg/agentfs/build.go | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/pkg/agentfs/build.go b/pkg/agentfs/build.go index 5c3319a3..32941f4b 100644 --- a/pkg/agentfs/build.go +++ b/pkg/agentfs/build.go @@ -56,11 +56,10 @@ func Build(ctx context.Context, id string, projectConfig *config.ProjectConfig, params := url.Values{} params.Add("agent_id", id) - fullUrl := fmt.Sprintf("%s/build?%s", agentsUrl, params.Encode()) - if dockerfile != "" { params.Add("dockerfile", dockerfile) } + fullUrl := fmt.Sprintf("%s/build?%s", agentsUrl, params.Encode()) at := auth.NewAccessToken(projectConfig.APIKey, projectConfig.APISecret) at.SetAgentGrant(&auth.AgentGrant{ From 635a497d1da18bbc1839c85a07bb675f8437fbcc Mon Sep 17 00:00:00 2001 From: Steve Yoon Date: Thu, 7 Aug 2025 10:17:34 -0400 Subject: [PATCH 3/3] rebase --- cmd/lk/agent.go | 12 +++--------- 1 file changed, 3 insertions(+), 9 deletions(-) diff --git a/cmd/lk/agent.go b/cmd/lk/agent.go index 5b9b555a..f3aa0529 100644 --- a/cmd/lk/agent.go +++ b/cmd/lk/agent.go @@ -82,19 +82,17 @@ var ( Hidden: true, } -<<<<<<< HEAD skipSDKCheckFlag = &cli.BoolFlag{ Name: "skip-sdk-check", Required: false, Hidden: true, -||||||| parent of 031d559 (set custom dockerfile path) -======= + } + dockerFileFlag = &cli.StringFlag{ Name: "dockerfile", Usage: "Path to the Dockerfile to use for the agent. If unset, will use the Dockerfile in the working directory.", Required: false, Aliases: []string{"f"}, ->>>>>>> 031d559 (set custom dockerfile path) } AgentCommands = []*cli.Command{ @@ -113,12 +111,8 @@ var ( secretsFileFlag, silentFlag, regionFlag, -<<<<<<< HEAD skipSDKCheckFlag, -||||||| parent of 031d559 (set custom dockerfile path) -======= dockerFileFlag, ->>>>>>> 031d559 (set custom dockerfile path) }, // NOTE: since secrets may contain commas, or indeed any special character we might want to treat as a flag separator, // we disable it entirely here and require multiple --secrets flags to be used. @@ -398,7 +392,7 @@ func createAgent(ctx context.Context, cmd *cli.Command) error { dockerfile := cmd.String("dockerfile") if dockerfile == "" { - if err := requireDockerfile(ctx, cmd, workingDir, settingsMap); err != nil { + if err := requireDockerfile(ctx, cmd, workingDir, projectType, settingsMap); err != nil { return err } }