From 2a0ea1617b3fccd06d29c4e4b81fd6d4b815fa15 Mon Sep 17 00:00:00 2001 From: Jose Garcia Date: Wed, 22 Sep 2021 09:40:45 -0400 Subject: [PATCH] Handle specific error for GetCodespaceToken --- internal/api/api.go | 7 +++++++ internal/codespaces/codespaces.go | 8 ++++++-- 2 files changed, 13 insertions(+), 2 deletions(-) diff --git a/internal/api/api.go b/internal/api/api.go index ad9177eff..58d01a428 100644 --- a/internal/api/api.go +++ b/internal/api/api.go @@ -208,6 +208,8 @@ type getCodespaceTokenResponse struct { RepositoryToken string `json:"repository_token"` } +var ErrNotProvisioned = errors.New("codespace not provisioned") + func (a *API) GetCodespaceToken(ctx context.Context, ownerLogin, codespaceName string) (string, error) { reqBody, err := json.Marshal(getCodespaceTokenRequest{true}) if err != nil { @@ -236,6 +238,11 @@ func (a *API) GetCodespaceToken(ctx context.Context, ownerLogin, codespaceName s } if resp.StatusCode != http.StatusOK { + + if resp.StatusCode == http.StatusUnprocessableEntity { + return "", ErrNotProvisioned + } + return "", jsonErrorResponse(b) } diff --git a/internal/codespaces/codespaces.go b/internal/codespaces/codespaces.go index c67f88c3b..1d60bcd21 100644 --- a/internal/codespaces/codespaces.go +++ b/internal/codespaces/codespaces.go @@ -135,8 +135,12 @@ func pollForCodespace(ctx context.Context, client apiClient, log logger, duratio log.Print(".") token, err := client.GetCodespaceToken(ctx, user, name) if err != nil { - // Do nothing. We expect this to fail until the codespace is provisioned - continue + if err == api.ErrNotProvisioned { + // Do nothing. We expect this to fail until the codespace is provisioned + continue + } + + return nil, fmt.Errorf("failed to get codespace token: %w", err) } return client.GetCodespace(ctx, token, user, name)