Skip to content

Commit 0675e4f

Browse files
authored
Merge branch 'main' into bugfix/docker-compose-version
2 parents f2e976e + a69bd47 commit 0675e4f

File tree

234 files changed

+6162
-2871
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

234 files changed

+6162
-2871
lines changed

.github/CODEOWNERS

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1 +1,2 @@
11
site/ @coder/frontend
2+
docs/ @ammario

.github/stale.yaml

Lines changed: 0 additions & 12 deletions
This file was deleted.

.github/workflows/coder.yaml

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -369,7 +369,8 @@ jobs:
369369
./scripts/build_go_matrix.sh \
370370
--output ./dist/ \
371371
--package-linux \
372-
linux:amd64
372+
linux:amd64 \
373+
windows:amd64
373374
374375
- name: Install Release
375376
run: |
@@ -387,6 +388,7 @@ jobs:
387388
name: coder
388389
path: |
389390
./dist/*.zip
391+
./dist/*.exe
390392
./dist/*.tar.gz
391393
./dist/*.apk
392394
./dist/*.deb

.github/workflows/stale.yaml

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
name: Stale Issue Cron
2+
on:
3+
schedule:
4+
# Every day at midnight
5+
- cron: "0 0 * * *"
6+
workflow_dispatch:
7+
jobs:
8+
stale:
9+
runs-on: ubuntu-latest
10+
permissions:
11+
issues: write
12+
pull-requests: write
13+
steps:
14+
- uses: actions/stale@v5.1.0
15+
stale-issue-label: stale
16+
stale-pr-label: stale

Makefile

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -175,7 +175,7 @@ test-postgres: test-clean test-postgres-docker
175175
DB=ci DB_FROM=$(shell go run scripts/migrate-ci/main.go) gotestsum --junitfile="gotests.xml" --packages="./..." -- \
176176
-covermode=atomic -coverprofile="gotests.coverage" -timeout=30m \
177177
-coverpkg=./...,github.com/coder/coder/codersdk \
178-
-count=2 -race -failfast
178+
-count=1 -race -failfast
179179
.PHONY: test-postgres
180180

181181
test-postgres-docker:

agent/reaper/reaper_stub.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,6 @@ func IsInitProcess() bool {
77
return false
88
}
99

10-
func ForkReap(opt ...Option) error {
10+
func ForkReap(_ ...Option) error {
1111
return nil
1212
}

cli/cliflag/cliflag.go

Lines changed: 9 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -47,7 +47,7 @@ func StringArrayVarP(flagset *pflag.FlagSet, ptr *[]string, name string, shortha
4747
def = strings.Split(val, ",")
4848
}
4949
}
50-
flagset.StringArrayVarP(ptr, name, shorthand, def, usage)
50+
flagset.StringArrayVarP(ptr, name, shorthand, def, fmtUsage(usage, env))
5151
}
5252

5353
// Uint8VarP sets a uint8 flag on the given flag set.
@@ -102,9 +102,14 @@ func DurationVarP(flagset *pflag.FlagSet, ptr *time.Duration, name string, short
102102
}
103103

104104
func fmtUsage(u string, env string) string {
105-
if env == "" {
106-
return fmt.Sprintf("%s.", u)
105+
if env != "" {
106+
// Avoid double dotting.
107+
dot := "."
108+
if strings.HasSuffix(u, ".") {
109+
dot = ""
110+
}
111+
u = fmt.Sprintf("%s%s\nConsumes $%s", u, dot, env)
107112
}
108113

109-
return fmt.Sprintf("%s - consumes $%s.", u, env)
114+
return u
110115
}

cli/cliflag/cliflag_test.go

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@ func TestCliflag(t *testing.T) {
2424
require.NoError(t, err)
2525
require.Equal(t, def, got)
2626
require.Contains(t, flagset.FlagUsages(), usage)
27-
require.Contains(t, flagset.FlagUsages(), fmt.Sprintf(" - consumes $%s", env))
27+
require.Contains(t, flagset.FlagUsages(), fmt.Sprintf("Consumes $%s", env))
2828
})
2929

3030
t.Run("StringEnvVar", func(t *testing.T) {
@@ -48,7 +48,7 @@ func TestCliflag(t *testing.T) {
4848
require.NoError(t, err)
4949
require.Equal(t, def, got)
5050
require.Contains(t, flagset.FlagUsages(), usage)
51-
require.Contains(t, flagset.FlagUsages(), fmt.Sprintf(" - consumes $%s", env))
51+
require.Contains(t, flagset.FlagUsages(), fmt.Sprintf("Consumes $%s", env))
5252
})
5353

5454
t.Run("StringVarPEnvVar", func(t *testing.T) {
@@ -74,7 +74,7 @@ func TestCliflag(t *testing.T) {
7474
require.NoError(t, err)
7575
require.Equal(t, def, got)
7676
require.Contains(t, flagset.FlagUsages(), usage)
77-
require.NotContains(t, flagset.FlagUsages(), " - consumes")
77+
require.NotContains(t, flagset.FlagUsages(), "Consumes")
7878
})
7979

8080
t.Run("StringArrayDefault", func(t *testing.T) {
@@ -117,7 +117,7 @@ func TestCliflag(t *testing.T) {
117117
require.NoError(t, err)
118118
require.Equal(t, uint8(def), got)
119119
require.Contains(t, flagset.FlagUsages(), usage)
120-
require.Contains(t, flagset.FlagUsages(), fmt.Sprintf(" - consumes $%s", env))
120+
require.Contains(t, flagset.FlagUsages(), fmt.Sprintf("Consumes $%s", env))
121121
})
122122

123123
t.Run("IntEnvVar", func(t *testing.T) {
@@ -156,7 +156,7 @@ func TestCliflag(t *testing.T) {
156156
require.NoError(t, err)
157157
require.Equal(t, def, got)
158158
require.Contains(t, flagset.FlagUsages(), usage)
159-
require.Contains(t, flagset.FlagUsages(), fmt.Sprintf(" - consumes $%s", env))
159+
require.Contains(t, flagset.FlagUsages(), fmt.Sprintf("Consumes $%s", env))
160160
})
161161

162162
t.Run("BoolEnvVar", func(t *testing.T) {
@@ -195,7 +195,7 @@ func TestCliflag(t *testing.T) {
195195
require.NoError(t, err)
196196
require.Equal(t, def, got)
197197
require.Contains(t, flagset.FlagUsages(), usage)
198-
require.Contains(t, flagset.FlagUsages(), fmt.Sprintf(" - consumes $%s", env))
198+
require.Contains(t, flagset.FlagUsages(), fmt.Sprintf("Consumes $%s", env))
199199
})
200200

201201
t.Run("DurationEnvVar", func(t *testing.T) {

cli/cliui/cliui.go

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@ var Styles = struct {
2626
Checkmark,
2727
Code,
2828
Crossmark,
29+
DateTimeStamp,
2930
Error,
3031
Field,
3132
Keyword,
@@ -42,6 +43,7 @@ var Styles = struct {
4243
Checkmark: defaultStyles.Checkmark,
4344
Code: defaultStyles.Code,
4445
Crossmark: defaultStyles.Error.Copy().SetString("✘"),
46+
DateTimeStamp: defaultStyles.LabelDim,
4547
Error: defaultStyles.Error,
4648
Field: defaultStyles.Code.Copy().Foreground(lipgloss.AdaptiveColor{Light: "#000000", Dark: "#FFFFFF"}),
4749
Keyword: defaultStyles.Keyword,

cli/cliui/parameter.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -47,6 +47,7 @@ func ParameterSchema(cmd *cobra.Command, parameterSchema codersdk.ParameterSchem
4747
value, err = Prompt(cmd, PromptOptions{
4848
Text: Styles.Bold.Render(text),
4949
})
50+
value = strings.TrimSpace(value)
5051
}
5152
if err != nil {
5253
return "", err

cli/cliui/prompt.go

Lines changed: 22 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -24,25 +24,41 @@ type PromptOptions struct {
2424
Validate func(string) error
2525
}
2626

27+
const skipPromptFlag = "yes"
28+
2729
func AllowSkipPrompt(cmd *cobra.Command) {
28-
cmd.Flags().BoolP("yes", "y", false, "Bypass prompts")
30+
cmd.Flags().BoolP(skipPromptFlag, "y", false, "Bypass prompts")
2931
}
3032

33+
const (
34+
ConfirmYes = "yes"
35+
ConfirmNo = "no"
36+
)
37+
3138
// Prompt asks the user for input.
3239
func Prompt(cmd *cobra.Command, opts PromptOptions) (string, error) {
3340
// If the cmd has a "yes" flag for skipping confirm prompts, honor it.
3441
// If it's not a "Confirm" prompt, then don't skip. As the default value of
3542
// "yes" makes no sense.
36-
if opts.IsConfirm && cmd.Flags().Lookup("yes") != nil {
37-
if skip, _ := cmd.Flags().GetBool("yes"); skip {
38-
return "yes", nil
43+
if opts.IsConfirm && cmd.Flags().Lookup(skipPromptFlag) != nil {
44+
if skip, _ := cmd.Flags().GetBool(skipPromptFlag); skip {
45+
return ConfirmYes, nil
3946
}
4047
}
4148

4249
_, _ = fmt.Fprint(cmd.OutOrStdout(), Styles.FocusedPrompt.String()+opts.Text+" ")
4350
if opts.IsConfirm {
44-
opts.Default = "yes"
45-
_, _ = fmt.Fprint(cmd.OutOrStdout(), Styles.Placeholder.Render("("+Styles.Bold.Render("yes")+Styles.Placeholder.Render("/no) ")))
51+
if len(opts.Default) == 0 {
52+
opts.Default = ConfirmYes
53+
}
54+
renderedYes := Styles.Placeholder.Render(ConfirmYes)
55+
renderedNo := Styles.Placeholder.Render(ConfirmNo)
56+
if opts.Default == ConfirmYes {
57+
renderedYes = Styles.Bold.Render(ConfirmYes)
58+
} else {
59+
renderedNo = Styles.Bold.Render(ConfirmNo)
60+
}
61+
_, _ = fmt.Fprint(cmd.OutOrStdout(), Styles.Placeholder.Render("("+renderedYes+Styles.Placeholder.Render("/"+renderedNo+Styles.Placeholder.Render(") "))))
4662
} else if opts.Default != "" {
4763
_, _ = fmt.Fprint(cmd.OutOrStdout(), Styles.Placeholder.Render("("+opts.Default+") "))
4864
}

cli/configssh.go

Lines changed: 10 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -141,15 +141,16 @@ func configSSH() *cobra.Command {
141141
Annotations: workspaceCommand,
142142
Use: "config-ssh",
143143
Short: "Populate your SSH config with Host entries for all of your workspaces",
144-
Example: `
145-
- You can use -o (or --ssh-option) so set SSH options to be used for all your
146-
workspaces.
147-
148-
` + cliui.Styles.Code.Render("$ coder config-ssh -o ForwardAgent=yes") + `
149-
150-
- You can use --dry-run (or -n) to see the changes that would be made.
151-
152-
` + cliui.Styles.Code.Render("$ coder config-ssh --dry-run"),
144+
Example: formatExamples(
145+
example{
146+
Description: "You can use -o (or --ssh-option) so set SSH options to be used for all your workspaces",
147+
Command: "coder config-ssh -o ForwardAgent=yes",
148+
},
149+
example{
150+
Description: "You can use --dry-run (or -n) to see the changes that would be made",
151+
Command: "coder config-ssh --dry-run",
152+
},
153+
),
153154
RunE: func(cmd *cobra.Command, args []string) error {
154155
client, err := createClient(cmd)
155156
if err != nil {

cli/create.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -155,7 +155,7 @@ func create() *cobra.Command {
155155
return err
156156
}
157157

158-
_, _ = fmt.Fprintf(cmd.OutOrStdout(), "\nThe %s workspace has been created!\n", cliui.Styles.Keyword.Render(workspace.Name))
158+
_, _ = fmt.Fprintf(cmd.OutOrStdout(), "\nThe %s workspace has been created at %s!\n", cliui.Styles.Keyword.Render(workspace.Name), cliui.Styles.DateTimeStamp.Render(time.Now().Format(time.Stamp)))
159159
return nil
160160
},
161161
}

cli/delete.go

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@ func deleteWorkspace() *cobra.Command {
2222
_, err := cliui.Prompt(cmd, cliui.PromptOptions{
2323
Text: "Confirm delete workspace?",
2424
IsConfirm: true,
25+
Default: cliui.ConfirmNo,
2526
})
2627
if err != nil {
2728
return err
@@ -48,7 +49,7 @@ func deleteWorkspace() *cobra.Command {
4849
return err
4950
}
5051

51-
_, _ = fmt.Fprintf(cmd.OutOrStdout(), "\nThe %s workspace has been deleted!\n", cliui.Styles.Keyword.Render(workspace.Name))
52+
_, _ = fmt.Fprintf(cmd.OutOrStdout(), "\nThe %s workspace has been deleted at %s!\n", cliui.Styles.Keyword.Render(workspace.Name), cliui.Styles.DateTimeStamp.Render(time.Now().Format(time.Stamp)))
5253
return nil
5354
},
5455
}

cli/dotfiles.go

Lines changed: 10 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -18,14 +18,17 @@ import (
1818
)
1919

2020
func dotfiles() *cobra.Command {
21-
var (
22-
symlinkDir string
23-
)
21+
var symlinkDir string
2422
cmd := &cobra.Command{
25-
Use: "dotfiles [git_repo_url]",
26-
Args: cobra.ExactArgs(1),
27-
Short: "Checkout and install a dotfiles repository.",
28-
Example: "coder dotfiles [-y] git@github.com:example/dotfiles.git",
23+
Use: "dotfiles [git_repo_url]",
24+
Args: cobra.ExactArgs(1),
25+
Short: "Check out and install a dotfiles repository.",
26+
Example: formatExamples(
27+
example{
28+
Description: "Check out and install a dotfiles repository without prompts",
29+
Command: "coder dotfiles --yes git@github.com:example/dotfiles.git",
30+
},
31+
),
2932
RunE: func(cmd *cobra.Command, args []string) error {
3033
var (
3134
dotfilesRepoDir = "dotfiles"

cli/list.go

Lines changed: 1 addition & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -58,33 +58,7 @@ func list() *cobra.Command {
5858

5959
now := time.Now()
6060
for _, workspace := range workspaces {
61-
status := ""
62-
inProgress := false
63-
if workspace.LatestBuild.Job.Status == codersdk.ProvisionerJobRunning ||
64-
workspace.LatestBuild.Job.Status == codersdk.ProvisionerJobCanceling {
65-
inProgress = true
66-
}
67-
68-
switch workspace.LatestBuild.Transition {
69-
case codersdk.WorkspaceTransitionStart:
70-
status = "Running"
71-
if inProgress {
72-
status = "Starting"
73-
}
74-
case codersdk.WorkspaceTransitionStop:
75-
status = "Stopped"
76-
if inProgress {
77-
status = "Stopping"
78-
}
79-
case codersdk.WorkspaceTransitionDelete:
80-
status = "Deleted"
81-
if inProgress {
82-
status = "Deleting"
83-
}
84-
}
85-
if workspace.LatestBuild.Job.Status == codersdk.ProvisionerJobFailed {
86-
status = "Failed"
87-
}
61+
status := codersdk.WorkspaceDisplayStatus(workspace.LatestBuild.Job.Status, workspace.LatestBuild.Transition)
8862

8963
lastBuilt := time.Now().UTC().Sub(workspace.LatestBuild.Job.CreatedAt).Truncate(time.Second)
9064
autostartDisplay := "-"

cli/list_test.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,7 @@ func TestList(t *testing.T) {
3737
close(done)
3838
}()
3939
pty.ExpectMatch(workspace.Name)
40-
pty.ExpectMatch("Running")
40+
pty.ExpectMatch("Started")
4141
cancelFunc()
4242
<-done
4343
})

0 commit comments

Comments
 (0)