actions

package
v0.0.0-...-8fc6f8c Latest Latest
Warning

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

Go to latest
Published: Dec 19, 2024 License: MIT Imports: 34 Imported by: 0

Documentation

Index

Constants

View Source
const (
	RunnerOfflineTime = time.Minute
	RunnerIdleTime    = 10 * time.Second
)

Variables

This section is empty.

Functions

func CancelPreviousJobs

func CancelPreviousJobs(ctx context.Context, repoID int64, ref, workflowID string, event webhook_module.HookEventType) error

CancelPreviousJobs cancels all previous jobs of the same repository, reference, workflow, and event. It's useful when a new run is triggered, and all previous runs needn't be continued anymore.

func CleanRepoScheduleTasks

func CleanRepoScheduleTasks(ctx context.Context, repo *repo_model.Repository) error

func CountRunnersWithoutBelongingOwner

func CountRunnersWithoutBelongingOwner(ctx context.Context) (int64, error)

func CountRunnersWithoutBelongingRepo

func CountRunnersWithoutBelongingRepo(ctx context.Context) (int64, error)

func CreateRunner

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

CreateRunner creates new runner.

func CreateScheduleTask

func CreateScheduleTask(ctx context.Context, rows []*ActionSchedule) error

CreateScheduleTask creates new schedule task.

func DeleteRunner

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

DeleteRunner deletes a runner by given ID.

func DeleteScheduleTaskByRepo

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

func DeleteVariable

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

func FindTaskOutputKeyByTaskID

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

FindTaskOutputKeyByTaskID returns the keys of the outputs of the task.

func FixRunnersWithoutBelongingOwner

func FixRunnersWithoutBelongingOwner(ctx context.Context) (int64, error)

func FixRunnersWithoutBelongingRepo

func FixRunnersWithoutBelongingRepo(ctx context.Context) (int64, error)

func GetActors

func GetActors(ctx context.Context, repoID int64) ([]*user_model.User, error)

GetActors returns a slice of Actors

func GetReposMapByIDs

func GetReposMapByIDs(ctx context.Context, ids []int64) (map[int64]*repo_model.Repository, error)

GetReposMapByIDs returns the repos by given id slice.

func GetSchedulesMapByIDs

func GetSchedulesMapByIDs(ctx context.Context, ids []int64) (map[int64]*ActionSchedule, error)

GetSchedulesMapByIDs returns the schedules by given id slice.

func GetTasksVersionByScope

func GetTasksVersionByScope(ctx context.Context, ownerID, repoID int64) (int64, error)

func GetVariablesOfRun

func GetVariablesOfRun(ctx context.Context, run *ActionRun) (map[string]string, error)

func IncreaseTaskVersion

func IncreaseTaskVersion(ctx context.Context, ownerID, repoID int64) error

func InsertRun

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

InsertRun inserts a run The title will be cut off at 255 characters if it's longer than 255 characters.

func InsertTaskOutputIfNotExist

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

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

func SetArtifactDeleted

func SetArtifactDeleted(ctx context.Context, artifactID int64) error

SetArtifactDeleted sets an artifact to deleted

func SetArtifactExpired

func SetArtifactExpired(ctx context.Context, artifactID int64) error

SetArtifactExpired sets an artifact to expired

func SetArtifactNeedDelete

func SetArtifactNeedDelete(ctx context.Context, runID int64, name string) error

SetArtifactNeedDelete sets an artifact to need-delete, cron job will delete it

func StopTask

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

func UpdateArtifactByID

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

UpdateRun updates a run. It requires the inputted run has Version set. It will return error if the version is not matched (it means the run has been changed after loaded).

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 UpdateScheduleSpec

func UpdateScheduleSpec(ctx context.Context, spec *ActionScheduleSpec, cols ...string) error

func UpdateTask

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

func UpdateVariable

func UpdateVariable(ctx context.Context, variable *ActionVariable) (bool, error)

Types

type ActionArtifact

type ActionArtifact struct {
	ID                 int64 `xorm:"pk autoincr"`
	RunID              int64 `xorm:"index unique(runid_name_path)"` // 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             `xorm:"index unique(runid_name_path)"` // The path to the artifact when runner uploads it
	ArtifactName       string             `xorm:"index unique(runid_name_path)"` // 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"`
	ExpiredUnix        timeutil.TimeStamp `xorm:"index"` // The time when the artifact will be expired
}

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

func CreateArtifact

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

func ListNeedExpiredArtifacts

func ListNeedExpiredArtifacts(ctx context.Context) ([]*ActionArtifact, error)

ListNeedExpiredArtifacts returns all need expired artifacts but not deleted

func ListPendingDeleteArtifacts

