Skip to content

Commit 531254a

Browse files
authored
feat: add Docker Swarm mode check in event handlers (#510)
1 parent bbd76f3 commit 531254a

File tree

3 files changed

+23
-11
lines changed

3 files changed

+23
-11
lines changed

cmd/doco-cd/http_handler.go

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -59,6 +59,8 @@ func getRepoName(cloneURL string) string {
5959

6060
// HandleEvent handles the incoming webhook event.
6161
func HandleEvent(ctx context.Context, jobLog *slog.Logger, w http.ResponseWriter, appConfig *config.AppConfig, dataMountPoint container.MountPoint, payload webhook.ParsedPayload, customTarget, jobID string, dockerCli command.Cli, dockerClient *client.Client) {
62+
var err error
63+
6264
startTime := time.Now()
6365
repoName := getRepoName(payload.CloneURL)
6466

@@ -73,6 +75,15 @@ func HandleEvent(ctx context.Context, jobLog *slog.Logger, w http.ResponseWriter
7375
slog.String("commit", payload.CommitSHA), slog.String("ref", payload.Ref),
7476
slog.String("event", "webhook")))
7577

78+
if appConfig.DockerSwarmFeatures {
79+
// Check if docker host is running in swarm mode
80+
docker.SwarmModeEnabled, err = docker.CheckDaemonIsSwarmManager(ctx, dockerCli)
81+
if err != nil {
82+
jobLog.Error("failed to check if docker host is running in swarm mode")
83+
onError(repoName, w, jobLog.With(logger.ErrAttr(err)), "failed to check if docker host is running in swarm mode", err.Error(), jobID, http.StatusInternalServerError)
84+
}
85+
}
86+
7687
// Clone the repository
7788
jobLog.Debug(
7889
"get repository",

cmd/doco-cd/main.go

Lines changed: 0 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
package main
22

33
import (
4-
"context"
54
"errors"
65
"fmt"
76
"log/slog"
@@ -196,16 +195,6 @@ func main() {
196195
return
197196
}
198197

199-
if c.DockerSwarmFeatures {
200-
// Check if docker host is running in swarm mode
201-
docker.SwarmModeEnabled, err = docker.CheckDaemonIsSwarmManager(context.Background(), dockerCli)
202-
if err != nil {
203-
log.Critical("failed to check if docker host is running in swarm mode", logger.ErrAttr(err))
204-
205-
return
206-
}
207-
}
208-
209198
log.Debug("negotiated docker versions to use",
210199
slog.Group("versions",
211200
slog.String("docker_client", dockerClient.ClientVersion()),

cmd/doco-cd/poll_handler.go

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -104,12 +104,24 @@ func (h *handlerData) PollHandler(pollJob *config.PollJob) {
104104

105105
// RunPoll deploys compose projects based on the provided configuration.
106106
func RunPoll(ctx context.Context, pollConfig config.PollConfig, appConfig *config.AppConfig, dataMountPoint container.MountPoint, dockerCli command.Cli, dockerClient *client.Client, logger *slog.Logger) error {
107+
var err error
108+
107109
startTime := time.Now()
108110
cloneUrl := string(pollConfig.CloneUrl)
109111
jobID := uuid.Must(uuid.NewRandom()).String()
110112
repoName := getRepoName(cloneUrl)
111113
jobLog := logger.With(slog.String("job_id", jobID))
112114

115+
if appConfig.DockerSwarmFeatures {
116+
// Check if docker host is running in swarm mode
117+
docker.SwarmModeEnabled, err = docker.CheckDaemonIsSwarmManager(ctx, dockerCli)
118+
if err != nil {
119+
jobLog.Error("failed to check if docker host is running in swarm mode")
120+
121+
return fmt.Errorf("failed to check if docker host is running in swarm mode: %w", err)
122+
}
123+
}
124+
113125
if strings.Contains(repoName, "..") {
114126
jobLog.Error("invalid repository name, contains '..'")
115127

0 commit comments

Comments
 (0)