mirror of
https://github.com/woodpecker-ci/woodpecker.git
synced 2025-09-01 10:23:25 +00:00
Merge pull request #858 from epipho/inc-build-num-2
All builds now have a monotonically increasing build number (v2)
This commit is contained in:
@@ -47,6 +47,10 @@ type Commitstore interface {
|
|||||||
// KillCommits updates all pending or started commits
|
// KillCommits updates all pending or started commits
|
||||||
// in the datastore settings the status to killed.
|
// in the datastore settings the status to killed.
|
||||||
KillCommits() error
|
KillCommits() error
|
||||||
|
|
||||||
|
// GetCommitBuildNumber retrieves the monotonically increaing build number
|
||||||
|
// from the commit's repo
|
||||||
|
GetBuildNumber(commit *model.Commit) (int64, error)
|
||||||
}
|
}
|
||||||
|
|
||||||
// GetCommit retrieves a commit from the
|
// GetCommit retrieves a commit from the
|
||||||
@@ -112,3 +116,9 @@ func DelCommit(c context.Context, commit *model.Commit) error {
|
|||||||
func KillCommits(c context.Context) error {
|
func KillCommits(c context.Context) error {
|
||||||
return FromContext(c).KillCommits()
|
return FromContext(c).KillCommits()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// GetBuildNumber retrieves the monotonically increaing build number
|
||||||
|
// from the commit's repo
|
||||||
|
func GetBuildNumber(c context.Context, commit *model.Commit) (int64, error) {
|
||||||
|
return FromContext(c).GetBuildNumber(commit)
|
||||||
|
}
|
||||||
|
@@ -1,6 +1,7 @@
|
|||||||
package database
|
package database
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"fmt"
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
"github.com/drone/drone/shared/model"
|
"github.com/drone/drone/shared/model"
|
||||||
@@ -103,6 +104,20 @@ func (db *Commitstore) KillCommits() error {
|
|||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// GetBuildNumber retrieves the build number for a commit.
|
||||||
|
func (db *Commitstore) GetBuildNumber(commit *model.Commit) (int64, error) {
|
||||||
|
row := db.QueryRow(rebind(commitGetBuildNumberStmt), commit.ID, commit.RepoID)
|
||||||
|
if row == nil {
|
||||||
|
return 0, fmt.Errorf("Unable to get build number for commit %d", commit.ID)
|
||||||
|
}
|
||||||
|
var bn int64
|
||||||
|
err := row.Scan(&bn)
|
||||||
|
if err != nil {
|
||||||
|
return 0, err
|
||||||
|
}
|
||||||
|
return bn, nil
|
||||||
|
}
|
||||||
|
|
||||||
// Commit table name in database.
|
// Commit table name in database.
|
||||||
const commitTable = "commits"
|
const commitTable = "commits"
|
||||||
|
|
||||||
@@ -194,3 +209,12 @@ const commitKillStmt = `
|
|||||||
UPDATE commits SET commit_status = 'Killed'
|
UPDATE commits SET commit_status = 'Killed'
|
||||||
WHERE commit_status IN ('Started', 'Pending');
|
WHERE commit_status IN ('Started', 'Pending');
|
||||||
`
|
`
|
||||||
|
|
||||||
|
// SQL statement to retrieve the build number for
|
||||||
|
// a commit
|
||||||
|
const commitGetBuildNumberStmt = `
|
||||||
|
SELECT COUNT(1)
|
||||||
|
FROM commits
|
||||||
|
WHERE commit_id <= ?
|
||||||
|
AND repo_id = ?
|
||||||
|
`
|
||||||
|
@@ -69,6 +69,21 @@ func TestCommitstore(t *testing.T) {
|
|||||||
g.Assert(commit.Updated).Equal(getcommit.Updated)
|
g.Assert(commit.Updated).Equal(getcommit.Updated)
|
||||||
})
|
})
|
||||||
|
|
||||||
|
g.It("Should Get the build number", func() {
|
||||||
|
commit := model.Commit{
|
||||||
|
RepoID: 1,
|
||||||
|
Branch: "foo",
|
||||||
|
Sha: "85f8c029b902ed9400bc600bac301a0aadb144ac",
|
||||||
|
Status: model.StatusSuccess,
|
||||||
|
Created: 1398065343,
|
||||||
|
Updated: 1398065344,
|
||||||
|
}
|
||||||
|
cs.PostCommit(&commit)
|
||||||
|
bn, err := cs.GetBuildNumber(&commit)
|
||||||
|
g.Assert(err == nil).IsTrue()
|
||||||
|
g.Assert(bn).Equal(int64(1))
|
||||||
|
})
|
||||||
|
|
||||||
g.It("Should Delete a Commit", func() {
|
g.It("Should Delete a Commit", func() {
|
||||||
commit := model.Commit{
|
commit := model.Commit{
|
||||||
RepoID: 1,
|
RepoID: 1,
|
||||||
|
@@ -1,6 +1,7 @@
|
|||||||
package docker
|
package docker
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"fmt"
|
||||||
"log"
|
"log"
|
||||||
"path/filepath"
|
"path/filepath"
|
||||||
"runtime/debug"
|
"runtime/debug"
|
||||||
@@ -76,6 +77,7 @@ func (d *Docker) Do(c context.Context, r *worker.Work) {
|
|||||||
// mark the build as Started and update the database
|
// mark the build as Started and update the database
|
||||||
r.Commit.Status = model.StatusStarted
|
r.Commit.Status = model.StatusStarted
|
||||||
r.Commit.Started = time.Now().UTC().Unix()
|
r.Commit.Started = time.Now().UTC().Unix()
|
||||||
|
|
||||||
datastore.PutCommit(c, r.Commit)
|
datastore.PutCommit(c, r.Commit)
|
||||||
|
|
||||||
// notify all listeners that the build is started
|
// notify all listeners that the build is started
|
||||||
@@ -109,6 +111,14 @@ func (d *Docker) Do(c context.Context, r *worker.Work) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// TODO: handle error better?
|
||||||
|
buildNumber, err := datastore.GetBuildNumber(c, r.Commit)
|
||||||
|
if err != nil {
|
||||||
|
log.Printf("Unable to fetch build number, Err: %s", err.Error())
|
||||||
|
}
|
||||||
|
script.Env = append(script.Env, fmt.Sprintf("DRONE_BUILD_NUMBER=%d", buildNumber))
|
||||||
|
script.Env = append(script.Env, fmt.Sprintf("CI_BUILD_NUMBER=%d", buildNumber))
|
||||||
|
|
||||||
path := r.Repo.Host + "/" + r.Repo.Owner + "/" + r.Repo.Name
|
path := r.Repo.Host + "/" + r.Repo.Owner + "/" + r.Repo.Name
|
||||||
repo := &repo.Repo{
|
repo := &repo.Repo{
|
||||||
Name: path,
|
Name: path,
|
||||||
|
@@ -492,7 +492,6 @@ func (b *Builder) writeBuildScript(dir string) error {
|
|||||||
// add environment variables for code coverage
|
// add environment variables for code coverage
|
||||||
// systems, like coveralls.
|
// systems, like coveralls.
|
||||||
f.WriteEnv("CI_NAME", "DRONE")
|
f.WriteEnv("CI_NAME", "DRONE")
|
||||||
f.WriteEnv("CI_BUILD_NUMBER", b.Repo.Commit)
|
|
||||||
f.WriteEnv("CI_BUILD_URL", "")
|
f.WriteEnv("CI_BUILD_URL", "")
|
||||||
f.WriteEnv("CI_REMOTE", b.Repo.Path)
|
f.WriteEnv("CI_REMOTE", b.Repo.Path)
|
||||||
f.WriteEnv("CI_BRANCH", b.Repo.Branch)
|
f.WriteEnv("CI_BRANCH", b.Repo.Branch)
|
||||||
|
@@ -549,7 +549,6 @@ func TestWriteBuildScript(t *testing.T) {
|
|||||||
f.WriteEnv("DRONE_PR", "123")
|
f.WriteEnv("DRONE_PR", "123")
|
||||||
f.WriteEnv("DRONE_BUILD_DIR", "/var/cache/drone/github.com/drone/drone")
|
f.WriteEnv("DRONE_BUILD_DIR", "/var/cache/drone/github.com/drone/drone")
|
||||||
f.WriteEnv("CI_NAME", "DRONE")
|
f.WriteEnv("CI_NAME", "DRONE")
|
||||||
f.WriteEnv("CI_BUILD_NUMBER", "e7e046b35")
|
|
||||||
f.WriteEnv("CI_BUILD_URL", "")
|
f.WriteEnv("CI_BUILD_URL", "")
|
||||||
f.WriteEnv("CI_REMOTE", "git://github.com/drone/drone.git")
|
f.WriteEnv("CI_REMOTE", "git://github.com/drone/drone.git")
|
||||||
f.WriteEnv("CI_BRANCH", "master")
|
f.WriteEnv("CI_BRANCH", "master")
|
||||||
|
Reference in New Issue
Block a user