Skip to content

Commit 8ff25b1

Browse files
github-actions[bot]t-kikucWarashi
authored
* [ECS] Support 5 missing fields in TaskDefinition (#5424) * Add missing fields in RegisterTaskDef Signed-off-by: t-kikuc <tkikuchi07f@gmail.com> * remove two restrictions Signed-off-by: t-kikuc <tkikuchi07f@gmail.com> --------- Signed-off-by: t-kikuc <tkikuchi07f@gmail.com> Signed-off-by: pipecd-bot <pipecd.dev@gmail.com> * [ECS] Enabled to configure/update `PropagateTags` and `EnableECSManagedTags` (#5425) * Enable updating PropagateTags and specifying other than SERVICE Signed-off-by: t-kikuc <tkikuchi07f@gmail.com> * Enable updating EnableECSManagedTags Signed-off-by: t-kikuc <tkikuchi07f@gmail.com> * Remove default PropagateTags: unnecessary Signed-off-by: t-kikuc <tkikuchi07f@gmail.com> * support propagateTags other than SERVICE Signed-off-by: t-kikuc <tkikuchi07f@gmail.com> --------- Signed-off-by: t-kikuc <tkikuchi07f@gmail.com> Signed-off-by: pipecd-bot <pipecd.dev@gmail.com> * Enhance logging in EventWatcher (#5443) * Add logger.Error() before returning for detailed logs Signed-off-by: t-kikuc <tkikuchi07f@gmail.com> * Enhance error logging in event watcher with additional context for push and commit failures Signed-off-by: t-kikuc <tkikuchi07f@gmail.com> --------- Signed-off-by: t-kikuc <tkikuchi07f@gmail.com> Signed-off-by: pipecd-bot <pipecd.dev@gmail.com> * fixed to certainly store the startTime (#5461) Signed-off-by: t-kikuc <tkikuchi07f@gmail.com> Signed-off-by: pipecd-bot <pipecd.dev@gmail.com> * Add default envs in ScriptRunStage: SR_TRIGGERED_COMMANDER, SR_IS_ROLLBACK (#5464) * Add TriggeredCommandar Signed-off-by: t-kikuc <tkikuchi07f@gmail.com> * add isRollback Signed-off-by: t-kikuc <tkikuchi07f@gmail.com> * update docs Signed-off-by: t-kikuc <tkikuchi07f@gmail.com> * fix name->id Signed-off-by: t-kikuc <tkikuchi07f@gmail.com> * fix env name Signed-off-by: t-kikuc <tkikuchi07f@gmail.com> * fix: specify isRollback since deployment.Status is always Planned Signed-off-by: t-kikuc <tkikuchi07f@gmail.com> * fix typo Signed-off-by: t-kikuc <tkikuchi07f@gmail.com> * Add case of `pipectl sync` Signed-off-by: t-kikuc <tkikuchi07f@gmail.com> --------- Signed-off-by: t-kikuc <tkikuchi07f@gmail.com> Signed-off-by: pipecd-bot <pipecd.dev@gmail.com> * Release v0.50.1 (#5498) Signed-off-by: Shinnosuke Sawada-Dazai <shin@warashi.dev> Signed-off-by: pipecd-bot <pipecd.dev@gmail.com> --------- Signed-off-by: t-kikuc <tkikuchi07f@gmail.com> Signed-off-by: pipecd-bot <pipecd.dev@gmail.com> Signed-off-by: Shinnosuke Sawada-Dazai <shin@warashi.dev> Co-authored-by: Tetsuya KIKUCHI <97105818+t-kikuc@users.noreply.github.com> Co-authored-by: Shinnosuke Sawada-Dazai <shin@warashi.dev>
1 parent cd3c295 commit 8ff25b1

File tree

11 files changed

+78
-34
lines changed

11 files changed

+78
-34
lines changed

RELEASE

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
# Generated by `make release` command.
22
# DO NOT EDIT.
3-
tag: v0.50.0
3+
tag: v0.50.1
44

55
releaseNoteGenerator:
66
showCommitter: false

docs/content/en/docs-dev/user-guide/configuration-reference.md

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -531,15 +531,12 @@ There are some restrictions in configuring a service definition file.
531531
- `deploymentController` is required and must be `EXTERNAL`.
532532
- `loadBalancers` is not supported. Use `targetGroups` in [ECSDeploymentInput](#ecsdeploymentinput) instead.
533533
- `platformFamily` is not supported.
534-
- `propagateTags` is always set as `SERVICE`.
535534
- `taskDefinition` is not supported. PipeCD uses the definition in `taskDefinitionFile` in [ECSDeploymentInput](#ecsdeploymentinput).
536535

537536
### Restrictions of Task Definition
538537

539538
There are some restrictions in configuring a task definition file.
540539

541-
- `placementConstraints` is not supported.
542-
- `proxyConfiguration` is not supported.
543540
- `tags` is not supported.
544541

545542
### ECSTargetGroupInput

docs/content/en/docs-dev/user-guide/managing-application/customizing-deployment/script-run.md

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -108,10 +108,12 @@ You can use the envrionment values related to the deployment.
108108
|SR_APPLICATION_NAME| The application name | example |
109109
|SR_TRIGGERED_AT| The timestamp when the deployment is triggered | 1719571113 |
110110
|SR_TRIGGERED_COMMIT_HASH| The commit hash that triggered the deployment | 2bf969a3dad043aaf8ae6419943255e49377da0d |
111+
|SR_TRIGGERED_COMMANDER| The ID of user who triggered the deployment via UI. This is APIKey's ID if it was triggered via `pipectl sync`. This is empty if it was triggered by your piped. | userid |
111112
|SR_REPOSITORY_URL| The repository url configured in the piped config | git@github.com:org/repo.git, https://github.com/org/repo |
112113
|SR_SUMMARY| The summary of the deployment | Sync with the specified pipeline because piped received a command from user via web console or pipectl|
113114
|SR_CONTEXT_RAW| The json encoded string of above values | {"deploymentID":"877625fc-196a-40f9-b6a9-99decd5494a0","applicationID":"8d7609e0-9ff6-4dc7-a5ac-39660768606a","applicationName":"example","triggeredAt":1719571113,"triggeredCommitHash":"2bf969a3dad043aaf8ae6419943255e49377da0d","repositoryURL":"git@github.com:org/repo.git","labels":{"env":"example","team":"product"}} |
114115
|SR_LABELS_XXX| The label attached to the deployment. The env name depends on the label name. For example, if a deployment has the labels `env:prd` and `team:server`, `SR_LABELS_ENV` and `SR_LABELS_TEAM` are registered. | prd, server |
116+
|SR_IS_ROLLBACK| This is `true` if the deployment is rollbacking. Otherwise, this is `false`. | false |
115117
116118
### Use `SR_CONTEXT_RAW` with jq
117119

docs/content/en/docs-v0.50.x/user-guide/configuration-reference.md

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -531,15 +531,12 @@ There are some restrictions in configuring a service definition file.
531531
- `deploymentController` is required and must be `EXTERNAL`.
532532
- `loadBalancers` is not supported. Use `targetGroups` in [ECSDeploymentInput](#ecsdeploymentinput) instead.
533533
- `platformFamily` is not supported.
534-
- `propagateTags` is always set as `SERVICE`.
535534
- `taskDefinition` is not supported. PipeCD uses the definition in `taskDefinitionFile` in [ECSDeploymentInput](#ecsdeploymentinput).
536535

537536
### Restrictions of Task Definition
538537

539538
There are some restrictions in configuring a task definition file.
540539

541-
- `placementConstraints` is not supported.
542-
- `proxyConfiguration` is not supported.
543540
- `tags` is not supported.
544541

545542
### ECSTargetGroupInput

docs/content/en/docs-v0.50.x/user-guide/managing-application/customizing-deployment/script-run.md

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -108,10 +108,12 @@ You can use the envrionment values related to the deployment.
108108
|SR_APPLICATION_NAME| The application name | example |
109109
|SR_TRIGGERED_AT| The timestamp when the deployment is triggered | 1719571113 |
110110
|SR_TRIGGERED_COMMIT_HASH| The commit hash that triggered the deployment | 2bf969a3dad043aaf8ae6419943255e49377da0d |
111+
|SR_TRIGGERED_COMMANDER| The ID of user who triggered the deployment via UI. This is APIKey's ID if it was triggered via `pipectl sync`. This is empty if it was triggered by your piped. | userid |
111112
|SR_REPOSITORY_URL| The repository url configured in the piped config | git@github.com:org/repo.git, https://github.com/org/repo |
112113
|SR_SUMMARY| The summary of the deployment | Sync with the specified pipeline because piped received a command from user via web console or pipectl|
113114
|SR_CONTEXT_RAW| The json encoded string of above values | {"deploymentID":"877625fc-196a-40f9-b6a9-99decd5494a0","applicationID":"8d7609e0-9ff6-4dc7-a5ac-39660768606a","applicationName":"example","triggeredAt":1719571113,"triggeredCommitHash":"2bf969a3dad043aaf8ae6419943255e49377da0d","repositoryURL":"git@github.com:org/repo.git","labels":{"env":"example","team":"product"}} |
114115
|SR_LABELS_XXX| The label attached to the deployment. The env name depends on the label name. For example, if a deployment has the labels `env:prd` and `team:server`, `SR_LABELS_ENV` and `SR_LABELS_TEAM` are registered. | prd, server |
116+
|SR_IS_ROLLBACK| This is `true` if the deployment is rollbacking. Otherwise, this is `false`. | false |
115117
116118
### Use `SR_CONTEXT_RAW` with jq
117119

pkg/app/piped/eventwatcher/eventwatcher.go

Lines changed: 48 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -126,14 +126,16 @@ func (w *watcher) Run(ctx context.Context) error {
126126

127127
workingDir, err := os.MkdirTemp("", "event-watcher")
128128
if err != nil {
129-
return fmt.Errorf("failed to create the working directory: %w", err)
129+
w.logger.Error("failed to create the working directory", zap.Error(err))
130+
return err
130131
}
131132
defer os.RemoveAll(workingDir)
132133
w.workingDir = workingDir
133134

134135
for _, r := range w.config.Repositories {
135136
repo, err := w.cloneRepo(ctx, r)
136137
if err != nil {
138+
w.logger.Error("failed to clone repository", zap.String("repo-id", r.RepoID), zap.Error(err))
137139
return err
138140
}
139141
defer repo.Clean()
@@ -303,11 +305,13 @@ func (w *watcher) run(ctx context.Context, repo git.Repo, repoCfg config.PipedRe
303305
func (w *watcher) cloneRepo(ctx context.Context, repoCfg config.PipedRepository) (git.Repo, error) {
304306
dst, err := os.MkdirTemp(w.workingDir, repoCfg.RepoID)
305307
if err != nil {
306-
return nil, fmt.Errorf("failed to create a new temporary directory: %w", err)
308+
w.logger.Error("failed to create a new temporary directory", zap.Error(err))
309+
return nil, err
307310
}
308311
repo, err := w.gitClient.Clone(ctx, repoCfg.RepoID, repoCfg.Remote, repoCfg.Branch, dst)
309312
if err != nil {
310-
return nil, fmt.Errorf("failed to clone repository %s: %w", repoCfg.RepoID, err)
313+
w.logger.Error("failed to clone repository", zap.String("repo-id", repoCfg.RepoID), zap.Error(err))
314+
return nil, err
311315
}
312316
return repo, nil
313317
}
@@ -317,11 +321,13 @@ func (w *watcher) execute(ctx context.Context, repo git.Repo, repoID string, eve
317321
// Copy the repo to another directory to modify local file to avoid reverting previous changes.
318322
tmpDir, err := os.MkdirTemp(w.workingDir, "repo")
319323
if err != nil {
320-
return fmt.Errorf("failed to create a new temporary directory: %w", err)
324+
w.logger.Error("failed to create a new temporary directory", zap.Error(err))
325+
return err
321326
}
322327
tmpRepo, err := repo.CopyToModify(filepath.Join(tmpDir, "tmp-repo"))
323328
if err != nil {
324-
return fmt.Errorf("failed to copy the repository to the temporary directory: %w", err)
329+
w.logger.Error("failed to copy the repository to the temporary directory", zap.Error(err))
330+
return err
325331
}
326332
// nolint: errcheck
327333
defer tmpRepo.Clean()
@@ -368,7 +374,8 @@ func (w *watcher) execute(ctx context.Context, repo git.Repo, repoID string, eve
368374
Labels: matcher.Labels,
369375
})
370376
if err != nil {
371-
return fmt.Errorf("failed to get the latest event: %w", err)
377+
w.logger.Error("failed to get the latest event", zap.Error(err))
378+
return err
372379
}
373380
// The case where the latest event has already been handled.
374381
if resp.Event.CreatedAt > latestEvent.CreatedAt {
@@ -429,7 +436,8 @@ func (w *watcher) execute(ctx context.Context, repo git.Repo, repoID string, eve
429436
}
430437
if len(outDatedEvents) > 0 {
431438
if _, err := w.apiClient.ReportEventStatuses(ctx, &pipedservice.ReportEventStatusesRequest{Events: outDatedEvents}); err != nil {
432-
return fmt.Errorf("failed to report event statuses: %w", err)
439+
w.logger.Error("failed to report event statuses", zap.Error(err))
440+
return err
433441
}
434442
w.logger.Info(fmt.Sprintf("successfully made %d events OUTDATED", len(outDatedEvents)))
435443
}
@@ -449,8 +457,11 @@ func (w *watcher) execute(ctx context.Context, repo git.Repo, repoID string, eve
449457
retry := backoff.NewRetry(retryPushNum, backoff.NewConstant(retryPushInterval))
450458
for branch, events := range branchHandledEvents {
451459
_, err = retry.Do(ctx, func() (interface{}, error) {
452-
err := tmpRepo.Push(ctx, branch)
453-
return nil, err
460+
if err := tmpRepo.Push(ctx, branch); err != nil {
461+
w.logger.Error("failed to push commits", zap.String("repo-id", repoID), zap.String("branch", branch), zap.Error(err))
462+
return nil, err
463+
}
464+
return nil, nil
454465
})
455466

456467
if err == nil {
@@ -493,11 +504,13 @@ func (w *watcher) updateValues(ctx context.Context, repo git.Repo, repoID string
493504
// Copy the repo to another directory to modify local file to avoid reverting previous changes.
494505
tmpDir, err := os.MkdirTemp(w.workingDir, "repo")
495506
if err != nil {
496-
return fmt.Errorf("failed to create a new temporary directory: %w", err)
507+
w.logger.Error("failed to create a new temporary directory", zap.Error(err))
508+
return err
497509
}
498510
tmpRepo, err := repo.CopyToModify(filepath.Join(tmpDir, "tmp-repo"))
499511
if err != nil {
500-
return fmt.Errorf("failed to copy the repository to the temporary directory: %w", err)
512+
w.logger.Error("failed to copy the repository to the temporary directory", zap.Error(err))
513+
return err
501514
}
502515
defer tmpRepo.Clean()
503516

@@ -536,7 +549,8 @@ func (w *watcher) updateValues(ctx context.Context, repo git.Repo, repoID string
536549
Labels: e.Labels,
537550
})
538551
if err != nil {
539-
return fmt.Errorf("failed to get the latest event: %w", err)
552+
w.logger.Error("failed to get the latest event", zap.Error(err))
553+
return err
540554
}
541555
// The case where the latest event has already been handled.
542556
if resp.Event.CreatedAt > latestEvent.CreatedAt {
@@ -577,7 +591,8 @@ func (w *watcher) updateValues(ctx context.Context, repo git.Repo, repoID string
577591
}
578592
if len(outDatedEvents) > 0 {
579593
if _, err := w.apiClient.ReportEventStatuses(ctx, &pipedservice.ReportEventStatusesRequest{Events: outDatedEvents}); err != nil {
580-
return fmt.Errorf("failed to report event statuses: %w", err)
594+
w.logger.Error("failed to report event statuses", zap.Error(err))
595+
return err
581596
}
582597
w.logger.Info(fmt.Sprintf("successfully made %d events OUTDATED", len(outDatedEvents)))
583598
}
@@ -587,12 +602,16 @@ func (w *watcher) updateValues(ctx context.Context, repo git.Repo, repoID string
587602

588603
retry := backoff.NewRetry(retryPushNum, backoff.NewConstant(retryPushInterval))
589604
_, err = retry.Do(ctx, func() (interface{}, error) {
590-
err := tmpRepo.Push(ctx, tmpRepo.GetClonedBranch())
591-
return nil, err
605+
if err := tmpRepo.Push(ctx, tmpRepo.GetClonedBranch()); err != nil {
606+
w.logger.Error("failed to push commits", zap.String("repo-id", repoID), zap.String("branch", tmpRepo.GetClonedBranch()), zap.Error(err))
607+
return nil, err
608+
}
609+
return nil, nil
592610
})
593611
if err == nil {
594612
if _, err := w.apiClient.ReportEventStatuses(ctx, &pipedservice.ReportEventStatusesRequest{Events: handledEvents}); err != nil {
595-
return fmt.Errorf("failed to report event statuses: %w", err)
613+
w.logger.Error("failed to report event statuses", zap.Error(err))
614+
return err
596615
}
597616
w.milestoneMap.Store(repoID, maxTimestamp)
598617
return nil
@@ -613,10 +632,12 @@ func (w *watcher) updateValues(ctx context.Context, repo git.Repo, repoID string
613632
handledEvents[i].StatusDescription = fmt.Sprintf("Failed to push changed files: %v", err)
614633
}
615634
if _, err := w.apiClient.ReportEventStatuses(ctx, &pipedservice.ReportEventStatusesRequest{Events: handledEvents}); err != nil {
616-
return fmt.Errorf("failed to report event statuses: %w", err)
635+
w.logger.Error("failed to report event statuses: %w", zap.Error(err))
636+
return err
617637
}
618638
w.milestoneMap.Store(repoID, maxTimestamp)
619-
return fmt.Errorf("failed to push commits: %w", err)
639+
w.logger.Error("failed to push commits", zap.Error(err))
640+
return err
620641
}
621642

622643
// commitFiles commits changes if the data in Git is different from the latest event.
@@ -647,14 +668,16 @@ func (w *watcher) commitFiles(ctx context.Context, latestEvent *model.Event, eve
647668
newContent, upToDate, err = modifyText(path, r.Regex, latestEvent.Data)
648669
}
649670
if err != nil {
671+
w.logger.Error("failed to modify file", zap.Error(err))
650672
return "", err
651673
}
652674
if upToDate {
653675
continue
654676
}
655677

656678
if err := os.WriteFile(path, newContent, os.ModePerm); err != nil {
657-
return "", fmt.Errorf("failed to write file: %w", err)
679+
w.logger.Error("failed to write file", zap.Error(err))
680+
return "", err
658681
}
659682
changes[filePath] = newContent
660683
}
@@ -670,7 +693,12 @@ func (w *watcher) commitFiles(ctx context.Context, latestEvent *model.Event, eve
670693
branch := makeBranchName(newBranch, eventName, repo.GetClonedBranch())
671694
trailers := maps.Clone(latestEvent.Contexts)
672695
if err := repo.CommitChanges(ctx, branch, commitMsg, newBranch, changes, trailers); err != nil {
673-
return "", fmt.Errorf("failed to perform git commit: %w", err)
696+
w.logger.Error("failed to perform git commit",
697+
zap.String("branch", branch),
698+
zap.Bool("make-new-branch", newBranch),
699+
zap.Int("changed-files", len(changes)),
700+
zap.Error(err))
701+
return "", err
674702
}
675703
w.logger.Info(fmt.Sprintf("event watcher will update values of Event %q", eventName))
676704
return branch, nil

pkg/app/piped/executor/kubernetes/rollback.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -214,7 +214,7 @@ func (e *rollbackExecutor) ensureScriptRunRollback(ctx context.Context) model.St
214214
}
215215
}
216216

217-
ci := scriptrun.NewContextInfo(e.Deployment)
217+
ci := scriptrun.NewContextInfo(e.Deployment, true)
218218
ciEnv, err := ci.BuildEnv()
219219
if err != nil {
220220
e.LogPersister.Errorf("failed to build srcipt run context info: %w", err)

pkg/app/piped/executor/scriptrun/script_run_test.go

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,21 +22,25 @@ func Test_ContextInfo_BuildEnv(t *testing.T) {
2222
ApplicationName: "application-name",
2323
TriggeredAt: 1234567890,
2424
TriggeredCommitHash: "commit-hash",
25+
TriggeredCommander: "commander",
2526
RepositoryURL: "repo-url",
2627
Labels: map[string]string{
2728
"key1": "value1",
2829
"key2": "value2",
2930
},
30-
Summary: "summary",
31+
IsRollback: false,
32+
Summary: "summary",
3133
},
3234
want: map[string]string{
3335
"SR_DEPLOYMENT_ID": "deployment-id",
3436
"SR_APPLICATION_ID": "application-id",
3537
"SR_APPLICATION_NAME": "application-name",
3638
"SR_TRIGGERED_AT": "1234567890",
3739
"SR_TRIGGERED_COMMIT_HASH": "commit-hash",
40+
"SR_TRIGGERED_COMMANDER": "commander",
3841
"SR_REPOSITORY_URL": "repo-url",
3942
"SR_SUMMARY": "summary",
43+
"SR_IS_ROLLBACK": "false",
4044
"SR_LABELS_KEY1": "value1",
4145
"SR_LABELS_KEY2": "value2",
4246
},

pkg/app/piped/executor/scriptrun/scriptrun.go

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -101,7 +101,7 @@ func (e *Executor) executeCommand() model.StageStatus {
101101
}
102102
}
103103

104-
ci := NewContextInfo(e.Deployment)
104+
ci := NewContextInfo(e.Deployment, false)
105105
ciEnv, err := ci.BuildEnv()
106106
if err != nil {
107107
e.LogPersister.Errorf("failed to build srcipt run context info: %w", err)
@@ -136,22 +136,26 @@ type ContextInfo struct {
136136
ApplicationName string `json:"applicationName,omitempty"`
137137
TriggeredAt int64 `json:"triggeredAt,omitempty"`
138138
TriggeredCommitHash string `json:"triggeredCommitHash,omitempty"`
139+
TriggeredCommander string `json:"triggeredCommander,omitempty"`
139140
RepositoryURL string `json:"repositoryURL,omitempty"`
140141
Summary string `json:"summary,omitempty"`
141142
Labels map[string]string `json:"labels,omitempty"`
143+
IsRollback bool `json:"isRollback,omitempty"`
142144
}
143145

144146
// NewContextInfo creates a new ContextInfo from the given deployment.
145-
func NewContextInfo(d *model.Deployment) *ContextInfo {
147+
func NewContextInfo(d *model.Deployment, isRollback bool) *ContextInfo {
146148
return &ContextInfo{
147149
DeploymentID: d.Id,
148150
ApplicationID: d.ApplicationId,
149151
ApplicationName: d.ApplicationName,
150152
TriggeredAt: d.Trigger.Timestamp,
151153
TriggeredCommitHash: d.Trigger.Commit.Hash,
154+
TriggeredCommander: d.Trigger.Commander,
152155
RepositoryURL: d.GitPath.Repo.Remote,
153156
Summary: d.Summary,
154157
Labels: d.Labels,
158+
IsRollback: isRollback,
155159
}
156160
}
157161

@@ -168,8 +172,10 @@ func (src *ContextInfo) BuildEnv() (map[string]string, error) {
168172
"SR_APPLICATION_NAME": src.ApplicationName,
169173
"SR_TRIGGERED_AT": strconv.FormatInt(src.TriggeredAt, 10),
170174
"SR_TRIGGERED_COMMIT_HASH": src.TriggeredCommitHash,
175+
"SR_TRIGGERED_COMMANDER": src.TriggeredCommander,
171176
"SR_REPOSITORY_URL": src.RepositoryURL,
172177
"SR_SUMMARY": src.Summary,
178+
"SR_IS_ROLLBACK": strconv.FormatBool(src.IsRollback),
173179
"SR_CONTEXT_RAW": string(b), // Add the raw json string as an environment variable.
174180
}
175181

pkg/app/piped/executor/wait/wait.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -74,7 +74,7 @@ func (e *Executor) Execute(sig executor.StopSignal) model.StageStatus {
7474
} else {
7575
startTime = time.Now()
7676
}
77-
defer e.saveStartTime(sig.Context(), startTime)
77+
e.saveStartTime(sig.Context(), startTime)
7878

7979
timer := time.NewTimer(duration)
8080
defer timer.Stop()

0 commit comments

Comments
 (0)