actions

package
v1.20.0-rc2 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Jun 24, 2023 License: MIT Imports: 30 Imported by: 14

Documentation

Index

Constants

View Source
const (
	// ArtifactStatusUploadPending is the status of an artifact upload that is pending
	ArtifactStatusUploadPending = 1
	// ArtifactStatusUploadConfirmed is the status of an artifact upload that is confirmed
	ArtifactStatusUploadConfirmed = 2
	// ArtifactStatusUploadError is the status of an artifact upload that is errored
	ArtifactStatusUploadError = 3
)

Variables

This section is empty.

Functions

func CountRunJobs

func CountRunJobs(ctx context.Context, opts FindRunJobOptions) (int64, error)

func CountRunners

func CountRunners(ctx context.Context, opts FindRunnerOptions) (int64, error)

func CountRuns

func CountRuns(ctx context.Context, opts FindRunOptions) (int64, error)

func CountTasks

func CountTasks(ctx context.Context, opts FindTaskOptions) (int64, error)

func CreateRunner

func CreateRunner(ctx context.Context, t *ActionRunner) error

CreateRunner creates new runner.

func DeleteRunner

func DeleteRunner(ctx context.Context, id int64) error

DeleteRunner deletes a runner by given ID.

func FindTaskOutputKeyByTaskID added in v1.20.0

func FindTaskOutputKeyByTaskID(ctx context.Context, taskID int64) ([]string, error)

FindTaskOutputKeyByTaskID returns the keys of the outputs of the task.

func InsertRun

func InsertRun(ctx context.Context, run *ActionRun, jobs []*jobparser.SingleWorkflow) error

InsertRun inserts a run

func InsertTaskOutputIfNotExist added in v1.20.0

func InsertTaskOutputIfNotExist(ctx context.Context, taskID int64, key, value string) error

InsertTaskOutputIfNotExist inserts a new task output if it does not exist.

func StopTask

func StopTask(ctx context.Context, taskID int64, status Status) error

func UpdateArtifactByID added in v1.20.0

func UpdateArtifactByID(ctx context.Context, id int64, art *ActionArtifact) error

UpdateArtifactByID updates an artifact by id

func UpdateRun

func UpdateRun(ctx context.Context, run *ActionRun, cols ...string) error

func UpdateRunJob

func UpdateRunJob(ctx context.Context, job *ActionRunJob, cond builder.Cond, cols ...string) (int64, error)

func UpdateRunner

func UpdateRunner(ctx context.Context, r *ActionRunner, cols ...string) error

UpdateRunner updates runner's information.

func UpdateRunnerToken

func UpdateRunnerToken(ctx context.Context, r *ActionRunnerToken, cols ...string) (err error)

UpdateRunnerToken updates runner token information.

func UpdateTask

func UpdateTask(ctx context.Context, task *ActionTask, cols ...string) error

Types

type ActionArtifact added in v1.20.0

type ActionArtifact struct {
	ID                 int64 `xorm:"pk autoincr"`
	RunID              int64 `xorm:"index UNIQUE(runid_name)"` // The run id of the artifact
	RunnerID           int64
	RepoID             int64 `xorm:"index"`
	OwnerID            int64
	CommitSHA          string
	StoragePath        string             // The path to the artifact in the storage
	FileSize           int64              // The size of the artifact in bytes
	FileCompressedSize int64              // The size of the artifact in bytes after gzip compression
	ContentEncoding    string             // The content encoding of the artifact
	ArtifactPath       string             // The path to the artifact when runner uploads it
	ArtifactName       string             `xorm:"UNIQUE(runid_name)"` // The name of the artifact when runner uploads it
	Status             int64              `xorm:"index"`              // The status of the artifact, uploading, expired or need-delete
	CreatedUnix        timeutil.TimeStamp `xorm:"created"`
	UpdatedUnix        timeutil.TimeStamp `xorm:"updated index"`
}

ActionArtifact is a file that is stored in the artifact storage.

func CreateArtifact added in v1.20.0