func ListPendingDeleteArtifacts(ctx context.Context, limit int) ([]*ActionArtifact, error)

ListPendingDeleteArtifacts returns all artifacts in pending-delete status. limit is the max number of artifacts to return.

type ActionArtifactMeta

type ActionArtifactMeta struct {
	ArtifactName string
	FileSize     int64
	Status       ArtifactStatus
}

ActionArtifactMeta is the meta data of an artifact

func ListUploadedArtifactsMeta

func ListUploadedArtifactsMeta(ctx context.Context, runID int64) ([]*ActionArtifactMeta, error)

ListUploadedArtifactsMeta returns all uploaded artifacts meta of a run

type ActionJobList

type ActionJobList []*ActionRunJob

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:"-"`
	ScheduleID        int64
	Ref               string `xorm:"index"` // the commit/tag/… that caused the run
	IsRefDeleted      bool   `xorm:"-"`
	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 // the webhook event that causes the workflow to run
	EventPayload      string                       `xorm:"LONGTEXT"`
	TriggerEvent      string                       // the trigger event defined in the `on` configuration of the triggered workflow
	Status            Status                       `xorm:"index"`
	Version           int                          `xorm:"version default 0"` // Status could be updated concomitantly, so an optimistic lock is needed
	// Started and Stopped is used for recording last run time, if rerun happened, they will be reset to 0
	Started timeutil.TimeStamp
	Stopped timeutil.TimeStamp
	// PreviousDuration is used for recording previous duration
	PreviousDuration time.Duration
	Created          timeutil.TimeStamp `xorm:"created"`
	Updated          timeutil.TimeStamp `xorm:"updated"`
}

ActionRun represents a run of a workflow file

func GetLatestRun

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

func GetRunByID

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

func GetRunByIndex

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

func GetWorkflowLatestRun

func GetWorkflowLatestRun(ctx context.Context, repoID int64, workflowFile, branch, event string) (*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 (*ActionRun) IsSchedule

func (run *ActionRun) IsSchedule() bool
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) LoadRepo

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

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

func (run *ActionRun) WorkflowLink() string

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"`
	Owner       *user_model.User       `xorm:"-"`
	RepoID      int64                  `xorm:"index"`
	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 labels defined in state file (default: .runner file) of `act_runner`
	AgentLabels []string `xorm:"TEXT"`

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

ActionRunner represents runner machines

It can be:

  1. global runner, OwnerID is 0 and RepoID is 0
  2. org/user level runner, OwnerID is org/user ID and RepoID is 0
  3. repo level runner, OwnerID is 0 and RepoID is repo ID

Please note that it's not acceptable to have both OwnerID and RepoID to be non-zero, or it will be complicated to find runners belonging to a specific owner. For example, conditions like `OwnerID = 1` will also return runner {OwnerID: 1, RepoID: 1}, but it's a repo level runner, not an org/user level runner. To avoid this, make it clear with {OwnerID: 0, RepoID: 1} for repo level runners.

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) BelongsToOwnerName

func (r *ActionRunner) BelongsToOwnerName() string

BelongsToOwnerName before calling, should guarantee that all attributes are loaded

func (*ActionRunner) BelongsToOwnerType

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

if the logic here changed, you should also modify FindRunnerOptions.ToCond

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"`
	Owner    *user_model.User       `xorm:"-"`
	RepoID   int64                  `xorm:"index"`
	Repo     *repo_model.Repository `xorm:"-"`
	IsActive bool                   // true means it can be used

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

ActionRunnerToken represents runner tokens

It can be:

  1. global token, OwnerID is 0 and RepoID is 0
  2. org/user level token, OwnerID is org/user ID and RepoID is 0
  3. repo level token, OwnerID is 0 and RepoID is repo ID

Please note that it's not acceptable to have both OwnerID and RepoID to be non-zero, or it will be complicated to find tokens belonging to a specific owner. For example, conditions like `OwnerID = 1` will also return token {OwnerID: 1, RepoID: 1}, but it's a repo level token, not an org/user level token. To avoid this, make it clear with {OwnerID: 0, RepoID: 1} for repo level tokens.

func GetLatestRunnerToken

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

GetLatestRunnerToken returns the latest runner token

func GetRunnerToken

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

GetRunnerToken returns a action runner via token

func NewRunnerToken

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

NewRunnerToken creates a new active runner token and invalidate all old tokens ownerID will be ignored and treated as 0 if repoID is non-zero.

type ActionSchedule

