Patch CI statistics

Pipeline reads CI wall-clock time. Corpus reads today's patchsets laid out over PostgreSQL's history.

Runs
1,533
terminal, in range
Success rate
84.5%
1,296 of 1,533
Median build
2m 52s
successful and failed alike
Median test
5m 17s
successful and failed alike
Median queue wait
0m 00s
queued to started
Infra errors
0.0%
0 runs
GitHub re-attempts
0
attempt > 1 on one run id

Runs by result

terminal runs only; timeouts fold into their failure band

Show data
WhenResultRuns
16 Aug 12:00build failed4
16 Aug 12:00success89
16 Aug 12:00tests failed7
16 Aug 13:00success39
16 Aug 13:00tests failed5
16 Aug 14:00success7
16 Aug 14:00tests failed1
16 Aug 15:00success5
16 Aug 15:00tests failed1
16 Aug 16:00success6
16 Aug 16:00tests failed1
16 Aug 17:00success1
16 Aug 20:00success1
16 Aug 22:00success1
16 Aug 23:00success1
17 Aug 00:00build failed2
17 Aug 00:00success100
17 Aug 00:00tests failed11
17 Aug 01:00build failed8
17 Aug 01:00success105
17 Aug 01:00tests failed7
17 Aug 02:00build failed8
17 Aug 02:00success95
17 Aug 02:00tests failed8
17 Aug 03:00build failed11
17 Aug 03:00success103
17 Aug 03:00tests failed14
17 Aug 04:00build failed2
17 Aug 04:00success90
17 Aug 04:00tests failed13
17 Aug 05:00build failed3
17 Aug 05:00success105
17 Aug 05:00tests failed14
17 Aug 06:00build failed2
17 Aug 06:00success102
17 Aug 06:00tests failed10
17 Aug 07:00build failed9
17 Aug 07:00success75
17 Aug 07:00tests failed10
17 Aug 08:00build failed4
17 Aug 08:00success97
17 Aug 08:00tests failed12
17 Aug 09:00build failed1
17 Aug 09:00success88
17 Aug 09:00tests failed15
17 Aug 10:00build failed4
17 Aug 10:00success93
17 Aug 10:00tests failed22
17 Aug 11:00build failed8
17 Aug 11:00success78
17 Aug 11:00tests failed19
17 Aug 12:00success15
17 Aug 12:00tests failed1

Success rate

hollow points sit below 5 terminal runs in the bucket

Show data
WhenSuccess rateTerminal runs
16 Aug 12:0089.0%100
16 Aug 13:0088.6%44
16 Aug 14:0087.5%8
16 Aug 15:0083.3%6
16 Aug 16:0085.7%7
16 Aug 17:00100.0%1
16 Aug 20:00100.0%1
16 Aug 22:00100.0%1
16 Aug 23:00100.0%1
17 Aug 00:0088.5%113
17 Aug 01:0087.5%120
17 Aug 02:0085.6%111
17 Aug 03:0080.5%128
17 Aug 04:0085.7%105
17 Aug 05:0086.1%122
17 Aug 06:0089.5%114
17 Aug 07:0079.8%94
17 Aug 08:0085.8%113
17 Aug 09:0084.6%104
17 Aug 10:0078.2%119
17 Aug 11:0074.3%105
17 Aug 12:0093.8%16

Build and test duration by era

median seconds; successful runs only