func CreateArtifact(ctx context.Context, t *ActionTask, artifactName string) (*ActionArtifact, error)

CreateArtifact create a new artifact with task info or get same named artifact in the same run

func GetArtifactByID added in v1.20.0

func GetArtifactByID(ctx context.Context, id int64) (*ActionArtifact, error)

GetArtifactByID returns an artifact by id

func ListArtifactsByRepoID added in v1.20.0

func ListArtifactsByRepoID(ctx context.Context, repoID int64) ([]*ActionArtifact, error)

ListArtifactsByRepoID returns all artifacts of a repo

func ListArtifactsByRunID added in v1.20.0

func ListArtifactsByRunID(ctx context.Context, runID int64) ([]*ActionArtifact, error)

ListArtifactsByRunID returns all artifacts of a run

func ListUploadedArtifactsByRunID added in v1.20.0

func ListUploadedArtifactsByRunID(ctx context.Context, runID int64) ([]*ActionArtifact, error)

ListUploadedArtifactsByRunID returns all uploaded artifacts of a run

type ActionJobList

type ActionJobList []*ActionRunJob

func FindRunJobs

func FindRunJobs(ctx context.Context, opts FindRunJobOptions) (ActionJobList, int64, error)

func (ActionJobList) GetRunIDs

func (jobs ActionJobList) GetRunIDs() []int64

func (ActionJobList) LoadAttributes

func (jobs ActionJobList) LoadAttributes(ctx context.Context, withRepo bool) error

func (ActionJobList) LoadRuns

func (jobs ActionJobList) LoadRuns(ctx context.Context, withRepo bool) error

type ActionRun

type ActionRun struct {
	ID                int64
	Title             string
	RepoID            int64                  `xorm:"index unique(repo_index)"`
	Repo              *repo_model.Repository `xorm:"-"`
	OwnerID           int64                  `xorm:"index"`
	WorkflowID        string                 `xorm:"index"`                    // the name of workflow file
	Index             int64                  `xorm:"index unique(repo_index)"` // a unique number for each run of a repository
	TriggerUserID     int64                  `xorm:"index"`
	TriggerUser       *user_model.User       `xorm:"-"`
	Ref               string
	CommitSHA         string
	IsForkPullRequest bool  // If this is triggered by a PR from a forked repository or an untrusted user, we need to check if it is approved and limit permissions when running the workflow.
	NeedApproval      bool  // may need approval if it's a fork pull request
	ApprovedBy        int64 `xorm:"index"` // who approved
	Event             webhook_module.HookEventType
	EventPayload      string `xorm:"LONGTEXT"`
	Status            Status `xorm:"index"`
	Started           timeutil.TimeStamp
	Stopped           timeutil.TimeStamp
	Created           timeutil.TimeStamp `xorm:"created"`
	Updated           timeutil.TimeStamp `xorm:"updated"`
}

ActionRun represents a run of a workflow file

func GetRunByID

func GetRunByID(ctx context.Context, id int64) (*ActionRun, error)

func GetRunByIndex

func GetRunByIndex(ctx context.Context, repoID, index int64) (*ActionRun, error)

func (*ActionRun) Duration

func (run *ActionRun) Duration() time.Duration

func (*ActionRun) GetPullRequestEventPayload

func (run *ActionRun) GetPullRequestEventPayload() (*api.PullRequestPayload, error)

func (*ActionRun) GetPushEventPayload

func (run *ActionRun) GetPushEventPayload() (*api.PushPayload, error)

func (*ActionRun) HTMLURL

func (run *ActionRun) HTMLURL() string
func (run *ActionRun) Link() string

func (*ActionRun) LoadAttributes

func (run *ActionRun) LoadAttributes(ctx context.Context) error

LoadAttributes load Repo TriggerUser if not loaded

func (*ActionRun) PrettyRef

func (run *ActionRun) PrettyRef() string

PrettyRef return #id for pull ref or ShortName for others

func (run *ActionRun) RefLink() string

RefLink return the url of run's ref

type ActionRunIndex

