summaryrefslogtreecommitdiffstats
path: root/modules/repository/env.go
diff options
context:
space:
mode:
authorDaniel Baumann <daniel@debian.org>2024-10-18 20:33:49 +0200
committerDaniel Baumann <daniel@debian.org>2024-10-18 20:33:49 +0200
commitdd136858f1ea40ad3c94191d647487fa4f31926c (patch)
tree58fec94a7b2a12510c9664b21793f1ed560c6518 /modules/repository/env.go
parentInitial commit. (diff)
downloadforgejo-upstream/9.0.0.tar.xz
forgejo-upstream/9.0.0.zip
Adding upstream version 9.0.0.upstream/9.0.0upstreamdebian
Signed-off-by: Daniel Baumann <daniel@debian.org>
Diffstat (limited to 'modules/repository/env.go')
-rw-r--r--modules/repository/env.go87
1 files changed, 87 insertions, 0 deletions
diff --git a/modules/repository/env.go b/modules/repository/env.go
new file mode 100644
index 0000000..e4f3209
--- /dev/null
+++ b/modules/repository/env.go
@@ -0,0 +1,87 @@
+// Copyright 2019 The Gitea Authors. All rights reserved.
+// SPDX-License-Identifier: MIT
+
+package repository
+
+import (
+ "fmt"
+ "os"
+ "strings"
+
+ repo_model "code.gitea.io/gitea/models/repo"
+ user_model "code.gitea.io/gitea/models/user"
+ "code.gitea.io/gitea/modules/setting"
+)
+
+// env keys for git hooks need
+const (
+ EnvRepoName = "GITEA_REPO_NAME"
+ EnvRepoUsername = "GITEA_REPO_USER_NAME"
+ EnvRepoID = "GITEA_REPO_ID"
+ EnvRepoIsWiki = "GITEA_REPO_IS_WIKI"
+ EnvPusherName = "GITEA_PUSHER_NAME"
+ EnvPusherEmail = "GITEA_PUSHER_EMAIL"
+ EnvPusherID = "GITEA_PUSHER_ID"
+ EnvKeyID = "GITEA_KEY_ID" // public key ID
+ EnvDeployKeyID = "GITEA_DEPLOY_KEY_ID"
+ EnvPRID = "GITEA_PR_ID"
+ EnvPushTrigger = "GITEA_PUSH_TRIGGER"
+ EnvIsInternal = "GITEA_INTERNAL_PUSH"
+ EnvAppURL = "GITEA_ROOT_URL"
+ EnvActionPerm = "GITEA_ACTION_PERM"
+)
+
+type PushTrigger string
+
+const (
+ PushTriggerPRMergeToBase PushTrigger = "pr-merge-to-base"
+ PushTriggerPRUpdateWithBase PushTrigger = "pr-update-with-base"
+)
+
+// InternalPushingEnvironment returns an os environment to switch off hooks on push
+// It is recommended to avoid using this unless you are pushing within a transaction
+// or if you absolutely are sure that post-receive and pre-receive will do nothing
+// We provide the full pushing-environment for other hook providers
+func InternalPushingEnvironment(doer *user_model.User, repo *repo_model.Repository) []string {
+ return append(PushingEnvironment(doer, repo),
+ EnvIsInternal+"=true",
+ )
+}
+
+// PushingEnvironment returns an os environment to allow hooks to work on push
+func PushingEnvironment(doer *user_model.User, repo *repo_model.Repository) []string {
+ return FullPushingEnvironment(doer, doer, repo, repo.Name, 0)
+}
+
+// FullPushingEnvironment returns an os environment to allow hooks to work on push
+func FullPushingEnvironment(author, committer *user_model.User, repo *repo_model.Repository, repoName string, prID int64) []string {
+ isWiki := "false"
+ if strings.HasSuffix(repoName, ".wiki") {
+ isWiki = "true"
+ }
+
+ authorSig := author.NewGitSig()
+ committerSig := committer.NewGitSig()
+
+ environ := append(os.Environ(),
+ "GIT_AUTHOR_NAME="+authorSig.Name,
+ "GIT_AUTHOR_EMAIL="+authorSig.Email,
+ "GIT_COMMITTER_NAME="+committerSig.Name,
+ "GIT_COMMITTER_EMAIL="+committerSig.Email,
+ EnvRepoName+"="+repoName,
+ EnvRepoUsername+"="+repo.OwnerName,
+ EnvRepoIsWiki+"="+isWiki,
+ EnvPusherName+"="+committer.Name,
+ EnvPusherID+"="+fmt.Sprintf("%d", committer.ID),
+ EnvRepoID+"="+fmt.Sprintf("%d", repo.ID),
+ EnvPRID+"="+fmt.Sprintf("%d", prID),
+ EnvAppURL+"="+setting.AppURL,
+ "SSH_ORIGINAL_COMMAND=gitea-internal",
+ )
+
+ if !committer.KeepEmailPrivate {
+ environ = append(environ, EnvPusherEmail+"="+committer.Email)
+ }
+
+ return environ
+}