mirror of
https://codeberg.org/forgejo/forgejo.git
synced 2026-03-26 02:43:02 -04:00
instead of code.gitea.io/actions-proto-go It is a hard fork of code.gitea.io/actions-proto-go which has been used by the runner in the past few months. Reviewed-on: https://codeberg.org/forgejo/forgejo/pulls/9981 Reviewed-by: Michael Kriese <michael.kriese@gmx.de> Co-authored-by: Earl Warren <contact@earl-warren.org> Co-committed-by: Earl Warren <contact@earl-warren.org>
128 lines
3.2 KiB
Go
128 lines
3.2 KiB
Go
// Copyright 2022 The Gitea Authors. All rights reserved.
|
|
// SPDX-License-Identifier: MIT
|
|
|
|
package actions
|
|
|
|
import (
|
|
"forgejo.org/modules/translation"
|
|
|
|
runnerv1 "code.forgejo.org/forgejo/actions-proto/runner/v1"
|
|
)
|
|
|
|
// Status represents the status of ActionRun, ActionRunJob, ActionTask, or ActionTaskStep
|
|
type Status int
|
|
|
|
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
|
|
)
|
|
|
|
var statusNames = map[Status]string{
|
|
StatusUnknown: "unknown",
|
|
StatusWaiting: "waiting",
|
|
StatusRunning: "running",
|
|
StatusSuccess: "success",
|
|
StatusFailure: "failure",
|
|
StatusCancelled: "cancelled",
|
|
StatusSkipped: "skipped",
|
|
StatusBlocked: "blocked",
|
|
}
|
|
|
|
var nameToStatus = make(map[string]Status, len(statusNames))
|
|
|
|
func init() {
|
|
// Populate name to status lookup map
|
|
for status, name := range statusNames {
|
|
nameToStatus[name] = status
|
|
}
|
|
}
|
|
|
|
// Statuses where the result is final and won't change
|
|
func DoneStatuses() []Status {
|
|
return []Status{StatusSuccess, StatusFailure, StatusCancelled, StatusSkipped}
|
|
}
|
|
|
|
// Statuses where the result is not yet final
|
|
func PendingStatuses() []Status {
|
|
return []Status{StatusUnknown, StatusWaiting, StatusRunning, StatusBlocked}
|
|
}
|
|
|
|
// String returns the string name of the Status
|
|
func (s Status) String() string {
|
|
return statusNames[s]
|
|
}
|
|
|
|
// LocaleString returns the locale string name of the Status
|
|
func (s Status) LocaleString(lang translation.Locale) string {
|
|
return lang.TrString("actions.status." + s.String())
|
|
}
|
|
|
|
// IsDone returns whether the Status is final
|
|
func (s Status) IsDone() bool {
|
|
return s.In(DoneStatuses()...)
|
|
}
|
|
|
|
// HasRun returns whether the Status is a result of running
|
|
func (s Status) HasRun() bool {
|
|
return s.In(StatusSuccess, StatusFailure)
|
|
}
|
|
|
|
func (s Status) IsUnknown() bool {
|
|
return s == StatusUnknown
|
|
}
|
|
|
|
func (s Status) IsSuccess() bool {
|
|
return s == StatusSuccess
|
|
}
|
|
|
|
func (s Status) IsFailure() bool {
|
|
return s == StatusFailure
|
|
}
|
|
|
|
func (s Status) IsCancelled() bool {
|
|
return s == StatusCancelled
|
|
}
|
|
|
|
func (s Status) IsSkipped() bool {
|
|
return s == StatusSkipped
|
|
}
|
|
|
|
func (s Status) IsWaiting() bool {
|
|
return s == StatusWaiting
|
|
}
|
|
|
|
func (s Status) IsRunning() bool {
|
|
return s == StatusRunning
|
|
}
|
|
|
|
func (s Status) IsBlocked() bool {
|
|
return s == StatusBlocked
|
|
}
|
|
|
|
// In returns whether s is one of the given statuses
|
|
func (s Status) In(statuses ...Status) bool {
|
|
for _, v := range statuses {
|
|
if s == v {
|
|
return true
|
|
}
|
|
}
|
|
return false
|
|
}
|
|
|
|
func (s Status) AsResult() runnerv1.Result {
|
|
if s.IsDone() {
|
|
return runnerv1.Result(s)
|
|
}
|
|
return runnerv1.Result_RESULT_UNSPECIFIED
|
|
}
|
|
|
|
func StatusFromString(name string) (Status, bool) {
|
|
status, exists := nameToStatus[name]
|
|
return status, exists
|
|
}
|