Show data
WhenEraBuild medianTest medianBuild p25-p75
16 Aug 12:00trixie2m 50s5m 16s2m 45s - 2m 54s
16 Aug 13:00trixie2m 52s5m 23s2m 46s - 2m 54s
16 Aug 14:00trixie2m 46s5m 23s2m 13s - 2m 54s
16 Aug 15:00trixie2m 53s5m 23s2m 47s - 2m 56s
16 Aug 16:00trixie2m 55s5m 29s2m 51s - 2m 57s
16 Aug 17:00trixie2m 53s5m 26s2m 53s - 2m 53s
16 Aug 20:00trixie2m 48s5m 12s2m 48s - 2m 48s
16 Aug 22:00trixie2m 38s4m 47s2m 38s - 2m 38s
16 Aug 23:00trixie2m 54s4m 56s2m 54s - 2m 54s
17 Aug 00:00trixie2m 53s5m 17s2m 42s - 2m 56s
17 Aug 01:00trixie2m 53s5m 18s2m 47s - 2m 55s
17 Aug 02:00trixie2m 50s5m 17s2m 46s - 2m 55s
17 Aug 03:00trixie2m 52s5m 16s2m 47s - 2m 55s
17 Aug 04:00trixie2m 54s5m 18s2m 49s - 2m 56s
17 Aug 05:00trixie2m 53s5m 21s2m 47s - 2m 55s
17 Aug 06:00trixie2m 51s5m 16s2m 47s - 2m 55s
17 Aug 07:00trixie2m 54s5m 22s2m 49s - 2m 55s
17 Aug 08:00trixie2m 53s5m 22s2m 47s - 2m 55s
17 Aug 09:00trixie2m 53s5m 20s2m 48s - 2m 56s
17 Aug 10:00trixie2m 53s5m 24s2m 48s - 2m 56s
17 Aug 11:00trixie2m 54s5m 21s2m 48s - 2m 56s
17 Aug 12:00trixie2m 53s5m 19s2m 49s - 2m 56s

ccache hit rate

median per bucket; the image's warm cache was baked against one reference commit, so a patch on a different base misses most of it

Show data
WhenHit rateRuns
16 Aug 12:001.5%89
16 Aug 13:001.5%39
16 Aug 14:001.5%7
16 Aug 15:001.5%5
16 Aug 16:001.5%6
16 Aug 17:001.5%1
16 Aug 20:001.5%1
16 Aug 22:001.5%1
16 Aug 23:001.5%1
17 Aug 00:001.5%100
17 Aug 01:001.5%105
17 Aug 02:001.5%95
17 Aug 03:001.5%103
17 Aug 04:001.5%90
17 Aug 05:001.5%105
17 Aug 06:001.5%102
17 Aug 07:001.5%75
17 Aug 08:001.5%97
17 Aug 09:001.5%88
17 Aug 10:001.5%93
17 Aug 11:001.5%78
17 Aug 12:001.5%15

Build time against ccache hit rate

one point per successful run; table shows the first 50

Show data
Hit rateBuild
1.5%2m 47s
1.5%2m 56s
1.5%2m 13s
1.5%2m 54s
1.5%2m 55s
1.5%2m 59s
1.5%2m 50s
1.5%2m 56s
1.5%2m 57s
1.5%2m 43s
1.5%2m 48s
1.5%2m 53s
1.5%2m 53s
1.5%2m 50s
1.5%2m 49s
1.5%3m 17s
1.5%2m 21s
1.5%2m 52s
1.5%2m 25s
1.5%2m 56s
1.5%2m 48s
1.5%2m 55s
1.5%2m 10s
1.5%2m 58s
1.5%2m 55s
1.5%2m 50s
1.5%2m 50s
1.5%2m 55s
1.5%2m 52s
1.5%2m 54s
1.5%2m 55s
1.5%2m 56s
1.5%2m 53s
1.5%2m 51s
1.5%2m 55s
1.5%2m 58s
1.5%2m 56s
1.5%1m 52s
1.5%3m 00s
1.5%2m 54s
1.5%2m 58s
1.5%2m 51s
1.5%2m 48s
1.5%2m 55s
1.5%2m 48s
1.5%2m 48s
1.5%2m 55s
1.5%2m 58s
1.5%2m 54s
1.5%2m 54s

Queue latency

median seconds

Show data
WhenPush to queuedQueued to started
16 Aug 12:000m 01s0m 00s
16 Aug 13:000m 01s0m 00s
16 Aug 14:000m 02s0m 00s
16 Aug 15:000m 01s0m 00s
16 Aug 16:000m 01s0m 00s
16 Aug 17:000m 03s0m 00s
16 Aug 20:000m 02s0m 00s
16 Aug 22:000m 01s0m 00s
16 Aug 23:000m 02s0m 00s
17 Aug 00:000m 01s0m 00s
17 Aug 01:000m 01s0m 00s
17 Aug 02:000m 02s0m 00s
17 Aug 03:000m 01s0m 00s
17 Aug 04:000m 01s0m 00s
17 Aug 05:000m 01s0m 00s
17 Aug 06:000m 02s0m 00s
17 Aug 07:000m 01s0m 00s
17 Aug 08:000m 01s0m 00s
17 Aug 09:000m 02s0m 00s
17 Aug 10:000m 02s0m 00s
17 Aug 11:000m 01s0m 00s
17 Aug 12:000m 01s0m 00s

