Skip to content

Commit 05818d4

Browse files
authored
Merge branch 'main' into fix-navbar-active
2 parents e0796ab + 2d7e6e9 commit 05818d4

File tree

22 files changed

+346
-49
lines changed

22 files changed

+346
-49
lines changed

models/actions/run_job.go

Lines changed: 25 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -153,28 +153,34 @@ func UpdateRunJob(ctx context.Context, job *ActionRunJob, cond builder.Cond, col
153153
}
154154

155155
func AggregateJobStatus(jobs []*ActionRunJob) Status {
156-
allDone := true
157-
allWaiting := true
158-
hasFailure := false
156+
allSuccessOrSkipped := len(jobs) != 0
157+
allSkipped := len(jobs) != 0
158+
var hasFailure, hasCancelled, hasWaiting, hasRunning, hasBlocked bool
159159
for _, job := range jobs {
160-
if !job.Status.IsDone() {
161-
allDone = false
162-
}
163-
if job.Status != StatusWaiting && !job.Status.IsDone() {
164-
allWaiting = false
165-
}
166-
if job.Status == StatusFailure || job.Status == StatusCancelled {
167-
hasFailure = true
168-
}
160+
allSuccessOrSkipped = allSuccessOrSkipped && (job.Status == StatusSuccess || job.Status == StatusSkipped)
161+
allSkipped = allSkipped && job.Status == StatusSkipped
162+
hasFailure = hasFailure || job.Status == StatusFailure
163+
hasCancelled = hasCancelled || job.Status == StatusCancelled
164+
hasWaiting = hasWaiting || job.Status == StatusWaiting
165+
hasRunning = hasRunning || job.Status == StatusRunning
166+
hasBlocked = hasBlocked || job.Status == StatusBlocked
169167
}
170-
if allDone {
171-
if hasFailure {
172-
return StatusFailure
173-
}
168+
switch {
169+
case allSkipped:
170+
return StatusSkipped
171+
case allSuccessOrSkipped:
174172
return StatusSuccess
175-
}
176-
if allWaiting {
173+
case hasCancelled:
174+
return StatusCancelled
175+
case hasFailure:
176+
return StatusFailure
177+
case hasRunning:
178+
return StatusRunning
179+
case hasWaiting:
177180
return StatusWaiting
181+
case hasBlocked:
182+
return StatusBlocked
183+
default:
184+
return StatusUnknown // it shouldn't happen
178185
}
179-
return StatusRunning
180186
}
Lines changed: 85 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,85 @@
1+
// Copyright 2024 The Gitea Authors. All rights reserved.
2+
// SPDX-License-Identifier: MIT
3+
4+
package actions
5+
6+
import (
7+
"testing"
8+
9+
"github.com/stretchr/testify/assert"
10+
)
11+
12+
func TestAggregateJobStatus(t *testing.T) {
13+
testStatuses := func(expected Status, statuses []Status) {
14+
t.Helper()
15+
var jobs []*ActionRunJob
16+
for _, v := range statuses {
17+
jobs = append(jobs, &ActionRunJob{Status: v})
18+
}
19+
actual := AggregateJobStatus(jobs)
20+
if !assert.Equal(t, expected, actual) {
21+
var statusStrings []string
22+
for _, s := range statuses {
23+
statusStrings = append(statusStrings, s.String())
24+
}
25+
t.Errorf("AggregateJobStatus(%v) = %v, want %v", statusStrings, statusNames[actual], statusNames[expected])
26+
}
27+
}
28+
29+
cases := []struct {
30+
statuses []Status
31+
expected Status
32+
}{
33+
// unknown cases, maybe it shouldn't happen in real world
34+
{[]Status{}, StatusUnknown},
35+
{[]Status{StatusUnknown, StatusSuccess}, StatusUnknown},
36+
{[]Status{StatusUnknown, StatusSkipped}, StatusUnknown},
37+
{[]Status{StatusUnknown, StatusFailure}, StatusFailure},
38+
{[]Status{StatusUnknown, StatusCancelled}, StatusCancelled},
39+
{[]Status{StatusUnknown, StatusWaiting}, StatusWaiting},
40+
{[]Status{StatusUnknown, StatusRunning}, StatusRunning},
41+
{[]Status{StatusUnknown, StatusBlocked}, StatusBlocked},
42+
43+
// success with other status
44+
{[]Status{StatusSuccess}, StatusSuccess},
45+
{[]Status{StatusSuccess, StatusSkipped}, StatusSuccess}, // skipped doesn't affect success
46+
{[]Status{StatusSuccess, StatusFailure}, StatusFailure},
47+
{[]Status{StatusSuccess, StatusCancelled}, StatusCancelled},
48+
{[]Status{StatusSuccess, StatusWaiting}, StatusWaiting},
49+
{[]Status{StatusSuccess, StatusRunning}, StatusRunning},
50+
{[]Status{StatusSuccess, StatusBlocked}, StatusBlocked},
51+
52+
// any cancelled, then cancelled
53+
{[]Status{StatusCancelled}, StatusCancelled},
54+
{[]Status{StatusCancelled, StatusSuccess}, StatusCancelled},
55+
{[]Status{StatusCancelled, StatusSkipped}, StatusCancelled},
56+
{[]Status{StatusCancelled, StatusFailure}, StatusCancelled},
57+
{[]Status{StatusCancelled, StatusWaiting}, StatusCancelled},
58+
{[]Status{StatusCancelled, StatusRunning}, StatusCancelled},
59+
{[]Status{StatusCancelled, StatusBlocked}, StatusCancelled},
60+
61+
// failure with other status, fail fast
62+
// Should "running" win? Maybe no: old code does make "running" win, but GitHub does fail fast.
63+
{[]Status{StatusFailure}, StatusFailure},
64+
{[]Status{StatusFailure, StatusSuccess}, StatusFailure},
65+
{[]Status{StatusFailure, StatusSkipped}, StatusFailure},
66+
{[]Status{StatusFailure, StatusCancelled}, StatusCancelled},
67+
{[]Status{StatusFailure, StatusWaiting}, StatusFailure},
68+
{[]Status{StatusFailure, StatusRunning}, StatusFailure},
69+
{[]Status{StatusFailure, StatusBlocked}, StatusFailure},
70+
71+
// skipped with other status
72+
// "all skipped" is also considered as "mergeable" by "services/actions.toCommitStatus", the same as GitHub
73+
{[]Status{StatusSkipped}, StatusSkipped},
74+
{[]Status{StatusSkipped, StatusSuccess}, StatusSuccess},
75+
{[]Status{StatusSkipped, StatusFailure}, StatusFailure},
76+
{[]Status{StatusSkipped, StatusCancelled}, StatusCancelled},
77+
{[]Status{StatusSkipped, StatusWaiting}, StatusWaiting},
78+
{[]Status{StatusSkipped, StatusRunning}, StatusRunning},
79+
{[]Status{StatusSkipped, StatusBlocked}, StatusBlocked},
80+
}
81+
82+
for _, c := range cases {
83+
testStatuses(c.expected, c.statuses)
84+
}
85+
}

modules/markup/markdown/markdown.go

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -129,7 +129,8 @@ func SpecializedMarkdown(ctx *markup.RenderContext) *GlodmarkRender {
129129
Enabled: setting.Markdown.EnableMath,
130130
ParseDollarInline: true,
131131
ParseDollarBlock: true,
132-
ParseSquareBlock: true, // TODO: this is a bad syntax, it should be deprecated in the future (by some config options)
132+
ParseSquareBlock: true, // TODO: this is a bad syntax "\[ ... \]", it conflicts with normal markdown escaping, it should be deprecated in the future (by some config options)
133+
// ParseBracketInline: true, // TODO: this is also a bad syntax "\( ... \)", it also conflicts, it should be deprecated in the future
133134
}),
134135
meta.Meta,
135136
),

