package store import ( "io" "github.com/drone/drone/model" "golang.org/x/net/context" ) type Store interface { // GetUser gets a user by unique ID. GetUser(int64) (*model.User, error) // GetUserLogin gets a user by unique Login name. GetUserLogin(string) (*model.User, error) // GetUserList gets a list of all users in the system. GetUserList() ([]*model.User, error) // GetUserFeed gets a user activity feed. GetUserFeed([]*model.RepoLite) ([]*model.Feed, error) // GetUserFeedLatest gets a user activity feed for all repositories including // only the latest build for each repository. GetUserFeedLatest(listof []*model.RepoLite) ([]*model.Feed, error) // GetUserCount gets a count of all users in the system. GetUserCount() (int, error) // CreateUser creates a new user account. CreateUser(*model.User) error // UpdateUser updates a user account. UpdateUser(*model.User) error // DeleteUser deletes a user account. DeleteUser(*model.User) error // GetRepo gets a repo by unique ID. GetRepo(int64) (*model.Repo, error) // GetRepoName gets a repo by its full name. GetRepoName(string) (*model.Repo, error) // GetRepoListOf gets the list of enumerated repos in the system. GetRepoListOf([]*model.RepoLite) ([]*model.Repo, error) // GetRepoCount gets a count of all repositories in the system. GetRepoCount() (int, error) // CreateRepo creates a new repository. CreateRepo(*model.Repo) error // UpdateRepo updates a user repository. UpdateRepo(*model.Repo) error // DeleteRepo deletes a user repository. DeleteRepo(*model.Repo) error // GetSecretList gets a list of repository secrets GetSecretList(*model.Repo) ([]*model.RepoSecret, error) // GetSecret gets the named repository secret. GetSecret(*model.Repo, string) (*model.RepoSecret, error) // SetSecret sets the named repository secret. SetSecret(*model.RepoSecret) error // DeleteSecret deletes the named repository secret. DeleteSecret(*model.RepoSecret) error // GetTeamSecretList gets a list of team secrets GetTeamSecretList(string) ([]*model.TeamSecret, error) // GetTeamSecret gets the named team secret. GetTeamSecret(string, string) (*model.TeamSecret, error) // SetTeamSecret sets the named team secret. SetTeamSecret(*model.TeamSecret) error // DeleteTeamSecret deletes the named team secret. DeleteTeamSecret(*model.TeamSecret) error // GetBuild gets a build by unique ID. GetBuild(int64) (*model.Build, error) // GetBuildNumber gets a build by number. GetBuildNumber(*model.Repo, int) (*model.Build, error) // GetBuildRef gets a build by its ref. GetBuildRef(*model.Repo, string) (*model.Build, error) // GetBuildCommit gets a build by its commit sha. GetBuildCommit(*model.Repo, string, string) (*model.Build, error) // GetBuildLast gets the last build for the branch. GetBuildLast(*model.Repo, string) (*model.Build, error) // GetBuildLastBefore gets the last build before build number N. GetBuildLastBefore(*model.Repo, string, int64) (*model.Build, error) // GetBuildList gets a list of builds for the repository GetBuildList(*model.Repo) ([]*model.Build, error) // GetBuildQueue gets a list of build in queue. GetBuildQueue() ([]*model.Feed, error) // CreateBuild creates a new build and jobs. CreateBuild(*model.Build, ...*model.Proc) error // UpdateBuild updates a build. UpdateBuild(*model.Build) error // // GetJob gets a job by unique ID. // GetJob(int64) (*model.Job, error) // // // GetJobNumber gets a job by number. // GetJobNumber(*model.Build, int) (*model.Job, error) // // // GetJobList gets a list of all users in the system. // GetJobList(*model.Build) ([]*model.Job, error) // // // CreateJob creates a job. // CreateJob(*model.Job) error // // // UpdateJob updates a job. // UpdateJob(*model.Job) error // // // ReadLog reads the Job logs from the datastore. // ReadLog(*model.Job) (io.ReadCloser, error) // // // WriteLog writes the job logs to the datastore. // WriteLog(*model.Job, io.Reader) error GetAgent(int64) (*model.Agent, error) GetAgentAddr(string) (*model.Agent, error) GetAgentList() ([]*model.Agent, error) CreateAgent(*model.Agent) error UpdateAgent(*model.Agent) error DeleteAgent(*model.Agent) error ProcLoad(int64) (*model.Proc, error) ProcFind(*model.Build, int) (*model.Proc, error) ProcChild(*model.Build, int, string) (*model.Proc, error) ProcList(*model.Build) ([]*model.Proc, error) ProcCreate([]*model.Proc) error ProcUpdate(*model.Proc) error LogFind(*model.Proc) (io.ReadCloser, error) LogSave(*model.Proc, io.Reader) error FileList(*model.Build) ([]*model.File, error) FileFind(*model.Proc, string) (*model.File, error) FileRead(*model.Proc, string) (io.ReadCloser, error) FileCreate(*model.File, io.Reader) error } const globalTeamName = "__global__" // GetUser gets a user by unique ID. func GetUser(c context.Context, id int64) (*model.User, error) { return FromContext(c).GetUser(id) } // GetUserLogin gets a user by unique Login name. func GetUserLogin(c context.Context, login string) (*model.User, error) { return FromContext(c).GetUserLogin(login) } // GetUserList gets a list of all users in the system. func GetUserList(c context.Context) ([]*model.User, error) { return FromContext(c).GetUserList() } // GetUserFeed gets a user activity feed. func GetUserFeed(c context.Context, listof []*model.RepoLite, latest bool) ([]*model.Feed, error) { if latest { return FromContext(c).GetUserFeedLatest(listof) } return FromContext(c).GetUserFeed(listof) } // GetUserCount gets a count of all users in the system. func GetUserCount(c context.Context) (int, error) { return FromContext(c).GetUserCount() } func CreateUser(c context.Context, user *model.User) error { return FromContext(c).CreateUser(user) } func UpdateUser(c context.Context, user *model.User) error { return FromContext(c).UpdateUser(user) } func DeleteUser(c context.Context, user *model.User) error { return FromContext(c).DeleteUser(user) } func GetRepo(c context.Context, id int64) (*model.Repo, error) { return FromContext(c).GetRepo(id) } func GetRepoName(c context.Context, name string) (*model.Repo, error) { return FromContext(c).GetRepoName(name) } func GetRepoOwnerName(c context.Context, owner, name string) (*model.Repo, error) { return FromContext(c).GetRepoName(owner + "/" + name) } func GetRepoListOf(c context.Context, listof []*model.RepoLite) ([]*model.Repo, error) { return FromContext(c).GetRepoListOf(listof) } func CreateRepo(c context.Context, repo *model.Repo) error { return FromContext(c).CreateRepo(repo) } func UpdateRepo(c context.Context, repo *model.Repo) error { return FromContext(c).UpdateRepo(repo) } func DeleteRepo(c context.Context, repo *model.Repo) error { return FromContext(c).DeleteRepo(repo) } func GetSecretList(c context.Context, r *model.Repo) ([]*model.RepoSecret, error) { return FromContext(c).GetSecretList(r) } func GetSecret(c context.Context, r *model.Repo, name string) (*model.RepoSecret, error) { return FromContext(c).GetSecret(r, name) } func SetSecret(c context.Context, s *model.RepoSecret) error { return FromContext(c).SetSecret(s) } func DeleteSecret(c context.Context, s *model.RepoSecret) error { return FromContext(c).DeleteSecret(s) } func GetTeamSecretList(c context.Context, team string) ([]*model.TeamSecret, error) { return FromContext(c).GetTeamSecretList(team) } func GetTeamSecret(c context.Context, team, name string) (*model.TeamSecret, error) { return FromContext(c).GetTeamSecret(team, name) } func SetTeamSecret(c context.Context, s *model.TeamSecret) error { return FromContext(c).SetTeamSecret(s) } func DeleteTeamSecret(c context.Context, s *model.TeamSecret) error { return FromContext(c).DeleteTeamSecret(s) } func GetGlobalSecretList(c context.Context) ([]*model.TeamSecret, error) { return GetTeamSecretList(c, globalTeamName) } func GetGlobalSecret(c context.Context, name string) (*model.TeamSecret, error) { return GetTeamSecret(c, globalTeamName, name) } func SetGlobalSecret(c context.Context, s *model.TeamSecret) error { s.Key = globalTeamName return SetTeamSecret(c, s) } func DeleteGlobalSecret(c context.Context, s *model.TeamSecret) error { s.Key = globalTeamName return DeleteTeamSecret(c, s) } func GetMergedSecretList(c context.Context, r *model.Repo) ([]*model.Secret, error) { var ( secrets []*model.Secret ) globalSecs, err := GetGlobalSecretList(c) if err != nil { return nil, err } for _, secret := range globalSecs { secrets = append(secrets, secret.Secret()) } teamSecs, err := GetTeamSecretList(c, r.Owner) if err != nil { return nil, err } for _, secret := range teamSecs { secrets = append(secrets, secret.Secret()) } repoSecs, err := GetSecretList(c, r) if err != nil { return nil, err } for _, secret := range repoSecs { secrets = append(secrets, secret.Secret()) } return secrets, nil } func GetBuild(c context.Context, id int64) (*model.Build, error) { return FromContext(c).GetBuild(id) } func GetBuildNumber(c context.Context, repo *model.Repo, num int) (*model.Build, error) { return FromContext(c).GetBuildNumber(repo, num) } func GetBuildRef(c context.Context, repo *model.Repo, ref string) (*model.Build, error) { return FromContext(c).GetBuildRef(repo, ref) } func GetBuildCommit(c context.Context, repo *model.Repo, sha, branch string) (*model.Build, error) { return FromContext(c).GetBuildCommit(repo, sha, branch) } func GetBuildLast(c context.Context, repo *model.Repo, branch string) (*model.Build, error) { return FromContext(c).GetBuildLast(repo, branch) } func GetBuildLastBefore(c context.Context, repo *model.Repo, branch string, number int64) (*model.Build, error) { return FromContext(c).GetBuildLastBefore(repo, branch, number) } func GetBuildList(c context.Context, repo *model.Repo) ([]*model.Build, error) { return FromContext(c).GetBuildList(repo) } func GetBuildQueue(c context.Context) ([]*model.Feed, error) { return FromContext(c).GetBuildQueue() } func CreateBuild(c context.Context, build *model.Build, procs ...*model.Proc) error { return FromContext(c).CreateBuild(build, procs...) } func UpdateBuild(c context.Context, build *model.Build) error { return FromContext(c).UpdateBuild(build) } // func GetJob(c context.Context, id int64) (*model.Job, error) { // return FromContext(c).GetJob(id) // } // // func GetJobNumber(c context.Context, build *model.Build, num int) (*model.Job, error) { // return FromContext(c).GetJobNumber(build, num) // } // // func GetJobList(c context.Context, build *model.Build) ([]*model.Job, error) { // return FromContext(c).GetJobList(build) // } // // func CreateJob(c context.Context, job *model.Job) error { // return FromContext(c).CreateJob(job) // } // // func UpdateJob(c context.Context, job *model.Job) error { // return FromContext(c).UpdateJob(job) // } // // func ReadLog(c context.Context, job *model.Job) (io.ReadCloser, error) { // return FromContext(c).ReadLog(job) // } // // func WriteLog(c context.Context, job *model.Job, r io.Reader) error { // return FromContext(c).WriteLog(job, r) // } func GetAgent(c context.Context, id int64) (*model.Agent, error) { return FromContext(c).GetAgent(id) } func GetAgentAddr(c context.Context, addr string) (*model.Agent, error) { return FromContext(c).GetAgentAddr(addr) } func GetAgentList(c context.Context) ([]*model.Agent, error) { return FromContext(c).GetAgentList() } func CreateAgent(c context.Context, agent *model.Agent) error { return FromContext(c).CreateAgent(agent) } func UpdateAgent(c context.Context, agent *model.Agent) error { return FromContext(c).UpdateAgent(agent) } func DeleteAgent(c context.Context, agent *model.Agent) error { return FromContext(c).DeleteAgent(agent) }