type ActionRunIndex db.ResourceIndex

type ActionRunJob

type ActionRunJob struct {
	ID                int64
	RunID             int64      `xorm:"index"`
	Run               *ActionRun `xorm:"-"`
	RepoID            int64      `xorm:"index"`
	OwnerID           int64      `xorm:"index"`
	CommitSHA         string     `xorm:"index"`
	IsForkPullRequest bool
	Name              string `xorm:"VARCHAR(255)"`
	Attempt           int64
	WorkflowPayload   []byte
	JobID             string   `xorm:"VARCHAR(255)"` // job id in workflow, not job's id
	Needs             []string `xorm:"JSON TEXT"`
	RunsOn            []string `xorm:"JSON TEXT"`
	TaskID            int64    // the latest task of the job
	Status            Status   `xorm:"index"`
	Started           timeutil.TimeStamp
	Stopped           timeutil.TimeStamp
	Created           timeutil.TimeStamp `xorm:"created"`
	Updated           timeutil.TimeStamp `xorm:"updated index"`
}

ActionRunJob represents a job of a run

func GetRunJobByID

func GetRunJobByID(ctx context.Context, id int64) (*ActionRunJob, error)

func GetRunJobsByRunID

func GetRunJobsByRunID(ctx context.Context, runID int64) ([]*ActionRunJob, error)

func (*ActionRunJob) Duration

func (job *ActionRunJob) Duration() time.Duration

func (*ActionRunJob) LoadAttributes

func (job *ActionRunJob) LoadAttributes(ctx context.Context) error

LoadAttributes load Run if not loaded

func (*ActionRunJob) LoadRun

func (job *ActionRunJob) LoadRun(ctx context.Context) error

type ActionRunner

type ActionRunner struct {
	ID          int64
	UUID        string                 `xorm:"CHAR(36) UNIQUE"`
	Name        string                 `xorm:"VARCHAR(255)"`
	Version     string                 `xorm:"VARCHAR(64)"`
	OwnerID     int64                  `xorm:"index"` // org level runner, 0 means system
	Owner       *user_model.User       `xorm:"-"`
	RepoID      int64                  `xorm:"index"` // repo level runner, if OwnerID also is zero, then it's a global
	Repo        *repo_model.Repository `xorm:"-"`
	Description string                 `xorm:"TEXT"`
	Base        int                    // 0 native 1 docker 2 virtual machine
	RepoRange   string                 // glob match which repositories could use this runner

	Token     string `xorm:"-"`
	TokenHash string `xorm:"UNIQUE"` // sha256 of token
	TokenSalt string

	LastOnline timeutil.TimeStamp `xorm:"index"`
	LastActive timeutil.TimeStamp `xorm:"index"`

	// Store OS and Artch.
	AgentLabels []string
	// Store custom labes use defined.
	CustomLabels []string

	Created timeutil.TimeStamp `xorm:"created"`
	Updated timeutil.TimeStamp `xorm:"updated"`
	Deleted timeutil.TimeStamp `xorm:"deleted"`
}

ActionRunner represents runner machines

func GetRunnerByID

func GetRunnerByID(ctx context.Context, id int64) (*ActionRunner, error)

GetRunnerByID returns a runner via id

func GetRunnerByUUID

func GetRunnerByUUID(ctx context.Context, uuid string) (*ActionRunner, error)

GetRunnerByUUID returns a runner via uuid

func (*ActionRunner) AllLabels

func (r *ActionRunner) AllLabels() []string

AllLabels returns agent and custom labels

func (*ActionRunner) BelongsToOwnerName added in v1.20.0

func (r *ActionRunner) BelongsToOwnerName() string

BelongsToOwnerName before calling, should guarantee that all attributes are loaded

func (*ActionRunner) BelongsToOwnerType added in v1.20.0

func (r *ActionRunner) BelongsToOwnerType() types.OwnerType

func (*ActionRunner) Editable

func (r *ActionRunner) Editable(ownerID, repoID int64) bool

