gitea源码

commit_status.go 2.7KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182
  1. // Copyright 2020 The Gitea Authors. All rights reserved.
  2. // SPDX-License-Identifier: MIT
  3. package commitstatus
  4. // CommitStatusState holds the state of a CommitStatus
  5. // swagger:enum CommitStatusState
  6. type CommitStatusState string //nolint:revive // export stutter
  7. const (
  8. // CommitStatusPending is for when the CommitStatus is Pending
  9. CommitStatusPending CommitStatusState = "pending"
  10. // CommitStatusSuccess is for when the CommitStatus is Success
  11. CommitStatusSuccess CommitStatusState = "success"
  12. // CommitStatusError is for when the CommitStatus is Error
  13. CommitStatusError CommitStatusState = "error"
  14. // CommitStatusFailure is for when the CommitStatus is Failure
  15. CommitStatusFailure CommitStatusState = "failure"
  16. // CommitStatusWarning is for when the CommitStatus is Warning
  17. CommitStatusWarning CommitStatusState = "warning"
  18. // CommitStatusSkipped is for when CommitStatus is Skipped
  19. CommitStatusSkipped CommitStatusState = "skipped"
  20. )
  21. func (css CommitStatusState) String() string {
  22. return string(css)
  23. }
  24. // IsPending represents if commit status state is pending
  25. func (css CommitStatusState) IsPending() bool {
  26. return css == CommitStatusPending
  27. }
  28. // IsSuccess represents if commit status state is success
  29. func (css CommitStatusState) IsSuccess() bool {
  30. return css == CommitStatusSuccess
  31. }
  32. // IsError represents if commit status state is error
  33. func (css CommitStatusState) IsError() bool {
  34. return css == CommitStatusError
  35. }
  36. // IsFailure represents if commit status state is failure
  37. func (css CommitStatusState) IsFailure() bool {
  38. return css == CommitStatusFailure
  39. }
  40. // IsWarning represents if commit status state is warning
  41. func (css CommitStatusState) IsWarning() bool {
  42. return css == CommitStatusWarning
  43. }
  44. // IsSkipped represents if commit status state is skipped
  45. func (css CommitStatusState) IsSkipped() bool {
  46. return css == CommitStatusSkipped
  47. }
  48. type CommitStatusStates []CommitStatusState //nolint:revive // export stutter
  49. // According to https://docs.github.com/en/rest/commits/statuses?apiVersion=2022-11-28#get-the-combined-status-for-a-specific-reference
  50. // > Additionally, a combined state is returned. The state is one of:
  51. // > failure if any of the contexts report as error or failure
  52. // > pending if there are no statuses or a context is pending
  53. // > success if the latest status for all contexts is success
  54. func (css CommitStatusStates) Combine() CommitStatusState {
  55. successCnt := 0
  56. for _, state := range css {
  57. switch {
  58. case state.IsError() || state.IsFailure():
  59. return CommitStatusFailure
  60. case state.IsPending():
  61. case state.IsSuccess() || state.IsWarning() || state.IsSkipped():
  62. successCnt++
  63. }
  64. }
  65. if successCnt > 0 && successCnt == len(css) {
  66. return CommitStatusSuccess
  67. }
  68. return CommitStatusPending
  69. }