(deps commandDeps)
| 525 | } |
| 526 | |
| 527 | func newAgentHeartbeatRollbackCommand(deps commandDeps) *cobra.Command { |
| 528 | var ( |
| 529 | revisionID string |
| 530 | targetDigest string |
| 531 | expectedDigest string |
| 532 | ifMatchDigest string |
| 533 | idempotencyKey string |
| 534 | ) |
| 535 | cmd := &cobra.Command{ |
| 536 | Use: "rollback <agent>", |
| 537 | Short: "Rollback HEARTBEAT.md to a managed revision or snapshot digest", |
| 538 | Example: " agh agent heartbeat rollback coder --revision-id rev_123 --expected-digest sha256:old --json", |
| 539 | Args: exactOneNonBlankArg(), |
| 540 | RunE: func(cmd *cobra.Command, args []string) error { |
| 541 | client, err := clientFromDeps(deps) |
| 542 | if err != nil { |
| 543 | return err |
| 544 | } |
| 545 | workspace, err := commandWorkspaceFlag(cmd) |
| 546 | if err != nil { |
| 547 | return err |
| 548 | } |
| 549 | revisionChanged := cmd.Flags().Changed("revision-id") |
| 550 | targetChanged := cmd.Flags().Changed("target-digest") |
| 551 | if revisionChanged == targetChanged { |
| 552 | return errors.New("cli: exactly one of --revision-id or --target-digest is required") |
| 553 | } |
| 554 | revision := strings.TrimSpace(revisionID) |
| 555 | target := strings.TrimSpace(targetDigest) |
| 556 | if revisionChanged { |
| 557 | if revision == "" { |
| 558 | return errors.New("cli: --revision-id cannot be empty") |
| 559 | } |
| 560 | } |
| 561 | if targetChanged { |
| 562 | if target == "" { |
| 563 | return errors.New("cli: --target-digest cannot be empty") |
| 564 | } |
| 565 | } |
| 566 | digest, err := changedExpectedDigestFlag(cmd, expectedDigest, ifMatchDigest) |
| 567 | if err != nil { |
| 568 | return err |
| 569 | } |
| 570 | record, err := client.RollbackAgentHeartbeat(cmd.Context(), args[0], AgentHeartbeatRollbackRequest{ |
| 571 | WorkspaceID: workspace, |
| 572 | AgentName: args[0], |
| 573 | RevisionID: revision, |
| 574 | TargetDigest: target, |
| 575 | ExpectedDigest: digest, |
| 576 | IdempotencyKey: strings.TrimSpace(idempotencyKey), |
| 577 | }) |
| 578 | if err != nil { |
| 579 | return err |
| 580 | } |
| 581 | return writeCommandOutput(cmd, agentHeartbeatMutationBundle(&record)) |
| 582 | }, |
| 583 | } |
| 584 | addWorkspaceFlag(cmd) |
no test coverage detected