debusine (0.14.2)
[PTS] [DDPO]
COMMITS: VCS has seen 61 commits since the debian/0.14.2 tag
- Git: https://salsa.debian.org/freexian-team/debusine.git
-
- Branch: devel
- Path: debian/changelog
- Repo size: 19378176
- Browser: https://salsa.debian.org/freexian-team/debusine
- Last scan: 2026-01-13 10:59:10+00
- Next scan: 2026-01-18 20:27:00+00
- Open issues: 365
- Merge requests: 5
- CI pipeline status: success
- Debian changelog in Git:
debusine (0.14.2) unstable; urgency=medium
* New release. Highlights:
- Many fixes for cloud workers.
- Improve presentation of text and log files.
- Accept pytest 9 instead of pytest-subtests (closes: #1124127).
- dput-ng configuration for debusine.debian.net: Automatically map any
known distribution to a workflow template named
`upload-to-{distribution}`.
-- Colin Watson <cjwatson@debian.org> Tue, 06 Jan 2026 10:36:38 +0000
- This branch is 61 commits ahead of tag debian/0.14.2
- Git log:
commit 2dfaa38bd885e813dd5b9d95f196f5da42360af5
Merge: 95ede5be8 c76c74a78
Author: Enrico Zini <enrico@debian.org>
Date: Tue Jan 13 08:21:50 2026 +0000
Try harder to close resources if something goes wrong in TarArtifact (MR !2576)
In a side quest of checking `os.path.join` usages, I noticed that `debusine.server.tar.TarArtifact` only closes the two file descriptors it holds when the iteration finishes successfully.
This looks to me like a potential DoS vector in which a user continuously requests a tarred artifact and then prematurely closes the connection: in theory, files are leaked until the garbage collector runs.
This MR tries to address the issue.
Merge-Request: https://salsa.debian.org/freexian-team/debusine/-/merge_requests/2576
commit 95ede5be8e085e7645720824a0eb260124e89c7c
Merge: 95420e16b cd27b3664
Author: Enrico Zini <enrico@debian.org>
Date: Tue Jan 13 08:18:27 2026 +0000
Fixed missing references in docs and removed more completed and documented blueprints (MR !2580)
Merge-Request: https://salsa.debian.org/freexian-team/debusine/-/merge_requests/2580
commit 95420e16b2f9816b34a233ec7bfd372736ab5e0e
Merge: 32ab4d116 1b1bd31f5
Author: Colin Watson <cjwatson@debian.org>
Date: Mon Jan 12 18:23:09 2026 +0000
Drop support for Debian 8 (jessie) and Ubuntu 14.04 (trusty) (MR !2583)
In particular, this allows us to drop support for generating one-line
``sources.list`` entries.
Fixes: #985
Closes #985
Merge-Request: https://salsa.debian.org/freexian-team/debusine/-/merge_requests/2583
commit c76c74a782bc13f204ca897ffb8729721f180319
Author: Enrico Zini <enrico@enricozini.org>
Date: Mon Jan 12 11:21:01 2026 +0100
Try harder to close resources if something goes wrong in TarArtifact
commit 32ab4d1160fda63e5a79ee258d8a11b6bf0f3868
Merge: ebec163bf 58e1acfc5
Author: Colin Watson <cjwatson@debian.org>
Date: Mon Jan 12 16:38:30 2026 +0000
Add --version to Debusine client and worker (MR !2581)
Fixes: #465
Closes #465
Merge-Request: https://salsa.debian.org/freexian-team/debusine/-/merge_requests/2581
commit ebec163bfe728d655e001adfb3f8a0c8be44a4e8
Merge: 11ea4a4f0 ce3a273bf
Author: Colin Watson <cjwatson@debian.org>
Date: Mon Jan 12 16:31:55 2026 +0000
Improve database error handling for check and migrate commands (MR !2582)
We suppress the full traceback for database errors in other commands,
since it's not very useful; it makes sense to do the same here.
Fixes: #226
Closes #226
Merge-Request: https://salsa.debian.org/freexian-team/debusine/-/merge_requests/2582
commit 11ea4a4f0725935e06ca473c379a481beafcccdc
Merge: f129c818f 175c1617e
Author: Colin Watson <cjwatson@debian.org>
Date: Mon Jan 12 16:31:35 2026 +0000
Fix status/result summaries in workflow list view (MR !2579)
Fixes: #1260
(No news fragment content since this fixes a regression introduced after the most recent release.)
Closes #1260
Merge-Request: https://salsa.debian.org/freexian-team/debusine/-/merge_requests/2579
commit 1b1bd31f5d6636618e9d282deb72c706fce98b80
Author: Colin Watson <cjwatson@debian.org>
Date: Mon Jan 12 16:26:12 2026 +0000
Drop support for Debian 8 (jessie) and Ubuntu 14.04 (trusty)
In particular, this allows us to drop support for generating one-line
``sources.list`` entries.
Fixes: #985
commit ce3a273bfeba0d38d32ad28acfe159df1c5c10da
Author: Colin Watson <cjwatson@debian.org>
Date: Mon Jan 12 15:59:58 2026 +0000
Improve database error handling for check and migrate commands
We suppress the full traceback for database errors in other commands,
since it's not very useful; it makes sense to do the same here.
Fixes: #226
commit 58e1acfc521ca856e4a892fb814bbf089cbcaa58
Author: Colin Watson <cjwatson@debian.org>
Date: Mon Jan 12 15:19:35 2026 +0000
Add --version to Debusine client and worker
Fixes: #465
commit cd27b36649dd453515454d8bf176575fb8e28300
Author: Enrico Zini <enrico@enricozini.org>
Date: Mon Jan 12 15:52:14 2026 +0100
Fixed missing references in docs and removed more completed and documented blueprints
commit 175c1617e2fe8c45daee5c5e278ae8034873599f
Author: Colin Watson <cjwatson@debian.org>
Date: Mon Jan 12 14:44:17 2026 +0000
Fix status/result summaries in workflow list view
Fixes: #1260
commit f129c818f4cf3103f6dcdec549aaf60861690130
Merge: 61b285a56 1f280aaba
Author: Enrico Zini <enrico@debian.org>
Date: Mon Jan 12 13:42:42 2026 +0000
Fix mistake in #1241 announcement (MR !2577)
Merge-Request: https://salsa.debian.org/freexian-team/debusine/-/merge_requests/2577
commit 61b285a5641dfe90acfca4ae5d0d3e34477ad653
Merge: 9a34335cf 2418183c8
Author: Colin Watson <cjwatson@debian.org>
Date: Mon Jan 12 12:38:08 2026 +0000
Explicitly exclude the scheduler "worker" from the status page (MR !2575)
It needs to exist to hold the token used for emitting metrics, but it shouldn't appear on the status page.
Merge-Request: https://salsa.debian.org/freexian-team/debusine/-/merge_requests/2575
commit 1f280aabad0f81279e8c80c9c130d841c64cba16
Author: Enrico Zini <enrico@enricozini.org>
Date: Mon Jan 12 13:11:09 2026 +0100
Fix mistake in #1241 announcement
commit 2418183c89eb0a9207744b34426eefaf8c06f033
Author: Colin Watson <cjwatson@debian.org>
Date: Mon Jan 12 12:05:46 2026 +0000
Explicitly exclude the scheduler "worker" from the status page
commit 9a34335cf37f1b55fd865ea89def057c64a81fdc
Merge: 91d5f957a 68dd0636e
Author: Enrico Zini <enrico@debian.org>
Date: Mon Jan 12 08:53:03 2026 +0000
Introduce workspace-scoped groups. Fixes: #1241 (MR !2570)
This MR introduces the concept and the relevant constraints, and uses them when creating ephemeral groups for child workspaces.
TODO:
* [x] introduce the scoping
* [x] use workspace scoping for groups in child workflows
* [x] update group audit log tables and views
* [x] update workspace deletion to also delete workspace-scoped groups
Closes #1241
Merge-Request: https://salsa.debian.org/freexian-team/debusine/-/merge_requests/2570
commit 68dd0636e80ea4e9976fc8cdb185f6c94ecf882c
Author: Enrico Zini <enrico@enricozini.org>
Date: Mon Jan 12 09:18:08 2026 +0100
Updated documentation to cover workspace-scoped groups
commit de8247c1304d3d08e43fb0d68f2e972b70341f96
Author: Enrico Zini <enrico@enricozini.org>
Date: Mon Jan 12 09:06:50 2026 +0100
Announce the change
commit b62235f77dc56bedd78a0e39660de97da0a6d1ed
Author: Enrico Zini <enrico@enricozini.org>
Date: Fri Jan 9 09:36:05 2026 +0100
Delete associated groups when deleting a workspace
commit 3080c0ba0f6e928b87bcd4f61603274aff407e12
Author: Enrico Zini <enrico@enricozini.org>
Date: Thu Jan 8 12:27:46 2026 +0100
Use a workspace when creating ephemeral groups
commit 95374e3de22bddc9acd576244dd24063370c5cb4
Author: Enrico Zini <enrico@enricozini.org>
Date: Thu Jan 8 11:39:50 2026 +0100
Add an optional workspace scope to groups
commit 91d5f957a001fbd142ebdc52acfe9b593619bf79
Merge: 843aa9e01 6f8ca3659
Author: Carles Pina i Estany <carles@pina.cat>
Date: Mon Jan 12 05:46:19 2026 +0000
Get input artifacts piuparts reversedependenciesautopkgtest blhc packageupload (MR !2530)
Merge-Request: https://salsa.debian.org/freexian-team/debusine/-/merge_requests/2530
commit 6f8ca3659119052295cd7aefc5045c9c16440d69
Author: Carles Pina i Estany <carles@pina.cat>
Date: Mon Jan 12 05:46:19 2026 +0000
get_input_artifacts method: add it to PiupartsWorkflow, ReverseDependenciesAutopkgtestWorkflow, BlhcWorkflow, PackageUploadWorkflow
commit 843aa9e01d8304fef97b1d96376a1e5b98ddc7e7
Merge: 7ed76a997 75b6763ef
Author: Colin Watson <cjwatson@debian.org>
Date: Sun Jan 11 12:57:13 2026 +0000
Fix flaky FileUploaderTests.test_upload_chunk_raise_clientconnectionerror (MR !2574)
I noticed this failure in
https://salsa.debian.org/freexian-team/debusine/-/jobs/8858722:
```
_______ FileUploaderTests.test_upload_chunk_raise_clientconnectionerror ________
[gw0] linux -- Python 3.13.11 /usr/bin/python3
self = <debusine.client.tests.test_file_uploader.FileUploaderTests testMethod=test_upload_chunk_raise_clientconnectionerror>
def test_upload_chunk_raise_clientconnectionerror(self) -> None:
"""FileUploader._upload_chunk() called MAX_CHUNK_UPLOAD_RETIRES."""
mocked_sleep = self.patch_sleep()
request = mock.create_autospec(
spec=requests.models.Request, url="https://test.com"
)
mocked_put = self.patch_requests_put(
requests.exceptions.RequestException(request=request)
)
with self.assertRaises(exceptions.ClientConnectionError):
self.file_uploader._upload_chunk(
"some-url", "bytes=1-2/2", io.BytesIO(b"some-data")
)
self.assertEqual(
mocked_put.call_count, FileUploader._MAX_CHUNK_UPLOAD_RETRIES
)
> self.assertEqual(mocked_sleep.call_count, 2)
E AssertionError: 4 != 2
debusine/client/tests/test_file_uploader.py:522: AssertionError
```
It's not entirely clear why this would happen, but my best guess is that
something in the internals of `requests` is calling `time.sleep`
(certainly `urllib3.util.retry` can do that). In this case we're
specifically checking the behaviour of the loop in `_upload_chunk`, so
narrow the scope of the mock so that it only covers that.
Merge-Request: https://salsa.debian.org/freexian-team/debusine/-/merge_requests/2574
commit 7ed76a997d579a8a372abcfbd45dfaaa0d6435e0
Merge: 22eb059b4 1dc176359
Author: Colin Watson <cjwatson@debian.org>
Date: Sun Jan 11 12:56:52 2026 +0000
Fix flaky DebDiffWorkflowTests.test_populate (again) (MR !2573)
Seen in
https://ci.debian.net/packages/d/debusine/testing/amd64/67629372/#L16683.
I fixed some of this in
https://salsa.debian.org/freexian-team/debusine/-/merge_requests/2531,
but missed a similar piece slightly further down the same test.
Merge-Request: https://salsa.debian.org/freexian-team/debusine/-/merge_requests/2573
commit 22eb059b48ba51552654c34a09941bd59be30f27
Merge: 28b776155 fa327a948
Author: Enrico Zini <enrico@debian.org>
Date: Sat Jan 10 12:24:15 2026 +0000
Added an explanation and a reference for permissions. Fixes: #1143 (MR !2566)
Closes #1143
Merge-Request: https://salsa.debian.org/freexian-team/debusine/-/merge_requests/2566
commit fa327a948a7e88771368eec005347dc42d2e9659
Author: Enrico Zini <enrico@enricozini.org>
Date: Wed Jan 7 15:20:14 2026 +0100
Added an explanation and a reference for permissions
commit 28b776155e55312379d469c7481edaead8d24950
Merge: 6a374ba4b 2fc6b97b4
Author: Enrico Zini <enrico@debian.org>
Date: Sat Jan 10 11:37:57 2026 +0000
Link to deb archives from workspace detail view. Fixes: #1219 (MR !2568)
Closes #1219
Merge-Request: https://salsa.debian.org/freexian-team/debusine/-/merge_requests/2568
commit 2fc6b97b42cda580b05b36403ecbdb003eea2746
Author: Enrico Zini <enrico@enricozini.org>
Date: Sat Jan 10 11:59:35 2026 +0100
Do not show archive URL if archive does not exist
commit 1f96a8a0edd8c4c70ad394e8040d2c265b9d1ad9
Author: Enrico Zini <enrico@enricozini.org>
Date: Thu Jan 8 10:27:38 2026 +0100
Link to deb archives from workspace detail view. Fixes: #1219
commit 6a374ba4b9a3c73920525247eac0da01cec95f9e
Merge: 6935e8606 a088a0ae8
Author: Enrico Zini <enrico@debian.org>
Date: Fri Jan 9 18:28:45 2026 +0000
Updated examples for serving static files also for repository pages. Fixes: #1213 (MR !2567)
Closes #1213
Merge-Request: https://salsa.debian.org/freexian-team/debusine/-/merge_requests/2567
commit 75b6763ef1c548fd538f84cceacf04a489d04205
Author: Colin Watson <cjwatson@debian.org>
Date: Fri Jan 9 12:35:10 2026 +0000
Fix flaky FileUploaderTests.test_upload_chunk_raise_clientconnectionerror
I noticed this failure in
https://salsa.debian.org/freexian-team/debusine/-/jobs/8858722:
```
_______ FileUploaderTests.test_upload_chunk_raise_clientconnectionerror ________
[gw0] linux -- Python 3.13.11 /usr/bin/python3
self = <debusine.client.tests.test_file_uploader.FileUploaderTests testMethod=test_upload_chunk_raise_clientconnectionerror>
def test_upload_chunk_raise_clientconnectionerror(self) -> None:
"""FileUploader._upload_chunk() called MAX_CHUNK_UPLOAD_RETIRES."""
mocked_sleep = self.patch_sleep()
request = mock.create_autospec(
spec=requests.models.Request, url="https://test.com"
)
mocked_put = self.patch_requests_put(
requests.exceptions.RequestException(request=request)
)
with self.assertRaises(exceptions.ClientConnectionError):
self.file_uploader._upload_chunk(
"some-url", "bytes=1-2/2", io.BytesIO(b"some-data")
)
self.assertEqual(
mocked_put.call_count, FileUploader._MAX_CHUNK_UPLOAD_RETRIES
)
> self.assertEqual(mocked_sleep.call_count, 2)
E AssertionError: 4 != 2
debusine/client/tests/test_file_uploader.py:522: AssertionError
```
It's not entirely clear why this would happen, but my best guess is that
something in the internals of `requests` is calling `time.sleep`
(certainly `urllib3.util.retry` can do that). In this case we're
specifically checking the behaviour of the loop in `_upload_chunk`, so
narrow the scope of the mock so that it only covers that.
commit 6935e860617bc2fe9b3519f213a5821eda77f6a5
Merge: 079446c4b de9cbe561
Author: Colin Watson <cjwatson@debian.org>
Date: Fri Jan 9 12:13:01 2026 +0000
Select related fields when showing work request or workflow lists (MR !2572)
Part of #656 and #1206.
Merge-Request: https://salsa.debian.org/freexian-team/debusine/-/merge_requests/2572
commit 079446c4b319f62e3821253ee64675ba63019a23
Merge: 8be5f9a46 1b5a7b745
Author: Colin Watson <cjwatson@debian.org>
Date: Fri Jan 9 12:12:47 2026 +0000
Use a CTE to filter for workflows with failed work requests (MR !2571)
See query plans in
https://salsa.debian.org/freexian-team/debusine/-/issues/1206#note_711933.
Part of #656 and #1206.
Merge-Request: https://salsa.debian.org/freexian-team/debusine/-/merge_requests/2571
commit 1dc1763598f9438969f56e81cafa9da80066f6da
Author: Colin Watson <cjwatson@debian.org>
Date: Fri Jan 9 11:56:42 2026 +0000
Fix flaky DebDiffWorkflowTests.test_populate (again)
Seen in
https://ci.debian.net/packages/d/debusine/testing/amd64/67629372/#L16683.
I fixed some of this in
https://salsa.debian.org/freexian-team/debusine/-/merge_requests/2531,
but missed a similar piece slightly further down the same test.
commit 8be5f9a46909287d5b330a0eb022be002f78aa76
Merge: 7ce36935e 30fdf6d00
Author: Enrico Zini <enrico@debian.org>
Date: Thu Jan 8 15:35:10 2026 +0000
Improve human readable output for some work request CLI commands. Fixes: #1225 (MR !2565)
Closes #1225
Merge-Request: https://salsa.debian.org/freexian-team/debusine/-/merge_requests/2565
commit de9cbe561b0b4061986f994757e6791d2140c7b1
Author: Colin Watson <cjwatson@debian.org>
Date: Thu Jan 8 15:28:29 2026 +0000
Select related fields when showing work request or workflow lists
Part of #656 and #1206.
commit 1b5a7b74537ec51dac55c05b5b1cb39437413cdd
Author: Colin Watson <cjwatson@debian.org>
Date: Thu Jan 8 14:05:32 2026 +0000
Use a CTE to filter for workflows with failed work requests
See query plans in
https://salsa.debian.org/freexian-team/debusine/-/issues/1206#note_711933.
Part of #656 and #1206.
commit 7ce36935e5efb4a62c57baa51ec16d308a017494
Merge: 0a9b06c04 29c464651
Author: Colin Watson <cjwatson@debian.org>
Date: Thu Jan 8 11:29:50 2026 +0000
Fix test_mark_running_no_pending_at_emits_no_metric in isolation (MR !2569)
Merge-Request: https://salsa.debian.org/freexian-team/debusine/-/merge_requests/2569
commit 29c464651f4a0d6e21b60ea1bc27c1204f3b34ff
Author: Colin Watson <cjwatson@debian.org>
Date: Thu Jan 8 10:57:18 2026 +0000
Fix test_mark_running_no_pending_at_emits_no_metric in isolation
commit 30fdf6d00edf99188a60c6f7bc52d708c86e025e
Author: Enrico Zini <enrico@enricozini.org>
Date: Wed Jan 7 19:37:37 2026 +0100
Fix integration tests
commit 8ee752c2a3922e97f3c9ee7c6578d0a6bd549ba2
Author: Enrico Zini <enrico@enricozini.org>
Date: Wed Jan 7 18:22:43 2026 +0100
Condense tables a bit
commit 2a795065390eca3faf180c88ee8ce89a65788d01
Author: Enrico Zini <enrico@enricozini.org>
Date: Wed Jan 7 14:05:44 2026 +0100
Announce the change
commit 16f48e8e8008667dc72d1972612acbea34b98f13
Author: Enrico Zini <enrico@enricozini.org>
Date: Wed Jan 7 13:04:15 2026 +0100
Use rich output in work-request commands
commit 2e51da42f694ac97e321c8ece1f765b94c2e13f0
Author: Enrico Zini <enrico@enricozini.org>
Date: Wed Jan 7 12:10:57 2026 +0100
Use a ModelCommand with rich output to show `workflow start` output
commit b4ad00314234259631ec3a33ac5b61e51d385f9c
Author: Enrico Zini <enrico@enricozini.org>
Date: Wed Jan 7 11:09:52 2026 +0100
Add links to create_work_request_response output
commit a088a0ae8bcf8e262450c6fabe4cc40fd6c60fc9
Author: Enrico Zini <enrico@enricozini.org>
Date: Thu Jan 8 09:35:59 2026 +0100
Updated examples for serving static files also for repository pages
commit 0a9b06c0482446659128800f1fd187f54ba04653
Merge: 1367a721f a5e91ddda
Author: Stefano Rivera <stefanor@debian.org>
Date: Wed Jan 7 17:28:55 2026 +0000
Enforce permissions on the file body upload endpoint. (MR !2552)
Note that hashes were already recorded in the artifact creation step,
which included permission checks.
Fixes: #1245
Closes #1245
Merge-Request: https://salsa.debian.org/freexian-team/debusine/-/merge_requests/2552
commit a5e91ddda2a008a63725a61befb9df98fd0fdc6f
Author: Stefano Rivera <stefanor@debian.org>
Date: Wed Jan 7 17:28:55 2026 +0000
Enforce permissions on the file body upload endpoint.
Note that hashes were already recorded in the artifact creation step,
which included permission checks.
Fixes: #1245
commit 1367a721fb75f336a3e4b5956f650deeae82056f
Merge: f54fb26b4 afead3fb2
Author: Colin Watson <cjwatson@debian.org>
Date: Wed Jan 7 17:19:39 2026 +0000
Emit metric when marking a work request running (MR !2556)
Fixes: #1195
Closes #1195
Merge-Request: https://salsa.debian.org/freexian-team/debusine/-/merge_requests/2556
commit afead3fb294749ff91065be075a7e4288812a85f
Author: Colin Watson <cjwatson@debian.org>
Date: Wed Dec 31 15:57:09 2025 +0000
Emit metric when marking a work request running
Fixes: #1195
commit 5b20e75f36430b9f688edcf823b9f9fe33709ef4
Author: Colin Watson <cjwatson@debian.org>
Date: Fri Dec 12 13:00:40 2025 +0000
Record when work requests are marked pending
commit 854040f52cc7ef893e4dc1b5c862759e366e6fda
Author: Colin Watson <cjwatson@debian.org>
Date: Mon Jan 5 11:28:50 2026 +0000
Enable tokens for Celery workers
commit f54fb26b4d8d4a26a1d009cc6a1ff1485ccb4517
Merge: 36206a0f6 829cf329b
Author: Enrico Zini <enrico@debian.org>
Date: Wed Jan 7 13:48:04 2026 +0000
Fix webui URLs in debusine client output. Fixes: #1222 (MR !2563)
Closes #1222
Merge-Request: https://salsa.debian.org/freexian-team/debusine/-/merge_requests/2563
commit 829cf329b1f1097c5af881f5b83f16209bcbb764
Author: Enrico Zini <enrico@enricozini.org>
Date: Wed Jan 7 09:48:41 2026 +0100
Fix webui URLs in debusine client output. Fixes: #1222
commit 36206a0f69c68216263871081036e04567d83e9c
Merge: f740d6527 58bfe119e
Author: Colin Watson <cjwatson@debian.org>
Date: Wed Jan 7 11:59:18 2026 +0000
Fix WorkspaceArtifactView when the workspace has multiple children (MR !2564)
Fixes: #1252
Closes #1252
Merge-Request: https://salsa.debian.org/freexian-team/debusine/-/merge_requests/2564
commit 58bfe119e1d989771308eb14ad945b39617b245e
Author: Colin Watson <cjwatson@debian.org>
Date: Wed Jan 7 11:19:14 2026 +0000
Fix WorkspaceArtifactView when the workspace has multiple children
Fixes: #1252
commit f740d6527f4fbba7d917d0f4981b49c1cfdcebe0
Merge: 3141cf1c9 09dafe4de
Author: Colin Watson <cjwatson@debian.org>
Date: Tue Jan 6 17:39:59 2026 +0000
Avoid separately flattening each item when rendering a workflow list (MR !2562)
Merge-Request: https://salsa.debian.org/freexian-team/debusine/-/merge_requests/2562
commit 09dafe4de69a17281ab6a53c62a2e49e8d5a7fad
Author: Colin Watson <cjwatson@debian.org>
Date: Tue Jan 6 15:45:50 2026 +0000
Move mispositioned release history item
commit 5a024f1a5534330be02f3df88f9ddb1985d18b45
Author: Colin Watson <cjwatson@debian.org>
Date: Tue Jan 6 15:45:19 2026 +0000
Avoid separately flattening each item when rendering a workflow list