From 10ccce1bd99210095895c27b21f04dda8d90cc30 Mon Sep 17 00:00:00 2001 From: joobisb Date: Mon, 14 Oct 2024 11:09:01 +0530 Subject: [PATCH 1/9] feat: expose 30d trial form via CLI --- cli/login.go | 176 +++++++++++++++++++++++++ cli/login_test.go | 90 ++++++++++++- cli/testdata/coder_login_--help.golden | 21 +++ coderd/coderdtest/coderdtest.go | 10 ++ docs/reference/cli/login.md | 63 +++++++++ 5 files changed, 359 insertions(+), 1 deletion(-) diff --git a/cli/login.go b/cli/login.go index 484de69fdf1b5..3e08b052115c6 100644 --- a/cli/login.go +++ b/cli/login.go @@ -149,6 +149,14 @@ func (r *RootCmd) login() *serpent.Command { password string trial bool useTokenForSession bool + + firstName string + lastName string + phoneNumber string + jobTitle string + companyName string + country string + developers string ) cmd := &serpent.Command{ Use: "login []", @@ -267,12 +275,66 @@ func (r *RootCmd) login() *serpent.Command { trial = v == "yes" || v == "y" } + if trial { + if firstName == "" { + firstName, err = promptTrialInfo(inv, "firstName") + if err != nil { + return err + } + } + if lastName == "" { + lastName, err = promptTrialInfo(inv, "lastName") + if err != nil { + return err + } + } + if phoneNumber == "" { + phoneNumber, err = promptTrialInfo(inv, "phoneNumber") + if err != nil { + return err + } + } + if jobTitle == "" { + jobTitle, err = promptTrialInfo(inv, "jobTitle") + if err != nil { + return err + } + } + if companyName == "" { + companyName, err = promptTrialInfo(inv, "companyName") + if err != nil { + return err + } + } + if country == "" { + country, err = promptCountry(inv) + if err != nil { + return err + } + } + if developers == "" { + developers, err = promptDevelopers(inv) + if err != nil { + return err + } + } + } + _, err = client.CreateFirstUser(ctx, codersdk.CreateFirstUserRequest{ Email: email, Username: username, Name: name, Password: password, Trial: trial, + TrialInfo: codersdk.CreateFirstUserTrialInfo{ + FirstName: firstName, + LastName: lastName, + PhoneNumber: phoneNumber, + JobTitle: jobTitle, + CompanyName: companyName, + Country: country, + Developers: developers, + }, }) if err != nil { return xerrors.Errorf("create initial user: %w", err) @@ -398,6 +460,48 @@ func (r *RootCmd) login() *serpent.Command { Description: "By default, the CLI will generate a new session token when logging in. This flag will instead use the provided token as the session token.", Value: serpent.BoolOf(&useTokenForSession), }, + { + Flag: "first-user-first-name", + Env: "CODER_FIRST_USER_FIRST_NAME", + Description: "Specifies the first name of the user.", + Value: serpent.StringOf(&firstName), + }, + { + Flag: "first-user-last-name", + Env: "CODER_FIRST_USER_LAST_NAME", + Description: "Specifies the last name of the user.", + Value: serpent.StringOf(&lastName), + }, + { + Flag: "first-user-phone-number", + Env: "CODER_FIRST_USER_PHONE_NUMBER", + Description: "Specifies the phone number of the user.", + Value: serpent.StringOf(&phoneNumber), + }, + { + Flag: "first-user-job-title", + Env: "CODER_FIRST_USER_JOB_TITLE", + Description: "Specifies the job title of the user.", + Value: serpent.StringOf(&jobTitle), + }, + { + Flag: "first-user-company-name", + Env: "CODER_FIRST_USER_COMPANY_NAME", + Description: "Specifies the company name of the user.", + Value: serpent.StringOf(&companyName), + }, + { + Flag: "first-user-country", + Env: "CODER_FIRST_USER_COUNTRY", + Description: "Specifies the country of the user.", + Value: serpent.StringOf(&country), + }, + { + Flag: "first-user-developers", + Env: "CODER_FIRST_USER_DEVELOPERS", + Description: "Specifies the number of developers.", + Value: serpent.StringOf(&developers), + }, } return cmd } @@ -449,3 +553,75 @@ func openURL(inv *serpent.Invocation, urlToOpen string) error { return browser.OpenURL(urlToOpen) } + +func promptTrialInfo(inv *serpent.Invocation, fieldName string) (string, error) { + value, err := cliui.Prompt(inv, cliui.PromptOptions{ + Text: fmt.Sprintf("Please enter %s:", pretty.Sprint(cliui.DefaultStyles.Field, fieldName)), + Validate: func(s string) error { + if strings.TrimSpace(s) == "" { + return xerrors.Errorf("%s is required", fieldName) + } + return nil + }, + }) + if err != nil { + if errors.Is(err, cliui.Canceled) { + return "", nil + } + return "", err + } + return value, nil +} + +func promptDevelopers(inv *serpent.Invocation) (string, error) { + options := []string{"1-100", "101-500", "501-1000", "1001-2500", "2500+"} + selection, err := cliui.Select(inv, cliui.SelectOptions{ + Options: options, + HideSearch: false, + Message: "Select the number of developers:", + }) + if err != nil { + return "", xerrors.Errorf("select developers: %w", err) + } + return selection, nil +} + +func promptCountry(inv *serpent.Invocation) (string, error) { + countries := []string{ + "Afghanistan", "Åland Islands", "Albania", "Algeria", "American Samoa", "Andorra", "Angola", "Anguilla", "Antarctica", "Antigua and Barbuda", + "Argentina", "Armenia", "Aruba", "Australia", "Austria", "Azerbaijan", "Bahamas", "Bahrain", "Bangladesh", "Barbados", + "Belarus", "Belgium", "Belize", "Benin", "Bermuda", "Bhutan", "Bolivia, Plurinational State of", "Bonaire, Sint Eustatius and Saba", "Bosnia and Herzegovina", "Botswana", + "Bouvet Island", "Brazil", "British Indian Ocean Territory", "Brunei Darussalam", "Bulgaria", "Burkina Faso", "Burundi", "Cambodia", "Cameroon", "Canada", + "Cape Verde", "Cayman Islands", "Central African Republic", "Chad", "Chile", "China", "Christmas Island", "Cocos (Keeling) Islands", "Colombia", "Comoros", + "Congo", "Congo, the Democratic Republic of the", "Cook Islands", "Costa Rica", "Côte d'Ivoire", "Croatia", "Cuba", "Curaçao", "Cyprus", "Czech Republic", + "Denmark", "Djibouti", "Dominica", "Dominican Republic", "Ecuador", "Egypt", "El Salvador", "Equatorial Guinea", "Eritrea", "Estonia", + "Ethiopia", "Falkland Islands (Malvinas)", "Faroe Islands", "Fiji", "Finland", "France", "French Guiana", "French Polynesia", "French Southern Territories", "Gabon", + "Gambia", "Georgia", "Germany", "Ghana", "Gibraltar", "Greece", "Greenland", "Grenada", "Guadeloupe", "Guam", + "Guatemala", "Guernsey", "Guinea", "Guinea-Bissau", "Guyana", "Haiti", "Heard Island and McDonald Islands", "Holy See (Vatican City State)", "Honduras", "Hong Kong", + "Hungary", "Iceland", "India", "Indonesia", "Iran, Islamic Republic of", "Iraq", "Ireland", "Isle of Man", "Israel", "Italy", + "Jamaica", "Japan", "Jersey", "Jordan", "Kazakhstan", "Kenya", "Kiribati", "Korea, Democratic People's Republic of", "Korea, Republic of", "Kuwait", + "Kyrgyzstan", "Lao People's Democratic Republic", "Latvia", "Lebanon", "Lesotho", "Liberia", "Libya", "Liechtenstein", "Lithuania", "Luxembourg", + "Macao", "Macedonia, the Former Yugoslav Republic of", "Madagascar", "Malawi", "Malaysia", "Maldives", "Mali", "Malta", "Marshall Islands", "Martinique", + "Mauritania", "Mauritius", "Mayotte", "Mexico", "Micronesia, Federated States of", "Moldova, Republic of", "Monaco", "Mongolia", "Montenegro", "Montserrat", + "Morocco", "Mozambique", "Myanmar", "Namibia", "Nauru", "Nepal", "Netherlands", "New Caledonia", "New Zealand", "Nicaragua", + "Niger", "Nigeria", "Niue", "Norfolk Island", "Northern Mariana Islands", "Norway", "Oman", "Pakistan", "Palau", "Palestine, State of", + "Panama", "Papua New Guinea", "Paraguay", "Peru", "Philippines", "Pitcairn", "Poland", "Portugal", "Puerto Rico", "Qatar", + "Réunion", "Romania", "Russian Federation", "Rwanda", "Saint Barthélemy", "Saint Helena, Ascension and Tristan da Cunha", "Saint Kitts and Nevis", "Saint Lucia", "Saint Martin (French part)", "Saint Pierre and Miquelon", + "Saint Vincent and the Grenadines", "Samoa", "San Marino", "Sao Tome and Principe", "Saudi Arabia", "Senegal", "Serbia", "Seychelles", "Sierra Leone", "Singapore", + "Sint Maarten (Dutch part)", "Slovakia", "Slovenia", "Solomon Islands", "Somalia", "South Africa", "South Georgia and the South Sandwich Islands", "South Sudan", "Spain", "Sri Lanka", + "Sudan", "Suriname", "Svalbard and Jan Mayen", "Swaziland", "Sweden", "Switzerland", "Syrian Arab Republic", "Taiwan, Province of China", "Tajikistan", "Tanzania, United Republic of", + "Thailand", "Timor-Leste", "Togo", "Tokelau", "Tonga", "Trinidad and Tobago", "Tunisia", "Turkey", "Turkmenistan", "Turks and Caicos Islands", + "Tuvalu", "Uganda", "Ukraine", "United Arab Emirates", "United Kingdom", "United States", "United States Minor Outlying Islands", "Uruguay", "Uzbekistan", "Vanuatu", + "Venezuela, Bolivarian Republic of", "Viet Nam", "Virgin Islands, British", "Virgin Islands, U.S.", "Wallis and Futuna", "Western Sahara", "Yemen", "Zambia", "Zimbabwe", + } + + selection, err := cliui.Select(inv, cliui.SelectOptions{ + Options: countries, + Message: "Select the country:", + HideSearch: false, + }) + if err != nil { + return "", xerrors.Errorf("select country: %w", err) + } + return selection, nil +} diff --git a/cli/login_test.go b/cli/login_test.go index 0428c332d02b0..92df197d76551 100644 --- a/cli/login_test.go +++ b/cli/login_test.go @@ -96,6 +96,58 @@ func TestLogin(t *testing.T) { "password", coderdtest.FirstUserParams.Password, "password", coderdtest.FirstUserParams.Password, // confirm "trial", "yes", + "firstName", coderdtest.TrialUserParams.FirstName, + "lastName", coderdtest.TrialUserParams.LastName, + "phoneNumber", coderdtest.TrialUserParams.PhoneNumber, + "jobTitle", coderdtest.TrialUserParams.JobTitle, + "companyName", coderdtest.TrialUserParams.CompanyName, + // `developers` and `country` `cliui.Select` automatically selects the first option during tests. + } + for i := 0; i < len(matches); i += 2 { + match := matches[i] + value := matches[i+1] + pty.ExpectMatch(match) + pty.WriteLine(value) + } + pty.ExpectMatch("Welcome to Coder") + <-doneChan + ctx := testutil.Context(t, testutil.WaitShort) + resp, err := client.LoginWithPassword(ctx, codersdk.LoginWithPasswordRequest{ + Email: coderdtest.FirstUserParams.Email, + Password: coderdtest.FirstUserParams.Password, + }) + require.NoError(t, err) + client.SetSessionToken(resp.SessionToken) + me, err := client.User(ctx, codersdk.Me) + require.NoError(t, err) + assert.Equal(t, coderdtest.FirstUserParams.Username, me.Username) + assert.Equal(t, coderdtest.FirstUserParams.Name, me.Name) + assert.Equal(t, coderdtest.FirstUserParams.Email, me.Email) + }) + + t.Run("InitialUserTTYWithNoTrial", func(t *testing.T) { + t.Parallel() + client := coderdtest.New(t, nil) + // The --force-tty flag is required on Windows, because the `isatty` library does not + // accurately detect Windows ptys when they are not attached to a process: + // https://github.com/mattn/go-isatty/issues/59 + doneChan := make(chan struct{}) + root, _ := clitest.New(t, "login", "--force-tty", client.URL.String()) + pty := ptytest.New(t).Attach(root) + go func() { + defer close(doneChan) + err := root.Run() + assert.NoError(t, err) + }() + + matches := []string{ + "first user?", "yes", + "username", coderdtest.FirstUserParams.Username, + "name", coderdtest.FirstUserParams.Name, + "email", coderdtest.FirstUserParams.Email, + "password", coderdtest.FirstUserParams.Password, + "password", coderdtest.FirstUserParams.Password, // confirm + "trial", "no", } for i := 0; i < len(matches); i += 2 { match := matches[i] @@ -142,6 +194,12 @@ func TestLogin(t *testing.T) { "password", coderdtest.FirstUserParams.Password, "password", coderdtest.FirstUserParams.Password, // confirm "trial", "yes", + "firstName", coderdtest.TrialUserParams.FirstName, + "lastName", coderdtest.TrialUserParams.LastName, + "phoneNumber", coderdtest.TrialUserParams.PhoneNumber, + "jobTitle", coderdtest.TrialUserParams.JobTitle, + "companyName", coderdtest.TrialUserParams.CompanyName, + // `developers` and `country` `cliui.Select` automatically selects the first option during tests. } for i := 0; i < len(matches); i += 2 { match := matches[i] @@ -185,6 +243,12 @@ func TestLogin(t *testing.T) { "password", coderdtest.FirstUserParams.Password, "password", coderdtest.FirstUserParams.Password, // confirm "trial", "yes", + "firstName", coderdtest.TrialUserParams.FirstName, + "lastName", coderdtest.TrialUserParams.LastName, + "phoneNumber", coderdtest.TrialUserParams.PhoneNumber, + "jobTitle", coderdtest.TrialUserParams.JobTitle, + "companyName", coderdtest.TrialUserParams.CompanyName, + // `developers` and `country` `cliui.Select` automatically selects the first option during tests. } for i := 0; i < len(matches); i += 2 { match := matches[i] @@ -217,6 +281,13 @@ func TestLogin(t *testing.T) { "--first-user-email", coderdtest.FirstUserParams.Email, "--first-user-password", coderdtest.FirstUserParams.Password, "--first-user-trial", + "--first-user-first-name", coderdtest.TrialUserParams.FirstName, + "--first-user-last-name", coderdtest.TrialUserParams.LastName, + "--first-user-phone-number", coderdtest.TrialUserParams.PhoneNumber, + "--first-user-job-title", coderdtest.TrialUserParams.JobTitle, + "--first-user-company-name", coderdtest.TrialUserParams.CompanyName, + "--first-user-country", coderdtest.TrialUserParams.Country, + "--first-user-developers", coderdtest.TrialUserParams.Developers, ) pty := ptytest.New(t).Attach(inv) w := clitest.StartWithWaiter(t, inv) @@ -245,6 +316,14 @@ func TestLogin(t *testing.T) { "--first-user-email", coderdtest.FirstUserParams.Email, "--first-user-password", coderdtest.FirstUserParams.Password, "--first-user-trial", + "--first-user-first-name", coderdtest.TrialUserParams.FirstName, + "--first-user-last-name", coderdtest.TrialUserParams.LastName, + "--first-user-phone-number", coderdtest.TrialUserParams.PhoneNumber, + "--first-user-job-title", coderdtest.TrialUserParams.JobTitle, + "--first-user-company-name", coderdtest.TrialUserParams.CompanyName, + "--first-user-country", coderdtest.TrialUserParams.Country, + "--first-user-developers", coderdtest.TrialUserParams.Developers, + // `developers` and `country` `cliui.Select` automatically selects the first option during tests. ) pty := ptytest.New(t).Attach(inv) w := clitest.StartWithWaiter(t, inv) @@ -299,12 +378,21 @@ func TestLogin(t *testing.T) { // Validate that we reprompt for matching passwords. pty.ExpectMatch("Passwords do not match") pty.ExpectMatch("Enter a " + pretty.Sprint(cliui.DefaultStyles.Field, "password")) - pty.WriteLine(coderdtest.FirstUserParams.Password) pty.ExpectMatch("Confirm") pty.WriteLine(coderdtest.FirstUserParams.Password) pty.ExpectMatch("trial") pty.WriteLine("yes") + pty.ExpectMatch("firstName") + pty.WriteLine(coderdtest.TrialUserParams.FirstName) + pty.ExpectMatch("lastName") + pty.WriteLine(coderdtest.TrialUserParams.LastName) + pty.ExpectMatch("phoneNumber") + pty.WriteLine(coderdtest.TrialUserParams.PhoneNumber) + pty.ExpectMatch("jobTitle") + pty.WriteLine(coderdtest.TrialUserParams.JobTitle) + pty.ExpectMatch("companyName") + pty.WriteLine(coderdtest.TrialUserParams.CompanyName) pty.ExpectMatch("Welcome to Coder") <-doneChan }) diff --git a/cli/testdata/coder_login_--help.golden b/cli/testdata/coder_login_--help.golden index e4109a494ed39..2ffb7522c2911 100644 --- a/cli/testdata/coder_login_--help.golden +++ b/cli/testdata/coder_login_--help.golden @@ -6,17 +6,38 @@ USAGE: Authenticate with Coder deployment OPTIONS: + --first-user-company-name string, $CODER_FIRST_USER_COMPANY_NAME + Specifies the company name of the user. + + --first-user-country string, $CODER_FIRST_USER_COUNTRY + Specifies the country of the user. + + --first-user-developers string, $CODER_FIRST_USER_DEVELOPERS + Specifies the number of developers. + --first-user-email string, $CODER_FIRST_USER_EMAIL Specifies an email address to use if creating the first user for the deployment. + --first-user-first-name string, $CODER_FIRST_USER_FIRST_NAME + Specifies the first name of the user. + --first-user-full-name string, $CODER_FIRST_USER_FULL_NAME Specifies a human-readable name for the first user of the deployment. + --first-user-job-title string, $CODER_FIRST_USER_JOB_TITLE + Specifies the job title of the user. + + --first-user-last-name string, $CODER_FIRST_USER_LAST_NAME + Specifies the last name of the user. + --first-user-password string, $CODER_FIRST_USER_PASSWORD Specifies a password to use if creating the first user for the deployment. + --first-user-phone-number string, $CODER_FIRST_USER_PHONE_NUMBER + Specifies the phone number of the user. + --first-user-trial bool, $CODER_FIRST_USER_TRIAL Specifies whether a trial license should be provisioned for the Coder deployment or not. diff --git a/coderd/coderdtest/coderdtest.go b/coderd/coderdtest/coderdtest.go index 05c31f35bd20a..5ed667aded5e8 100644 --- a/coderd/coderdtest/coderdtest.go +++ b/coderd/coderdtest/coderdtest.go @@ -651,6 +651,16 @@ var FirstUserParams = codersdk.CreateFirstUserRequest{ Name: "Test User", } +var TrialUserParams = codersdk.CreateFirstUserTrialInfo{ + FirstName: "John", + LastName: "Doe", + PhoneNumber: "9999999999", + JobTitle: "Engineer", + CompanyName: "Acme Inc", + Country: "United States", + Developers: "10-50", +} + // CreateFirstUser creates a user with preset credentials and authenticates // with the passed in codersdk client. func CreateFirstUser(t testing.TB, client *codersdk.Client) codersdk.CreateFirstUserResponse { diff --git a/docs/reference/cli/login.md b/docs/reference/cli/login.md index 9a27e4a6357c8..7ec3e201506cb 100644 --- a/docs/reference/cli/login.md +++ b/docs/reference/cli/login.md @@ -64,3 +64,66 @@ Specifies whether a trial license should be provisioned for the Coder deployment | Type | bool | By default, the CLI will generate a new session token when logging in. This flag will instead use the provided token as the session token. + +### --first-user-first-name + +| | | +| ----------- | ----------------------------------------- | +| Type | string | +| Environment | $CODER_FIRST_USER_FIRST_NAME | + +Specifies the first name of the user. + +### --first-user-last-name + +| | | +| ----------- | ---------------------------------------- | +| Type | string | +| Environment | $CODER_FIRST_USER_LAST_NAME | + +Specifies the last name of the user. + +### --first-user-phone-number + +| | | +| ----------- | ------------------------------------------- | +| Type | string | +| Environment | $CODER_FIRST_USER_PHONE_NUMBER | + +Specifies the phone number of the user. + +### --first-user-job-title + +| | | +| ----------- | ---------------------------------------- | +| Type | string | +| Environment | $CODER_FIRST_USER_JOB_TITLE | + +Specifies the job title of the user. + +### --first-user-company-name + +| | | +| ----------- | ------------------------------------------- | +| Type | string | +| Environment | $CODER_FIRST_USER_COMPANY_NAME | + +Specifies the company name of the user. + +### --first-user-country + +| | | +| ----------- | -------------------------------------- | +| Type | string | +| Environment | $CODER_FIRST_USER_COUNTRY | + +Specifies the country of the user. + +### --first-user-developers + +| | | +| ----------- | ----------------------------------------- | +| Type | string | +| Environment | $CODER_FIRST_USER_DEVELOPERS | + +Specifies the number of developers. From af7cf3b10ee5265e0c10fcc1c73f46eee7cbfed0 Mon Sep 17 00:00:00 2001 From: joobisb Date: Wed, 16 Oct 2024 10:41:08 +0530 Subject: [PATCH 2/9] remove trial params as env --- cli/login.go | 99 ++++++-------------------- cli/login_test.go | 37 ++++++---- cli/testdata/coder_login_--help.golden | 21 ------ docs/reference/cli/login.md | 63 ---------------- 4 files changed, 43 insertions(+), 177 deletions(-) diff --git a/cli/login.go b/cli/login.go index 3e08b052115c6..a4dcca7c66c52 100644 --- a/cli/login.go +++ b/cli/login.go @@ -149,14 +149,6 @@ func (r *RootCmd) login() *serpent.Command { password string trial bool useTokenForSession bool - - firstName string - lastName string - phoneNumber string - jobTitle string - companyName string - country string - developers string ) cmd := &serpent.Command{ Use: "login []", @@ -275,45 +267,46 @@ func (r *RootCmd) login() *serpent.Command { trial = v == "yes" || v == "y" } + var trialInfo codersdk.CreateFirstUserTrialInfo if trial { - if firstName == "" { - firstName, err = promptTrialInfo(inv, "firstName") + if trialInfo.FirstName == "" { + trialInfo.FirstName, err = promptTrialInfo(inv, "firstName") if err != nil { return err } } - if lastName == "" { - lastName, err = promptTrialInfo(inv, "lastName") + if trialInfo.LastName == "" { + trialInfo.LastName, err = promptTrialInfo(inv, "lastName") if err != nil { return err } } - if phoneNumber == "" { - phoneNumber, err = promptTrialInfo(inv, "phoneNumber") + if trialInfo.PhoneNumber == "" { + trialInfo.PhoneNumber, err = promptTrialInfo(inv, "phoneNumber") if err != nil { return err } } - if jobTitle == "" { - jobTitle, err = promptTrialInfo(inv, "jobTitle") + if trialInfo.JobTitle == "" { + trialInfo.JobTitle, err = promptTrialInfo(inv, "jobTitle") if err != nil { return err } } - if companyName == "" { - companyName, err = promptTrialInfo(inv, "companyName") + if trialInfo.CompanyName == "" { + trialInfo.CompanyName, err = promptTrialInfo(inv, "companyName") if err != nil { return err } } - if country == "" { - country, err = promptCountry(inv) + if trialInfo.Country == "" { + trialInfo.Country, err = promptCountry(inv) if err != nil { return err } } - if developers == "" { - developers, err = promptDevelopers(inv) + if trialInfo.Developers == "" { + trialInfo.Developers, err = promptDevelopers(inv) if err != nil { return err } @@ -321,20 +314,12 @@ func (r *RootCmd) login() *serpent.Command { } _, err = client.CreateFirstUser(ctx, codersdk.CreateFirstUserRequest{ - Email: email, - Username: username, - Name: name, - Password: password, - Trial: trial, - TrialInfo: codersdk.CreateFirstUserTrialInfo{ - FirstName: firstName, - LastName: lastName, - PhoneNumber: phoneNumber, - JobTitle: jobTitle, - CompanyName: companyName, - Country: country, - Developers: developers, - }, + Email: email, + Username: username, + Name: name, + Password: password, + Trial: trial, + TrialInfo: trialInfo, }) if err != nil { return xerrors.Errorf("create initial user: %w", err) @@ -460,48 +445,6 @@ func (r *RootCmd) login() *serpent.Command { Description: "By default, the CLI will generate a new session token when logging in. This flag will instead use the provided token as the session token.", Value: serpent.BoolOf(&useTokenForSession), }, - { - Flag: "first-user-first-name", - Env: "CODER_FIRST_USER_FIRST_NAME", - Description: "Specifies the first name of the user.", - Value: serpent.StringOf(&firstName), - }, - { - Flag: "first-user-last-name", - Env: "CODER_FIRST_USER_LAST_NAME", - Description: "Specifies the last name of the user.", - Value: serpent.StringOf(&lastName), - }, - { - Flag: "first-user-phone-number", - Env: "CODER_FIRST_USER_PHONE_NUMBER", - Description: "Specifies the phone number of the user.", - Value: serpent.StringOf(&phoneNumber), - }, - { - Flag: "first-user-job-title", - Env: "CODER_FIRST_USER_JOB_TITLE", - Description: "Specifies the job title of the user.", - Value: serpent.StringOf(&jobTitle), - }, - { - Flag: "first-user-company-name", - Env: "CODER_FIRST_USER_COMPANY_NAME", - Description: "Specifies the company name of the user.", - Value: serpent.StringOf(&companyName), - }, - { - Flag: "first-user-country", - Env: "CODER_FIRST_USER_COUNTRY", - Description: "Specifies the country of the user.", - Value: serpent.StringOf(&country), - }, - { - Flag: "first-user-developers", - Env: "CODER_FIRST_USER_DEVELOPERS", - Description: "Specifies the number of developers.", - Value: serpent.StringOf(&developers), - }, } return cmd } diff --git a/cli/login_test.go b/cli/login_test.go index 92df197d76551..9a86e7caad351 100644 --- a/cli/login_test.go +++ b/cli/login_test.go @@ -281,16 +281,20 @@ func TestLogin(t *testing.T) { "--first-user-email", coderdtest.FirstUserParams.Email, "--first-user-password", coderdtest.FirstUserParams.Password, "--first-user-trial", - "--first-user-first-name", coderdtest.TrialUserParams.FirstName, - "--first-user-last-name", coderdtest.TrialUserParams.LastName, - "--first-user-phone-number", coderdtest.TrialUserParams.PhoneNumber, - "--first-user-job-title", coderdtest.TrialUserParams.JobTitle, - "--first-user-company-name", coderdtest.TrialUserParams.CompanyName, - "--first-user-country", coderdtest.TrialUserParams.Country, - "--first-user-developers", coderdtest.TrialUserParams.Developers, ) pty := ptytest.New(t).Attach(inv) w := clitest.StartWithWaiter(t, inv) + pty.ExpectMatch("firstName") + pty.WriteLine(coderdtest.TrialUserParams.FirstName) + pty.ExpectMatch("lastName") + pty.WriteLine(coderdtest.TrialUserParams.LastName) + pty.ExpectMatch("phoneNumber") + pty.WriteLine(coderdtest.TrialUserParams.PhoneNumber) + pty.ExpectMatch("jobTitle") + pty.WriteLine(coderdtest.TrialUserParams.JobTitle) + pty.ExpectMatch("companyName") + pty.WriteLine(coderdtest.TrialUserParams.CompanyName) + // `developers` and `country` `cliui.Select` automatically selects the first option during tests. pty.ExpectMatch("Welcome to Coder") w.RequireSuccess() ctx := testutil.Context(t, testutil.WaitShort) @@ -316,17 +320,20 @@ func TestLogin(t *testing.T) { "--first-user-email", coderdtest.FirstUserParams.Email, "--first-user-password", coderdtest.FirstUserParams.Password, "--first-user-trial", - "--first-user-first-name", coderdtest.TrialUserParams.FirstName, - "--first-user-last-name", coderdtest.TrialUserParams.LastName, - "--first-user-phone-number", coderdtest.TrialUserParams.PhoneNumber, - "--first-user-job-title", coderdtest.TrialUserParams.JobTitle, - "--first-user-company-name", coderdtest.TrialUserParams.CompanyName, - "--first-user-country", coderdtest.TrialUserParams.Country, - "--first-user-developers", coderdtest.TrialUserParams.Developers, - // `developers` and `country` `cliui.Select` automatically selects the first option during tests. ) pty := ptytest.New(t).Attach(inv) w := clitest.StartWithWaiter(t, inv) + pty.ExpectMatch("firstName") + pty.WriteLine(coderdtest.TrialUserParams.FirstName) + pty.ExpectMatch("lastName") + pty.WriteLine(coderdtest.TrialUserParams.LastName) + pty.ExpectMatch("phoneNumber") + pty.WriteLine(coderdtest.TrialUserParams.PhoneNumber) + pty.ExpectMatch("jobTitle") + pty.WriteLine(coderdtest.TrialUserParams.JobTitle) + pty.ExpectMatch("companyName") + pty.WriteLine(coderdtest.TrialUserParams.CompanyName) + // `developers` and `country` `cliui.Select` automatically selects the first option during tests. pty.ExpectMatch("Welcome to Coder") w.RequireSuccess() ctx := testutil.Context(t, testutil.WaitShort) diff --git a/cli/testdata/coder_login_--help.golden b/cli/testdata/coder_login_--help.golden index 2ffb7522c2911..e4109a494ed39 100644 --- a/cli/testdata/coder_login_--help.golden +++ b/cli/testdata/coder_login_--help.golden @@ -6,38 +6,17 @@ USAGE: Authenticate with Coder deployment OPTIONS: - --first-user-company-name string, $CODER_FIRST_USER_COMPANY_NAME - Specifies the company name of the user. - - --first-user-country string, $CODER_FIRST_USER_COUNTRY - Specifies the country of the user. - - --first-user-developers string, $CODER_FIRST_USER_DEVELOPERS - Specifies the number of developers. - --first-user-email string, $CODER_FIRST_USER_EMAIL Specifies an email address to use if creating the first user for the deployment. - --first-user-first-name string, $CODER_FIRST_USER_FIRST_NAME - Specifies the first name of the user. - --first-user-full-name string, $CODER_FIRST_USER_FULL_NAME Specifies a human-readable name for the first user of the deployment. - --first-user-job-title string, $CODER_FIRST_USER_JOB_TITLE - Specifies the job title of the user. - - --first-user-last-name string, $CODER_FIRST_USER_LAST_NAME - Specifies the last name of the user. - --first-user-password string, $CODER_FIRST_USER_PASSWORD Specifies a password to use if creating the first user for the deployment. - --first-user-phone-number string, $CODER_FIRST_USER_PHONE_NUMBER - Specifies the phone number of the user. - --first-user-trial bool, $CODER_FIRST_USER_TRIAL Specifies whether a trial license should be provisioned for the Coder deployment or not. diff --git a/docs/reference/cli/login.md b/docs/reference/cli/login.md index 7ec3e201506cb..9a27e4a6357c8 100644 --- a/docs/reference/cli/login.md +++ b/docs/reference/cli/login.md @@ -64,66 +64,3 @@ Specifies whether a trial license should be provisioned for the Coder deployment | Type | bool | By default, the CLI will generate a new session token when logging in. This flag will instead use the provided token as the session token. - -### --first-user-first-name - -| | | -| ----------- | ----------------------------------------- | -| Type | string | -| Environment | $CODER_FIRST_USER_FIRST_NAME | - -Specifies the first name of the user. - -### --first-user-last-name - -| | | -| ----------- | ---------------------------------------- | -| Type | string | -| Environment | $CODER_FIRST_USER_LAST_NAME | - -Specifies the last name of the user. - -### --first-user-phone-number - -| | | -| ----------- | ------------------------------------------- | -| Type | string | -| Environment | $CODER_FIRST_USER_PHONE_NUMBER | - -Specifies the phone number of the user. - -### --first-user-job-title - -| | | -| ----------- | ---------------------------------------- | -| Type | string | -| Environment | $CODER_FIRST_USER_JOB_TITLE | - -Specifies the job title of the user. - -### --first-user-company-name - -| | | -| ----------- | ------------------------------------------- | -| Type | string | -| Environment | $CODER_FIRST_USER_COMPANY_NAME | - -Specifies the company name of the user. - -### --first-user-country - -| | | -| ----------- | -------------------------------------- | -| Type | string | -| Environment | $CODER_FIRST_USER_COUNTRY | - -Specifies the country of the user. - -### --first-user-developers - -| | | -| ----------- | ----------------------------------------- | -| Type | string | -| Environment | $CODER_FIRST_USER_DEVELOPERS | - -Specifies the number of developers. From 2ed44c823f2a6636afe17bcd02cb1ffad57fe99e Mon Sep 17 00:00:00 2001 From: joobisb Date: Wed, 16 Oct 2024 13:48:34 +0530 Subject: [PATCH 3/9] set first-user-trial to false in deploy-pr workflow --- .github/workflows/pr-deploy.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/pr-deploy.yaml b/.github/workflows/pr-deploy.yaml index 1e7de50d2b21d..6b6cf1e18b2f3 100644 --- a/.github/workflows/pr-deploy.yaml +++ b/.github/workflows/pr-deploy.yaml @@ -410,7 +410,7 @@ jobs: --first-user-username coder \ --first-user-email pr${{ env.PR_NUMBER }}@coder.com \ --first-user-password $password \ - --first-user-trial \ + --first-user-trial=false \ --use-token-as-session \ https://${{ env.PR_HOSTNAME }} From 411d7d0f947d0b590dd0a2f6cc75372280685783 Mon Sep 17 00:00:00 2001 From: joobisb Date: Thu, 17 Oct 2024 14:24:57 +0530 Subject: [PATCH 4/9] fix typo --- cli/login.go | 2 +- site/src/pages/SetupPage/countries.tsx | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/cli/login.go b/cli/login.go index a4dcca7c66c52..3bb4f0796e4a5 100644 --- a/cli/login.go +++ b/cli/login.go @@ -555,7 +555,7 @@ func promptCountry(inv *serpent.Invocation) (string, error) { "Sudan", "Suriname", "Svalbard and Jan Mayen", "Swaziland", "Sweden", "Switzerland", "Syrian Arab Republic", "Taiwan, Province of China", "Tajikistan", "Tanzania, United Republic of", "Thailand", "Timor-Leste", "Togo", "Tokelau", "Tonga", "Trinidad and Tobago", "Tunisia", "Turkey", "Turkmenistan", "Turks and Caicos Islands", "Tuvalu", "Uganda", "Ukraine", "United Arab Emirates", "United Kingdom", "United States", "United States Minor Outlying Islands", "Uruguay", "Uzbekistan", "Vanuatu", - "Venezuela, Bolivarian Republic of", "Viet Nam", "Virgin Islands, British", "Virgin Islands, U.S.", "Wallis and Futuna", "Western Sahara", "Yemen", "Zambia", "Zimbabwe", + "Venezuela, Bolivarian Republic of", "Vietnam", "Virgin Islands, British", "Virgin Islands, U.S.", "Wallis and Futuna", "Western Sahara", "Yemen", "Zambia", "Zimbabwe", } selection, err := cliui.Select(inv, cliui.SelectOptions{ diff --git a/site/src/pages/SetupPage/countries.tsx b/site/src/pages/SetupPage/countries.tsx index 0fcebc25ac54d..9b13b6b6be0d9 100644 --- a/site/src/pages/SetupPage/countries.tsx +++ b/site/src/pages/SetupPage/countries.tsx @@ -964,7 +964,7 @@ export const countries = [ flag: "🇻🇪", }, { - name: "Viet Nam", + name: "Vietnam", flag: "🇻🇳", }, { From 10d718f7be73836ac08593d0f201379ab5665b08 Mon Sep 17 00:00:00 2001 From: joobisb Date: Thu, 17 Oct 2024 17:14:10 +0530 Subject: [PATCH 5/9] set first-user-trial to false in develop.sh --- scripts/develop.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scripts/develop.sh b/scripts/develop.sh index bdaf81c7536e5..7dfad72d2e9f6 100755 --- a/scripts/develop.sh +++ b/scripts/develop.sh @@ -164,7 +164,7 @@ fatal() { if [ ! -f "${PROJECT_ROOT}/.coderv2/developsh-did-first-setup" ]; then # Try to create the initial admin user. - if "${CODER_DEV_SHIM}" login http://127.0.0.1:3000 --first-user-username=admin --first-user-email=admin@coder.com --first-user-password="${password}" --first-user-full-name="Admin User" --first-user-trial=true; then + if "${CODER_DEV_SHIM}" login http://127.0.0.1:3000 --first-user-username=admin --first-user-email=admin@coder.com --first-user-password="${password}" --first-user-full-name="Admin User" --first-user-trial=false; then # Only create this file if an admin user was successfully # created, otherwise we won't retry on a later attempt. touch "${PROJECT_ROOT}/.coderv2/developsh-did-first-setup" From 86e1b923fba74abfb46ad0c36f61fa82152f3d11 Mon Sep 17 00:00:00 2001 From: joobi-keyvalue Date: Fri, 18 Oct 2024 18:10:12 +0530 Subject: [PATCH 6/9] chore: generate countries.tsx from go code --- cli/login.go | 31 +-- codersdk/countries.go | 259 +++++++++++++++++++++ scripts/apitypings/main.go | 33 +++ scripts/apitypings/main_test.go | 34 +++ site/src/api/typesGenerated.ts | 254 ++++++++++++++++++++ site/src/pages/SetupPage/SetupPageView.tsx | 2 +- 6 files changed, 585 insertions(+), 28 deletions(-) create mode 100644 codersdk/countries.go diff --git a/cli/login.go b/cli/login.go index 3bb4f0796e4a5..591cf66e62418 100644 --- a/cli/login.go +++ b/cli/login.go @@ -530,36 +530,13 @@ func promptDevelopers(inv *serpent.Invocation) (string, error) { } func promptCountry(inv *serpent.Invocation) (string, error) { - countries := []string{ - "Afghanistan", "Åland Islands", "Albania", "Algeria", "American Samoa", "Andorra", "Angola", "Anguilla", "Antarctica", "Antigua and Barbuda", - "Argentina", "Armenia", "Aruba", "Australia", "Austria", "Azerbaijan", "Bahamas", "Bahrain", "Bangladesh", "Barbados", - "Belarus", "Belgium", "Belize", "Benin", "Bermuda", "Bhutan", "Bolivia, Plurinational State of", "Bonaire, Sint Eustatius and Saba", "Bosnia and Herzegovina", "Botswana", - "Bouvet Island", "Brazil", "British Indian Ocean Territory", "Brunei Darussalam", "Bulgaria", "Burkina Faso", "Burundi", "Cambodia", "Cameroon", "Canada", - "Cape Verde", "Cayman Islands", "Central African Republic", "Chad", "Chile", "China", "Christmas Island", "Cocos (Keeling) Islands", "Colombia", "Comoros", - "Congo", "Congo, the Democratic Republic of the", "Cook Islands", "Costa Rica", "Côte d'Ivoire", "Croatia", "Cuba", "Curaçao", "Cyprus", "Czech Republic", - "Denmark", "Djibouti", "Dominica", "Dominican Republic", "Ecuador", "Egypt", "El Salvador", "Equatorial Guinea", "Eritrea", "Estonia", - "Ethiopia", "Falkland Islands (Malvinas)", "Faroe Islands", "Fiji", "Finland", "France", "French Guiana", "French Polynesia", "French Southern Territories", "Gabon", - "Gambia", "Georgia", "Germany", "Ghana", "Gibraltar", "Greece", "Greenland", "Grenada", "Guadeloupe", "Guam", - "Guatemala", "Guernsey", "Guinea", "Guinea-Bissau", "Guyana", "Haiti", "Heard Island and McDonald Islands", "Holy See (Vatican City State)", "Honduras", "Hong Kong", - "Hungary", "Iceland", "India", "Indonesia", "Iran, Islamic Republic of", "Iraq", "Ireland", "Isle of Man", "Israel", "Italy", - "Jamaica", "Japan", "Jersey", "Jordan", "Kazakhstan", "Kenya", "Kiribati", "Korea, Democratic People's Republic of", "Korea, Republic of", "Kuwait", - "Kyrgyzstan", "Lao People's Democratic Republic", "Latvia", "Lebanon", "Lesotho", "Liberia", "Libya", "Liechtenstein", "Lithuania", "Luxembourg", - "Macao", "Macedonia, the Former Yugoslav Republic of", "Madagascar", "Malawi", "Malaysia", "Maldives", "Mali", "Malta", "Marshall Islands", "Martinique", - "Mauritania", "Mauritius", "Mayotte", "Mexico", "Micronesia, Federated States of", "Moldova, Republic of", "Monaco", "Mongolia", "Montenegro", "Montserrat", - "Morocco", "Mozambique", "Myanmar", "Namibia", "Nauru", "Nepal", "Netherlands", "New Caledonia", "New Zealand", "Nicaragua", - "Niger", "Nigeria", "Niue", "Norfolk Island", "Northern Mariana Islands", "Norway", "Oman", "Pakistan", "Palau", "Palestine, State of", - "Panama", "Papua New Guinea", "Paraguay", "Peru", "Philippines", "Pitcairn", "Poland", "Portugal", "Puerto Rico", "Qatar", - "Réunion", "Romania", "Russian Federation", "Rwanda", "Saint Barthélemy", "Saint Helena, Ascension and Tristan da Cunha", "Saint Kitts and Nevis", "Saint Lucia", "Saint Martin (French part)", "Saint Pierre and Miquelon", - "Saint Vincent and the Grenadines", "Samoa", "San Marino", "Sao Tome and Principe", "Saudi Arabia", "Senegal", "Serbia", "Seychelles", "Sierra Leone", "Singapore", - "Sint Maarten (Dutch part)", "Slovakia", "Slovenia", "Solomon Islands", "Somalia", "South Africa", "South Georgia and the South Sandwich Islands", "South Sudan", "Spain", "Sri Lanka", - "Sudan", "Suriname", "Svalbard and Jan Mayen", "Swaziland", "Sweden", "Switzerland", "Syrian Arab Republic", "Taiwan, Province of China", "Tajikistan", "Tanzania, United Republic of", - "Thailand", "Timor-Leste", "Togo", "Tokelau", "Tonga", "Trinidad and Tobago", "Tunisia", "Turkey", "Turkmenistan", "Turks and Caicos Islands", - "Tuvalu", "Uganda", "Ukraine", "United Arab Emirates", "United Kingdom", "United States", "United States Minor Outlying Islands", "Uruguay", "Uzbekistan", "Vanuatu", - "Venezuela, Bolivarian Republic of", "Vietnam", "Virgin Islands, British", "Virgin Islands, U.S.", "Wallis and Futuna", "Western Sahara", "Yemen", "Zambia", "Zimbabwe", + options := make([]string, len(codersdk.Countries)) + for i, country := range codersdk.Countries { + options[i] = country.Name } selection, err := cliui.Select(inv, cliui.SelectOptions{ - Options: countries, + Options: options, Message: "Select the country:", HideSearch: false, }) diff --git a/codersdk/countries.go b/codersdk/countries.go new file mode 100644 index 0000000000000..65c3e9b1e8e5e --- /dev/null +++ b/codersdk/countries.go @@ -0,0 +1,259 @@ +package codersdk + +var Countries = []Country{ + {Name: "Afghanistan", Flag: "🇦🇫"}, + {Name: "Åland Islands", Flag: "🇦🇽"}, + {Name: "Albania", Flag: "🇦🇱"}, + {Name: "Algeria", Flag: "🇩🇿"}, + {Name: "American Samoa", Flag: "🇦🇸"}, + {Name: "Andorra", Flag: "🇦🇩"}, + {Name: "Angola", Flag: "🇦🇴"}, + {Name: "Anguilla", Flag: "🇦🇮"}, + {Name: "Antarctica", Flag: "🇦🇶"}, + {Name: "Antigua and Barbuda", Flag: "🇦🇬"}, + {Name: "Argentina", Flag: "🇦🇷"}, + {Name: "Armenia", Flag: "🇦🇲"}, + {Name: "Aruba", Flag: "🇦🇼"}, + {Name: "Australia", Flag: "🇦🇺"}, + {Name: "Austria", Flag: "🇦🇹"}, + {Name: "Azerbaijan", Flag: "🇦🇿"}, + {Name: "Bahamas", Flag: "🇧🇸"}, + {Name: "Bahrain", Flag: "🇧🇭"}, + {Name: "Bangladesh", Flag: "🇧🇩"}, + {Name: "Barbados", Flag: "🇧🇧"}, + {Name: "Belarus", Flag: "🇧🇾"}, + {Name: "Belgium", Flag: "🇧🇪"}, + {Name: "Belize", Flag: "🇧🇿"}, + {Name: "Benin", Flag: "🇧🇯"}, + {Name: "Bermuda", Flag: "🇧🇲"}, + {Name: "Bhutan", Flag: "🇧🇹"}, + {Name: "Bolivia, Plurinational State of", Flag: "🇧🇴"}, + {Name: "Bonaire, Sint Eustatius and Saba", Flag: "🇧🇶"}, + {Name: "Bosnia and Herzegovina", Flag: "🇧🇦"}, + {Name: "Botswana", Flag: "🇧🇼"}, + {Name: "Bouvet Island", Flag: "🇧🇻"}, + {Name: "Brazil", Flag: "🇧🇷"}, + {Name: "British Indian Ocean Territory", Flag: "🇮🇴"}, + {Name: "Brunei Darussalam", Flag: "🇧🇳"}, + {Name: "Bulgaria", Flag: "🇧🇬"}, + {Name: "Burkina Faso", Flag: "🇧🇫"}, + {Name: "Burundi", Flag: "🇧🇮"}, + {Name: "Cambodia", Flag: "🇰🇭"}, + {Name: "Cameroon", Flag: "🇨🇲"}, + {Name: "Canada", Flag: "🇨🇦"}, + {Name: "Cape Verde", Flag: "🇨🇻"}, + {Name: "Cayman Islands", Flag: "🇰🇾"}, + {Name: "Central African Republic", Flag: "🇨🇫"}, + {Name: "Chad", Flag: "🇹🇩"}, + {Name: "Chile", Flag: "🇨🇱"}, + {Name: "China", Flag: "🇨🇳"}, + {Name: "Christmas Island", Flag: "🇨🇽"}, + {Name: "Cocos (Keeling) Islands", Flag: "🇨🇨"}, + {Name: "Colombia", Flag: "🇨🇴"}, + {Name: "Comoros", Flag: "🇰🇲"}, + {Name: "Congo", Flag: "🇨🇬"}, + {Name: "Congo, the Democratic Republic of the", Flag: "🇨🇩"}, + {Name: "Cook Islands", Flag: "🇨🇰"}, + {Name: "Costa Rica", Flag: "🇨🇷"}, + {Name: "Côte d'Ivoire", Flag: "🇨🇮"}, + {Name: "Croatia", Flag: "🇭🇷"}, + {Name: "Cuba", Flag: "🇨🇺"}, + {Name: "Curaçao", Flag: "🇨🇼"}, + {Name: "Cyprus", Flag: "🇨🇾"}, + {Name: "Czech Republic", Flag: "🇨🇿"}, + {Name: "Denmark", Flag: "🇩🇰"}, + {Name: "Djibouti", Flag: "🇩🇯"}, + {Name: "Dominica", Flag: "🇩🇲"}, + {Name: "Dominican Republic", Flag: "🇩🇴"}, + {Name: "Ecuador", Flag: "🇪🇨"}, + {Name: "Egypt", Flag: "🇪🇬"}, + {Name: "El Salvador", Flag: "🇸🇻"}, + {Name: "Equatorial Guinea", Flag: "🇬🇶"}, + {Name: "Eritrea", Flag: "🇪🇷"}, + {Name: "Estonia", Flag: "🇪🇪"}, + {Name: "Ethiopia", Flag: "🇪🇹"}, + {Name: "Falkland Islands (Malvinas)", Flag: "🇫🇰"}, + {Name: "Faroe Islands", Flag: "🇫🇴"}, + {Name: "Fiji", Flag: "🇫🇯"}, + {Name: "Finland", Flag: "🇫🇮"}, + {Name: "France", Flag: "🇫🇷"}, + {Name: "French Guiana", Flag: "🇬🇫"}, + {Name: "French Polynesia", Flag: "🇵🇫"}, + {Name: "French Southern Territories", Flag: "🇹🇫"}, + {Name: "Gabon", Flag: "🇬🇦"}, + {Name: "Gambia", Flag: "🇬🇲"}, + {Name: "Georgia", Flag: "🇬🇪"}, + {Name: "Germany", Flag: "🇩🇪"}, + {Name: "Ghana", Flag: "🇬🇭"}, + {Name: "Gibraltar", Flag: "🇬🇮"}, + {Name: "Greece", Flag: "🇬🇷"}, + {Name: "Greenland", Flag: "🇬🇱"}, + {Name: "Grenada", Flag: "🇬🇩"}, + {Name: "Guadeloupe", Flag: "🇬🇵"}, + {Name: "Guam", Flag: "🇬🇺"}, + {Name: "Guatemala", Flag: "🇬🇹"}, + {Name: "Guernsey", Flag: "🇬🇬"}, + {Name: "Guinea", Flag: "🇬🇳"}, + {Name: "Guinea-Bissau", Flag: "🇬🇼"}, + {Name: "Guyana", Flag: "🇬🇾"}, + {Name: "Haiti", Flag: "🇭🇹"}, + {Name: "Heard Island and McDonald Islands", Flag: "🇭🇲"}, + {Name: "Holy See (Vatican City State)", Flag: "🇻🇦"}, + {Name: "Honduras", Flag: "🇭🇳"}, + {Name: "Hong Kong", Flag: "🇭🇰"}, + {Name: "Hungary", Flag: "🇭🇺"}, + {Name: "Iceland", Flag: "🇮🇸"}, + {Name: "India", Flag: "🇮🇳"}, + {Name: "Indonesia", Flag: "🇮🇩"}, + {Name: "Iran, Islamic Republic of", Flag: "🇮🇷"}, + {Name: "Iraq", Flag: "🇮🇶"}, + {Name: "Ireland", Flag: "🇮🇪"}, + {Name: "Isle of Man", Flag: "🇮🇲"}, + {Name: "Israel", Flag: "🇮🇱"}, + {Name: "Italy", Flag: "🇮🇹"}, + {Name: "Jamaica", Flag: "🇯🇲"}, + {Name: "Japan", Flag: "🇯🇵"}, + {Name: "Jersey", Flag: "🇯🇪"}, + {Name: "Jordan", Flag: "🇯🇴"}, + {Name: "Kazakhstan", Flag: "🇰🇿"}, + {Name: "Kenya", Flag: "🇰🇪"}, + {Name: "Kiribati", Flag: "🇰🇮"}, + {Name: "Korea, Democratic People's Republic of", Flag: "🇰🇵"}, + {Name: "Korea, Republic of", Flag: "🇰🇷"}, + {Name: "Kuwait", Flag: "🇰🇼"}, + {Name: "Kyrgyzstan", Flag: "🇰🇬"}, + {Name: "Lao People's Democratic Republic", Flag: "🇱🇦"}, + {Name: "Latvia", Flag: "🇱🇻"}, + {Name: "Lebanon", Flag: "🇱🇧"}, + {Name: "Lesotho", Flag: "🇱🇸"}, + {Name: "Liberia", Flag: "🇱🇷"}, + {Name: "Libya", Flag: "🇱🇾"}, + {Name: "Liechtenstein", Flag: "🇱🇮"}, + {Name: "Lithuania", Flag: "🇱🇹"}, + {Name: "Luxembourg", Flag: "🇱🇺"}, + {Name: "Macao", Flag: "🇲🇴"}, + {Name: "Macedonia, the Former Yugoslav Republic of", Flag: "🇲🇰"}, + {Name: "Madagascar", Flag: "🇲🇬"}, + {Name: "Malawi", Flag: "🇲🇼"}, + {Name: "Malaysia", Flag: "🇲🇾"}, + {Name: "Maldives", Flag: "🇲🇻"}, + {Name: "Mali", Flag: "🇲🇱"}, + {Name: "Malta", Flag: "🇲🇹"}, + {Name: "Marshall Islands", Flag: "🇲🇭"}, + {Name: "Martinique", Flag: "🇲🇶"}, + {Name: "Mauritania", Flag: "🇲🇷"}, + {Name: "Mauritius", Flag: "🇲🇺"}, + {Name: "Mayotte", Flag: "🇾🇹"}, + {Name: "Mexico", Flag: "🇲🇽"}, + {Name: "Micronesia, Federated States of", Flag: "🇫🇲"}, + {Name: "Moldova, Republic of", Flag: "🇲🇩"}, + {Name: "Monaco", Flag: "🇲🇨"}, + {Name: "Mongolia", Flag: "🇲🇳"}, + {Name: "Montenegro", Flag: "🇲🇪"}, + {Name: "Montserrat", Flag: "🇲🇸"}, + {Name: "Morocco", Flag: "🇲🇦"}, + {Name: "Mozambique", Flag: "🇲🇿"}, + {Name: "Myanmar", Flag: "🇲🇲"}, + {Name: "Namibia", Flag: "🇳🇦"}, + {Name: "Nauru", Flag: "🇳🇷"}, + {Name: "Nepal", Flag: "🇳🇵"}, + {Name: "Netherlands", Flag: "🇳🇱"}, + {Name: "New Caledonia", Flag: "🇳🇨"}, + {Name: "New Zealand", Flag: "🇳🇿"}, + {Name: "Nicaragua", Flag: "🇳🇮"}, + {Name: "Niger", Flag: "🇳🇪"}, + {Name: "Nigeria", Flag: "🇳🇬"}, + {Name: "Niue", Flag: "🇳🇺"}, + {Name: "Norfolk Island", Flag: "🇳🇫"}, + {Name: "Northern Mariana Islands", Flag: "🇲🇵"}, + {Name: "Norway", Flag: "🇳🇴"}, + {Name: "Oman", Flag: "🇴🇲"}, + {Name: "Pakistan", Flag: "🇵🇰"}, + {Name: "Palau", Flag: "🇵🇼"}, + {Name: "Palestine, State of", Flag: "🇵🇸"}, + {Name: "Panama", Flag: "🇵🇦"}, + {Name: "Papua New Guinea", Flag: "🇵🇬"}, + {Name: "Paraguay", Flag: "🇵🇾"}, + {Name: "Peru", Flag: "🇵🇪"}, + {Name: "Philippines", Flag: "🇵🇭"}, + {Name: "Pitcairn", Flag: "🇵🇳"}, + {Name: "Poland", Flag: "🇵🇱"}, + {Name: "Portugal", Flag: "🇵🇹"}, + {Name: "Puerto Rico", Flag: "🇵🇷"}, + {Name: "Qatar", Flag: "🇶🇦"}, + {Name: "Réunion", Flag: "🇷🇪"}, + {Name: "Romania", Flag: "🇷🇴"}, + {Name: "Russian Federation", Flag: "🇷🇺"}, + {Name: "Rwanda", Flag: "🇷🇼"}, + {Name: "Saint Barthélemy", Flag: "🇧🇱"}, + {Name: "Saint Helena, Ascension and Tristan da Cunha", Flag: "🇸🇭"}, + {Name: "Saint Kitts and Nevis", Flag: "🇰🇳"}, + {Name: "Saint Lucia", Flag: "🇱🇨"}, + {Name: "Saint Martin (French part)", Flag: "🇲🇫"}, + {Name: "Saint Pierre and Miquelon", Flag: "🇵🇲"}, + {Name: "Saint Vincent and the Grenadines", Flag: "🇻🇨"}, + {Name: "Samoa", Flag: "🇼🇸"}, + {Name: "San Marino", Flag: "🇸🇲"}, + {Name: "Sao Tome and Principe", Flag: "🇸🇹"}, + {Name: "Saudi Arabia", Flag: "🇸🇦"}, + {Name: "Senegal", Flag: "🇸🇳"}, + {Name: "Serbia", Flag: "🇷🇸"}, + {Name: "Seychelles", Flag: "🇸🇨"}, + {Name: "Sierra Leone", Flag: "🇸🇱"}, + {Name: "Singapore", Flag: "🇸🇬"}, + {Name: "Sint Maarten (Dutch part)", Flag: "🇸🇽"}, + {Name: "Slovakia", Flag: "🇸🇰"}, + {Name: "Slovenia", Flag: "🇸🇮"}, + {Name: "Solomon Islands", Flag: "🇸🇧"}, + {Name: "Somalia", Flag: "🇸🇴"}, + {Name: "South Africa", Flag: "🇿🇦"}, + {Name: "South Georgia and the South Sandwich Islands", Flag: "🇬🇸"}, + {Name: "South Sudan", Flag: "🇸🇸"}, + {Name: "Spain", Flag: "🇪🇸"}, + {Name: "Sri Lanka", Flag: "🇱🇰"}, + {Name: "Sudan", Flag: "🇸🇩"}, + {Name: "Suriname", Flag: "🇸🇷"}, + {Name: "Svalbard and Jan Mayen", Flag: "🇸🇯"}, + {Name: "Swaziland", Flag: "🇸🇿"}, + {Name: "Sweden", Flag: "🇸🇪"}, + {Name: "Switzerland", Flag: "🇨🇭"}, + {Name: "Syrian Arab Republic", Flag: "🇸🇾"}, + {Name: "Taiwan, Province of China", Flag: "🇹🇼"}, + {Name: "Tajikistan", Flag: "🇹🇯"}, + {Name: "Tanzania, United Republic of", Flag: "🇹🇿"}, + {Name: "Thailand", Flag: "🇹🇭"}, + {Name: "Timor-Leste", Flag: "🇹🇱"}, + {Name: "Togo", Flag: "🇹🇬"}, + {Name: "Tokelau", Flag: "🇹🇰"}, + {Name: "Tonga", Flag: "🇹🇴"}, + {Name: "Trinidad and Tobago", Flag: "🇹🇹"}, + {Name: "Tunisia", Flag: "🇹🇳"}, + {Name: "Turkey", Flag: "🇹🇷"}, + {Name: "Turkmenistan", Flag: "🇹🇲"}, + {Name: "Turks and Caicos Islands", Flag: "🇹🇨"}, + {Name: "Tuvalu", Flag: "🇹🇻"}, + {Name: "Uganda", Flag: "🇺🇬"}, + {Name: "Ukraine", Flag: "🇺🇦"}, + {Name: "United Arab Emirates", Flag: "🇦🇪"}, + {Name: "United Kingdom", Flag: "🇬🇧"}, + {Name: "United States", Flag: "🇺🇸"}, + {Name: "United States Minor Outlying Islands", Flag: "🇺🇲"}, + {Name: "Uruguay", Flag: "🇺🇾"}, + {Name: "Uzbekistan", Flag: "🇺🇿"}, + {Name: "Vanuatu", Flag: "🇻🇺"}, + {Name: "Venezuela, Bolivarian Republic of", Flag: "🇻🇪"}, + {Name: "Vietnam", Flag: "🇻🇳"}, + {Name: "Virgin Islands, British", Flag: "🇻🇬"}, + {Name: "Virgin Islands, U.S.", Flag: "🇻🇮"}, + {Name: "Wallis and Futuna", Flag: "🇼🇫"}, + {Name: "Western Sahara", Flag: "🇪🇭"}, + {Name: "Yemen", Flag: "🇾🇪"}, + {Name: "Zambia", Flag: "🇿🇲"}, + {Name: "Zimbabwe", Flag: "🇿🇼"}, +} + +// @typescript-ignore Country +type Country struct { + Name string `json:"name"` + Flag string `json:"flag"` +} diff --git a/scripts/apitypings/main.go b/scripts/apitypings/main.go index a7abf676755a9..caf956fa7efae 100644 --- a/scripts/apitypings/main.go +++ b/scripts/apitypings/main.go @@ -3,6 +3,7 @@ package main import ( "bytes" "context" + "encoding/json" "fmt" "go/types" "os" @@ -24,6 +25,7 @@ import ( "cdr.dev/slog" "cdr.dev/slog/sloggers/sloghuman" "github.com/coder/coder/v2/coderd/util/slice" + "github.com/coder/coder/v2/codersdk" ) var ( @@ -57,6 +59,14 @@ func main() { } _, _ = fmt.Print("// Code generated by 'make site/src/api/typesGenerated.ts'. DO NOT EDIT.\n\n") + + countriesTS, err := generateSliceOfObjectsTypeScript("countries", codersdk.Countries) + if err != nil { + log.Fatal(ctx, fmt.Sprintf("generate countries typeScript: %s", err.Error())) + } + _, _ = fmt.Print("// The code below is generated from codersdk/countries.go.\n") + _, _ = fmt.Print(countriesTS, "\n") + for _, baseDir := range baseDirs { _, _ = fmt.Printf("// The code below is generated from %s.\n\n", strings.TrimPrefix(baseDir, "./")) output, err := Generate(baseDir, external...) @@ -1105,3 +1115,26 @@ func (Generator) isBuiltIn(name string) (bool, string) { func indentedComment(comment string) string { return fmt.Sprintf("%s// %s", indent, comment) } + +func generateSliceOfObjectsTypeScript(name string, data interface{}) (string, error) { + var sb strings.Builder + _, _ = sb.WriteString(fmt.Sprintf("export const %s = [\n", name)) + + val := reflect.ValueOf(data) + if val.Kind() != reflect.Slice { + return "", xerrors.New("data must be a slice") + } + + for i := 0; i < val.Len(); i++ { + item := val.Index(i).Interface() + jsonBytes, err := json.Marshal(item) + if err != nil { + return "", xerrors.Errorf("marshal item: %w", err) + } + _, _ = sb.WriteString("\t") + _, _ = sb.Write(jsonBytes) + _, _ = sb.WriteString(",\n") + } + _, _ = sb.WriteString("]\n\n") + return sb.String(), nil +} diff --git a/scripts/apitypings/main_test.go b/scripts/apitypings/main_test.go index 7dd5de6d19f1e..a41f628db7c6e 100644 --- a/scripts/apitypings/main_test.go +++ b/scripts/apitypings/main_test.go @@ -8,6 +8,7 @@ package main import ( "flag" + "fmt" "os" "path/filepath" "strings" @@ -51,3 +52,36 @@ func TestGeneration(t *testing.T) { }) } } + +func TestGenerateSliceOfObjectsTypeScript(t *testing.T) { + + t.Run("Valid slice input", func(t *testing.T) { + t.Parallel() + type testObject struct { + Name string `json:"name"` + Value int `json:"value"` + } + + testData := []testObject{ + {Name: "Item1", Value: 1}, + {Name: "Item2", Value: 2}, + {Name: "Item3", Value: 3}, + } + + expected := fmt.Sprintf(`export const testObjects = [ + {"name":"Item1","value":1}, + {"name":"Item2","value":2}, + {"name":"Item3","value":3},%s]%s%s`, "\n", "\n", "\n") + + result, err := generateSliceOfObjectsTypeScript("testObjects", testData) + require.NoError(t, err, "generate slice of objects") + require.Equal(t, expected, result, "generated TypeScript matches expected output") + }) + + t.Run("Invalid non-slice input", func(t *testing.T) { + t.Parallel() + _, err := generateSliceOfObjectsTypeScript("invalidData", "not a slice") + require.Error(t, err, "should return error for non-slice input") + require.Contains(t, err.Error(), "data must be a slice", "error message should indicate invalid input type") + }) +} diff --git a/site/src/api/typesGenerated.ts b/site/src/api/typesGenerated.ts index 76be331a526cf..828a824301ab6 100644 --- a/site/src/api/typesGenerated.ts +++ b/site/src/api/typesGenerated.ts @@ -1,5 +1,259 @@ // Code generated by 'make site/src/api/typesGenerated.ts'. DO NOT EDIT. +// The code below is generated from codersdk/countries.go. +export const countries = [ + {"name":"Afghanistan","flag":"🇦🇫"}, + {"name":"Åland Islands","flag":"🇦🇽"}, + {"name":"Albania","flag":"🇦🇱"}, + {"name":"Algeria","flag":"🇩🇿"}, + {"name":"American Samoa","flag":"🇦🇸"}, + {"name":"Andorra","flag":"🇦🇩"}, + {"name":"Angola","flag":"🇦🇴"}, + {"name":"Anguilla","flag":"🇦🇮"}, + {"name":"Antarctica","flag":"🇦🇶"}, + {"name":"Antigua and Barbuda","flag":"🇦🇬"}, + {"name":"Argentina","flag":"🇦🇷"}, + {"name":"Armenia","flag":"🇦🇲"}, + {"name":"Aruba","flag":"🇦🇼"}, + {"name":"Australia","flag":"🇦🇺"}, + {"name":"Austria","flag":"🇦🇹"}, + {"name":"Azerbaijan","flag":"🇦🇿"}, + {"name":"Bahamas","flag":"🇧🇸"}, + {"name":"Bahrain","flag":"🇧🇭"}, + {"name":"Bangladesh","flag":"🇧🇩"}, + {"name":"Barbados","flag":"🇧🇧"}, + {"name":"Belarus","flag":"🇧🇾"}, + {"name":"Belgium","flag":"🇧🇪"}, + {"name":"Belize","flag":"🇧🇿"}, + {"name":"Benin","flag":"🇧🇯"}, + {"name":"Bermuda","flag":"🇧🇲"}, + {"name":"Bhutan","flag":"🇧🇹"}, + {"name":"Bolivia, Plurinational State of","flag":"🇧🇴"}, + {"name":"Bonaire, Sint Eustatius and Saba","flag":"🇧🇶"}, + {"name":"Bosnia and Herzegovina","flag":"🇧🇦"}, + {"name":"Botswana","flag":"🇧🇼"}, + {"name":"Bouvet Island","flag":"🇧🇻"}, + {"name":"Brazil","flag":"🇧🇷"}, + {"name":"British Indian Ocean Territory","flag":"🇮🇴"}, + {"name":"Brunei Darussalam","flag":"🇧🇳"}, + {"name":"Bulgaria","flag":"🇧🇬"}, + {"name":"Burkina Faso","flag":"🇧🇫"}, + {"name":"Burundi","flag":"🇧🇮"}, + {"name":"Cambodia","flag":"🇰🇭"}, + {"name":"Cameroon","flag":"🇨🇲"}, + {"name":"Canada","flag":"🇨🇦"}, + {"name":"Cape Verde","flag":"🇨🇻"}, + {"name":"Cayman Islands","flag":"🇰🇾"}, + {"name":"Central African Republic","flag":"🇨🇫"}, + {"name":"Chad","flag":"🇹🇩"}, + {"name":"Chile","flag":"🇨🇱"}, + {"name":"China","flag":"🇨🇳"}, + {"name":"Christmas Island","flag":"🇨🇽"}, + {"name":"Cocos (Keeling) Islands","flag":"🇨🇨"}, + {"name":"Colombia","flag":"🇨🇴"}, + {"name":"Comoros","flag":"🇰🇲"}, + {"name":"Congo","flag":"🇨🇬"}, + {"name":"Congo, the Democratic Republic of the","flag":"🇨🇩"}, + {"name":"Cook Islands","flag":"🇨🇰"}, + {"name":"Costa Rica","flag":"🇨🇷"}, + {"name":"Côte d'Ivoire","flag":"🇨🇮"}, + {"name":"Croatia","flag":"🇭🇷"}, + {"name":"Cuba","flag":"🇨🇺"}, + {"name":"Curaçao","flag":"🇨🇼"}, + {"name":"Cyprus","flag":"🇨🇾"}, + {"name":"Czech Republic","flag":"🇨🇿"}, + {"name":"Denmark","flag":"🇩🇰"}, + {"name":"Djibouti","flag":"🇩🇯"}, + {"name":"Dominica","flag":"🇩🇲"}, + {"name":"Dominican Republic","flag":"🇩🇴"}, + {"name":"Ecuador","flag":"🇪🇨"}, + {"name":"Egypt","flag":"🇪🇬"}, + {"name":"El Salvador","flag":"🇸🇻"}, + {"name":"Equatorial Guinea","flag":"🇬🇶"}, + {"name":"Eritrea","flag":"🇪🇷"}, + {"name":"Estonia","flag":"🇪🇪"}, + {"name":"Ethiopia","flag":"🇪🇹"}, + {"name":"Falkland Islands (Malvinas)","flag":"🇫🇰"}, + {"name":"Faroe Islands","flag":"🇫🇴"}, + {"name":"Fiji","flag":"🇫🇯"}, + {"name":"Finland","flag":"🇫🇮"}, + {"name":"France","flag":"🇫🇷"}, + {"name":"French Guiana","flag":"🇬🇫"}, + {"name":"French Polynesia","flag":"🇵🇫"}, + {"name":"French Southern Territories","flag":"🇹🇫"}, + {"name":"Gabon","flag":"🇬🇦"}, + {"name":"Gambia","flag":"🇬🇲"}, + {"name":"Georgia","flag":"🇬🇪"}, + {"name":"Germany","flag":"🇩🇪"}, + {"name":"Ghana","flag":"🇬🇭"}, + {"name":"Gibraltar","flag":"🇬🇮"}, + {"name":"Greece","flag":"🇬🇷"}, + {"name":"Greenland","flag":"🇬🇱"}, + {"name":"Grenada","flag":"🇬🇩"}, + {"name":"Guadeloupe","flag":"🇬🇵"}, + {"name":"Guam","flag":"🇬🇺"}, + {"name":"Guatemala","flag":"🇬🇹"}, + {"name":"Guernsey","flag":"🇬🇬"}, + {"name":"Guinea","flag":"🇬🇳"}, + {"name":"Guinea-Bissau","flag":"🇬🇼"}, + {"name":"Guyana","flag":"🇬🇾"}, + {"name":"Haiti","flag":"🇭🇹"}, + {"name":"Heard Island and McDonald Islands","flag":"🇭🇲"}, + {"name":"Holy See (Vatican City State)","flag":"🇻🇦"}, + {"name":"Honduras","flag":"🇭🇳"}, + {"name":"Hong Kong","flag":"🇭🇰"}, + {"name":"Hungary","flag":"🇭🇺"}, + {"name":"Iceland","flag":"🇮🇸"}, + {"name":"India","flag":"🇮🇳"}, + {"name":"Indonesia","flag":"🇮🇩"}, + {"name":"Iran, Islamic Republic of","flag":"🇮🇷"}, + {"name":"Iraq","flag":"🇮🇶"}, + {"name":"Ireland","flag":"🇮🇪"}, + {"name":"Isle of Man","flag":"🇮🇲"}, + {"name":"Israel","flag":"🇮🇱"}, + {"name":"Italy","flag":"🇮🇹"}, + {"name":"Jamaica","flag":"🇯🇲"}, + {"name":"Japan","flag":"🇯🇵"}, + {"name":"Jersey","flag":"🇯🇪"}, + {"name":"Jordan","flag":"🇯🇴"}, + {"name":"Kazakhstan","flag":"🇰🇿"}, + {"name":"Kenya","flag":"🇰🇪"}, + {"name":"Kiribati","flag":"🇰🇮"}, + {"name":"Korea, Democratic People's Republic of","flag":"🇰🇵"}, + {"name":"Korea, Republic of","flag":"🇰🇷"}, + {"name":"Kuwait","flag":"🇰🇼"}, + {"name":"Kyrgyzstan","flag":"🇰🇬"}, + {"name":"Lao People's Democratic Republic","flag":"🇱🇦"}, + {"name":"Latvia","flag":"🇱🇻"}, + {"name":"Lebanon","flag":"🇱🇧"}, + {"name":"Lesotho","flag":"🇱🇸"}, + {"name":"Liberia","flag":"🇱🇷"}, + {"name":"Libya","flag":"🇱🇾"}, + {"name":"Liechtenstein","flag":"🇱🇮"}, + {"name":"Lithuania","flag":"🇱🇹"}, + {"name":"Luxembourg","flag":"🇱🇺"}, + {"name":"Macao","flag":"🇲🇴"}, + {"name":"Macedonia, the Former Yugoslav Republic of","flag":"🇲🇰"}, + {"name":"Madagascar","flag":"🇲🇬"}, + {"name":"Malawi","flag":"🇲🇼"}, + {"name":"Malaysia","flag":"🇲🇾"}, + {"name":"Maldives","flag":"🇲🇻"}, + {"name":"Mali","flag":"🇲🇱"}, + {"name":"Malta","flag":"🇲🇹"}, + {"name":"Marshall Islands","flag":"🇲🇭"}, + {"name":"Martinique","flag":"🇲🇶"}, + {"name":"Mauritania","flag":"🇲🇷"}, + {"name":"Mauritius","flag":"🇲🇺"}, + {"name":"Mayotte","flag":"🇾🇹"}, + {"name":"Mexico","flag":"🇲🇽"}, + {"name":"Micronesia, Federated States of","flag":"🇫🇲"}, + {"name":"Moldova, Republic of","flag":"🇲🇩"}, + {"name":"Monaco","flag":"🇲🇨"}, + {"name":"Mongolia","flag":"🇲🇳"}, + {"name":"Montenegro","flag":"🇲🇪"}, + {"name":"Montserrat","flag":"🇲🇸"}, + {"name":"Morocco","flag":"🇲🇦"}, + {"name":"Mozambique","flag":"🇲🇿"}, + {"name":"Myanmar","flag":"🇲🇲"}, + {"name":"Namibia","flag":"🇳🇦"}, + {"name":"Nauru","flag":"🇳🇷"}, + {"name":"Nepal","flag":"🇳🇵"}, + {"name":"Netherlands","flag":"🇳🇱"}, + {"name":"New Caledonia","flag":"🇳🇨"}, + {"name":"New Zealand","flag":"🇳🇿"}, + {"name":"Nicaragua","flag":"🇳🇮"}, + {"name":"Niger","flag":"🇳🇪"}, + {"name":"Nigeria","flag":"🇳🇬"}, + {"name":"Niue","flag":"🇳🇺"}, + {"name":"Norfolk Island","flag":"🇳🇫"}, + {"name":"Northern Mariana Islands","flag":"🇲🇵"}, + {"name":"Norway","flag":"🇳🇴"}, + {"name":"Oman","flag":"🇴🇲"}, + {"name":"Pakistan","flag":"🇵🇰"}, + {"name":"Palau","flag":"🇵🇼"}, + {"name":"Palestine, State of","flag":"🇵🇸"}, + {"name":"Panama","flag":"🇵🇦"}, + {"name":"Papua New Guinea","flag":"🇵🇬"}, + {"name":"Paraguay","flag":"🇵🇾"}, + {"name":"Peru","flag":"🇵🇪"}, + {"name":"Philippines","flag":"🇵🇭"}, + {"name":"Pitcairn","flag":"🇵🇳"}, + {"name":"Poland","flag":"🇵🇱"}, + {"name":"Portugal","flag":"🇵🇹"}, + {"name":"Puerto Rico","flag":"🇵🇷"}, + {"name":"Qatar","flag":"🇶🇦"}, + {"name":"Réunion","flag":"🇷🇪"}, + {"name":"Romania","flag":"🇷🇴"}, + {"name":"Russian Federation","flag":"🇷🇺"}, + {"name":"Rwanda","flag":"🇷🇼"}, + {"name":"Saint Barthélemy","flag":"🇧🇱"}, + {"name":"Saint Helena, Ascension and Tristan da Cunha","flag":"🇸🇭"}, + {"name":"Saint Kitts and Nevis","flag":"🇰🇳"}, + {"name":"Saint Lucia","flag":"🇱🇨"}, + {"name":"Saint Martin (French part)","flag":"🇲🇫"}, + {"name":"Saint Pierre and Miquelon","flag":"🇵🇲"}, + {"name":"Saint Vincent and the Grenadines","flag":"🇻🇨"}, + {"name":"Samoa","flag":"🇼🇸"}, + {"name":"San Marino","flag":"🇸🇲"}, + {"name":"Sao Tome and Principe","flag":"🇸🇹"}, + {"name":"Saudi Arabia","flag":"🇸🇦"}, + {"name":"Senegal","flag":"🇸🇳"}, + {"name":"Serbia","flag":"🇷🇸"}, + {"name":"Seychelles","flag":"🇸🇨"}, + {"name":"Sierra Leone","flag":"🇸🇱"}, + {"name":"Singapore","flag":"🇸🇬"}, + {"name":"Sint Maarten (Dutch part)","flag":"🇸🇽"}, + {"name":"Slovakia","flag":"🇸🇰"}, + {"name":"Slovenia","flag":"🇸🇮"}, + {"name":"Solomon Islands","flag":"🇸🇧"}, + {"name":"Somalia","flag":"🇸🇴"}, + {"name":"South Africa","flag":"🇿🇦"}, + {"name":"South Georgia and the South Sandwich Islands","flag":"🇬🇸"}, + {"name":"South Sudan","flag":"🇸🇸"}, + {"name":"Spain","flag":"🇪🇸"}, + {"name":"Sri Lanka","flag":"🇱🇰"}, + {"name":"Sudan","flag":"🇸🇩"}, + {"name":"Suriname","flag":"🇸🇷"}, + {"name":"Svalbard and Jan Mayen","flag":"🇸🇯"}, + {"name":"Swaziland","flag":"🇸🇿"}, + {"name":"Sweden","flag":"🇸🇪"}, + {"name":"Switzerland","flag":"🇨🇭"}, + {"name":"Syrian Arab Republic","flag":"🇸🇾"}, + {"name":"Taiwan, Province of China","flag":"🇹🇼"}, + {"name":"Tajikistan","flag":"🇹🇯"}, + {"name":"Tanzania, United Republic of","flag":"🇹🇿"}, + {"name":"Thailand","flag":"🇹🇭"}, + {"name":"Timor-Leste","flag":"🇹🇱"}, + {"name":"Togo","flag":"🇹🇬"}, + {"name":"Tokelau","flag":"🇹🇰"}, + {"name":"Tonga","flag":"🇹🇴"}, + {"name":"Trinidad and Tobago","flag":"🇹🇹"}, + {"name":"Tunisia","flag":"🇹🇳"}, + {"name":"Turkey","flag":"🇹🇷"}, + {"name":"Turkmenistan","flag":"🇹🇲"}, + {"name":"Turks and Caicos Islands","flag":"🇹🇨"}, + {"name":"Tuvalu","flag":"🇹🇻"}, + {"name":"Uganda","flag":"🇺🇬"}, + {"name":"Ukraine","flag":"🇺🇦"}, + {"name":"United Arab Emirates","flag":"🇦🇪"}, + {"name":"United Kingdom","flag":"🇬🇧"}, + {"name":"United States","flag":"🇺🇸"}, + {"name":"United States Minor Outlying Islands","flag":"🇺🇲"}, + {"name":"Uruguay","flag":"🇺🇾"}, + {"name":"Uzbekistan","flag":"🇺🇿"}, + {"name":"Vanuatu","flag":"🇻🇺"}, + {"name":"Venezuela, Bolivarian Republic of","flag":"🇻🇪"}, + {"name":"Vietnam","flag":"🇻🇳"}, + {"name":"Virgin Islands, British","flag":"🇻🇬"}, + {"name":"Virgin Islands, U.S.","flag":"🇻🇮"}, + {"name":"Wallis and Futuna","flag":"🇼🇫"}, + {"name":"Western Sahara","flag":"🇪🇭"}, + {"name":"Yemen","flag":"🇾🇪"}, + {"name":"Zambia","flag":"🇿🇲"}, + {"name":"Zimbabwe","flag":"🇿🇼"}, +] + + // The code below is generated from codersdk. // From codersdk/templates.go diff --git a/site/src/pages/SetupPage/SetupPageView.tsx b/site/src/pages/SetupPage/SetupPageView.tsx index a4b0536ae0b85..6f03c69aea97d 100644 --- a/site/src/pages/SetupPage/SetupPageView.tsx +++ b/site/src/pages/SetupPage/SetupPageView.tsx @@ -6,6 +6,7 @@ import Link from "@mui/material/Link"; import MenuItem from "@mui/material/MenuItem"; import TextField from "@mui/material/TextField"; import type * as TypesGen from "api/typesGenerated"; +import { countries } from "api/typesGenerated"; import { isAxiosError } from "axios"; import { Alert, AlertDetail } from "components/Alert/Alert"; import { FormFields, VerticalForm } from "components/Form/Form"; @@ -21,7 +22,6 @@ import { onChangeTrimmed, } from "utils/formUtils"; import * as Yup from "yup"; -import { countries } from "./countries"; export const Language = { emailLabel: "Email", From 1702c64312fb9b03e534c935dc62971a3243856c Mon Sep 17 00:00:00 2001 From: joobisb Date: Tue, 29 Oct 2024 20:15:47 +0530 Subject: [PATCH 7/9] remove unreferenced countries.tsx --- site/src/pages/SetupPage/countries.tsx | 998 ------------------------- 1 file changed, 998 deletions(-) delete mode 100644 site/src/pages/SetupPage/countries.tsx diff --git a/site/src/pages/SetupPage/countries.tsx b/site/src/pages/SetupPage/countries.tsx deleted file mode 100644 index 9b13b6b6be0d9..0000000000000 --- a/site/src/pages/SetupPage/countries.tsx +++ /dev/null @@ -1,998 +0,0 @@ -export const countries = [ - { - name: "Afghanistan", - flag: "🇦🇫", - }, - { - name: "Åland Islands", - flag: "🇦🇽", - }, - { - name: "Albania", - flag: "🇦🇱", - }, - { - name: "Algeria", - flag: "🇩🇿", - }, - { - name: "American Samoa", - flag: "🇦🇸", - }, - { - name: "Andorra", - flag: "🇦🇩", - }, - { - name: "Angola", - flag: "🇦🇴", - }, - { - name: "Anguilla", - flag: "🇦🇮", - }, - { - name: "Antarctica", - flag: "🇦🇶", - }, - { - name: "Antigua and Barbuda", - flag: "🇦🇬", - }, - { - name: "Argentina", - flag: "🇦🇷", - }, - { - name: "Armenia", - flag: "🇦🇲", - }, - { - name: "Aruba", - flag: "🇦🇼", - }, - { - name: "Australia", - flag: "🇦🇺", - }, - { - name: "Austria", - flag: "🇦🇹", - }, - { - name: "Azerbaijan", - flag: "🇦🇿", - }, - { - name: "Bahamas", - flag: "🇧🇸", - }, - { - name: "Bahrain", - flag: "🇧🇭", - }, - { - name: "Bangladesh", - flag: "🇧🇩", - }, - { - name: "Barbados", - flag: "🇧🇧", - }, - { - name: "Belarus", - flag: "🇧🇾", - }, - { - name: "Belgium", - flag: "🇧🇪", - }, - { - name: "Belize", - flag: "🇧🇿", - }, - { - name: "Benin", - flag: "🇧🇯", - }, - { - name: "Bermuda", - flag: "🇧🇲", - }, - { - name: "Bhutan", - flag: "🇧🇹", - }, - { - name: "Bolivia, Plurinational State of", - flag: "🇧🇴", - }, - { - name: "Bonaire, Sint Eustatius and Saba", - flag: "🇧🇶", - }, - { - name: "Bosnia and Herzegovina", - flag: "🇧🇦", - }, - { - name: "Botswana", - flag: "🇧🇼", - }, - { - name: "Bouvet Island", - flag: "🇧🇻", - }, - { - name: "Brazil", - flag: "🇧🇷", - }, - { - name: "British Indian Ocean Territory", - flag: "🇮🇴", - }, - { - name: "Brunei Darussalam", - flag: "🇧🇳", - }, - { - name: "Bulgaria", - flag: "🇧🇬", - }, - { - name: "Burkina Faso", - flag: "🇧🇫", - }, - { - name: "Burundi", - flag: "🇧🇮", - }, - { - name: "Cambodia", - flag: "🇰🇭", - }, - { - name: "Cameroon", - flag: "🇨🇲", - }, - { - name: "Canada", - flag: "🇨🇦", - }, - { - name: "Cape Verde", - flag: "🇨🇻", - }, - { - name: "Cayman Islands", - flag: "🇰🇾", - }, - { - name: "Central African Republic", - flag: "🇨🇫", - }, - { - name: "Chad", - flag: "🇹🇩", - }, - { - name: "Chile", - flag: "🇨🇱", - }, - { - name: "China", - flag: "🇨🇳", - }, - { - name: "Christmas Island", - flag: "🇨🇽", - }, - { - name: "Cocos (Keeling) Islands", - flag: "🇨🇨", - }, - { - name: "Colombia", - flag: "🇨🇴", - }, - { - name: "Comoros", - flag: "🇰🇲", - }, - { - name: "Congo", - flag: "🇨🇬", - }, - { - name: "Congo, the Democratic Republic of the", - flag: "🇨🇩", - }, - { - name: "Cook Islands", - flag: "🇨🇰", - }, - { - name: "Costa Rica", - flag: "🇨🇷", - }, - { - name: "Côte d'Ivoire", - flag: "🇨🇮", - }, - { - name: "Croatia", - flag: "🇭🇷", - }, - { - name: "Cuba", - flag: "🇨🇺", - }, - { - name: "Curaçao", - flag: "🇨🇼", - }, - { - name: "Cyprus", - flag: "🇨🇾", - }, - { - name: "Czech Republic", - flag: "🇨🇿", - }, - { - name: "Denmark", - flag: "🇩🇰", - }, - { - name: "Djibouti", - flag: "🇩🇯", - }, - { - name: "Dominica", - flag: "🇩🇲", - }, - { - name: "Dominican Republic", - flag: "🇩🇴", - }, - { - name: "Ecuador", - flag: "🇪🇨", - }, - { - name: "Egypt", - flag: "🇪🇬", - }, - { - name: "El Salvador", - flag: "🇸🇻", - }, - { - name: "Equatorial Guinea", - flag: "🇬🇶", - }, - { - name: "Eritrea", - flag: "🇪🇷", - }, - { - name: "Estonia", - flag: "🇪🇪", - }, - { - name: "Ethiopia", - flag: "🇪🇹", - }, - { - name: "Falkland Islands (Malvinas)", - flag: "🇫🇰", - }, - { - name: "Faroe Islands", - flag: "🇫🇴", - }, - { - name: "Fiji", - flag: "🇫🇯", - }, - { - name: "Finland", - flag: "🇫🇮", - }, - { - name: "France", - flag: "🇫🇷", - }, - { - name: "French Guiana", - flag: "🇬🇫", - }, - { - name: "French Polynesia", - flag: "🇵🇫", - }, - { - name: "French Southern Territories", - flag: "🇹🇫", - }, - { - name: "Gabon", - flag: "🇬🇦", - }, - { - name: "Gambia", - flag: "🇬🇲", - }, - { - name: "Georgia", - flag: "🇬🇪", - }, - { - name: "Germany", - flag: "🇩🇪", - }, - { - name: "Ghana", - flag: "🇬🇭", - }, - { - name: "Gibraltar", - flag: "🇬🇮", - }, - { - name: "Greece", - flag: "🇬🇷", - }, - { - name: "Greenland", - flag: "🇬🇱", - }, - { - name: "Grenada", - flag: "🇬🇩", - }, - { - name: "Guadeloupe", - flag: "🇬🇵", - }, - { - name: "Guam", - flag: "🇬🇺", - }, - { - name: "Guatemala", - flag: "🇬🇹", - }, - { - name: "Guernsey", - flag: "🇬🇬", - }, - { - name: "Guinea", - flag: "🇬🇳", - }, - { - name: "Guinea-Bissau", - flag: "🇬🇼", - }, - { - name: "Guyana", - flag: "🇬🇾", - }, - { - name: "Haiti", - flag: "🇭🇹", - }, - { - name: "Heard Island and McDonald Islands", - flag: "🇭🇲", - }, - { - name: "Holy See (Vatican City State)", - flag: "🇻🇦", - }, - { - name: "Honduras", - flag: "🇭🇳", - }, - { - name: "Hong Kong", - flag: "🇭🇰", - }, - { - name: "Hungary", - flag: "🇭🇺", - }, - { - name: "Iceland", - flag: "🇮🇸", - }, - { - name: "India", - flag: "🇮🇳", - }, - { - name: "Indonesia", - flag: "🇮🇩", - }, - { - name: "Iran, Islamic Republic of", - flag: "🇮🇷", - }, - { - name: "Iraq", - flag: "🇮🇶", - }, - { - name: "Ireland", - flag: "🇮🇪", - }, - { - name: "Isle of Man", - flag: "🇮🇲", - }, - { - name: "Israel", - flag: "🇮🇱", - }, - { - name: "Italy", - flag: "🇮🇹", - }, - { - name: "Jamaica", - flag: "🇯🇲", - }, - { - name: "Japan", - flag: "🇯🇵", - }, - { - name: "Jersey", - flag: "🇯🇪", - }, - { - name: "Jordan", - flag: "🇯🇴", - }, - { - name: "Kazakhstan", - flag: "🇰🇿", - }, - { - name: "Kenya", - flag: "🇰🇪", - }, - { - name: "Kiribati", - flag: "🇰🇮", - }, - { - name: "Korea, Democratic People's Republic of", - flag: "🇰🇵", - }, - { - name: "Korea, Republic of", - flag: "🇰🇷", - }, - { - name: "Kuwait", - flag: "🇰🇼", - }, - { - name: "Kyrgyzstan", - flag: "🇰🇬", - }, - { - name: "Lao People's Democratic Republic", - flag: "🇱🇦", - }, - { - name: "Latvia", - flag: "🇱🇻", - }, - { - name: "Lebanon", - flag: "🇱🇧", - }, - { - name: "Lesotho", - flag: "🇱🇸", - }, - { - name: "Liberia", - flag: "🇱🇷", - }, - { - name: "Libya", - flag: "🇱🇾", - }, - { - name: "Liechtenstein", - flag: "🇱🇮", - }, - { - name: "Lithuania", - flag: "🇱🇹", - }, - { - name: "Luxembourg", - flag: "🇱🇺", - }, - { - name: "Macao", - flag: "🇲🇴", - }, - { - name: "Macedonia, the Former Yugoslav Republic of", - flag: "🇲🇰", - }, - { - name: "Madagascar", - flag: "🇲🇬", - }, - { - name: "Malawi", - flag: "🇲🇼", - }, - { - name: "Malaysia", - flag: "🇲🇾", - }, - { - name: "Maldives", - flag: "🇲🇻", - }, - { - name: "Mali", - flag: "🇲🇱", - }, - { - name: "Malta", - flag: "🇲🇹", - }, - { - name: "Marshall Islands", - flag: "🇲🇭", - }, - { - name: "Martinique", - flag: "🇲🇶", - }, - { - name: "Mauritania", - flag: "🇲🇷", - }, - { - name: "Mauritius", - flag: "🇲🇺", - }, - { - name: "Mayotte", - flag: "🇾🇹", - }, - { - name: "Mexico", - flag: "🇲🇽", - }, - { - name: "Micronesia, Federated States of", - flag: "🇫🇲", - }, - { - name: "Moldova, Republic of", - flag: "🇲🇩", - }, - { - name: "Monaco", - flag: "🇲🇨", - }, - { - name: "Mongolia", - flag: "🇲🇳", - }, - { - name: "Montenegro", - flag: "🇲🇪", - }, - { - name: "Montserrat", - flag: "🇲🇸", - }, - { - name: "Morocco", - flag: "🇲🇦", - }, - { - name: "Mozambique", - flag: "🇲🇿", - }, - { - name: "Myanmar", - flag: "🇲🇲", - }, - { - name: "Namibia", - flag: "🇳🇦", - }, - { - name: "Nauru", - flag: "🇳🇷", - }, - { - name: "Nepal", - flag: "🇳🇵", - }, - { - name: "Netherlands", - flag: "🇳🇱", - }, - { - name: "New Caledonia", - flag: "🇳🇨", - }, - { - name: "New Zealand", - flag: "🇳🇿", - }, - { - name: "Nicaragua", - flag: "🇳🇮", - }, - { - name: "Niger", - flag: "🇳🇪", - }, - { - name: "Nigeria", - flag: "🇳🇬", - }, - { - name: "Niue", - flag: "🇳🇺", - }, - { - name: "Norfolk Island", - flag: "🇳🇫", - }, - { - name: "Northern Mariana Islands", - flag: "🇲🇵", - }, - { - name: "Norway", - flag: "🇳🇴", - }, - { - name: "Oman", - flag: "🇴🇲", - }, - { - name: "Pakistan", - flag: "🇵🇰", - }, - { - name: "Palau", - flag: "🇵🇼", - }, - { - name: "Palestine, State of", - flag: "🇵🇸", - }, - { - name: "Panama", - flag: "🇵🇦", - }, - { - name: "Papua New Guinea", - flag: "🇵🇬", - }, - { - name: "Paraguay", - flag: "🇵🇾", - }, - { - name: "Peru", - flag: "🇵🇪", - }, - { - name: "Philippines", - flag: "🇵🇭", - }, - { - name: "Pitcairn", - flag: "🇵🇳", - }, - { - name: "Poland", - flag: "🇵🇱", - }, - { - name: "Portugal", - flag: "🇵🇹", - }, - { - name: "Puerto Rico", - flag: "🇵🇷", - }, - { - name: "Qatar", - flag: "🇶🇦", - }, - { - name: "Réunion", - flag: "🇷🇪", - }, - { - name: "Romania", - flag: "🇷🇴", - }, - { - name: "Russian Federation", - flag: "🇷🇺", - }, - { - name: "Rwanda", - flag: "🇷🇼", - }, - { - name: "Saint Barthélemy", - flag: "🇧🇱", - }, - { - name: "Saint Helena, Ascension and Tristan da Cunha", - flag: "🇸🇭", - }, - { - name: "Saint Kitts and Nevis", - flag: "🇰🇳", - }, - { - name: "Saint Lucia", - flag: "🇱🇨", - }, - { - name: "Saint Martin (French part)", - flag: "🇲🇫", - }, - { - name: "Saint Pierre and Miquelon", - flag: "🇵🇲", - }, - { - name: "Saint Vincent and the Grenadines", - flag: "🇻🇨", - }, - { - name: "Samoa", - flag: "🇼🇸", - }, - { - name: "San Marino", - flag: "🇸🇲", - }, - { - name: "Sao Tome and Principe", - flag: "🇸🇹", - }, - { - name: "Saudi Arabia", - flag: "🇸🇦", - }, - { - name: "Senegal", - flag: "🇸🇳", - }, - { - name: "Serbia", - flag: "🇷🇸", - }, - { - name: "Seychelles", - flag: "🇸🇨", - }, - { - name: "Sierra Leone", - flag: "🇸🇱", - }, - { - name: "Singapore", - flag: "🇸🇬", - }, - { - name: "Sint Maarten (Dutch part)", - flag: "🇸🇽", - }, - { - name: "Slovakia", - flag: "🇸🇰", - }, - { - name: "Slovenia", - flag: "🇸🇮", - }, - { - name: "Solomon Islands", - flag: "🇸🇧", - }, - { - name: "Somalia", - flag: "🇸🇴", - }, - { - name: "South Africa", - flag: "🇿🇦", - }, - { - name: "South Georgia and the South Sandwich Islands", - flag: "🇬🇸", - }, - { - name: "South Sudan", - flag: "🇸🇸", - }, - { - name: "Spain", - flag: "🇪🇸", - }, - { - name: "Sri Lanka", - flag: "🇱🇰", - }, - { - name: "Sudan", - flag: "🇸🇩", - }, - { - name: "Suriname", - flag: "🇸🇷", - }, - { - name: "Svalbard and Jan Mayen", - flag: "🇸🇯", - }, - { - name: "Swaziland", - flag: "🇸🇿", - }, - { - name: "Sweden", - flag: "🇸🇪", - }, - { - name: "Switzerland", - flag: "🇨🇭", - }, - { - name: "Syrian Arab Republic", - flag: "🇸🇾", - }, - { - name: "Taiwan, Province of China", - flag: "🇹🇼", - }, - { - name: "Tajikistan", - flag: "🇹🇯", - }, - { - name: "Tanzania, United Republic of", - flag: "🇹🇿", - }, - { - name: "Thailand", - flag: "🇹🇭", - }, - { - name: "Timor-Leste", - flag: "🇹🇱", - }, - { - name: "Togo", - flag: "🇹🇬", - }, - { - name: "Tokelau", - flag: "🇹🇰", - }, - { - name: "Tonga", - flag: "🇹🇴", - }, - { - name: "Trinidad and Tobago", - flag: "🇹🇹", - }, - { - name: "Tunisia", - flag: "🇹🇳", - }, - { - name: "Turkey", - flag: "🇹🇷", - }, - { - name: "Turkmenistan", - flag: "🇹🇲", - }, - { - name: "Turks and Caicos Islands", - flag: "🇹🇨", - }, - { - name: "Tuvalu", - flag: "🇹🇻", - }, - { - name: "Uganda", - flag: "🇺🇬", - }, - { - name: "Ukraine", - flag: "🇺🇦", - }, - { - name: "United Arab Emirates", - flag: "🇦🇪", - }, - { - name: "United Kingdom", - flag: "🇬🇧", - }, - { - name: "United States", - flag: "🇺🇸", - }, - { - name: "United States Minor Outlying Islands", - flag: "🇺🇲", - }, - { - name: "Uruguay", - flag: "🇺🇾", - }, - { - name: "Uzbekistan", - flag: "🇺🇿", - }, - { - name: "Vanuatu", - flag: "🇻🇺", - }, - { - name: "Venezuela, Bolivarian Republic of", - flag: "🇻🇪", - }, - { - name: "Vietnam", - flag: "🇻🇳", - }, - { - name: "Virgin Islands, British", - flag: "🇻🇬", - }, - { - name: "Virgin Islands, U.S.", - flag: "🇻🇮", - }, - { - name: "Wallis and Futuna", - flag: "🇼🇫", - }, - { - name: "Western Sahara", - flag: "🇪🇭", - }, - { - name: "Yemen", - flag: "🇾🇪", - }, - { - name: "Zambia", - flag: "🇿🇲", - }, - { - name: "Zimbabwe", - flag: "🇿🇼", - }, -]; From 06fc0c46833acc68b7b6ac8999d0ce2402681e62 Mon Sep 17 00:00:00 2001 From: joobisb Date: Sat, 9 Nov 2024 23:17:13 +0530 Subject: [PATCH 8/9] feat: combine rbac and country generation scripts --- Makefile | 17 +- coderd/rbac/object_gen.go | 2 +- codersdk/rbacresources_gen.go | 2 +- scripts/apitypings/main.go | 32 - scripts/apitypings/main_test.go | 34 - scripts/{rbacgen => typegen}/codersdk.gotmpl | 2 +- scripts/typegen/countries.tstmpl | 11 + scripts/{rbacgen => typegen}/main.go | 67 +- .../{rbacgen => typegen}/rbacobject.gotmpl | 2 +- .../{rbacgen => typegen}/typescript.tstmpl | 2 +- site/src/api/countriesGenerated.ts | 1001 +++++++++++++++++ site/src/api/rbacresourcesGenerated.ts | 2 +- site/src/api/typesGenerated.ts | 254 ----- site/src/pages/SetupPage/SetupPageView.tsx | 2 +- 14 files changed, 1084 insertions(+), 346 deletions(-) rename scripts/{rbacgen => typegen}/codersdk.gotmpl (93%) create mode 100644 scripts/typegen/countries.tstmpl rename scripts/{rbacgen => typegen}/main.go (79%) rename scripts/{rbacgen => typegen}/rbacobject.gotmpl (94%) rename scripts/{rbacgen => typegen}/typescript.tstmpl (92%) create mode 100644 site/src/api/countriesGenerated.ts diff --git a/Makefile b/Makefile index 084e8bb77e5f0..cd73c0e166bba 100644 --- a/Makefile +++ b/Makefile @@ -495,6 +495,7 @@ gen: \ coderd/rbac/object_gen.go \ codersdk/rbacresources_gen.go \ site/src/api/rbacresourcesGenerated.ts \ + site/src/api/countriesGenerated.ts \ docs/admin/integrations/prometheus.md \ docs/reference/cli/index.md \ docs/admin/security/audit-logs.md \ @@ -526,6 +527,7 @@ gen/mark-fresh: coderd/rbac/object_gen.go \ codersdk/rbacresources_gen.go \ site/src/api/rbacresourcesGenerated.ts \ + site/src/api/countriesGenerated.ts \ docs/admin/integrations/prometheus.md \ docs/reference/cli/index.md \ docs/admin/security/audit-logs.md \ @@ -628,17 +630,20 @@ site/src/theme/icons.json: $(wildcard scripts/gensite/*) $(wildcard site/static/ examples/examples.gen.json: scripts/examplegen/main.go examples/examples.go $(shell find ./examples/templates) go run ./scripts/examplegen/main.go > examples/examples.gen.json -coderd/rbac/object_gen.go: scripts/rbacgen/rbacobject.gotmpl scripts/rbacgen/main.go coderd/rbac/object.go coderd/rbac/policy/policy.go - go run scripts/rbacgen/main.go rbac > coderd/rbac/object_gen.go +coderd/rbac/object_gen.go: scripts/typegen/rbacobject.gotmpl scripts/typegen/main.go coderd/rbac/object.go coderd/rbac/policy/policy.go + go run scripts/typegen/main.go rbac object > coderd/rbac/object_gen.go -codersdk/rbacresources_gen.go: scripts/rbacgen/codersdk.gotmpl scripts/rbacgen/main.go coderd/rbac/object.go coderd/rbac/policy/policy.go +codersdk/rbacresources_gen.go: scripts/typegen/codersdk.gotmpl scripts/typegen/main.go coderd/rbac/object.go coderd/rbac/policy/policy.go # Do no overwrite codersdk/rbacresources_gen.go directly, as it would make the file empty, breaking # the `codersdk` package and any parallel build targets. - go run scripts/rbacgen/main.go codersdk > /tmp/rbacresources_gen.go + go run scripts/typegen/main.go rbac codersdk > /tmp/rbacresources_gen.go mv /tmp/rbacresources_gen.go codersdk/rbacresources_gen.go -site/src/api/rbacresourcesGenerated.ts: scripts/rbacgen/codersdk.gotmpl scripts/rbacgen/main.go coderd/rbac/object.go coderd/rbac/policy/policy.go - go run scripts/rbacgen/main.go typescript > "$@" +site/src/api/rbacresourcesGenerated.ts: scripts/typegen/codersdk.gotmpl scripts/typegen/main.go coderd/rbac/object.go coderd/rbac/policy/policy.go + go run scripts/typegen/main.go rbac typescript > "$@" + +site/src/api/countriesGenerated.ts: scripts/typegen/countries.tstmpl scripts/typegen/main.go codersdk/countries.go + go run scripts/typegen/main.go countries > "$@" docs/admin/integrations/prometheus.md: scripts/metricsdocgen/main.go scripts/metricsdocgen/metrics go run scripts/metricsdocgen/main.go diff --git a/coderd/rbac/object_gen.go b/coderd/rbac/object_gen.go index efe798d4ae4ac..de4882322e36d 100644 --- a/coderd/rbac/object_gen.go +++ b/coderd/rbac/object_gen.go @@ -1,4 +1,4 @@ -// Code generated by rbacgen/main.go. DO NOT EDIT. +// Code generated by typegen/main.go. DO NOT EDIT. package rbac import "github.com/coder/coder/v2/coderd/rbac/policy" diff --git a/codersdk/rbacresources_gen.go b/codersdk/rbacresources_gen.go index 8c3ced0946223..dd3c347c90428 100644 --- a/codersdk/rbacresources_gen.go +++ b/codersdk/rbacresources_gen.go @@ -1,4 +1,4 @@ -// Code generated by rbacgen/main.go. DO NOT EDIT. +// Code generated by typegen/main.go. DO NOT EDIT. package codersdk type RBACResource string diff --git a/scripts/apitypings/main.go b/scripts/apitypings/main.go index caf956fa7efae..8153743775564 100644 --- a/scripts/apitypings/main.go +++ b/scripts/apitypings/main.go @@ -3,7 +3,6 @@ package main import ( "bytes" "context" - "encoding/json" "fmt" "go/types" "os" @@ -25,7 +24,6 @@ import ( "cdr.dev/slog" "cdr.dev/slog/sloggers/sloghuman" "github.com/coder/coder/v2/coderd/util/slice" - "github.com/coder/coder/v2/codersdk" ) var ( @@ -60,13 +58,6 @@ func main() { _, _ = fmt.Print("// Code generated by 'make site/src/api/typesGenerated.ts'. DO NOT EDIT.\n\n") - countriesTS, err := generateSliceOfObjectsTypeScript("countries", codersdk.Countries) - if err != nil { - log.Fatal(ctx, fmt.Sprintf("generate countries typeScript: %s", err.Error())) - } - _, _ = fmt.Print("// The code below is generated from codersdk/countries.go.\n") - _, _ = fmt.Print(countriesTS, "\n") - for _, baseDir := range baseDirs { _, _ = fmt.Printf("// The code below is generated from %s.\n\n", strings.TrimPrefix(baseDir, "./")) output, err := Generate(baseDir, external...) @@ -1115,26 +1106,3 @@ func (Generator) isBuiltIn(name string) (bool, string) { func indentedComment(comment string) string { return fmt.Sprintf("%s// %s", indent, comment) } - -func generateSliceOfObjectsTypeScript(name string, data interface{}) (string, error) { - var sb strings.Builder - _, _ = sb.WriteString(fmt.Sprintf("export const %s = [\n", name)) - - val := reflect.ValueOf(data) - if val.Kind() != reflect.Slice { - return "", xerrors.New("data must be a slice") - } - - for i := 0; i < val.Len(); i++ { - item := val.Index(i).Interface() - jsonBytes, err := json.Marshal(item) - if err != nil { - return "", xerrors.Errorf("marshal item: %w", err) - } - _, _ = sb.WriteString("\t") - _, _ = sb.Write(jsonBytes) - _, _ = sb.WriteString(",\n") - } - _, _ = sb.WriteString("]\n\n") - return sb.String(), nil -} diff --git a/scripts/apitypings/main_test.go b/scripts/apitypings/main_test.go index a41f628db7c6e..7dd5de6d19f1e 100644 --- a/scripts/apitypings/main_test.go +++ b/scripts/apitypings/main_test.go @@ -8,7 +8,6 @@ package main import ( "flag" - "fmt" "os" "path/filepath" "strings" @@ -52,36 +51,3 @@ func TestGeneration(t *testing.T) { }) } } - -func TestGenerateSliceOfObjectsTypeScript(t *testing.T) { - - t.Run("Valid slice input", func(t *testing.T) { - t.Parallel() - type testObject struct { - Name string `json:"name"` - Value int `json:"value"` - } - - testData := []testObject{ - {Name: "Item1", Value: 1}, - {Name: "Item2", Value: 2}, - {Name: "Item3", Value: 3}, - } - - expected := fmt.Sprintf(`export const testObjects = [ - {"name":"Item1","value":1}, - {"name":"Item2","value":2}, - {"name":"Item3","value":3},%s]%s%s`, "\n", "\n", "\n") - - result, err := generateSliceOfObjectsTypeScript("testObjects", testData) - require.NoError(t, err, "generate slice of objects") - require.Equal(t, expected, result, "generated TypeScript matches expected output") - }) - - t.Run("Invalid non-slice input", func(t *testing.T) { - t.Parallel() - _, err := generateSliceOfObjectsTypeScript("invalidData", "not a slice") - require.Error(t, err, "should return error for non-slice input") - require.Contains(t, err.Error(), "data must be a slice", "error message should indicate invalid input type") - }) -} diff --git a/scripts/rbacgen/codersdk.gotmpl b/scripts/typegen/codersdk.gotmpl similarity index 93% rename from scripts/rbacgen/codersdk.gotmpl rename to scripts/typegen/codersdk.gotmpl index 935d8c4f556c9..fa1aada77dc80 100644 --- a/scripts/rbacgen/codersdk.gotmpl +++ b/scripts/typegen/codersdk.gotmpl @@ -1,4 +1,4 @@ -// Code generated by rbacgen/main.go. DO NOT EDIT. +// Code generated by typegen/main.go. DO NOT EDIT. package codersdk type RBACResource string diff --git a/scripts/typegen/countries.tstmpl b/scripts/typegen/countries.tstmpl new file mode 100644 index 0000000000000..42879d72aeced --- /dev/null +++ b/scripts/typegen/countries.tstmpl @@ -0,0 +1,11 @@ +// Code generated by typegen/main.go. DO NOT EDIT. + +// Countries represents all supported countries with their flags +export const countries = [ +{{- range $country := . }} + { + name: "{{ $country.Name }}", + flag: "{{ $country.Flag }}", + }, +{{- end }} +]; diff --git a/scripts/rbacgen/main.go b/scripts/typegen/main.go similarity index 79% rename from scripts/rbacgen/main.go rename to scripts/typegen/main.go index c08c6b4cac0f3..0e7457406102e 100644 --- a/scripts/rbacgen/main.go +++ b/scripts/typegen/main.go @@ -19,6 +19,7 @@ import ( "golang.org/x/xerrors" "github.com/coder/coder/v2/coderd/rbac/policy" + "github.com/coder/coder/v2/codersdk" ) //go:embed rbacobject.gotmpl @@ -30,12 +31,17 @@ var codersdkTemplate string //go:embed typescript.tstmpl var typescriptTemplate string +//go:embed countries.tstmpl +var countriesTemplate string + func usage() { - _, _ = fmt.Println("Usage: rbacgen ") - _, _ = fmt.Println("Must choose a template target.") + _, _ = fmt.Println("Usage: typegen [template]") + _, _ = fmt.Println("Types:") + _, _ = fmt.Println(" rbac - Generate RBAC related files") + _, _ = fmt.Println(" countries - Generate countries TypeScript") } -// main will generate a file that lists all rbac objects. +// main will generate a file based on the type and template specified. // This is to provide an "AllResources" function that is always // in sync. func main() { @@ -46,15 +52,43 @@ func main() { os.Exit(1) } - formatSource := format.Source + var ( + out []byte + err error + ) + // It did not make sense to have 2 different generators that do essentially // the same thing, but different format for the BE and the sdk. // So the argument switches the go template to use. - var source string switch strings.ToLower(flag.Args()[0]) { + case "rbac": + if len(flag.Args()) < 2 { + usage() + os.Exit(1) + } + out, err = generateRBAC(flag.Args()[1]) + case "countries": + out, err = generateCountries() + default: + _, _ = fmt.Fprintf(os.Stderr, "%q is not a valid type\n", flag.Args()[0]) + usage() + os.Exit(2) + } + + if err != nil { + log.Fatalf("Generate source: %s", err.Error()) + } + + _, _ = fmt.Fprint(os.Stdout, string(out)) +} + +func generateRBAC(tmpl string) ([]byte, error) { + formatSource := format.Source + var source string + switch strings.ToLower(tmpl) { case "codersdk": source = codersdkTemplate - case "rbac": + case "object": source = rbacObjectTemplate case "typescript": source = typescriptTemplate @@ -63,22 +97,29 @@ func main() { return src, nil } default: - _, _ = fmt.Fprintf(os.Stderr, "%q is not a valid template target\n", flag.Args()[0]) - usage() - os.Exit(2) + return nil, xerrors.Errorf("%q is not a valid RBAC template target", tmpl) } out, err := generateRbacObjects(source) if err != nil { - log.Fatalf("Generate source: %s", err.Error()) + return nil, err } + return formatSource(out) +} - formatted, err := formatSource(out) +func generateCountries() ([]byte, error) { + tmpl, err := template.New("countries.tstmpl").Parse(countriesTemplate) if err != nil { - log.Fatalf("Format template: %s", err.Error()) + return nil, xerrors.Errorf("parse template: %w", err) } - _, _ = fmt.Fprint(os.Stdout, string(formatted)) + var out bytes.Buffer + err = tmpl.Execute(&out, codersdk.Countries) + if err != nil { + return nil, xerrors.Errorf("execute template: %w", err) + } + + return out.Bytes(), nil } func pascalCaseName[T ~string](name T) string { diff --git a/scripts/rbacgen/rbacobject.gotmpl b/scripts/typegen/rbacobject.gotmpl similarity index 94% rename from scripts/rbacgen/rbacobject.gotmpl rename to scripts/typegen/rbacobject.gotmpl index 9e529d2986817..89bcbf1ee8d96 100644 --- a/scripts/rbacgen/rbacobject.gotmpl +++ b/scripts/typegen/rbacobject.gotmpl @@ -1,4 +1,4 @@ -// Code generated by rbacgen/main.go. DO NOT EDIT. +// Code generated by typegen/main.go. DO NOT EDIT. package rbac import "github.com/coder/coder/v2/coderd/rbac/policy" diff --git a/scripts/rbacgen/typescript.tstmpl b/scripts/typegen/typescript.tstmpl similarity index 92% rename from scripts/rbacgen/typescript.tstmpl rename to scripts/typegen/typescript.tstmpl index 459443ea5fb5f..a0f7750e3a3f4 100644 --- a/scripts/rbacgen/typescript.tstmpl +++ b/scripts/typegen/typescript.tstmpl @@ -1,4 +1,4 @@ -// Code generated by rbacgen/main.go. DO NOT EDIT. +// Code generated by typegen/main.go. DO NOT EDIT. import type { RBACAction, RBACResource } from "./typesGenerated"; diff --git a/site/src/api/countriesGenerated.ts b/site/src/api/countriesGenerated.ts new file mode 100644 index 0000000000000..614c2d72e1c48 --- /dev/null +++ b/site/src/api/countriesGenerated.ts @@ -0,0 +1,1001 @@ +// Code generated by typegen/main.go. DO NOT EDIT. + +// Countries represents all supported countries with their flags +export const countries = [ + { + name: "Afghanistan", + flag: "🇦🇫", + }, + { + name: "Åland Islands", + flag: "🇦🇽", + }, + { + name: "Albania", + flag: "🇦🇱", + }, + { + name: "Algeria", + flag: "🇩🇿", + }, + { + name: "American Samoa", + flag: "🇦🇸", + }, + { + name: "Andorra", + flag: "🇦🇩", + }, + { + name: "Angola", + flag: "🇦🇴", + }, + { + name: "Anguilla", + flag: "🇦🇮", + }, + { + name: "Antarctica", + flag: "🇦🇶", + }, + { + name: "Antigua and Barbuda", + flag: "🇦🇬", + }, + { + name: "Argentina", + flag: "🇦🇷", + }, + { + name: "Armenia", + flag: "🇦🇲", + }, + { + name: "Aruba", + flag: "🇦🇼", + }, + { + name: "Australia", + flag: "🇦🇺", + }, + { + name: "Austria", + flag: "🇦🇹", + }, + { + name: "Azerbaijan", + flag: "🇦🇿", + }, + { + name: "Bahamas", + flag: "🇧🇸", + }, + { + name: "Bahrain", + flag: "🇧🇭", + }, + { + name: "Bangladesh", + flag: "🇧🇩", + }, + { + name: "Barbados", + flag: "🇧🇧", + }, + { + name: "Belarus", + flag: "🇧🇾", + }, + { + name: "Belgium", + flag: "🇧🇪", + }, + { + name: "Belize", + flag: "🇧🇿", + }, + { + name: "Benin", + flag: "🇧🇯", + }, + { + name: "Bermuda", + flag: "🇧🇲", + }, + { + name: "Bhutan", + flag: "🇧🇹", + }, + { + name: "Bolivia, Plurinational State of", + flag: "🇧🇴", + }, + { + name: "Bonaire, Sint Eustatius and Saba", + flag: "🇧🇶", + }, + { + name: "Bosnia and Herzegovina", + flag: "🇧🇦", + }, + { + name: "Botswana", + flag: "🇧🇼", + }, + { + name: "Bouvet Island", + flag: "🇧🇻", + }, + { + name: "Brazil", + flag: "🇧🇷", + }, + { + name: "British Indian Ocean Territory", + flag: "🇮🇴", + }, + { + name: "Brunei Darussalam", + flag: "🇧🇳", + }, + { + name: "Bulgaria", + flag: "🇧🇬", + }, + { + name: "Burkina Faso", + flag: "🇧🇫", + }, + { + name: "Burundi", + flag: "🇧🇮", + }, + { + name: "Cambodia", + flag: "🇰🇭", + }, + { + name: "Cameroon", + flag: "🇨🇲", + }, + { + name: "Canada", + flag: "🇨🇦", + }, + { + name: "Cape Verde", + flag: "🇨🇻", + }, + { + name: "Cayman Islands", + flag: "🇰🇾", + }, + { + name: "Central African Republic", + flag: "🇨🇫", + }, + { + name: "Chad", + flag: "🇹🇩", + }, + { + name: "Chile", + flag: "🇨🇱", + }, + { + name: "China", + flag: "🇨🇳", + }, + { + name: "Christmas Island", + flag: "🇨🇽", + }, + { + name: "Cocos (Keeling) Islands", + flag: "🇨🇨", + }, + { + name: "Colombia", + flag: "🇨🇴", + }, + { + name: "Comoros", + flag: "🇰🇲", + }, + { + name: "Congo", + flag: "🇨🇬", + }, + { + name: "Congo, the Democratic Republic of the", + flag: "🇨🇩", + }, + { + name: "Cook Islands", + flag: "🇨🇰", + }, + { + name: "Costa Rica", + flag: "🇨🇷", + }, + { + name: "Côte d'Ivoire", + flag: "🇨🇮", + }, + { + name: "Croatia", + flag: "🇭🇷", + }, + { + name: "Cuba", + flag: "🇨🇺", + }, + { + name: "Curaçao", + flag: "🇨🇼", + }, + { + name: "Cyprus", + flag: "🇨🇾", + }, + { + name: "Czech Republic", + flag: "🇨🇿", + }, + { + name: "Denmark", + flag: "🇩🇰", + }, + { + name: "Djibouti", + flag: "🇩🇯", + }, + { + name: "Dominica", + flag: "🇩🇲", + }, + { + name: "Dominican Republic", + flag: "🇩🇴", + }, + { + name: "Ecuador", + flag: "🇪🇨", + }, + { + name: "Egypt", + flag: "🇪🇬", + }, + { + name: "El Salvador", + flag: "🇸🇻", + }, + { + name: "Equatorial Guinea", + flag: "🇬🇶", + }, + { + name: "Eritrea", + flag: "🇪🇷", + }, + { + name: "Estonia", + flag: "🇪🇪", + }, + { + name: "Ethiopia", + flag: "🇪🇹", + }, + { + name: "Falkland Islands (Malvinas)", + flag: "🇫🇰", + }, + { + name: "Faroe Islands", + flag: "🇫🇴", + }, + { + name: "Fiji", + flag: "🇫🇯", + }, + { + name: "Finland", + flag: "🇫🇮", + }, + { + name: "France", + flag: "🇫🇷", + }, + { + name: "French Guiana", + flag: "🇬🇫", + }, + { + name: "French Polynesia", + flag: "🇵🇫", + }, + { + name: "French Southern Territories", + flag: "🇹🇫", + }, + { + name: "Gabon", + flag: "🇬🇦", + }, + { + name: "Gambia", + flag: "🇬🇲", + }, + { + name: "Georgia", + flag: "🇬🇪", + }, + { + name: "Germany", + flag: "🇩🇪", + }, + { + name: "Ghana", + flag: "🇬🇭", + }, + { + name: "Gibraltar", + flag: "🇬🇮", + }, + { + name: "Greece", + flag: "🇬🇷", + }, + { + name: "Greenland", + flag: "🇬🇱", + }, + { + name: "Grenada", + flag: "🇬🇩", + }, + { + name: "Guadeloupe", + flag: "🇬🇵", + }, + { + name: "Guam", + flag: "🇬🇺", + }, + { + name: "Guatemala", + flag: "🇬🇹", + }, + { + name: "Guernsey", + flag: "🇬🇬", + }, + { + name: "Guinea", + flag: "🇬🇳", + }, + { + name: "Guinea-Bissau", + flag: "🇬🇼", + }, + { + name: "Guyana", + flag: "🇬🇾", + }, + { + name: "Haiti", + flag: "🇭🇹", + }, + { + name: "Heard Island and McDonald Islands", + flag: "🇭🇲", + }, + { + name: "Holy See (Vatican City State)", + flag: "🇻🇦", + }, + { + name: "Honduras", + flag: "🇭🇳", + }, + { + name: "Hong Kong", + flag: "🇭🇰", + }, + { + name: "Hungary", + flag: "🇭🇺", + }, + { + name: "Iceland", + flag: "🇮🇸", + }, + { + name: "India", + flag: "🇮🇳", + }, + { + name: "Indonesia", + flag: "🇮🇩", + }, + { + name: "Iran, Islamic Republic of", + flag: "🇮🇷", + }, + { + name: "Iraq", + flag: "🇮🇶", + }, + { + name: "Ireland", + flag: "🇮🇪", + }, + { + name: "Isle of Man", + flag: "🇮🇲", + }, + { + name: "Israel", + flag: "🇮🇱", + }, + { + name: "Italy", + flag: "🇮🇹", + }, + { + name: "Jamaica", + flag: "🇯🇲", + }, + { + name: "Japan", + flag: "🇯🇵", + }, + { + name: "Jersey", + flag: "🇯🇪", + }, + { + name: "Jordan", + flag: "🇯🇴", + }, + { + name: "Kazakhstan", + flag: "🇰🇿", + }, + { + name: "Kenya", + flag: "🇰🇪", + }, + { + name: "Kiribati", + flag: "🇰🇮", + }, + { + name: "Korea, Democratic People's Republic of", + flag: "🇰🇵", + }, + { + name: "Korea, Republic of", + flag: "🇰🇷", + }, + { + name: "Kuwait", + flag: "🇰🇼", + }, + { + name: "Kyrgyzstan", + flag: "🇰🇬", + }, + { + name: "Lao People's Democratic Republic", + flag: "🇱🇦", + }, + { + name: "Latvia", + flag: "🇱🇻", + }, + { + name: "Lebanon", + flag: "🇱🇧", + }, + { + name: "Lesotho", + flag: "🇱🇸", + }, + { + name: "Liberia", + flag: "🇱🇷", + }, + { + name: "Libya", + flag: "🇱🇾", + }, + { + name: "Liechtenstein", + flag: "🇱🇮", + }, + { + name: "Lithuania", + flag: "🇱🇹", + }, + { + name: "Luxembourg", + flag: "🇱🇺", + }, + { + name: "Macao", + flag: "🇲🇴", + }, + { + name: "Macedonia, the Former Yugoslav Republic of", + flag: "🇲🇰", + }, + { + name: "Madagascar", + flag: "🇲🇬", + }, + { + name: "Malawi", + flag: "🇲🇼", + }, + { + name: "Malaysia", + flag: "🇲🇾", + }, + { + name: "Maldives", + flag: "🇲🇻", + }, + { + name: "Mali", + flag: "🇲🇱", + }, + { + name: "Malta", + flag: "🇲🇹", + }, + { + name: "Marshall Islands", + flag: "🇲🇭", + }, + { + name: "Martinique", + flag: "🇲🇶", + }, + { + name: "Mauritania", + flag: "🇲🇷", + }, + { + name: "Mauritius", + flag: "🇲🇺", + }, + { + name: "Mayotte", + flag: "🇾🇹", + }, + { + name: "Mexico", + flag: "🇲🇽", + }, + { + name: "Micronesia, Federated States of", + flag: "🇫🇲", + }, + { + name: "Moldova, Republic of", + flag: "🇲🇩", + }, + { + name: "Monaco", + flag: "🇲🇨", + }, + { + name: "Mongolia", + flag: "🇲🇳", + }, + { + name: "Montenegro", + flag: "🇲🇪", + }, + { + name: "Montserrat", + flag: "🇲🇸", + }, + { + name: "Morocco", + flag: "🇲🇦", + }, + { + name: "Mozambique", + flag: "🇲🇿", + }, + { + name: "Myanmar", + flag: "🇲🇲", + }, + { + name: "Namibia", + flag: "🇳🇦", + }, + { + name: "Nauru", + flag: "🇳🇷", + }, + { + name: "Nepal", + flag: "🇳🇵", + }, + { + name: "Netherlands", + flag: "🇳🇱", + }, + { + name: "New Caledonia", + flag: "🇳🇨", + }, + { + name: "New Zealand", + flag: "🇳🇿", + }, + { + name: "Nicaragua", + flag: "🇳🇮", + }, + { + name: "Niger", + flag: "🇳🇪", + }, + { + name: "Nigeria", + flag: "🇳🇬", + }, + { + name: "Niue", + flag: "🇳🇺", + }, + { + name: "Norfolk Island", + flag: "🇳🇫", + }, + { + name: "Northern Mariana Islands", + flag: "🇲🇵", + }, + { + name: "Norway", + flag: "🇳🇴", + }, + { + name: "Oman", + flag: "🇴🇲", + }, + { + name: "Pakistan", + flag: "🇵🇰", + }, + { + name: "Palau", + flag: "🇵🇼", + }, + { + name: "Palestine, State of", + flag: "🇵🇸", + }, + { + name: "Panama", + flag: "🇵🇦", + }, + { + name: "Papua New Guinea", + flag: "🇵🇬", + }, + { + name: "Paraguay", + flag: "🇵🇾", + }, + { + name: "Peru", + flag: "🇵🇪", + }, + { + name: "Philippines", + flag: "🇵🇭", + }, + { + name: "Pitcairn", + flag: "🇵🇳", + }, + { + name: "Poland", + flag: "🇵🇱", + }, + { + name: "Portugal", + flag: "🇵🇹", + }, + { + name: "Puerto Rico", + flag: "🇵🇷", + }, + { + name: "Qatar", + flag: "🇶🇦", + }, + { + name: "Réunion", + flag: "🇷🇪", + }, + { + name: "Romania", + flag: "🇷🇴", + }, + { + name: "Russian Federation", + flag: "🇷🇺", + }, + { + name: "Rwanda", + flag: "🇷🇼", + }, + { + name: "Saint Barthélemy", + flag: "🇧🇱", + }, + { + name: "Saint Helena, Ascension and Tristan da Cunha", + flag: "🇸🇭", + }, + { + name: "Saint Kitts and Nevis", + flag: "🇰🇳", + }, + { + name: "Saint Lucia", + flag: "🇱🇨", + }, + { + name: "Saint Martin (French part)", + flag: "🇲🇫", + }, + { + name: "Saint Pierre and Miquelon", + flag: "🇵🇲", + }, + { + name: "Saint Vincent and the Grenadines", + flag: "🇻🇨", + }, + { + name: "Samoa", + flag: "🇼🇸", + }, + { + name: "San Marino", + flag: "🇸🇲", + }, + { + name: "Sao Tome and Principe", + flag: "🇸🇹", + }, + { + name: "Saudi Arabia", + flag: "🇸🇦", + }, + { + name: "Senegal", + flag: "🇸🇳", + }, + { + name: "Serbia", + flag: "🇷🇸", + }, + { + name: "Seychelles", + flag: "🇸🇨", + }, + { + name: "Sierra Leone", + flag: "🇸🇱", + }, + { + name: "Singapore", + flag: "🇸🇬", + }, + { + name: "Sint Maarten (Dutch part)", + flag: "🇸🇽", + }, + { + name: "Slovakia", + flag: "🇸🇰", + }, + { + name: "Slovenia", + flag: "🇸🇮", + }, + { + name: "Solomon Islands", + flag: "🇸🇧", + }, + { + name: "Somalia", + flag: "🇸🇴", + }, + { + name: "South Africa", + flag: "🇿🇦", + }, + { + name: "South Georgia and the South Sandwich Islands", + flag: "🇬🇸", + }, + { + name: "South Sudan", + flag: "🇸🇸", + }, + { + name: "Spain", + flag: "🇪🇸", + }, + { + name: "Sri Lanka", + flag: "🇱🇰", + }, + { + name: "Sudan", + flag: "🇸🇩", + }, + { + name: "Suriname", + flag: "🇸🇷", + }, + { + name: "Svalbard and Jan Mayen", + flag: "🇸🇯", + }, + { + name: "Swaziland", + flag: "🇸🇿", + }, + { + name: "Sweden", + flag: "🇸🇪", + }, + { + name: "Switzerland", + flag: "🇨🇭", + }, + { + name: "Syrian Arab Republic", + flag: "🇸🇾", + }, + { + name: "Taiwan, Province of China", + flag: "🇹🇼", + }, + { + name: "Tajikistan", + flag: "🇹🇯", + }, + { + name: "Tanzania, United Republic of", + flag: "🇹🇿", + }, + { + name: "Thailand", + flag: "🇹🇭", + }, + { + name: "Timor-Leste", + flag: "🇹🇱", + }, + { + name: "Togo", + flag: "🇹🇬", + }, + { + name: "Tokelau", + flag: "🇹🇰", + }, + { + name: "Tonga", + flag: "🇹🇴", + }, + { + name: "Trinidad and Tobago", + flag: "🇹🇹", + }, + { + name: "Tunisia", + flag: "🇹🇳", + }, + { + name: "Turkey", + flag: "🇹🇷", + }, + { + name: "Turkmenistan", + flag: "🇹🇲", + }, + { + name: "Turks and Caicos Islands", + flag: "🇹🇨", + }, + { + name: "Tuvalu", + flag: "🇹🇻", + }, + { + name: "Uganda", + flag: "🇺🇬", + }, + { + name: "Ukraine", + flag: "🇺🇦", + }, + { + name: "United Arab Emirates", + flag: "🇦🇪", + }, + { + name: "United Kingdom", + flag: "🇬🇧", + }, + { + name: "United States", + flag: "🇺🇸", + }, + { + name: "United States Minor Outlying Islands", + flag: "🇺🇲", + }, + { + name: "Uruguay", + flag: "🇺🇾", + }, + { + name: "Uzbekistan", + flag: "🇺🇿", + }, + { + name: "Vanuatu", + flag: "🇻🇺", + }, + { + name: "Venezuela, Bolivarian Republic of", + flag: "🇻🇪", + }, + { + name: "Vietnam", + flag: "🇻🇳", + }, + { + name: "Virgin Islands, British", + flag: "🇻🇬", + }, + { + name: "Virgin Islands, U.S.", + flag: "🇻🇮", + }, + { + name: "Wallis and Futuna", + flag: "🇼🇫", + }, + { + name: "Western Sahara", + flag: "🇪🇭", + }, + { + name: "Yemen", + flag: "🇾🇪", + }, + { + name: "Zambia", + flag: "🇿🇲", + }, + { + name: "Zimbabwe", + flag: "🇿🇼", + }, +]; diff --git a/site/src/api/rbacresourcesGenerated.ts b/site/src/api/rbacresourcesGenerated.ts index 34b2ddf021ace..d714d3dbdabf0 100644 --- a/site/src/api/rbacresourcesGenerated.ts +++ b/site/src/api/rbacresourcesGenerated.ts @@ -1,4 +1,4 @@ -// Code generated by rbacgen/main.go. DO NOT EDIT. +// Code generated by typegen/main.go. DO NOT EDIT. import type { RBACAction, RBACResource } from "./typesGenerated"; diff --git a/site/src/api/typesGenerated.ts b/site/src/api/typesGenerated.ts index c72ae07c113b7..d687fb68ec61f 100644 --- a/site/src/api/typesGenerated.ts +++ b/site/src/api/typesGenerated.ts @@ -1,259 +1,5 @@ // Code generated by 'make site/src/api/typesGenerated.ts'. DO NOT EDIT. -// The code below is generated from codersdk/countries.go. -export const countries = [ - {"name":"Afghanistan","flag":"🇦🇫"}, - {"name":"Åland Islands","flag":"🇦🇽"}, - {"name":"Albania","flag":"🇦🇱"}, - {"name":"Algeria","flag":"🇩🇿"}, - {"name":"American Samoa","flag":"🇦🇸"}, - {"name":"Andorra","flag":"🇦🇩"}, - {"name":"Angola","flag":"🇦🇴"}, - {"name":"Anguilla","flag":"🇦🇮"}, - {"name":"Antarctica","flag":"🇦🇶"}, - {"name":"Antigua and Barbuda","flag":"🇦🇬"}, - {"name":"Argentina","flag":"🇦🇷"}, - {"name":"Armenia","flag":"🇦🇲"}, - {"name":"Aruba","flag":"🇦🇼"}, - {"name":"Australia","flag":"🇦🇺"}, - {"name":"Austria","flag":"🇦🇹"}, - {"name":"Azerbaijan","flag":"🇦🇿"}, - {"name":"Bahamas","flag":"🇧🇸"}, - {"name":"Bahrain","flag":"🇧🇭"}, - {"name":"Bangladesh","flag":"🇧🇩"}, - {"name":"Barbados","flag":"🇧🇧"}, - {"name":"Belarus","flag":"🇧🇾"}, - {"name":"Belgium","flag":"🇧🇪"}, - {"name":"Belize","flag":"🇧🇿"}, - {"name":"Benin","flag":"🇧🇯"}, - {"name":"Bermuda","flag":"🇧🇲"}, - {"name":"Bhutan","flag":"🇧🇹"}, - {"name":"Bolivia, Plurinational State of","flag":"🇧🇴"}, - {"name":"Bonaire, Sint Eustatius and Saba","flag":"🇧🇶"}, - {"name":"Bosnia and Herzegovina","flag":"🇧🇦"}, - {"name":"Botswana","flag":"🇧🇼"}, - {"name":"Bouvet Island","flag":"🇧🇻"}, - {"name":"Brazil","flag":"🇧🇷"}, - {"name":"British Indian Ocean Territory","flag":"🇮🇴"}, - {"name":"Brunei Darussalam","flag":"🇧🇳"}, - {"name":"Bulgaria","flag":"🇧🇬"}, - {"name":"Burkina Faso","flag":"🇧🇫"}, - {"name":"Burundi","flag":"🇧🇮"}, - {"name":"Cambodia","flag":"🇰🇭"}, - {"name":"Cameroon","flag":"🇨🇲"}, - {"name":"Canada","flag":"🇨🇦"}, - {"name":"Cape Verde","flag":"🇨🇻"}, - {"name":"Cayman Islands","flag":"🇰🇾"}, - {"name":"Central African Republic","flag":"🇨🇫"}, - {"name":"Chad","flag":"🇹🇩"}, - {"name":"Chile","flag":"🇨🇱"}, - {"name":"China","flag":"🇨🇳"}, - {"name":"Christmas Island","flag":"🇨🇽"}, - {"name":"Cocos (Keeling) Islands","flag":"🇨🇨"}, - {"name":"Colombia","flag":"🇨🇴"}, - {"name":"Comoros","flag":"🇰🇲"}, - {"name":"Congo","flag":"🇨🇬"}, - {"name":"Congo, the Democratic Republic of the","flag":"🇨🇩"}, - {"name":"Cook Islands","flag":"🇨🇰"}, - {"name":"Costa Rica","flag":"🇨🇷"}, - {"name":"Côte d'Ivoire","flag":"🇨🇮"}, - {"name":"Croatia","flag":"🇭🇷"}, - {"name":"Cuba","flag":"🇨🇺"}, - {"name":"Curaçao","flag":"🇨🇼"}, - {"name":"Cyprus","flag":"🇨🇾"}, - {"name":"Czech Republic","flag":"🇨🇿"}, - {"name":"Denmark","flag":"🇩🇰"}, - {"name":"Djibouti","flag":"🇩🇯"}, - {"name":"Dominica","flag":"🇩🇲"}, - {"name":"Dominican Republic","flag":"🇩🇴"}, - {"name":"Ecuador","flag":"🇪🇨"}, - {"name":"Egypt","flag":"🇪🇬"}, - {"name":"El Salvador","flag":"🇸🇻"}, - {"name":"Equatorial Guinea","flag":"🇬🇶"}, - {"name":"Eritrea","flag":"🇪🇷"}, - {"name":"Estonia","flag":"🇪🇪"}, - {"name":"Ethiopia","flag":"🇪🇹"}, - {"name":"Falkland Islands (Malvinas)","flag":"🇫🇰"}, - {"name":"Faroe Islands","flag":"🇫🇴"}, - {"name":"Fiji","flag":"🇫🇯"}, - {"name":"Finland","flag":"🇫🇮"}, - {"name":"France","flag":"🇫🇷"}, - {"name":"French Guiana","flag":"🇬🇫"}, - {"name":"French Polynesia","flag":"🇵🇫"}, - {"name":"French Southern Territories","flag":"🇹🇫"}, - {"name":"Gabon","flag":"🇬🇦"}, - {"name":"Gambia","flag":"🇬🇲"}, - {"name":"Georgia","flag":"🇬🇪"}, - {"name":"Germany","flag":"🇩🇪"}, - {"name":"Ghana","flag":"🇬🇭"}, - {"name":"Gibraltar","flag":"🇬🇮"}, - {"name":"Greece","flag":"🇬🇷"}, - {"name":"Greenland","flag":"🇬🇱"}, - {"name":"Grenada","flag":"🇬🇩"}, - {"name":"Guadeloupe","flag":"🇬🇵"}, - {"name":"Guam","flag":"🇬🇺"}, - {"name":"Guatemala","flag":"🇬🇹"}, - {"name":"Guernsey","flag":"🇬🇬"}, - {"name":"Guinea","flag":"🇬🇳"}, - {"name":"Guinea-Bissau","flag":"🇬🇼"}, - {"name":"Guyana","flag":"🇬🇾"}, - {"name":"Haiti","flag":"🇭🇹"}, - {"name":"Heard Island and McDonald Islands","flag":"🇭🇲"}, - {"name":"Holy See (Vatican City State)","flag":"🇻🇦"}, - {"name":"Honduras","flag":"🇭🇳"}, - {"name":"Hong Kong","flag":"🇭🇰"}, - {"name":"Hungary","flag":"🇭🇺"}, - {"name":"Iceland","flag":"🇮🇸"}, - {"name":"India","flag":"🇮🇳"}, - {"name":"Indonesia","flag":"🇮🇩"}, - {"name":"Iran, Islamic Republic of","flag":"🇮🇷"}, - {"name":"Iraq","flag":"🇮🇶"}, - {"name":"Ireland","flag":"🇮🇪"}, - {"name":"Isle of Man","flag":"🇮🇲"}, - {"name":"Israel","flag":"🇮🇱"}, - {"name":"Italy","flag":"🇮🇹"}, - {"name":"Jamaica","flag":"🇯🇲"}, - {"name":"Japan","flag":"🇯🇵"}, - {"name":"Jersey","flag":"🇯🇪"}, - {"name":"Jordan","flag":"🇯🇴"}, - {"name":"Kazakhstan","flag":"🇰🇿"}, - {"name":"Kenya","flag":"🇰🇪"}, - {"name":"Kiribati","flag":"🇰🇮"}, - {"name":"Korea, Democratic People's Republic of","flag":"🇰🇵"}, - {"name":"Korea, Republic of","flag":"🇰🇷"}, - {"name":"Kuwait","flag":"🇰🇼"}, - {"name":"Kyrgyzstan","flag":"🇰🇬"}, - {"name":"Lao People's Democratic Republic","flag":"🇱🇦"}, - {"name":"Latvia","flag":"🇱🇻"}, - {"name":"Lebanon","flag":"🇱🇧"}, - {"name":"Lesotho","flag":"🇱🇸"}, - {"name":"Liberia","flag":"🇱🇷"}, - {"name":"Libya","flag":"🇱🇾"}, - {"name":"Liechtenstein","flag":"🇱🇮"}, - {"name":"Lithuania","flag":"🇱🇹"}, - {"name":"Luxembourg","flag":"🇱🇺"}, - {"name":"Macao","flag":"🇲🇴"}, - {"name":"Macedonia, the Former Yugoslav Republic of","flag":"🇲🇰"}, - {"name":"Madagascar","flag":"🇲🇬"}, - {"name":"Malawi","flag":"🇲🇼"}, - {"name":"Malaysia","flag":"🇲🇾"}, - {"name":"Maldives","flag":"🇲🇻"}, - {"name":"Mali","flag":"🇲🇱"}, - {"name":"Malta","flag":"🇲🇹"}, - {"name":"Marshall Islands","flag":"🇲🇭"}, - {"name":"Martinique","flag":"🇲🇶"}, - {"name":"Mauritania","flag":"🇲🇷"}, - {"name":"Mauritius","flag":"🇲🇺"}, - {"name":"Mayotte","flag":"🇾🇹"}, - {"name":"Mexico","flag":"🇲🇽"}, - {"name":"Micronesia, Federated States of","flag":"🇫🇲"}, - {"name":"Moldova, Republic of","flag":"🇲🇩"}, - {"name":"Monaco","flag":"🇲🇨"}, - {"name":"Mongolia","flag":"🇲🇳"}, - {"name":"Montenegro","flag":"🇲🇪"}, - {"name":"Montserrat","flag":"🇲🇸"}, - {"name":"Morocco","flag":"🇲🇦"}, - {"name":"Mozambique","flag":"🇲🇿"}, - {"name":"Myanmar","flag":"🇲🇲"}, - {"name":"Namibia","flag":"🇳🇦"}, - {"name":"Nauru","flag":"🇳🇷"}, - {"name":"Nepal","flag":"🇳🇵"}, - {"name":"Netherlands","flag":"🇳🇱"}, - {"name":"New Caledonia","flag":"🇳🇨"}, - {"name":"New Zealand","flag":"🇳🇿"}, - {"name":"Nicaragua","flag":"🇳🇮"}, - {"name":"Niger","flag":"🇳🇪"}, - {"name":"Nigeria","flag":"🇳🇬"}, - {"name":"Niue","flag":"🇳🇺"}, - {"name":"Norfolk Island","flag":"🇳🇫"}, - {"name":"Northern Mariana Islands","flag":"🇲🇵"}, - {"name":"Norway","flag":"🇳🇴"}, - {"name":"Oman","flag":"🇴🇲"}, - {"name":"Pakistan","flag":"🇵🇰"}, - {"name":"Palau","flag":"🇵🇼"}, - {"name":"Palestine, State of","flag":"🇵🇸"}, - {"name":"Panama","flag":"🇵🇦"}, - {"name":"Papua New Guinea","flag":"🇵🇬"}, - {"name":"Paraguay","flag":"🇵🇾"}, - {"name":"Peru","flag":"🇵🇪"}, - {"name":"Philippines","flag":"🇵🇭"}, - {"name":"Pitcairn","flag":"🇵🇳"}, - {"name":"Poland","flag":"🇵🇱"}, - {"name":"Portugal","flag":"🇵🇹"}, - {"name":"Puerto Rico","flag":"🇵🇷"}, - {"name":"Qatar","flag":"🇶🇦"}, - {"name":"Réunion","flag":"🇷🇪"}, - {"name":"Romania","flag":"🇷🇴"}, - {"name":"Russian Federation","flag":"🇷🇺"}, - {"name":"Rwanda","flag":"🇷🇼"}, - {"name":"Saint Barthélemy","flag":"🇧🇱"}, - {"name":"Saint Helena, Ascension and Tristan da Cunha","flag":"🇸🇭"}, - {"name":"Saint Kitts and Nevis","flag":"🇰🇳"}, - {"name":"Saint Lucia","flag":"🇱🇨"}, - {"name":"Saint Martin (French part)","flag":"🇲🇫"}, - {"name":"Saint Pierre and Miquelon","flag":"🇵🇲"}, - {"name":"Saint Vincent and the Grenadines","flag":"🇻🇨"}, - {"name":"Samoa","flag":"🇼🇸"}, - {"name":"San Marino","flag":"🇸🇲"}, - {"name":"Sao Tome and Principe","flag":"🇸🇹"}, - {"name":"Saudi Arabia","flag":"🇸🇦"}, - {"name":"Senegal","flag":"🇸🇳"}, - {"name":"Serbia","flag":"🇷🇸"}, - {"name":"Seychelles","flag":"🇸🇨"}, - {"name":"Sierra Leone","flag":"🇸🇱"}, - {"name":"Singapore","flag":"🇸🇬"}, - {"name":"Sint Maarten (Dutch part)","flag":"🇸🇽"}, - {"name":"Slovakia","flag":"🇸🇰"}, - {"name":"Slovenia","flag":"🇸🇮"}, - {"name":"Solomon Islands","flag":"🇸🇧"}, - {"name":"Somalia","flag":"🇸🇴"}, - {"name":"South Africa","flag":"🇿🇦"}, - {"name":"South Georgia and the South Sandwich Islands","flag":"🇬🇸"}, - {"name":"South Sudan","flag":"🇸🇸"}, - {"name":"Spain","flag":"🇪🇸"}, - {"name":"Sri Lanka","flag":"🇱🇰"}, - {"name":"Sudan","flag":"🇸🇩"}, - {"name":"Suriname","flag":"🇸🇷"}, - {"name":"Svalbard and Jan Mayen","flag":"🇸🇯"}, - {"name":"Swaziland","flag":"🇸🇿"}, - {"name":"Sweden","flag":"🇸🇪"}, - {"name":"Switzerland","flag":"🇨🇭"}, - {"name":"Syrian Arab Republic","flag":"🇸🇾"}, - {"name":"Taiwan, Province of China","flag":"🇹🇼"}, - {"name":"Tajikistan","flag":"🇹🇯"}, - {"name":"Tanzania, United Republic of","flag":"🇹🇿"}, - {"name":"Thailand","flag":"🇹🇭"}, - {"name":"Timor-Leste","flag":"🇹🇱"}, - {"name":"Togo","flag":"🇹🇬"}, - {"name":"Tokelau","flag":"🇹🇰"}, - {"name":"Tonga","flag":"🇹🇴"}, - {"name":"Trinidad and Tobago","flag":"🇹🇹"}, - {"name":"Tunisia","flag":"🇹🇳"}, - {"name":"Turkey","flag":"🇹🇷"}, - {"name":"Turkmenistan","flag":"🇹🇲"}, - {"name":"Turks and Caicos Islands","flag":"🇹🇨"}, - {"name":"Tuvalu","flag":"🇹🇻"}, - {"name":"Uganda","flag":"🇺🇬"}, - {"name":"Ukraine","flag":"🇺🇦"}, - {"name":"United Arab Emirates","flag":"🇦🇪"}, - {"name":"United Kingdom","flag":"🇬🇧"}, - {"name":"United States","flag":"🇺🇸"}, - {"name":"United States Minor Outlying Islands","flag":"🇺🇲"}, - {"name":"Uruguay","flag":"🇺🇾"}, - {"name":"Uzbekistan","flag":"🇺🇿"}, - {"name":"Vanuatu","flag":"🇻🇺"}, - {"name":"Venezuela, Bolivarian Republic of","flag":"🇻🇪"}, - {"name":"Vietnam","flag":"🇻🇳"}, - {"name":"Virgin Islands, British","flag":"🇻🇬"}, - {"name":"Virgin Islands, U.S.","flag":"🇻🇮"}, - {"name":"Wallis and Futuna","flag":"🇼🇫"}, - {"name":"Western Sahara","flag":"🇪🇭"}, - {"name":"Yemen","flag":"🇾🇪"}, - {"name":"Zambia","flag":"🇿🇲"}, - {"name":"Zimbabwe","flag":"🇿🇼"}, -] - - // The code below is generated from codersdk. // From codersdk/templates.go diff --git a/site/src/pages/SetupPage/SetupPageView.tsx b/site/src/pages/SetupPage/SetupPageView.tsx index 6f03c69aea97d..5087488c2af27 100644 --- a/site/src/pages/SetupPage/SetupPageView.tsx +++ b/site/src/pages/SetupPage/SetupPageView.tsx @@ -6,7 +6,7 @@ import Link from "@mui/material/Link"; import MenuItem from "@mui/material/MenuItem"; import TextField from "@mui/material/TextField"; import type * as TypesGen from "api/typesGenerated"; -import { countries } from "api/typesGenerated"; +import { countries } from "api/countriesGenerated"; import { isAxiosError } from "axios"; import { Alert, AlertDetail } from "components/Alert/Alert"; import { FormFields, VerticalForm } from "components/Form/Form"; From 06a11f417f9db015d3001d5573aac1aa84f8f679 Mon Sep 17 00:00:00 2001 From: joobisb Date: Wed, 13 Nov 2024 19:45:54 +0530 Subject: [PATCH 9/9] fix formatting --- site/src/pages/SetupPage/SetupPageView.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/site/src/pages/SetupPage/SetupPageView.tsx b/site/src/pages/SetupPage/SetupPageView.tsx index 5087488c2af27..6faf2ae617d0d 100644 --- a/site/src/pages/SetupPage/SetupPageView.tsx +++ b/site/src/pages/SetupPage/SetupPageView.tsx @@ -5,8 +5,8 @@ import Checkbox from "@mui/material/Checkbox"; import Link from "@mui/material/Link"; import MenuItem from "@mui/material/MenuItem"; import TextField from "@mui/material/TextField"; -import type * as TypesGen from "api/typesGenerated"; import { countries } from "api/countriesGenerated"; +import type * as TypesGen from "api/typesGenerated"; import { isAxiosError } from "axios"; import { Alert, AlertDetail } from "components/Alert/Alert"; import { FormFields, VerticalForm } from "components/Form/Form";