Merge pull request #75 from floatdrop/github-enterprise-support
GitHub Enterprise Support
This commit is contained in:
commit
85e60e4ee2
16 changed files with 73 additions and 18 deletions
1
Makefile
1
Makefile
|
@ -69,6 +69,7 @@ clean:
|
|||
rm -rf usr/local/bin/drone
|
||||
rm -rf usr/local/bin/droned
|
||||
rm -rf drone.sqlite
|
||||
rm -rf /tmp/drone.sqlite
|
||||
|
||||
# creates a debian package for drone
|
||||
# to install `sudo dpkg -i drone.deb`
|
||||
|
|
|
@ -73,9 +73,9 @@ func (r *Repo) IsGit() bool {
|
|||
return true
|
||||
case strings.HasPrefix(r.Path, "ssh://git@"):
|
||||
return true
|
||||
case strings.HasPrefix(r.Path, "https://github.com/"):
|
||||
case strings.HasPrefix(r.Path, "https://github"):
|
||||
return true
|
||||
case strings.HasPrefix(r.Path, "http://github.com"):
|
||||
case strings.HasPrefix(r.Path, "http://github"):
|
||||
return true
|
||||
case strings.HasSuffix(r.Path, ".git"):
|
||||
return true
|
||||
|
|
|
@ -0,0 +1,23 @@
|
|||
package migrate
|
||||
|
||||
type Rev3 struct{}
|
||||
|
||||
var GitHubEnterpriseSupport = &Rev3{}
|
||||
|
||||
func (r *Rev3) Revision() int64 {
|
||||
return 201402211147
|
||||
}
|
||||
|
||||
func (r *Rev3) Up(op Operation) error {
|
||||
_, err := op.AddColumn("settings", "github_domain VARCHAR(255)")
|
||||
if err {
|
||||
return err
|
||||
}
|
||||
_, err = op.AddColumn("settings", "github_apiurl VARCHAR(255)")
|
||||
return err
|
||||
}
|
||||
|
||||
func (r *Rev3) Down(op Operation) error {
|
||||
_, err := op.DropColumns("settings", []string{"github_domain", "github_apiurl"})
|
||||
return err
|
||||
}
|
|
@ -49,7 +49,7 @@ insert into builds values (9, 3, 'node_0.80', 'Success', '2013-09-16 00:00:00','
|
|||
|
||||
-- insert default, dummy settings
|
||||
|
||||
insert into settings values (1,'','','','','','','','','','localhost:8080','http', 0);
|
||||
insert into settings values (1,'','','github.com','https://api.github.com','','','','','','','','localhost:8080','http',0);
|
||||
|
||||
-- add public & private keys to all repositories
|
||||
|
||||
|
|
|
@ -118,6 +118,8 @@ CREATE TABLE settings (
|
|||
id INTEGER PRIMARY KEY
|
||||
,github_key VARCHAR(255)
|
||||
,github_secret VARCHAR(255)
|
||||
,github_domain VARCHAR(255)
|
||||
,github_apiurl VARCHAR(255)
|
||||
,bitbucket_key VARCHAR(255)
|
||||
,bitbucket_secret VARCHAR(255)
|
||||
,smtp_server VARCHAR(1024)
|
||||
|
|
|
@ -103,6 +103,8 @@ CREATE TABLE settings (
|
|||
id INTEGER PRIMARY KEY
|
||||
,github_key VARCHAR(255)
|
||||
,github_secret VARCHAR(255)
|
||||
,github_domain VARCHAR(255)
|
||||
,github_apiurl VARCHAR(255)
|
||||
,bitbucket_key VARCHAR(255)
|
||||
,bitbucket_secret VARCHAR(255)
|
||||
,smtp_server VARCHAR(1024)
|
||||
|
|
|
@ -10,7 +10,7 @@ const settingsTable = "settings"
|
|||
|
||||
// SQL Queries to retrieve the system settings
|
||||
const settingsStmt = `
|
||||
SELECT id, github_key, github_secret, bitbucket_key, bitbucket_secret,
|
||||
SELECT id, github_key, github_secret, github_domain, github_apiurl, bitbucket_key, bitbucket_secret,
|
||||
smtp_server, smtp_port, smtp_address, smtp_username, smtp_password, hostname, scheme, open_invitations
|
||||
FROM settings WHERE id = 1
|
||||
`
|
||||
|
|
|
@ -167,6 +167,8 @@ func AdminSettingsUpdate(w http.ResponseWriter, r *http.Request, u *User) error
|
|||
// update github settings
|
||||
settings.GitHubKey = r.FormValue("GitHubKey")
|
||||
settings.GitHubSecret = r.FormValue("GitHubSecret")
|
||||
settings.GitHubDomain = r.FormValue("GitHubDomain")
|
||||
settings.GitHubApiUrl = r.FormValue("GitHubApiUrl")
|
||||
|
||||
// update smtp settings
|
||||
settings.SmtpServer = r.FormValue("SmtpServer")
|
||||
|
@ -243,6 +245,8 @@ func InstallPost(w http.ResponseWriter, r *http.Request) error {
|
|||
settings := Settings{}
|
||||
settings.Domain = r.FormValue("Domain")
|
||||
settings.Scheme = r.FormValue("Scheme")
|
||||
settings.GitHubApiUrl = "https://api.github.com";
|
||||
settings.GitHubDomain = "github.com";
|
||||
database.SaveSettings(&settings)
|
||||
|
||||
// add the user to the session object
|
||||
|
|
|
@ -48,8 +48,8 @@ func LinkGithub(w http.ResponseWriter, r *http.Request, u *User) error {
|
|||
// github OAuth2 Data
|
||||
var oauth = oauth2.Client{
|
||||
RedirectURL: settings.URL().String() + "/auth/login/github",
|
||||
AccessTokenURL: "https://github.com/login/oauth/access_token",
|
||||
AuthorizationURL: "https://github.com/login/oauth/authorize",
|
||||
AccessTokenURL: "https://" + settings.GitHubDomain + "/login/oauth/access_token",
|
||||
AuthorizationURL: "https://" + settings.GitHubDomain + "/login/oauth/authorize",
|
||||
ClientId: settings.GitHubKey,
|
||||
ClientSecret: settings.GitHubSecret,
|
||||
}
|
||||
|
@ -72,6 +72,7 @@ func LinkGithub(w http.ResponseWriter, r *http.Request, u *User) error {
|
|||
|
||||
// create the client
|
||||
client := github.New(token.AccessToken)
|
||||
client.ApiUrl = settings.GitHubApiUrl
|
||||
|
||||
// get the user information
|
||||
githubUser, err := client.Users.Current()
|
||||
|
|
|
@ -100,8 +100,13 @@ func Hook(w http.ResponseWriter, r *http.Request) error {
|
|||
commit.SetAuthor(hook.Commits[0].Author.Email)
|
||||
}
|
||||
|
||||
// get the github settings from the database
|
||||
settings := database.SettingsMust()
|
||||
|
||||
// get the drone.yml file from GitHub
|
||||
client := github.New(user.GithubToken)
|
||||
client.ApiUrl = settings.GitHubApiUrl
|
||||
|
||||
content, err := client.Contents.FindRef(repo.Owner, repo.Name, ".drone.yml", commit.Hash)
|
||||
if err != nil {
|
||||
msg := "No .drone.yml was found in this repository. You need to add one.\n"
|
||||
|
@ -216,8 +221,13 @@ func PullRequestHook(w http.ResponseWriter, r *http.Request) {
|
|||
commit.Message = hook.PullRequest.Title
|
||||
// label := p.PullRequest.Head.Labe
|
||||
|
||||
// get the github settings from the database
|
||||
settings := database.SettingsMust()
|
||||
|
||||
// get the drone.yml file from GitHub
|
||||
client := github.New(user.GithubToken)
|
||||
client.ApiUrl = settings.GitHubApiUrl
|
||||
|
||||
content, err := client.Contents.FindRef(repo.Owner, repo.Name, ".drone.yml", commit.Hash) // TODO should this really be the hash??
|
||||
if err != nil {
|
||||
println(err.Error())
|
||||
|
|
|
@ -54,6 +54,7 @@ func RepoDashboard(w http.ResponseWriter, r *http.Request, u *User, repo *Repo)
|
|||
}
|
||||
|
||||
func RepoAdd(w http.ResponseWriter, r *http.Request, u *User) error {
|
||||
settings := database.SettingsMust()
|
||||
teams, err := database.ListTeams(u.ID)
|
||||
if err != nil {
|
||||
return err
|
||||
|
@ -61,7 +62,8 @@ func RepoAdd(w http.ResponseWriter, r *http.Request, u *User) error {
|
|||
data := struct {
|
||||
User *User
|
||||
Teams []*Team
|
||||
}{u, teams}
|
||||
Settings *Settings
|
||||
}{u, teams, settings}
|
||||
// if the user hasn't linked their GitHub account
|
||||
// render a different template
|
||||
if len(u.GithubToken) == 0 {
|
||||
|
@ -82,12 +84,13 @@ func RepoCreateGithub(w http.ResponseWriter, r *http.Request, u *User) error {
|
|||
|
||||
// create the GitHub client
|
||||
client := github.New(u.GithubToken)
|
||||
client.ApiUrl = settings.GitHubApiUrl
|
||||
githubRepo, err := client.Repos.Find(owner, name)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
repo, err := NewGitHubRepo(owner, name, githubRepo.Private)
|
||||
repo, err := NewGitHubRepo(settings.GitHubDomain, owner, name, githubRepo.Private)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
|
|
@ -12,7 +12,6 @@ const (
|
|||
)
|
||||
|
||||
const (
|
||||
HostGithub = "github.com"
|
||||
HostBitbucket = "bitbucket.org"
|
||||
HostGoogle = "code.google.com"
|
||||
HostCustom = "custom"
|
||||
|
@ -25,8 +24,8 @@ const (
|
|||
)
|
||||
|
||||
const (
|
||||
githubRepoPattern = "git://github.com/%s/%s.git"
|
||||
githubRepoPatternPrivate = "git@github.com:%s/%s.git"
|
||||
githubRepoPattern = "git://%s/%s/%s.git"
|
||||
githubRepoPatternPrivate = "git@%s:%s/%s.git"
|
||||
bitbucketRepoPattern = "https://bitbucket.org/%s/%s.git"
|
||||
bitbucketRepoPatternPrivate = "git@bitbucket.org:%s/%s.git"
|
||||
)
|
||||
|
@ -122,15 +121,15 @@ func NewRepo(host, owner, name, scm, url string) (*Repo, error) {
|
|||
}
|
||||
|
||||
// Creates a new GitHub repository
|
||||
func NewGitHubRepo(owner, name string, private bool) (*Repo, error) {
|
||||
func NewGitHubRepo(domain, owner, name string, private bool) (*Repo, error) {
|
||||
var url string
|
||||
switch private {
|
||||
case false:
|
||||
url = fmt.Sprintf(githubRepoPattern, owner, name)
|
||||
url = fmt.Sprintf(githubRepoPattern, domain, owner, name)
|
||||
case true:
|
||||
url = fmt.Sprintf(githubRepoPatternPrivate, owner, name)
|
||||
url = fmt.Sprintf(githubRepoPatternPrivate, domain, owner, name)
|
||||
}
|
||||
return NewRepo(HostGithub, owner, name, ScmGit, url)
|
||||
return NewRepo(domain, owner, name, ScmGit, url)
|
||||
}
|
||||
|
||||
// Creates a new Bitbucket repository
|
||||
|
@ -142,7 +141,7 @@ func NewBitbucketRepo(owner, name string, private bool) (*Repo, error) {
|
|||
case true:
|
||||
url = fmt.Sprintf(bitbucketRepoPatternPrivate, owner, name)
|
||||
}
|
||||
return NewRepo(HostGithub, owner, name, ScmGit, url)
|
||||
return NewRepo(HostBitbucket, owner, name, ScmGit, url)
|
||||
}
|
||||
|
||||
func (r *Repo) DefaultBranch() string {
|
||||
|
|
|
@ -17,6 +17,8 @@ type Settings struct {
|
|||
// GitHub Consumer key and secret.
|
||||
GitHubKey string `meddler:"github_key"`
|
||||
GitHubSecret string `meddler:"github_secret"`
|
||||
GitHubDomain string `meddler:"github_domain"`
|
||||
GitHubApiUrl string `meddler:"github_apiurl"`
|
||||
|
||||
// Bitbucket Consumer Key and secret.
|
||||
BitbucketKey string `meddler:"bitbucket_key"`
|
||||
|
|
|
@ -225,6 +225,7 @@ func updateGitHubStatus(repo *Repo, commit *Commit) error {
|
|||
}
|
||||
|
||||
client := github.New(user.GithubToken)
|
||||
client.ApiUrl = settings.GitHubApiUrl;
|
||||
|
||||
var url string
|
||||
url = settings.URL().String() + "/" + repo.Slug + "/commit/" + commit.Hash
|
||||
|
|
|
@ -44,6 +44,11 @@
|
|||
<input class="form-control form-control-large" type="text" name="GitHubKey" value="{{.Settings.GitHubKey}}" />
|
||||
<input class="form-control form-control-large" type="password" name="GitHubSecret" value="{{.Settings.GitHubSecret}}" />
|
||||
</div>
|
||||
<label>GitHub Settings:</label>
|
||||
<div>
|
||||
<input class="form-control form-control-large" type="text" name="GitHubDomain" value="{{.Settings.GitHubDomain}}" />
|
||||
<input class="form-control form-control-large" type="text" name="GitHubApiUrl" value="{{.Settings.GitHubApiUrl}}" />
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group hide">
|
||||
<div class="alert">Bitbucket OAuth Consumer Key and Secret.</div>
|
||||
|
|
|
@ -25,6 +25,7 @@
|
|||
<a class="btn btn-default pull-right" href="/auth/login/github" style="font-size: 18px;background:#f4f4f4;">Re-Link Account</a>
|
||||
</div>
|
||||
<form class="form-repo" method="POST" action="/new/github.com">
|
||||
<input type="hidden" name="domain" autocomplete="off" value="{{.Settings.GitHubDomain}}">
|
||||
<div class="field-group">
|
||||
<div>
|
||||
<label>GitHub Owner</label>
|
||||
|
@ -85,7 +86,8 @@
|
|||
if (this.status == 200) {
|
||||
var name = $("input[name=name]").val()
|
||||
var owner = $("input[name=owner]").val()
|
||||
window.location.pathname = "/github.com/"+owner+"/"+name
|
||||
var domain = $("input[name=domain]").val()
|
||||
window.location.pathname = "/" + domain + "/"+owner+"/"+name
|
||||
} else {
|
||||
$("#failureAlert").text("Unable to setup the Repository");
|
||||
$("#failureAlert").show().removeClass("hide");
|
||||
|
|
Loading…
Reference in a new issue