Editable checks if the runner is editable by the user

func (*ActionRunner) GenerateToken

func (r *ActionRunner) GenerateToken() (err error)

func (*ActionRunner) IsOnline

func (r *ActionRunner) IsOnline() bool

func (*ActionRunner) LoadAttributes

func (r *ActionRunner) LoadAttributes(ctx context.Context) error

LoadAttributes loads the attributes of the runner

func (*ActionRunner) Status

func (r *ActionRunner) Status() runnerv1.RunnerStatus

func (*ActionRunner) StatusLocaleName

func (r *ActionRunner) StatusLocaleName(lang translation.Locale) string

func (*ActionRunner) StatusName

func (r *ActionRunner) StatusName() string

type ActionRunnerToken

type ActionRunnerToken struct {
	ID       int64
	Token    string                 `xorm:"UNIQUE"`
	OwnerID  int64                  `xorm:"index"` // org level runner, 0 means system
	Owner    *user_model.User       `xorm:"-"`
	RepoID   int64                  `xorm:"index"` // repo level runner, if orgid also is zero, then it's a global
	Repo     *repo_model.Repository `xorm:"-"`
	IsActive bool

	Created timeutil.TimeStamp `xorm:"created"`
	Updated timeutil.TimeStamp `xorm:"updated"`
	Deleted timeutil.TimeStamp `xorm:"deleted"`
}

ActionRunnerToken represents runner tokens

func GetRunnerToken

func GetRunnerToken(ctx context.Context, token string) (*ActionRunnerToken, error)

GetRunnerToken returns a action runner via token

func GetUnactivatedRunnerToken

func GetUnactivatedRunnerToken(ctx context.Context, ownerID, repoID int64) (*ActionRunnerToken, error)

GetUnactivatedRunnerToken returns a unactivated runner token

func NewRunnerToken

func NewRunnerToken(ctx context.Context, ownerID, repoID int64) (*ActionRunnerToken, error)

NewRunnerToken creates a new runner token

type ActionTask

type ActionTask struct {
	ID       int64
	JobID    int64
	Job      *ActionRunJob     `xorm:"-"`
	Steps    []*ActionTaskStep `xorm:"-"`
	Attempt  int64
	RunnerID int64              `xorm:"index"`
	Status   Status             `xorm:"index"`
	Started  timeutil.TimeStamp `xorm:"index"`
	Stopped  timeutil.TimeStamp

	RepoID            int64  `xorm:"index"`
	OwnerID           int64  `xorm:"index"`
	CommitSHA         string `xorm:"index"`
	IsForkPullRequest bool

	Token          string `xorm:"-"`
	TokenHash      string `xorm:"UNIQUE"` // sha256 of token
	TokenSalt      string
	TokenLastEight string `xorm:"index token_last_eight"`

	LogFilename  string     // file name of log
	LogInStorage bool       // read log from database or from storage
	LogLength    int64      // lines count
	LogSize      int64      // blob size
	LogIndexes   LogIndexes `xorm:"LONGBLOB"` // line number to offset
	LogExpired   bool       // files that are too old will be deleted

	Created timeutil.TimeStamp `xorm:"created"`
	Updated timeutil.TimeStamp `xorm:"updated index"`
}

ActionTask represents a distribution of job

func CreateTaskForRunner

func CreateTaskForRunner(ctx context.Context, runner *ActionRunner) (*ActionTask, bool, error)

func GetRunningTaskByToken

func GetRunningTaskByToken(ctx context.Context, token string) (*ActionTask, error)

func GetTaskByID

func GetTaskByID(ctx context.Context, id int64) (*ActionTask, error)

func UpdateTaskByState

func UpdateTaskByState(ctx context.Context, state *runnerv1.TaskState) (*ActionTask, error)

func (*ActionTask) Duration

func (task *ActionTask) Duration() time.Duration

func (*ActionTask) GenerateToken

func (task *ActionTask) GenerateToken() (err error)
func (task *ActionTask) GetCommitLink() string
func (task *ActionTask) GetRepoLink() string

