package services import ( "fmt" "os" "path/filepath" "strconv" "gitea.com/gitea/pr-deployer/pkgs/settings" git "github.com/go-git/go-git/v5" "github.com/go-git/go-git/v5/plumbing" ) func UpdateAndStartPullRequest(number int) error { // 1 download the git p := filepath.Join(settings.CodeCacheDir, strconv.Itoa(number)) fmt.Println("clone code into", p) // 1.1 git fetch origin +refs/heads/main // 1.2 git checkout main // 1.3 git fetch origin refs/pull/17422/head // 1.4 git merge st, err := os.Stat(p) if err != nil { if os.IsNotExist(err) { _, err = git.PlainClone(p, false, &git.CloneOptions{ URL: "https://github.com/go-gitea/gitea", InsecureSkipTLS: false, ReferenceName: plumbing.NewRemoteReferenceName("", fmt.Sprintf("refs/pull/%d/head", number)), SingleBranch: true, }) if err != nil { return err } } return err } if !st.IsDir() { return fmt.Errorf("%s is a file but not a dir", p) } _, err = git.PlainOpen(p) if err != nil { return err } // 2 build // 3 change domain // 4 chagne reverse server // 5 send commit status return nil } func StopPullRequest(number int) error { return nil }