Skip to content

Commit 76aca39

Browse files
authored
Create status support
1 parent e57b390 commit 76aca39

File tree

6 files changed

+41
-20
lines changed

6 files changed

+41
-20
lines changed

cmd/ghcs/create.go

Lines changed: 26 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -86,6 +86,10 @@ func Create() error {
8686
return fmt.Errorf("poll post create states: %v", err)
8787
}
8888

89+
var lastState codespaces.PostCreateState
90+
var breakNextState bool
91+
92+
PollStates:
8993
for {
9094
select {
9195
case stateUpdate := <-states:
@@ -95,18 +99,35 @@ func Create() error {
9599

96100
var inProgress bool
97101
for _, state := range stateUpdate.PostCreateStates {
98-
fmt.Print(state.Name)
99102
switch state.Status {
100103
case codespaces.PostCreateStateRunning:
104+
if lastState != state {
105+
lastState = state
106+
fmt.Print(state.Name)
107+
} else {
108+
fmt.Print(".")
109+
}
110+
101111
inProgress = true
112+
break
102113
case codespaces.PostCreateStateFailed:
103-
fmt.Print("...Failed")
114+
if lastState.Name == state.Name && lastState.Status != state.Status {
115+
lastState = state
116+
fmt.Print(".Failed\n")
117+
}
118+
case codespaces.PostCreateStateSuccess:
119+
if lastState.Name == state.Name && lastState.Status != state.Status {
120+
lastState = state
121+
fmt.Print(".Success\n")
122+
}
104123
}
105-
fmt.Print("\n")
106124
}
107125

108-
if !inProgress {
109-
break
126+
switch {
127+
case !inProgress && !breakNextState:
128+
breakNextState = true
129+
case !inProgress && breakNextState:
130+
break PollStates
110131
}
111132
}
112133
}

cmd/ghcs/logs.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -49,7 +49,7 @@ func Logs(tail bool, codespaceName string) error {
4949
return fmt.Errorf("get or choose codespace: %v", err)
5050
}
5151

52-
lsclient, err := codespaces.ConnectToLiveshare(ctx, apiClient, token, codespace)
52+
lsclient, err := codespaces.ConnectToLiveshare(ctx, apiClient, user.Login, token, codespace)
5353
if err != nil {
5454
return fmt.Errorf("connecting to liveshare: %v", err)
5555
}

cmd/ghcs/ports.go

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -61,7 +61,7 @@ func Ports() error {
6161
return fmt.Errorf("error getting codespace token: %v", err)
6262
}
6363

64-
liveShareClient, err := codespaces.ConnectToLiveshare(ctx, apiClient, token, codespace)
64+
liveShareClient, err := codespaces.ConnectToLiveshare(ctx, apiClient, user.Login, token, codespace)
6565
if err != nil {
6666
return fmt.Errorf("error connecting to liveshare: %v", err)
6767
}
@@ -214,7 +214,7 @@ func updatePortVisibility(codespaceName, sourcePort string, public bool) error {
214214
return fmt.Errorf("error getting codespace: %v", err)
215215
}
216216

217-
lsclient, err := codespaces.ConnectToLiveshare(ctx, apiClient, token, codespace)
217+
lsclient, err := codespaces.ConnectToLiveshare(ctx, apiClient, user.Login, token, codespace)
218218
if err != nil {
219219
return fmt.Errorf("error connecting to liveshare: %v", err)
220220
}
@@ -276,7 +276,7 @@ func forwardPort(codespaceName, sourcePort, destPort string) error {
276276
return fmt.Errorf("error getting codespace: %v", err)
277277
}
278278

279-
lsclient, err := codespaces.ConnectToLiveshare(ctx, apiClient, token, codespace)
279+
lsclient, err := codespaces.ConnectToLiveshare(ctx, apiClient, user.Login, token, codespace)
280280
if err != nil {
281281
return fmt.Errorf("error connecting to liveshare: %v", err)
282282
}

cmd/ghcs/ssh.go

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -51,7 +51,7 @@ func SSH(sshProfile, codespaceName string, sshServerPort int) error {
5151
return fmt.Errorf("get or choose codespace: %v", err)
5252
}
5353

54-
lsclient, err := codespaces.ConnectToLiveshare(ctx, apiClient, token, codespace)
54+
lsclient, err := codespaces.ConnectToLiveshare(ctx, apiClient, user.Login, token, codespace)
5555
if err != nil {
5656
return fmt.Errorf("error connecting to liveshare: %v", err)
5757
}
@@ -61,7 +61,7 @@ func SSH(sshProfile, codespaceName string, sshServerPort int) error {
6161
return fmt.Errorf("error creating liveshare terminal: %v", err)
6262
}
6363

64-
fmt.Println("Preparing SSH...")
64+
fmt.Print("Preparing SSH...")
6565
if sshProfile == "" {
6666
containerID, err := getContainerID(ctx, terminal)
6767
if err != nil {
@@ -71,9 +71,8 @@ func SSH(sshProfile, codespaceName string, sshServerPort int) error {
7171
if err := setupSSH(ctx, terminal, containerID, codespace.RepositoryName); err != nil {
7272
return fmt.Errorf("error creating ssh server: %v", err)
7373
}
74-
75-
fmt.Printf("\n")
7674
}
75+
fmt.Print("\n")
7776

7877
tunnelPort, tunnelClosed, err := codespaces.MakeSSHTunnel(ctx, lsclient, sshServerPort)
7978
if err != nil {

internal/codespaces/codespaces.go

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -57,9 +57,11 @@ func ChooseCodespace(ctx context.Context, apiClient *api.API, user *api.User) (*
5757
return codespace, nil
5858
}
5959

60-
func ConnectToLiveshare(ctx context.Context, apiClient *api.API, token string, codespace *api.Codespace) (client *liveshare.Client, err error) {
60+
func ConnectToLiveshare(ctx context.Context, apiClient *api.API, userLogin, token string, codespace *api.Codespace) (client *liveshare.Client, err error) {
61+
var startedCodespace bool
6162
if codespace.Environment.State != api.CodespaceEnvironmentStateAvailable {
62-
fmt.Println("Starting your codespace...") // TODO(josebalius): better way of notifying of events
63+
startedCodespace = true
64+
fmt.Print("Starting your codespace...") // TODO(josebalius): better way of notifying of events
6365
if err := apiClient.StartCodespace(ctx, token, codespace); err != nil {
6466
return nil, fmt.Errorf("error starting codespace: %v", err)
6567
}
@@ -79,18 +81,17 @@ func ConnectToLiveshare(ctx context.Context, apiClient *api.API, token string, c
7981
return nil, errors.New("timed out while waiting for the codespace to start")
8082
}
8183

82-
codespace, err = apiClient.GetCodespace(ctx, token, codespace.OwnerLogin, codespace.Name)
84+
codespace, err = apiClient.GetCodespace(ctx, token, userLogin, codespace.Name)
8385
if err != nil {
8486
return nil, fmt.Errorf("error getting codespace: %v", err)
8587
}
8688

8789
retries += 1
8890
}
8991

90-
if retries >= 2 {
92+
if startedCodespace {
9193
fmt.Print("\n")
9294
}
93-
9495
fmt.Println("Connecting to your codespace...")
9596

9697
lsclient, err := liveshare.NewClient(
Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@ type PostCreateStatesResult struct {
2323
Err error
2424
}
2525

26-
type PostCreateStates []*PostCreateState
26+
type PostCreateStates []PostCreateState
2727

2828
type PostCreateState struct {
2929
Name string `json:"name"`
@@ -38,7 +38,7 @@ func PollPostCreateStates(ctx context.Context, apiClient *api.API, user *api.Use
3838
return nil, fmt.Errorf("getting codespace token: %v", err)
3939
}
4040

41-
lsclient, err := ConnectToLiveshare(ctx, apiClient, token, codespace)
41+
lsclient, err := ConnectToLiveshare(ctx, apiClient, user.Login, token, codespace)
4242
if err != nil {
4343
return nil, fmt.Errorf("connect to liveshare: %v", err)
4444
}

0 commit comments

Comments
 (0)