mirror of
https://github.com/coder/coder.git
synced 2026-09-01 14:53:15 +08:00
7d95153bf4
Add a new subcommand to list all registered sync units and their current
statuses. This provides a quick overview of the dependency coordination
state in a workspace without needing to query each unit individually.
The command supports both table (default) and JSON output formats.
```
$ coder exp sync list
UNIT STATUS READY
unit-a started true
unit-b completed true
unit-c pending false
$ coder exp sync list --output json
[
{
"unit_name": "my-unit",
"status": "started",
"is_ready": true
}
]
```
When no units are registered, the command prints `No units registered`.
<details><summary>Changes across layers</summary>
- `agent/unit`: add `Manager.ListUnits()` method
- `agent/agentsocket/proto`: add `SyncList` RPC, bump API to v1.2
- `agent/agentsocket`: add service and client implementations
- `cli`: add `sync_list.go` command, register in `sync.go`
- Tests: three golden-file test cases (empty list, multiple units, JSON)
</details>
> Generated by Coder Agents on behalf of @SasSwart
---------
Co-authored-by: Cian Johnston <cian@coder.com>
37 lines
1.1 KiB
Go
37 lines
1.1 KiB
Go
package cli
|
|
|
|
import (
|
|
"github.com/coder/serpent"
|
|
)
|
|
|
|
func (r *RootCmd) syncCommand() *serpent.Command {
|
|
var socketPath string
|
|
|
|
cmd := &serpent.Command{
|
|
Use: "sync",
|
|
Short: "Manage unit dependencies for coordinated startup",
|
|
Long: "Commands for orchestrating unit startup order in workspaces. Units are most commonly coder scripts. Use these commands to declare dependencies between units, coordinate their startup sequence, and ensure units start only after their dependencies are ready. This helps prevent race conditions and startup failures.",
|
|
Handler: func(i *serpent.Invocation) error {
|
|
return i.Command.HelpHandler(i)
|
|
},
|
|
Children: []*serpent.Command{
|
|
r.syncPing(&socketPath),
|
|
r.syncStart(&socketPath),
|
|
r.syncWant(&socketPath),
|
|
r.syncComplete(&socketPath),
|
|
r.syncStatus(&socketPath),
|
|
r.syncList(&socketPath),
|
|
},
|
|
Options: serpent.OptionSet{
|
|
{
|
|
Flag: "socket-path",
|
|
Env: "CODER_AGENT_SOCKET_PATH",
|
|
Description: "Specify the path for the agent socket.",
|
|
Value: serpent.StringOf(&socketPath),
|
|
},
|
|
},
|
|
}
|
|
|
|
return cmd
|
|
}
|