Add git host cli tools
Signed-off-by: Nikolaos Karaolidis <nick@karaolidis.com>
This commit is contained in:
@@ -5,6 +5,7 @@ final: prev:
|
||||
hyprland = import ./hyprland final prev;
|
||||
mpv = import ./mpv final prev;
|
||||
spicetify-cli = import ./spicetify-cli final prev;
|
||||
tea = import ./tea final prev;
|
||||
telepresence = import ./telepresence final prev;
|
||||
}
|
||||
// (import ../packages { pkgs = final; })
|
||||
@@ -81,6 +82,7 @@ final: prev:
|
||||
};
|
||||
|
||||
sshKnownHosts = prev.sshKnownHosts or { } // {
|
||||
gitea = final.ssh-known-hosts-gitea;
|
||||
github = final.ssh-known-hosts-github;
|
||||
gitlab = final.ssh-known-hosts-gitlab;
|
||||
};
|
||||
|
10
overlays/tea/default.nix
Normal file
10
overlays/tea/default.nix
Normal file
@@ -0,0 +1,10 @@
|
||||
final: prev:
|
||||
prev.tea.overrideAttrs (oldAttrs: {
|
||||
patches = oldAttrs.patches or [ ] ++ [
|
||||
(builtins.fetchurl {
|
||||
url = "https://gitea.com/gitea/tea/pulls/639.patch";
|
||||
sha256 = "sha256:0c5gpi6aajd3h0wp7lrvj5qk9wsqhgbap7ijvl0x117v0g8mgzvs";
|
||||
})
|
||||
./instance-ssh-host-env.patch
|
||||
];
|
||||
})
|
174
overlays/tea/instance-ssh-host-env.patch
Normal file
174
overlays/tea/instance-ssh-host-env.patch
Normal file
@@ -0,0 +1,174 @@
|
||||
diff --git a/modules/config/login.go b/modules/config/login.go
|
||||
index 3b77fb9..94de9cd 100644
|
||||
--- a/modules/config/login.go
|
||||
+++ b/modules/config/login.go
|
||||
@@ -13,6 +13,7 @@ import (
|
||||
"net/http/cookiejar"
|
||||
"net/url"
|
||||
"os"
|
||||
+ "strconv"
|
||||
"strings"
|
||||
"time"
|
||||
|
||||
@@ -200,6 +201,63 @@ func UpdateLogin(login *Login) error {
|
||||
return saveConfig()
|
||||
}
|
||||
|
||||
+// CreateLoginFromEnvVars returns a login based on environment variables, or nil if no login can be created
|
||||
+func CreateLoginFromEnvVars() (*Login, error) {
|
||||
+ var token string
|
||||
+
|
||||
+ giteaToken := os.Getenv("GITEA_TOKEN")
|
||||
+ githubToken := os.Getenv("GH_TOKEN")
|
||||
+ giteaInstanceURL := os.Getenv("GITEA_INSTANCE_URL")
|
||||
+ instanceInsecure := os.Getenv("GITEA_INSTANCE_INSECURE")
|
||||
+ giteaInstanceSSHHost := os.Getenv("GITEA_INSTANCE_SSH_HOST")
|
||||
+ insecure := false
|
||||
+ if len(instanceInsecure) > 0 {
|
||||
+ insecure, _ = strconv.ParseBool(instanceInsecure)
|
||||
+ }
|
||||
+
|
||||
+ // if no tokens are set, or no instance url for gitea fail fast
|
||||
+ if len(giteaInstanceURL) == 0 || (len(giteaToken) == 0 && len(githubToken) == 0) {
|
||||
+ return nil, nil
|
||||
+ }
|
||||
+
|
||||
+ token = giteaToken
|
||||
+ if len(giteaToken) == 0 {
|
||||
+ token = githubToken
|
||||
+ }
|
||||
+
|
||||
+ login := &Login{
|
||||
+ Name: "GITEA_LOGIN_VIA_ENV",
|
||||
+ URL: giteaInstanceURL,
|
||||
+ Token: token,
|
||||
+ SSHHost: giteaInstanceSSHHost,
|
||||
+ Insecure: insecure,
|
||||
+ SSHKey: "",
|
||||
+ SSHCertPrincipal: "",
|
||||
+ SSHKeyFingerprint: "",
|
||||
+ SSHAgent: false,
|
||||
+ VersionCheck: true,
|
||||
+ Created: time.Now().Unix(),
|
||||
+ }
|
||||
+
|
||||
+ client := login.Client()
|
||||
+ u, _, err := client.GetMyUserInfo()
|
||||
+ if err != nil {
|
||||
+ return nil, fmt.Errorf("failed to validate token: %s", err)
|
||||
+ }
|
||||
+
|
||||
+ login.User = u.UserName
|
||||
+
|
||||
+ if login.SSHHost == "" {
|
||||
+ parsedURL, err := url.Parse(giteaInstanceURL)
|
||||
+ if err != nil {
|
||||
+ return nil, err
|
||||
+ }
|
||||
+ login.SSHHost = parsedURL.Host
|
||||
+ }
|
||||
+
|
||||
+ return login, nil
|
||||
+}
|
||||
+
|
||||
// Client returns a client to operate Gitea API. You may provide additional modifiers
|
||||
// for the client like gitea.SetBasicAuth() for customization
|
||||
func (l *Login) Client(options ...gitea.ClientOption) *gitea.Client {
|
||||
diff --git a/modules/context/context.go b/modules/context/context.go
|
||||
index aec5592..636eeec 100644
|
||||
--- a/modules/context/context.go
|
||||
+++ b/modules/context/context.go
|
||||
@@ -9,9 +9,7 @@ import (
|
||||
"log"
|
||||
"os"
|
||||
"path"
|
||||
- "strconv"
|
||||
"strings"
|
||||
- "time"
|
||||
|
||||
"code.gitea.io/tea/modules/config"
|
||||
"code.gitea.io/tea/modules/git"
|
||||
@@ -108,16 +106,6 @@ func InitCommand(cmd *cli.Command) *TeaContext {
|
||||
c.RepoSlug = repoFlag
|
||||
}
|
||||
|
||||
- // override config user with env variable
|
||||
- envLogin := GetLoginByEnvVar()
|
||||
- if envLogin != nil {
|
||||
- _, err := utils.ValidateAuthenticationMethod(envLogin.URL, envLogin.Token, "", "", false, "", "")
|
||||
- if err != nil {
|
||||
- log.Fatal(err.Error())
|
||||
- }
|
||||
- c.Login = envLogin
|
||||
- }
|
||||
-
|
||||
// override login from flag, or use default login if repo based detection failed
|
||||
if len(loginFlag) != 0 {
|
||||
c.Login = config.GetLoginByName(loginFlag)
|
||||
@@ -196,10 +184,25 @@ func contextFromLocalRepo(repoPath, remoteValue string) (*git.TeaRepo, *config.L
|
||||
return repo, nil, "", fmt.Errorf("Remote '%s' not found in this Git repository", remoteValue)
|
||||
}
|
||||
|
||||
+ envLogin, err := config.CreateLoginFromEnvVars()
|
||||
+ if err != nil {
|
||||
+ log.Fatal(err.Error())
|
||||
+ }
|
||||
+
|
||||
logins, err := config.GetLogins()
|
||||
if err != nil {
|
||||
return repo, nil, "", err
|
||||
}
|
||||
+
|
||||
+ if envLogin != nil {
|
||||
+ _, err := utils.ValidateAuthenticationMethod(envLogin.URL, envLogin.Token, "", "", false, "", "")
|
||||
+ if err != nil {
|
||||
+ log.Fatal(err.Error())
|
||||
+ }
|
||||
+
|
||||
+ logins = append([]config.Login{*envLogin}, logins...)
|
||||
+ }
|
||||
+
|
||||
for _, l := range logins {
|
||||
sshHost := l.GetSSHHost()
|
||||
for _, u := range remoteConfig.URLs {
|
||||
@@ -223,40 +226,3 @@ func contextFromLocalRepo(repoPath, remoteValue string) (*git.TeaRepo, *config.L
|
||||
|
||||
return repo, nil, "", errNotAGiteaRepo
|
||||
}
|
||||
-
|
||||
-// GetLoginByEnvVar returns a login based on environment variables, or nil if no login can be created
|
||||
-func GetLoginByEnvVar() *config.Login {
|
||||
- var token string
|
||||
-
|
||||
- giteaToken := os.Getenv("GITEA_TOKEN")
|
||||
- githubToken := os.Getenv("GH_TOKEN")
|
||||
- giteaInstanceURL := os.Getenv("GITEA_INSTANCE_URL")
|
||||
- instanceInsecure := os.Getenv("GITEA_INSTANCE_INSECURE")
|
||||
- insecure := false
|
||||
- if len(instanceInsecure) > 0 {
|
||||
- insecure, _ = strconv.ParseBool(instanceInsecure)
|
||||
- }
|
||||
-
|
||||
- // if no tokens are set, or no instance url for gitea fail fast
|
||||
- if len(giteaInstanceURL) == 0 || (len(giteaToken) == 0 && len(githubToken) == 0) {
|
||||
- return nil
|
||||
- }
|
||||
-
|
||||
- token = giteaToken
|
||||
- if len(giteaToken) == 0 {
|
||||
- token = githubToken
|
||||
- }
|
||||
-
|
||||
- return &config.Login{
|
||||
- Name: "GITEA_LOGIN_VIA_ENV",
|
||||
- URL: giteaInstanceURL,
|
||||
- Token: token,
|
||||
- Insecure: insecure,
|
||||
- SSHKey: "",
|
||||
- SSHCertPrincipal: "",
|
||||
- SSHKeyFingerprint: "",
|
||||
- SSHAgent: false,
|
||||
- Created: time.Now().Unix(),
|
||||
- VersionCheck: false,
|
||||
- }
|
||||
-}
|
Reference in New Issue
Block a user