func (*ActionTask) GetRepoName

func (task *ActionTask) GetRepoName() string
func (task *ActionTask) GetRunLink() string

func (*ActionTask) IsStopped

func (task *ActionTask) IsStopped() bool

func (*ActionTask) LoadAttributes

func (task *ActionTask) LoadAttributes(ctx context.Context) error

LoadAttributes load Job Steps if not loaded

func (*ActionTask) LoadJob

func (task *ActionTask) LoadJob(ctx context.Context) error

type ActionTaskOutput added in v1.20.0

type ActionTaskOutput struct {
	ID          int64
	TaskID      int64  `xorm:"INDEX UNIQUE(task_id_output_key)"`
	OutputKey   string `xorm:"VARCHAR(255) UNIQUE(task_id_output_key)"`
	OutputValue string `xorm:"MEDIUMTEXT"`
}

ActionTaskOutput represents an output of ActionTask. So the outputs are bound to a task, that means when a completed job has been rerun, the outputs of the job will be reset because the task is new. It's by design, to avoid the outputs of the old task to be mixed with the new task.

func FindTaskOutputByTaskID added in v1.20.0

func FindTaskOutputByTaskID(ctx context.Context, taskID int64) ([]*ActionTaskOutput, error)

FindTaskOutputByTaskID returns the outputs of the task.

type ActionTaskStep

type ActionTaskStep struct {
	ID        int64
	Name      string `xorm:"VARCHAR(255)"`
	TaskID    int64  `xorm:"index unique(task_index)"`
	Index     int64  `xorm:"index unique(task_index)"`
	RepoID    int64  `xorm:"index"`
	Status    Status `xorm:"index"`
	LogIndex  int64
	LogLength int64
	Started   timeutil.TimeStamp
	Stopped   timeutil.TimeStamp
	Created   timeutil.TimeStamp `xorm:"created"`
	Updated   timeutil.TimeStamp `xorm:"updated"`
}

ActionTaskStep represents a step of ActionTask

func GetTaskStepsByTaskID

func GetTaskStepsByTaskID(ctx context.Context, taskID int64) ([]*ActionTaskStep, error)

func (*ActionTaskStep) Duration

func (step *ActionTaskStep) Duration() time.Duration

type FindRunJobOptions

type FindRunJobOptions struct {
	db.ListOptions
	RunID         int64
	RepoID        int64
	OwnerID       int64
	CommitSHA     string
	Statuses      []Status
	UpdatedBefore timeutil.TimeStamp
}

type FindRunOptions

type FindRunOptions struct {
	db.ListOptions
	RepoID           int64
	OwnerID          int64
	WorkflowFileName string
	TriggerUserID    int64
	Approved         bool // not util.OptionalBool, it works only when it's true
}

type FindRunnerOptions

type FindRunnerOptions struct {
	db.ListOptions
	RepoID        int64
	OwnerID       int64
	Sort          string
	Filter        string
	WithAvailable bool // not only runners belong to, but also runners can be used
}

type FindTaskOptions

type FindTaskOptions struct {
	db.ListOptions
	RepoID        int64
	OwnerID       int64
	CommitSHA     string
	Status        Status
	UpdatedBefore timeutil.TimeStamp
	StartedBefore timeutil.TimeStamp
	RunnerID      int64
	IDOrderDesc   bool
}

type LogIndexes

type LogIndexes []int64

LogIndexes is the index for mapping log line number to buffer offset. Because it uses varint encoding, it is impossible to predict its size. But we can make a simple estimate with an assumption that each log line has 200 byte, then: | lines | file size | index size | |-----------|---------------------|--------------------| | 100 | 20 KiB(20000) | 258 B(258) | | 1000 | 195 KiB(200000) | 2.9 KiB(2958) | | 10000 | 1.9 MiB(2000000) | 34 KiB(34715) | | 100000 | 19 MiB(20000000) | 386 KiB(394715) | | 1000000 | 191 MiB(200000000) | 4.1 MiB(4323626) | | 10000000 | 1.9 GiB(2000000000) | 47 MiB(49323626) | | 100000000 | 19 GiB(20000000000) | 490 MiB(513424280) |

