mirror of
https://gitea.com/gitea/tea.git
synced 2026-10-26 19:11:25 +01:00
fix(pr): report checks like gh, exit 8 while they are pending
tea pr checks printed relative links, "Error: pull request checks have not all succeeded" with exit 1 for checks that were only pending, and nothing at all without checks. It now heads the table with a colored verdict and "0 failing, 1 successful, and 2 pending checks", prints a status icon and absolute links, and exits 8 while checks are pending and 1 when one failed, without an Error line (D21). clierr.Quiet carries such an exit code past main without a message. Without checks it says "no checks reported for pull request alice/x#8". --watch redraws the summary in place on a terminal, and an expired --timeout reads "timed out after 3s waiting for 2 pending checks". The pull request argument is optional, and --web opens the pull request. Signed-off-by: bircni <bircni@icloud.com>
This commit is contained in:
6 files changed
+239
-36
No files matched your search
@@ -14,9 +14,25 @@ const (
|
||||
Usage = 2
|
||||
Canceled = 3
|
||||
Authentication = 4
|
||||
Interrupted = 130
|
||||
// Pending reports checks that have not finished, like gh pr checks.
|
||||
Pending = 8
|
||||
Interrupted = 130
|
||||
)
|
||||
|
||||
// errReported is the message of Quiet errors.
|
||||
var errReported = errors.New("the command reported the outcome")
|
||||
|
||||
// Quiet exits with code without an error message, for an outcome the command already reported,
|
||||
// such as failing checks.
|
||||
func Quiet(code int) error {
|
||||
return &Error{Code: code, Err: errReported}
|
||||
}
|
||||
|
||||
// IsQuiet reports whether err is a Quiet exit code.
|
||||
func IsQuiet(err error) bool {
|
||||
return errors.Is(err, errReported)
|
||||
}
|
||||
|
||||
// Error associates an operation error with a public CLI exit code.
|
||||
type Error struct {
|
||||
Code int
|
||||
|
||||
@@ -27,6 +27,8 @@ func TestExitCodeDistinguishesCancellationAndInterruption(t *testing.T) {
|
||||
{fmt.Errorf("draft preserved: %w", context.DeadlineExceeded), Canceled},
|
||||
{Wrap(Interrupted, context.Canceled), Interrupted},
|
||||
{errors.Join(errors.New("partial failure"), context.Canceled), Canceled},
|
||||
{Quiet(Pending), Pending},
|
||||
{fmt.Errorf("checks: %w", Quiet(Failure)), Failure},
|
||||
} {
|
||||
assert.Equal(t, test.code, ExitCode(test.err), "%v", test.err)
|
||||
}
|
||||
|
||||
Reference in new issue
Block a user