type ActionSchedule struct {
	ID            int64
	Title         string
	Specs         []string
	RepoID        int64                  `xorm:"index"`
	Repo          *repo_model.Repository `xorm:"-"`
	OwnerID       int64                  `xorm:"index"`
	WorkflowID    string
	TriggerUserID int64
	TriggerUser   *user_model.User `xorm:"-"`
	Ref           string
	CommitSHA     string
	Event         webhook_module.HookEventType
	EventPayload  string `xorm:"LONGTEXT"`
	Content       []byte
	Created       timeutil.TimeStamp `xorm:"created"`
	Updated       timeutil.TimeStamp `xorm:"updated"`
}

ActionSchedule represents a schedule of a workflow file

type ActionScheduleSpec

type ActionScheduleSpec struct {
	ID         int64
	RepoID     int64                  `xorm:"index"`
	Repo       *repo_model.Repository `xorm:"-"`
	ScheduleID int64                  `xorm:"index"`
	Schedule   *ActionSchedule        `xorm:"-"`

	// Next time the job will run, or the zero time if Cron has not been
	// started or this entry's schedule is unsatisfiable
	Next timeutil.TimeStamp `xorm:"index"`
	// Prev is the last time this job was run, or the zero time if never.
	Prev timeutil.TimeStamp
	Spec string

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

ActionScheduleSpec represents a schedule spec of a workflow file

func (*ActionScheduleSpec) Parse

func (s *ActionScheduleSpec) Parse() (cron.Schedule, error)

Parse parses the spec and returns a cron.Schedule Unlike the default cron parser, Parse uses UTC timezone as the default if none is specified.

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 `xorm:"index(stopped_log_expired)"`

	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       `xorm:"index(stopped_log_expired)"` // 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 FindOldTasksToExpire

func FindOldTasksToExpire(ctx context.Context, olderThan timeutil.TimeStamp, limit int) ([]*ActionTask, 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, runnerID int64, state *runnerv1.TaskState) (*ActionTask, error)

UpdateTaskByState updates the task by the state. It will always update the task if the state is not final, even there is no change. So it will update ActionTask.Updated to avoid the task being judged as a zombie task.

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

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

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 ActionTasksVersion

type ActionTasksVersion struct {
	ID          int64 `xorm:"pk autoincr"`
	OwnerID     int64 `xorm:"UNIQUE(owner_repo)"`
	RepoID      int64 `xorm:"INDEX UNIQUE(owner_repo)"`
	Version     int64
	CreatedUnix timeutil.TimeStamp `xorm:"created"`
	UpdatedUnix timeutil.TimeStamp `xorm:"updated"`
}

ActionTasksVersion If both ownerID and repoID is zero, its scope is global. If ownerID is not zero and repoID is zero, its scope is org (there is no user-level runner currently). If ownerID is zero and repoID is not zero, its scope is repo.

type ActionVariable

type ActionVariable struct {
	ID          int64              `xorm:"pk autoincr"`
	OwnerID     int64              `xorm:"UNIQUE(owner_repo_name)"`
	RepoID      int64              `xorm:"INDEX UNIQUE(owner_repo_name)"`
	Name        string             `xorm:"UNIQUE(owner_repo_name) NOT NULL"`
	Data        string             `xorm:"LONGTEXT NOT NULL"`
	CreatedUnix timeutil.TimeStamp `xorm:"created NOT NULL"`
	UpdatedUnix timeutil.TimeStamp `xorm:"updated"`
}

ActionVariable represents a variable that can be used in actions

It can be:

  1. global variable, OwnerID is 0 and RepoID is 0
  2. org/user level variable, OwnerID is org/user ID and RepoID is 0
  3. repo level variable, OwnerID is 0 and RepoID is repo ID

Please note that it's not acceptable to have both OwnerID and RepoID to be non-zero, or it will be complicated to find variables belonging to a specific owner. For example, conditions like `OwnerID = 1` will also return variable {OwnerID: 1, RepoID: 1}, but it's a repo level variable, not an org/user level variable. To avoid this, make it clear with {OwnerID: 0, RepoID: 1} for repo level variables.

func FindVariables

func FindVariables(ctx context.Context, opts FindVariablesOpts) ([]*ActionVariable, error)

func InsertVariable

func InsertVariable(ctx context.Context, ownerID, repoID int64, name, data string) (*ActionVariable, error)

type ArtifactStatus

type ArtifactStatus int64

ArtifactStatus is the status of an artifact, uploading, expired or need-delete

const (
	ArtifactStatusUploadPending   ArtifactStatus = iota + 1 // 1, ArtifactStatusUploadPending is the status of an artifact upload that is pending
	ArtifactStatusUploadConfirmed                           // 2, ArtifactStatusUploadConfirmed is the status of an artifact upload that is confirmed
	ArtifactStatusUploadError                               // 3, ArtifactStatusUploadError is the status of an artifact upload that is errored
	ArtifactStatusExpired                                   // 4, ArtifactStatusExpired is the status of an artifact that is expired
	ArtifactStatusPendingDeletion                           // 5, ArtifactStatusPendingDeletion is the status of an artifact that is pending deletion
	ArtifactStatusDeleted                                   // 6, ArtifactStatusDeleted is the status of an artifact that is deleted
)

type FindArtifactsOptions

type FindArtifactsOptions struct {
	db.ListOptions
	RepoID       int64
	RunID        int64
	ArtifactName string
	Status       int
}

func (FindArtifactsOptions) ToConds

func (opts FindArtifactsOptions) ToConds() builder.Cond

type FindRunJobOptions

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

func (FindRunJobOptions) ToConds

func (opts FindRunJobOptions) ToConds() builder.Cond

type FindRunOptions

type FindRunOptions struct {
	db.ListOptions
	RepoID        int64
	OwnerID       int64
	WorkflowID    string
	Ref           string // the commit/tag/… that caused this workflow
	TriggerUserID int64
	TriggerEvent  webhook_module.HookEventType
	Approved      bool // not util.OptionalBool, it works only when it's true
	Status        []Status
}

func (FindRunOptions) ToConds

func (opts FindRunOptions) ToConds() builder.Cond

func (FindRunOptions) ToOrders

func (opts FindRunOptions) ToOrders() string

type FindRunnerOptions

type FindRunnerOptions struct {
	db.ListOptions
	RepoID        int64
	OwnerID       int64 // it will be ignored if RepoID is set
	Sort          string
	Filter        string
	IsOnline      optional.Option[bool]
	WithAvailable bool // not only runners belong to, but also runners can be used
}

func (FindRunnerOptions) ToConds

func (opts FindRunnerOptions) ToConds() builder.Cond

func (FindRunnerOptions) ToOrders

func (opts FindRunnerOptions) ToOrders() string

type FindScheduleOptions

type FindScheduleOptions struct {
	db.ListOptions
	RepoID  int64
	OwnerID int64
}

func (FindScheduleOptions) ToConds

func (opts FindScheduleOptions) ToConds() builder.Cond

func (FindScheduleOptions) ToOrders

func (opts FindScheduleOptions) ToOrders() string

type FindSpecOptions

type FindSpecOptions struct {
	db.ListOptions
	RepoID int64
	Next   int64
}

func (FindSpecOptions) ToConds

func (opts FindSpecOptions) ToConds() builder.Cond

func (FindSpecOptions) ToOrders

func (opts FindSpecOptions) ToOrders() string

type FindTaskOptions

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

func (FindTaskOptions) ToConds

func (opts FindTaskOptions) ToConds() builder.Cond

func (FindTaskOptions) ToOrders

func (opts FindTaskOptions) ToOrders() string

type FindVariablesOpts

type FindVariablesOpts struct {
	db.ListOptions
	RepoID  int64
	OwnerID int64 // it will be ignored if RepoID is set
	Name    string
}

func (FindVariablesOpts) ToConds

func (opts FindVariablesOpts) ToConds() builder.Cond

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 (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(ctx context.Context) error

func (RunList) LoadTriggerUser

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

type RunnerList

type RunnerList []*ActionRunner

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 ScheduleList

type ScheduleList []*ActionSchedule

func (ScheduleList) GetRepoIDs

func (schedules ScheduleList) GetRepoIDs() []int64

func (ScheduleList) GetUserIDs

func (schedules ScheduleList) GetUserIDs() []int64

GetUserIDs returns a slice of user's id

func (ScheduleList) LoadRepos

func (schedules ScheduleList) LoadRepos(ctx context.Context) error

func (ScheduleList) LoadTriggerUser

func (schedules ScheduleList) LoadTriggerUser(ctx context.Context) error

type SpecList

type SpecList []*ActionScheduleSpec

func FindSpecs

func FindSpecs(ctx context.Context, opts FindSpecOptions) (SpecList, int64, error)

func (SpecList) GetRepoIDs

func (specs SpecList) GetRepoIDs() []int64

func (SpecList) GetScheduleIDs

func (specs SpecList) GetScheduleIDs() []int64

func (SpecList) LoadRepos

func (specs SpecList) LoadRepos(ctx context.Context) error

func (SpecList) LoadSchedules

func (specs SpecList) LoadSchedules(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 AggregateJobStatus

func AggregateJobStatus(jobs []*ActionRunJob) Status

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

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 StatusInfo

type StatusInfo struct {
	Status          int
	DisplayedStatus string
}

func GetStatusInfoList

func GetStatusInfoList(ctx context.Context) []StatusInfo

GetStatusInfoList returns a slice of StatusInfo

type TaskList

type TaskList []*ActionTask

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