func (*LogIndexes) FromDB

func (indexes *LogIndexes) FromDB(b []byte) error

func (*LogIndexes) ToDB

func (indexes *LogIndexes) ToDB() ([]byte, error)

type RunList

type RunList []*ActionRun

func FindRuns

func FindRuns(ctx context.Context, opts FindRunOptions) (RunList, int64, error)

func (RunList) GetRepoIDs

func (runs RunList) GetRepoIDs() []int64

func (RunList) GetUserIDs

func (runs RunList) GetUserIDs() []int64

GetUserIDs returns a slice of user's id

func (RunList) LoadRepos

func (runs RunList) LoadRepos() error

func (RunList) LoadTriggerUser

func (runs RunList) LoadTriggerUser(ctx context.Context) error

type RunnerList

type RunnerList []*ActionRunner

func FindRunners

func FindRunners(ctx context.Context, opts FindRunnerOptions) (runners RunnerList, err error)

func (RunnerList) GetUserIDs

func (runners RunnerList) GetUserIDs() []int64

GetUserIDs returns a slice of user's id

func (RunnerList) LoadAttributes

func (runners RunnerList) LoadAttributes(ctx context.Context) error

func (RunnerList) LoadOwners

func (runners RunnerList) LoadOwners(ctx context.Context) error

func (RunnerList) LoadRepos

func (runners RunnerList) LoadRepos(ctx context.Context) error

type Status

type Status int

Status represents the status of ActionRun, ActionRunJob, ActionTask, or ActionTaskStep

const (
	StatusUnknown   Status = iota // 0, consistent with runnerv1.Result_RESULT_UNSPECIFIED
	StatusSuccess                 // 1, consistent with runnerv1.Result_RESULT_SUCCESS
	StatusFailure                 // 2, consistent with runnerv1.Result_RESULT_FAILURE
	StatusCancelled               // 3, consistent with runnerv1.Result_RESULT_CANCELLED
	StatusSkipped                 // 4, consistent with runnerv1.Result_RESULT_SKIPPED
	StatusWaiting                 // 5, isn't a runnerv1.Result
	StatusRunning                 // 6, isn't a runnerv1.Result
	StatusBlocked                 // 7, isn't a runnerv1.Result
)

func (Status) AsResult

func (s Status) AsResult() runnerv1.Result

func (Status) HasRun

func (s Status) HasRun() bool

HasRun returns whether the Status is a result of running

func (Status) In

func (s Status) In(statuses ...Status) bool

In returns whether s is one of the given statuses

func (Status) IsBlocked added in v1.20.0

func (s Status) IsBlocked() bool

func (Status) IsCancelled

func (s Status) IsCancelled() bool

func (Status) IsDone

func (s Status) IsDone() bool

IsDone returns whether the Status is final

func (Status) IsFailure

func (s Status) IsFailure() bool

func (Status) IsRunning

func (s Status) IsRunning() bool

func (Status) IsSkipped

func (s Status) IsSkipped() bool

func (Status) IsSuccess

func (s Status) IsSuccess() bool

func (Status) IsUnknown

func (s Status) IsUnknown() bool

func (Status) IsWaiting

func (s Status) IsWaiting() bool

func (Status) LocaleString

func (s Status) LocaleString(lang translation.Locale) string

LocaleString returns the locale string name of the Status

func (Status) String

func (s Status) String() string

String returns the string name of the Status

type TaskList

type TaskList []*ActionTask

func FindTasks

func FindTasks(ctx context.Context, opts FindTaskOptions) (TaskList, error)

func (TaskList) GetJobIDs

func (tasks TaskList) GetJobIDs() []int64

func (TaskList) LoadAttributes

func (tasks TaskList) LoadAttributes(ctx context.Context) error

func (TaskList) LoadJobs

func (tasks TaskList) LoadJobs(ctx context.Context) error

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL