86 lines
1.9 KiB
Go
86 lines
1.9 KiB
Go
package services
|
|
|
|
import (
|
|
"context"
|
|
"fmt"
|
|
"os"
|
|
|
|
"gitea.com/gitea/pr-deployer/pkgs/settings"
|
|
log "github.com/sirupsen/logrus"
|
|
)
|
|
|
|
const (
|
|
statusPending = "pending"
|
|
statusSuccess = "success"
|
|
statusError = "error"
|
|
statusFailure = "failure"
|
|
)
|
|
|
|
func UpdateAndStartPullRequest(ctx context.Context, client Client, number int, sha string) error {
|
|
log.Trace("CheckWebhook")
|
|
if err := client.CheckWebhook(ctx); err != nil {
|
|
return err
|
|
}
|
|
|
|
prDir := getPRDir(number)
|
|
if err := os.MkdirAll(prDir, os.ModePerm); err != nil {
|
|
return err
|
|
}
|
|
|
|
// 0 download the git
|
|
log.Trace("updateGitRepo")
|
|
|
|
newSHA, err := updateGitRepo(number, sha)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
log.Trace("UpdateCommitStatus pending", newSHA)
|
|
// 1 send commit status
|
|
if err := client.UpdateCommitStatus(ctx, number, newSHA, statusPending, "", ""); err != nil {
|
|
return err
|
|
}
|
|
|
|
if err := updateAndStartPullRequest(ctx, client, number, newSHA); err != nil {
|
|
log.Errorf("UpdateCommitStatus %s failure: %v", newSHA, err)
|
|
if err := client.UpdateCommitStatus(ctx, number, newSHA, statusFailure, err.Error(), ""); err != nil {
|
|
return err
|
|
}
|
|
}
|
|
return nil
|
|
}
|
|
|
|
func updateAndStartPullRequest(ctx context.Context, client Client, number int, newSHA string) error {
|
|
log.Trace("checkAndUpdateSubDomain")
|
|
// 2 change domain
|
|
if err := checkAndUpdateSubDomain(number); err != nil {
|
|
return err
|
|
}
|
|
|
|
log.Trace("buildImage")
|
|
// 3 build
|
|
image, err := buildImage(ctx, number)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
log.Trace("runImage", image)
|
|
// 4 change reverse server
|
|
runID, err := runImage(ctx, number, image)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
log.Trace("UpdateCommitStatus success", newSHA, runID)
|
|
// 5 send commit status
|
|
if err := client.UpdateCommitStatus(ctx, number, newSHA, statusSuccess, "", fmt.Sprintf("https://try-pr-%d.%s", number, settings.PRParentDomain)); err != nil {
|
|
return err
|
|
}
|
|
|
|
return nil
|
|
}
|
|
|
|
func StopPullRequest(number int) error {
|
|
return nil
|
|
}
|