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) | 	c.JSON(200, out) | ||||||
| } | } | ||||||
|  |  | ||||||
|  | // PostBuild restarts a build | ||||||
| func PostBuild(c *gin.Context) { | func PostBuild(c *gin.Context) { | ||||||
| 	remote_ := remote.FromContext(c) | 	remote_ := remote.FromContext(c) | ||||||
| 	repo := session.Repo(c) | 	repo := session.Repo(c) | ||||||
|   | |||||||
| @@ -142,31 +142,18 @@ func PostHook(c *gin.Context) { | |||||||
| 		} | 		} | ||||||
| 	} | 	} | ||||||
|  |  | ||||||
| 	// fetch the build file from the database | 	// fetch the build file from the remote | ||||||
| 	confb, err := remote.FileBackoff(remote_, user, repo, build, repo.Config) | 	remoteYamlConfig, err := remote.FileBackoff(remote_, user, repo, build, repo.Config) | ||||||
| 	if err != nil { | 	if err != nil { | ||||||
| 		logrus.Errorf("error: %s: cannot find %s in %s: %s", repo.FullName, repo.Config, build.Ref, err) | 		logrus.Errorf("error: %s: cannot find %s in %s: %s", repo.FullName, repo.Config, build.Ref, err) | ||||||
| 		c.AbortWithError(404, err) | 		c.AbortWithError(404, err) | ||||||
| 		return | 		return | ||||||
| 	} | 	} | ||||||
| 	sha := shasum(confb) | 	conf, err := findOrPersistPipelineConfig(repo, remoteYamlConfig) | ||||||
| 	conf, err := Config.Storage.Config.ConfigFind(repo, sha) |  | ||||||
| 	if err != nil { | 	if err != nil { | ||||||
| 		conf = &model.Config{ | 		logrus.Errorf("failure to find or persist build config for %s. %s", repo.FullName, err) | ||||||
| 			RepoID: repo.ID, | 		c.AbortWithError(500, err) | ||||||
| 			Data:   string(confb), | 		return | ||||||
| 			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 { |  | ||||||
| 				logrus.Errorf("failure to find or persist build config for %s. %s", repo.FullName, err) |  | ||||||
| 				c.AbortWithError(500, err) |  | ||||||
| 				return |  | ||||||
| 			} |  | ||||||
| 		} |  | ||||||
| 	} | 	} | ||||||
| 	build.ConfigID = conf.ID | 	build.ConfigID = conf.ID | ||||||
|  |  | ||||||
| @@ -177,9 +164,9 @@ func PostHook(c *gin.Context) { | |||||||
| 	} | 	} | ||||||
|  |  | ||||||
| 	// verify the branches can be built vs skipped | 	// verify the branches can be built vs skipped | ||||||
| 	branches, err := yaml.ParseString(conf.Data) | 	parsedPipelineConfig, err := yaml.ParseString(conf.Data) | ||||||
| 	if err == nil { | 	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") | 			c.String(200, "Branch does not match restrictions defined in yaml") | ||||||
| 			return | 			return | ||||||
| 		} | 		} | ||||||
| @@ -197,7 +184,6 @@ func PostHook(c *gin.Context) { | |||||||
| 		} | 		} | ||||||
| 	} | 	} | ||||||
|  |  | ||||||
| 	build.Trim() |  | ||||||
| 	err = store.CreateBuild(c, build, build.Procs...) | 	err = store.CreateBuild(c, build, build.Procs...) | ||||||
| 	if err != nil { | 	if err != nil { | ||||||
| 		logrus.Errorf("failure to save commit for %s. %s", repo.FullName, err) | 		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) | 	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) { | func setBuildProcs(build *model.Build, buildItems []*buildItem) { | ||||||
| 	pcounter := len(buildItems) | 	pcounter := len(buildItems) | ||||||
| 	for _, item := range 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 { | func (db *datastore) CreateBuild(build *model.Build, procs ...*model.Proc) error { | ||||||
|  | 	build.Trim() | ||||||
| 	id, err := db.incrementRepoRetry(build.RepoID) | 	id, err := db.incrementRepoRetry(build.RepoID) | ||||||
| 	if err != nil { | 	if err != nil { | ||||||
| 		return err | 		return err | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user