Average concurrency

time-weighted average of runs in flight per bucket, against the 30-slot budget

Show data
WhenAvg concurrency
16 Aug 12:0021.2
16 Aug 13:005.8
16 Aug 14:001.5
16 Aug 15:001.1
16 Aug 16:001.1
16 Aug 17:000.2
16 Aug 18:000.0
16 Aug 19:000.0
16 Aug 20:000.2
16 Aug 21:000.0
16 Aug 22:000.2
16 Aug 23:001.2
17 Aug 00:0026.5
17 Aug 01:0026.2
17 Aug 02:0026.6
17 Aug 03:0026.7
17 Aug 04:0026.7
17 Aug 05:0025.6
17 Aug 06:0023.8
17 Aug 07:0019.6
17 Aug 08:0022.8
17 Aug 09:0022.6
17 Aug 10:0022.5
17 Aug 11:0022.6
17 Aug 12:003.8

Push lag

time from the patch being posted to CI queueing it

Show data
WhenLagRuns
16 Aug 12:00days2
16 Aug 12:00weeks12
16 Aug 12:00months66
16 Aug 12:00older20
16 Aug 13:00days4
16 Aug 13:00weeks8
16 Aug 13:00months32
16 Aug 14:00same day2
16 Aug 14:00days6
16 Aug 15:00same day3
16 Aug 15:00days3
16 Aug 16:00same day1
16 Aug 16:00days6
16 Aug 17:00same day1
16 Aug 20:00same day1
16 Aug 22:00same day1
16 Aug 23:00same day1
17 Aug 00:00days22
17 Aug 00:00weeks3
17 Aug 00:00months80
17 Aug 00:00older8
17 Aug 01:00days4
17 Aug 01:00weeks2
17 Aug 01:00months114
17 Aug 02:00same day2
17 Aug 02:00days2
17 Aug 02:00weeks2
17 Aug 02:00months79
17 Aug 02:00older26
17 Aug 03:00same day1
17 Aug 03:00days1
17 Aug 03:00weeks3
17 Aug 03:00older123
17 Aug 04:00days3
17 Aug 04:00weeks5
17 Aug 04:00older97
17 Aug 05:00weeks57
17 Aug 05:00months29
17 Aug 05:00older36
17 Aug 06:00same day4
17 Aug 06:00days5
17 Aug 06:00weeks5
17 Aug 06:00months100
17 Aug 07:00same day2
17 Aug 07:00days1
17 Aug 07:00weeks3
17 Aug 07:00months30
17 Aug 07:00older58
17 Aug 08:00same day4
17 Aug 08:00days7
17 Aug 08:00weeks40
17 Aug 08:00months32
17 Aug 08:00older30
17 Aug 09:00same day1
17 Aug 09:00days1
17 Aug 09:00weeks4
17 Aug 09:00months29
17 Aug 09:00older69
17 Aug 10:00same day1
17 Aug 10:00days1
17 Aug 10:00weeks6
17 Aug 10:00older111
17 Aug 11:00same day2
17 Aug 11:00weeks8
17 Aug 11:00older95
17 Aug 12:00weeks3
17 Aug 12:00older13

Push kind

first push, a re-push on a newer master, or a retry of the same head

Show data
WhenKindRuns
16 Aug 12:00rebase re-push100
16 Aug 13:00rebase re-push44
16 Aug 14:00first push2
16 Aug 14:00rebase re-push6
16 Aug 15:00first push3
16 Aug 15:00rebase re-push3
16 Aug 16:00first push1
16 Aug 16:00rebase re-push6
16 Aug 17:00first push1
16 Aug 20:00first push1
16 Aug 22:00first push1
16 Aug 23:00first push1
17 Aug 00:00rebase re-push113
17 Aug 01:00rebase re-push120
17 Aug 02:00first push2
17 Aug 02:00rebase re-push109
17 Aug 03:00first push1
17 Aug 03:00rebase re-push127
17 Aug 04:00rebase re-push105
17 Aug 05:00rebase re-push122
17 Aug 06:00first push4
17 Aug 06:00rebase re-push110
17 Aug 07:00first push2
17 Aug 07:00rebase re-push92
17 Aug 08:00first push4
17 Aug 08:00rebase re-push109
17 Aug 09:00first push1
17 Aug 09:00rebase re-push103
17 Aug 10:00first push1
17 Aug 10:00rebase re-push118
17 Aug 11:00first push2
17 Aug 11:00rebase re-push103
17 Aug 12:00rebase re-push16