modules/repository/fork.go

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,9 @@ import (
1212
"code.gitea.io/gitea/modules/setting"
1313
)
1414

15+
// CanUserForkBetweenOwners returns true if user can fork between owners.
16+
// By default, a user can fork a repository from another owner, but not from themselves.
17+
// Many users really like to fork their own repositories, so add an experimental setting to allow this.
1518
func CanUserForkBetweenOwners(id1, id2 int64) bool {
1619
if id1 != id2 {
1720
return true

modules/templates/util_string.go

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -60,3 +60,7 @@ func (su *StringUtils) EllipsisString(s string, maxLength int) string {
6060
func (su *StringUtils) ToUpper(s string) string {
6161
return strings.ToUpper(s)
6262
}
63+
64+
func (su *StringUtils) TrimPrefix(s, prefix string) string {
65+
return strings.TrimPrefix(s, prefix)
66+
}

options/locale/locale_fr-FR.ini

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1676,7 +1676,6 @@ issues.timetracker_timer_stop=Arrêter le minuteur
16761676
issues.timetracker_timer_discard=Annuler le minuteur
16771677
issues.timetracker_timer_manually_add=Pointer du temps
16781678
1679-
issues.time_estimate_placeholder=1h 2m
16801679
issues.time_estimate_set=Définir le temps estimé
16811680
issues.time_estimate_display=Estimation : %s
16821681
issues.change_time_estimate_at=a changé le temps estimé à <b>%s</b> %s

options/locale/locale_ga-IE.ini

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1676,7 +1676,6 @@ issues.timetracker_timer_stop=Stop an t-amadóir
16761676
issues.timetracker_timer_discard=Déan an t-amadóir a scriosadh
16771677
issues.timetracker_timer_manually_add=Cuir Am leis
16781678

1679-
issues.time_estimate_placeholder=1u 2n
16801679
issues.time_estimate_set=Socraigh am measta
16811680
issues.time_estimate_display=Meastachán: %s
16821681
issues.change_time_estimate_at=d'athraigh an meastachán ama go <b>%s</b> %s

options/locale/locale_pt-PT.ini

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1679,7 +1679,6 @@ issues.timetracker_timer_stop=Parar cronómetro
16791679
issues.timetracker_timer_discard=Descartar cronómetro
16801680
issues.timetracker_timer_manually_add=Adicionar tempo
16811681

1682-
issues.time_estimate_placeholder=1h 2m
16831682
issues.time_estimate_set=Definir tempo estimado
16841683
issues.time_estimate_display=Estimativa: %s
16851684
issues.change_time_estimate_at=alterou a estimativa de tempo para <b>%s</b> %s
@@ -2632,6 +2631,7 @@ release.new_release=Novo lançamento
26322631
release.draft=Rascunho
26332632
release.prerelease=Pré-lançamento
26342633
release.stable=Estável
2634+
release.latest=Mais recente
26352635
release.compare=Comparar
26362636
release.edit=editar
26372637
release.ahead.commits=<strong>%d</strong> cometimentos

0 commit comments

Comments
 (0)