You've already forked woodpecker
							
							
				mirror of
				https://github.com/woodpecker-ci/woodpecker.git
				synced 2025-10-30 23:27:39 +02:00 
			
		
		
		
	fixed minor queue glitches
This commit is contained in:
		| @@ -204,7 +204,7 @@ func (db *DB) SetBuildTask(repo string, build int, task *common.Task) error { | ||||
| 			return err | ||||
| 		} | ||||
| 		build_.Updated = time.Now().UTC().Unix() | ||||
| 		build_.Tasks[task.Number] = task // TODO check index to prevent nil pointer / panic | ||||
| 		build_.Tasks[task.Number-1] = task // TODO check index to prevent nil pointer / panic | ||||
| 		return update(t, bucketBuild, key, build_) | ||||
| 	}) | ||||
| } | ||||
|   | ||||
							
								
								
									
										15
									
								
								drone.go
									
									
									
									
									
								
							
							
						
						
									
										15
									
								
								drone.go
									
									
									
									
									
								
							| @@ -6,10 +6,13 @@ import ( | ||||
| 	"github.com/gin-gonic/gin" | ||||
|  | ||||
| 	"github.com/drone/drone/datastore/bolt" | ||||
| 	"github.com/drone/drone/eventbus" | ||||
| 	"github.com/drone/drone/remote/github" | ||||
| 	"github.com/drone/drone/server" | ||||
| 	"github.com/drone/drone/server/session" | ||||
| 	"github.com/drone/drone/settings" | ||||
|  | ||||
| 	queue "github.com/drone/drone/queue/builtin" | ||||
| ) | ||||
|  | ||||
| var path = flag.String("config", "drone.toml", "") | ||||
| @@ -31,8 +34,10 @@ func main() { | ||||
|  | ||||
| 	api := r.Group("/api") | ||||
| 	api.Use(server.SetHeaders()) | ||||
| 	api.Use(server.SetBus(eventbus.New())) | ||||
| 	api.Use(server.SetDatastore(ds)) | ||||
| 	api.Use(server.SetRemote(remote)) | ||||
| 	api.Use(server.SetQueue(queue.New())) | ||||
| 	api.Use(server.SetSettings(settings)) | ||||
| 	api.Use(server.SetUser(session)) | ||||
|  | ||||
| @@ -99,6 +104,16 @@ func main() { | ||||
| 		hooks.POST("", server.PostHook) | ||||
| 	} | ||||
|  | ||||
| 	queue := api.Group("/queue") | ||||
| 	{ | ||||
| 		queue.Use(server.SetRepo()) | ||||
| 		queue.GET("", server.GetQueue) | ||||
| 		queue.POST("/pull", server.PollBuild) | ||||
| 		queue.POST("/push/:owner/:name", server.PushBuild) | ||||
| 		queue.POST("/push/:owner/:name/:build", server.PushTask) | ||||
| 		queue.POST("/push/:owner/:name/:build/:task/logs", server.PushLogs) | ||||
| 	} | ||||
|  | ||||
| 	auth := r.Group("/authorize") | ||||
| 	{ | ||||
| 		auth.Use(server.SetHeaders()) | ||||
|   | ||||
| @@ -26,30 +26,3 @@ type Queue interface { | ||||
| 	// queue, in proper sequence. | ||||
| 	Items() []*Work | ||||
| } | ||||
|  | ||||
| // type Manager interface { | ||||
| // 	// Register registers a worker that has signed | ||||
| // 	// up to accept work. | ||||
| // 	Register(*Worker) | ||||
|  | ||||
| // 	// Unregister unregisters a worker that should no | ||||
| // 	// longer be accepting work. | ||||
| // 	Unregister(*Worker) | ||||
|  | ||||
| // 	// Assign assigns work to a worker. | ||||
| // 	Assign(*Work, *Worker) | ||||
|  | ||||
| // 	// Unassign unassigns work from a worker. | ||||
| // 	Unassign(*Work, *Worker) | ||||
|  | ||||
| // 	// Work returns a list of all work that is | ||||
| // 	// currently in progress. | ||||
| // 	Work() []*Work | ||||
|  | ||||
| // 	// Worker retrieves a worker by name. | ||||
| // 	Worker(string) *Worker | ||||
|  | ||||
| // 	// Workers returns a slice containing all workers | ||||
| // 	// registered with the manager. | ||||
| // 	Workers() []*Worker | ||||
| // } | ||||
|   | ||||
| @@ -5,6 +5,7 @@ import ( | ||||
| 	"strconv" | ||||
|  | ||||
| 	"github.com/drone/drone/common" | ||||
| 	"github.com/drone/drone/queue" | ||||
| 	"github.com/gin-gonic/gin" | ||||
| 	"github.com/gin-gonic/gin/binding" | ||||
| ) | ||||
| @@ -102,6 +103,7 @@ func PostBuildStatus(c *gin.Context) { | ||||
| // | ||||
| func RunBuild(c *gin.Context) { | ||||
| 	store := ToDatastore(c) | ||||
| 	queue_ := ToQueue(c) | ||||
| 	repo := ToRepo(c) | ||||
| 	num, err := strconv.Atoi(c.Params.ByName("number")) | ||||
| 	if err != nil { | ||||
| @@ -114,6 +116,18 @@ func RunBuild(c *gin.Context) { | ||||
| 		return | ||||
| 	} | ||||
|  | ||||
| 	keys, err := store.RepoKeypair(repo.FullName) | ||||
| 	if err != nil { | ||||
| 		c.Fail(404, err) | ||||
| 		return | ||||
| 	} | ||||
|  | ||||
| 	user, err := store.User(repo.User.Login) | ||||
| 	if err != nil { | ||||
| 		c.Fail(404, err) | ||||
| 		return | ||||
| 	} | ||||
|  | ||||
| 	// must not restart a running build | ||||
| 	if build.State == common.StatePending || build.State == common.StateRunning { | ||||
| 		c.Fail(409, err) | ||||
| @@ -143,7 +157,14 @@ func RunBuild(c *gin.Context) { | ||||
| 	// 	raw = []byte(inject.InjectSafe(string(raw), params)) | ||||
| 	// } | ||||
|  | ||||
| 	// TODO push build to queue | ||||
| 	queue_.Publish(&queue.Work{ | ||||
| 		User:  user, | ||||
| 		Repo:  repo, | ||||
| 		Build: build, | ||||
| 		Keys:  keys, | ||||
| 		Netrc: &common.Netrc{}, //TODO create netrc | ||||
| 		Yaml:  nil,             // TODO fetch yaml | ||||
| 	}) | ||||
|  | ||||
| 	c.JSON(202, build) | ||||
| } | ||||
|   | ||||
| @@ -7,7 +7,7 @@ import ( | ||||
| 	"github.com/drone/drone/common" | ||||
| 	"github.com/drone/drone/parser/inject" | ||||
| 	"github.com/drone/drone/parser/matrix" | ||||
| 	// "github.com/bradrydzewski/drone/worker" | ||||
| 	"github.com/drone/drone/queue" | ||||
| 	"github.com/gin-gonic/gin" | ||||
| ) | ||||
|  | ||||
| @@ -19,6 +19,7 @@ import ( | ||||
| func PostHook(c *gin.Context) { | ||||
| 	remote := ToRemote(c) | ||||
| 	store := ToDatastore(c) | ||||
| 	queue_ := ToQueue(c) | ||||
|  | ||||
| 	hook, err := remote.Hook(c.Request) | ||||
| 	if err != nil { | ||||
| @@ -107,19 +108,13 @@ func PostHook(c *gin.Context) { | ||||
| 			Environment: axis, | ||||
| 		}) | ||||
| 	} | ||||
|  | ||||
| 	err = store.SetBuild(repo.FullName, build) | ||||
| 	keys, err := store.RepoKeypair(repo.FullName) | ||||
| 	if err != nil { | ||||
| 		c.Fail(500, err) | ||||
| 		log.Errorf("failure to fetch keypair for %s. %s", repo.FullName, err) | ||||
| 		c.Fail(404, err) | ||||
| 		return | ||||
| 	} | ||||
|  | ||||
| 	// w := worker.Work{ | ||||
| 	// 	User: user, | ||||
| 	// 	Repo: repo, | ||||
| 	// 	Build: build, | ||||
| 	// } | ||||
|  | ||||
| 	// verify the branches can be built vs skipped | ||||
| 	// s, _ := script.ParseBuild(string(yml)) | ||||
| 	// if len(hook.PullRequest) == 0 && !s.MatchBranch(hook.Branch) { | ||||
| @@ -127,5 +122,20 @@ func PostHook(c *gin.Context) { | ||||
| 	// 	return | ||||
| 	// } | ||||
|  | ||||
| 	err = store.SetBuild(repo.FullName, build) | ||||
| 	if err != nil { | ||||
| 		c.Fail(500, err) | ||||
| 		return | ||||
| 	} | ||||
|  | ||||
| 	queue_.Publish(&queue.Work{ | ||||
| 		User:  user, | ||||
| 		Repo:  repo, | ||||
| 		Build: build, | ||||
| 		Keys:  keys, | ||||
| 		Netrc: &common.Netrc{}, // TODO | ||||
| 		Yaml:  raw, | ||||
| 	}) | ||||
|  | ||||
| 	c.JSON(200, build) | ||||
| } | ||||
|   | ||||
| @@ -19,7 +19,7 @@ import ( | ||||
| // GET /queue/pull | ||||
| func PollBuild(c *gin.Context) { | ||||
| 	queue := ToQueue(c) | ||||
| 	work := queue.PullAck() | ||||
| 	work := queue.Pull() | ||||
| 	c.JSON(200, work) | ||||
| } | ||||
|  | ||||
| @@ -37,6 +37,10 @@ func PushBuild(c *gin.Context) { | ||||
| 		c.Fail(404, err) | ||||
| 		return | ||||
| 	} | ||||
| 	build.Duration = in.Duration | ||||
| 	build.Started = in.Started | ||||
| 	build.Finished = in.Finished | ||||
| 	build.State = in.State | ||||
| 	err = store.SetBuildState(repo.FullName, build) | ||||
| 	if err != nil { | ||||
| 		c.Fail(500, err) | ||||
| @@ -106,3 +110,9 @@ func PushLogs(c *gin.Context) { | ||||
| 	} | ||||
| 	c.Writer.WriteHeader(200) | ||||
| } | ||||
|  | ||||
| func GetQueue(c *gin.Context) { | ||||
| 	queue := ToQueue(c) | ||||
| 	items := queue.Items() | ||||
| 	c.JSON(200, items) | ||||
| } | ||||
|   | ||||
		Reference in New Issue
	
	Block a user