Suites failed per failing run

one suite is usually a patch bug; dozens is usually one crash cascading

Show data
Suites failedRuns
157
210
32
448
510
63
77
82
91
101
112
121
132
211
331
561
581
591
621
761
831
1021
1071
1221
1291
1311
1551
1571

Top failing suites

total failures, and in brackets the number of distinct patchsets - many failures on few patchsets means one broken patch retried; roughly one per patchset means either a flaky suite or a suite that reruns others and inherits their failures

recovery/027_stream_regress
81 (81 branches)
pg_upgrade/002_pg_upgrade
74 (74 branches)
test_plan_advice/001_replan_regress
73 (73 branches)
regress/partition_join
11 (11 branches)
regress/subselect
11 (11 branches)
regress/alter_table
10 (10 branches)
regress/collate.icu.utf8
10 (10 branches)
regress/copy2
10 (10 branches)
regress/partition_split
10 (10 branches)
isolation/horizons
9 (9 branches)
postgres_fdw/postgres_fdw
9 (9 branches)
regress/join
9 (9 branches)
regress/plpgsql
9 (9 branches)
regress/predicate
9 (9 branches)
regress/stats
9 (9 branches)
regress/with
9 (9 branches)
isolation/eval-plan-qual
8 (8 branches)
regress/domain
8 (8 branches)
regress/foreign_key
8 (8 branches)
regress/generated_virtual
8 (8 branches)

Infra health

Everything here should be zero. Non-zero is worth a look, not a panic.

ConditionCount
infra errors0
in flight past 48h0
branches with a failed push2
payloads we could not parse0
runs with no payload0
built but pushed no image6
Retried heads
0
same head_sha pushed again, new run id
Verdict changed
-
0 of 0 - meaningless until this denominator grows
discussionsallactive only
Tracked patchsets
5,351
current, not superseded, all patchsets
Median base age
942 days
behind master, all patchsets
On recent master
33.9%
base 30 days or newer, all patchsets
Has a verdict
89.5%
terminal CI status, all patchsets
Has a runnable image
86.2%
counted by digest, all patchsets
recent
1,815
base age tier, all patchsets
stale
358
base age tier, all patchsets
ancient
3,121
base age tier, all patchsets
unknown
57
base age tier, all patchsets

Master re-check recency

when each patchset was last tried against master; overdue is past 26h with master moved since. Unlike the base age tiles above, this follows the discussions control.

current
572
behind
1,036
overdue
296
never
3,447

Base age distribution

all current patchsets against those in active discussions

Show data
Base ageAllActive discussions
<1d1,393263
1-7d19289
7-30d23085
30-90d4612
90d-1y3128
1-2y3182
2-5y8790
>5y1,9241
unknown578

Outcome by base commit year

current patchsets, by the year of the master commit they apply to

Show data
Base yearOutcomePatchsets
unknownnever applied57
2012build failed1
2014never applied1
2015build failed3
2015never applied3
2016success22
2016tests failed2
2016never applied2
2017success463
2017tests failed58
2017build failed14
2017never applied63
2018success281
2018tests failed38
2018build failed7
2018never applied60
2019success244
2019tests failed23
2019build failed10
2019never applied74
2020success232
2020tests failed34
2020build failed4
2020never applied52
2021success241
2021tests failed35
2021build failed9
2021never applied35
2022success242
2022cancelled1
2022tests failed36
2022build failed11
2022never applied36
2023success220
2023tests failed26
2023build failed9
2023never applied32
2024success205
2024tests failed36
2024build failed8
2024infra error1
2024never applied23
2025success260
2025tests failed43
2025build failed13
2025infra error1
2025never applied36
2026success1,563
2026cancelled1
2026tests failed205
2026build failed75
2026infra error2
2026no verdict39
2026never applied159

Success rate by base commit year

of patchsets carrying a verdict

Show data
Base yearSuccess rateWith a verdict
20120.0%1
20150.0%3
201691.7%24
201786.5%535
201886.2%326
201988.1%277
202085.9%270
202184.6%285
202283.4%290
202386.3%255
202482.0%250
202582.0%317
202685.5%1,954

Apply failures by base commit year

