diff --git a/internal/yamlmap/yaml_map.go b/internal/yamlmap/yaml_map.go index ac2d54d..6c904ba 100644 --- a/internal/yamlmap/yaml_map.go +++ b/internal/yamlmap/yaml_map.go @@ -147,6 +147,10 @@ func (m *Map) SetEntry(key string, value *Map) { // has no impact for our purposes. func (m *Map) SetModified() { // Can not mark a non-mapping node as modified + if m.Node.Kind != yaml.MappingNode && m.Node.Tag == "!!null" { + m.Node.Kind = yaml.MappingNode + m.Node.Tag = "!!map" + } if m.Node.Kind == yaml.MappingNode { m.Node.Value = modified } diff --git a/pkg/auth/auth.go b/pkg/auth/auth.go index 6c663ee..1bcd5eb 100644 --- a/pkg/auth/auth.go +++ b/pkg/auth/auth.go @@ -4,6 +4,7 @@ package auth import ( "os" + "strconv" "strings" "github.com/cli/go-gh/internal/set" @@ -11,6 +12,7 @@ import ( ) const ( + codespaces = "CODESPACES" defaultSource = "default" ghEnterpriseToken = "GH_ENTERPRISE_TOKEN" ghHost = "GH_HOST" @@ -40,6 +42,11 @@ func tokenForHost(cfg *config.Config, host string) (string, string) { if token := os.Getenv(githubEnterpriseToken); token != "" { return token, githubEnterpriseToken } + if isCodespaces, _ := strconv.ParseBool(os.Getenv(codespaces)); isCodespaces { + if token := os.Getenv(githubToken); token != "" { + return token, githubToken + } + } if cfg != nil { token, _ := cfg.Get([]string{hostsKey, host, oauthToken}) return token, oauthToken diff --git a/pkg/config/config.go b/pkg/config/config.go index a3efc81..20d0bee 100644 --- a/pkg/config/config.go +++ b/pkg/config/config.go @@ -205,11 +205,11 @@ func load(generalFilePath, hostsFilePath string) (*Config, error) { } func generalConfigFile() string { - return filepath.Join(configDir(), "config.yml") + return filepath.Join(ConfigDir(), "config.yml") } func hostsConfigFile() string { - return filepath.Join(configDir(), "hosts.yml") + return filepath.Join(ConfigDir(), "hosts.yml") } func mapFromFile(filename string) (*yamlmap.Map, error) { @@ -225,7 +225,7 @@ func mapFromString(str string) (*yamlmap.Map, error) { } // Config path precedence: GH_CONFIG_DIR, XDG_CONFIG_HOME, AppData (windows only), HOME. -func configDir() string { +func ConfigDir() string { var path string if a := os.Getenv(ghConfigDir); a != "" { path = a @@ -241,7 +241,7 @@ func configDir() string { } // State path precedence: XDG_STATE_HOME, LocalAppData (windows only), HOME. -func stateDir() string { +func StateDir() string { var path string if a := os.Getenv(xdgStateHome); a != "" { path = filepath.Join(a, "gh") @@ -255,7 +255,7 @@ func stateDir() string { } // Data path precedence: XDG_DATA_HOME, LocalAppData (windows only), HOME. -func dataDir() string { +func DataDir() string { var path string if a := os.Getenv(xdgDataHome); a != "" { path = filepath.Join(a, "gh") diff --git a/pkg/config/config_test.go b/pkg/config/config_test.go index 4cfff41..52c3c72 100644 --- a/pkg/config/config_test.go +++ b/pkg/config/config_test.go @@ -92,7 +92,7 @@ func TestConfigDir(t *testing.T) { defer os.Setenv(k, old) } } - assert.Equal(t, tt.output, configDir()) + assert.Equal(t, tt.output, ConfigDir()) }) } } @@ -156,7 +156,7 @@ func TestStateDir(t *testing.T) { defer os.Setenv(k, old) } } - assert.Equal(t, tt.output, stateDir()) + assert.Equal(t, tt.output, StateDir()) }) } } @@ -220,7 +220,7 @@ func TestDataDir(t *testing.T) { defer os.Setenv(k, old) } } - assert.Equal(t, tt.output, dataDir()) + assert.Equal(t, tt.output, DataDir()) }) } }