You've already forked woodpecker
							
							
				mirror of
				https://github.com/woodpecker-ci/woodpecker.git
				synced 2025-10-30 23:27:39 +02:00 
			
		
		
		
	Factored to a better place
This commit is contained in:
		| @@ -393,6 +393,7 @@ func GetBuildQueue(c *gin.Context) { | ||||
| 	c.JSON(200, out) | ||||
| } | ||||
|  | ||||
| // PostBuild restarts a build | ||||
| func PostBuild(c *gin.Context) { | ||||
| 	remote_ := remote.FromContext(c) | ||||
| 	repo := session.Repo(c) | ||||
|   | ||||
| @@ -142,32 +142,19 @@ func PostHook(c *gin.Context) { | ||||
| 		} | ||||
| 	} | ||||
|  | ||||
| 	// fetch the build file from the database | ||||
| 	confb, err := remote.FileBackoff(remote_, user, repo, build, repo.Config) | ||||
| 	// fetch the build file from the remote | ||||
| 	remoteYamlConfig, err := remote.FileBackoff(remote_, user, repo, build, repo.Config) | ||||
| 	if err != nil { | ||||
| 		logrus.Errorf("error: %s: cannot find %s in %s: %s", repo.FullName, repo.Config, build.Ref, err) | ||||
| 		c.AbortWithError(404, err) | ||||
| 		return | ||||
| 	} | ||||
| 	sha := shasum(confb) | ||||
| 	conf, err := Config.Storage.Config.ConfigFind(repo, sha) | ||||
| 	if err != nil { | ||||
| 		conf = &model.Config{ | ||||
| 			RepoID: repo.ID, | ||||
| 			Data:   string(confb), | ||||
| 			Hash:   sha, | ||||
| 		} | ||||
| 		err = Config.Storage.Config.ConfigCreate(conf) | ||||
| 		if err != nil { | ||||
| 			// retry in case we receive two hooks at the same time | ||||
| 			conf, err = Config.Storage.Config.ConfigFind(repo, sha) | ||||
| 	conf, err := findOrPersistPipelineConfig(repo, remoteYamlConfig) | ||||
| 	if err != nil { | ||||
| 		logrus.Errorf("failure to find or persist build config for %s. %s", repo.FullName, err) | ||||
| 		c.AbortWithError(500, err) | ||||
| 		return | ||||
| 	} | ||||
| 		} | ||||
| 	} | ||||
| 	build.ConfigID = conf.ID | ||||
|  | ||||
| 	netrc, err := remote_.Netrc(user, repo) | ||||
| @@ -177,9 +164,9 @@ func PostHook(c *gin.Context) { | ||||
| 	} | ||||
|  | ||||
| 	// verify the branches can be built vs skipped | ||||
| 	branches, err := yaml.ParseString(conf.Data) | ||||
| 	parsedPipelineConfig, err := yaml.ParseString(conf.Data) | ||||
| 	if err == nil { | ||||
| 		if !branches.Branches.Match(build.Branch) && build.Event != model.EventTag && build.Event != model.EventDeploy { | ||||
| 		if !parsedPipelineConfig.Branches.Match(build.Branch) && build.Event != model.EventTag && build.Event != model.EventDeploy { | ||||
| 			c.String(200, "Branch does not match restrictions defined in yaml") | ||||
| 			return | ||||
| 		} | ||||
| @@ -197,7 +184,6 @@ func PostHook(c *gin.Context) { | ||||
| 		} | ||||
| 	} | ||||
|  | ||||
| 	build.Trim() | ||||
| 	err = store.CreateBuild(c, build, build.Procs...) | ||||
| 	if err != nil { | ||||
| 		logrus.Errorf("failure to save commit for %s. %s", repo.FullName, err) | ||||
| @@ -277,6 +263,28 @@ func PostHook(c *gin.Context) { | ||||
| 	queueBuild(build, repo, buildItems) | ||||
| } | ||||
|  | ||||
| func findOrPersistPipelineConfig(repo *model.Repo, remoteYamlConfig []byte) (*model.Config, error) { | ||||
| 	sha := shasum(remoteYamlConfig) | ||||
| 	conf, err := Config.Storage.Config.ConfigFind(repo, sha) | ||||
| 	if err != nil { | ||||
| 		conf = &model.Config{ | ||||
| 			RepoID: repo.ID, | ||||
| 			Data:   string(remoteYamlConfig), | ||||
| 			Hash:   sha, | ||||
| 		} | ||||
| 		err = Config.Storage.Config.ConfigCreate(conf) | ||||
| 		if err != nil { | ||||
| 			// retry in case we receive two hooks at the same time | ||||
| 			conf, err = Config.Storage.Config.ConfigFind(repo, sha) | ||||
| 			if err != nil { | ||||
| 				return nil, err | ||||
| 			} | ||||
| 		} | ||||
| 	} | ||||
|  | ||||
| 	return conf, nil | ||||
| } | ||||
|  | ||||
| func setBuildProcs(build *model.Build, buildItems []*buildItem) { | ||||
| 	pcounter := len(buildItems) | ||||
| 	for _, item := range buildItems { | ||||
|   | ||||
| @@ -72,6 +72,7 @@ func (db *datastore) GetBuildQueue() ([]*model.Feed, error) { | ||||
| } | ||||
|  | ||||
| func (db *datastore) CreateBuild(build *model.Build, procs ...*model.Proc) error { | ||||
| 	build.Trim() | ||||
| 	id, err := db.incrementRepoRetry(build.RepoID) | ||||
| 	if err != nil { | ||||
| 		return err | ||||
|   | ||||
		Reference in New Issue
	
	Block a user