patchsets that would not apply even to their own detected base - a patch-extraction / base-detection signal, not a staleness measure; the rate is in the table

Show data
Base yearPatchsetsFailed to applyFailure rate
unknown5757100.0%
2012100.0%
201411100.0%
20156350.0%
20162627.7%
20175986310.5%
20183866015.5%
20193517421.1%
20203225216.1%
20213203510.9%
20223263611.0%
20232873211.1%
2024273238.4%
20253533610.2%
20262,0441597.8%

Build and test time over PostgreSQL history

median seconds of successful runs, by the base commit's year

Show data
Base yearBuild medianTest median
20161m 41s3m 18s
20171m 46s4m 37s
20181m 50s2m 38s
20191m 55s2m 35s
20202m 00s2m 52s
20212m 11s3m 09s
20222m 14s3m 58s
20232m 51s3m 58s
20242m 43s3m 39s
20252m 45s4m 26s
20262m 52s5m 21s

Test suites over PostgreSQL history

median executed suites of successful runs, by the base commit's year

Show data
Base yearSuites median
2016412
2017451
2018505
2019537
2020566
2021621
2022654
2023777
2024833
2025900
20261018

Per PostgreSQL major

A major whose era image is still a disabled stub is marked - those patchsets sit in won't-retry until the image exists.

PGEraPatchsetsRunsSuccessBuild medianTest medianSuitesImages
9stretch131361.5%1m 34s2m 41s3989
10stretch40440587.9%1m 45s5m 20s443392
11stretch34734887.1%1m 48s2m 35s476339
12buster27527586.9%1m 51s2m 35s513267
13buster27327384.6%1m 57s2m 37s548267
14bullseye29029286.3%2m 08s3m 06s590284
15bullseye27928186.5%2m 11s3m 18s625268
16bookworm26926882.8%2m 46s4m 12s669256
17bookworm25025084.4%2m 54s3m 27s793244
18trixie28028179.0%2m 41s3m 50s858267
19trixie34334185.9%2m 49s4m 42s936329
20trixie1,82829,32483.5%2m 52s5m 18s10181,688

Files the corpus conflicts on

from apply-stage failures; in brackets the number of distinct patchsets

src/bin/pgbench/pgbench.c
11 (11 branches)
doc/src/sgml/ref/pgbench.sgml
10 (10 branches)
src/bin/pgbench/t/001_pgbench_with_server.pl
6 (6 branches)
src/backend/access/transam/xlog.c
5 (5 branches)
src/backend/parser/gram.y
5 (5 branches)
src/bin/pg_dump/pg_dump.c
5 (5 branches)
doc/src/sgml/config.sgml
4 (4 branches)
src/backend/access/common/reloptions.c
4 (4 branches)
src/backend/commands/tablecmds.c
4 (4 branches)
src/backend/postmaster/autovacuum.c
4 (4 branches)
src/include/utils/float.h
4 (4 branches)
templates/pages/about/policies/coc/ja.html
4 (4 branches)
configure.in
3 (3 branches)
doc/src/sgml/perform.sgml
3 (3 branches)
doc/src/sgml/ref/psql-ref.sgml
3 (3 branches)
doc/src/sgml/ref/select.sgml
3 (3 branches)
indent.c
3 (3 branches)
run_build.pl
3 (3 branches)
src/backend/commands/indexcmds.c
3 (3 branches)
src/backend/commands/vacuum.c
3 (3 branches)

Verdict coverage in active discussions

patchsets in threads with a message in the last 30 days

Show data
EraWith a verdictNo verdict
bullseye10
trixie42236
unknown09

Patch size against outcome

files touched per patchset, from the recorded submission paths

Show data
Files touchedOutcomePatchsets
unknownsuccess3,973
unknowncancelled2
unknowntests failed536
unknownbuild failed164
unknowninfra error4
unknownno verdict39
unknownnever applied633

Patchset versions per topic

every version, superseded included; split by whether the topic was committed

Show data
VersionsTopicTopics
1not committed4,980
1committed77
2committed28
2not committed155
3not committed46
3committed7
4not committed14
4committed3
5committed2
5not committed9
6not committed6
7not committed1
8not committed1
9not committed1
11not committed1

Why the orchestrator won't retry

The dashboard shows the top three of this same breakdown.

ReasonPatchsets
base too old3,011
committed120
patchset touches .github/8