mirror of
https://github.com/amir20/dozzle.git
synced 2026-08-07 10:54:44 +00:00
d09b2fe04e
Co-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
49 lines
1.2 KiB
Go
49 lines
1.2 KiB
Go
package cli
|
|
|
|
import (
|
|
"context"
|
|
"embed"
|
|
"fmt"
|
|
"os"
|
|
"time"
|
|
|
|
"github.com/amir20/dozzle/internal/deploy"
|
|
"github.com/amir20/dozzle/internal/docker"
|
|
"github.com/rs/zerolog/log"
|
|
)
|
|
|
|
type DeployCmd struct {
|
|
File string `arg:"positional,required" help:"path to compose file"`
|
|
Project string `arg:"-p,--project" default:"dozzle" help:"project name for resource prefixes"`
|
|
}
|
|
|
|
func (dc *DeployCmd) Run(args Args, _ embed.FS) error {
|
|
data, err := os.ReadFile(dc.File)
|
|
if err != nil {
|
|
return fmt.Errorf("reading compose file: %w", err)
|
|
}
|
|
|
|
log.Info().Str("project", dc.Project).Str("file", dc.File).Msg("Deploying compose file")
|
|
|
|
localClient, err := docker.NewLocalClient("")
|
|
if err != nil {
|
|
return fmt.Errorf("creating docker client: %w", err)
|
|
}
|
|
raw := localClient.RawClient()
|
|
if raw == nil {
|
|
return fmt.Errorf("local Docker client is missing a raw handle")
|
|
}
|
|
|
|
timeout := max(args.Timeout, 10*time.Minute)
|
|
ctx, cancel := context.WithTimeout(context.Background(), timeout)
|
|
defer cancel()
|
|
|
|
mgr := deploy.NewManager(raw, deploy.DefaultStacksDir)
|
|
if err := mgr.Deploy(ctx, dc.Project, data, nil); err != nil {
|
|
return fmt.Errorf("deploying: %w", err)
|
|
}
|
|
|
|
log.Info().Str("project", dc.Project).Msg("Deployment complete")
|
|
return nil
|
|
}
|