Skip to content

Bulk actions 2.0 (and switch all run listing to ClickHouse) #2264

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 212 commits into from
Jul 14, 2025
Merged
Show file tree
Hide file tree
Changes from 202 commits
Commits
Show all changes
212 commits
Select commit Hold shift + click to select a range
d1c2007
useSearchParams has
matt-aitken Jun 25, 2025
c8d490c
useSearchParams has
matt-aitken Jun 25, 2025
4278b75
useSearchParams has
matt-aitken Jun 25, 2025
d437b34
Consistent way to get the run filters
matt-aitken Jun 25, 2025
57d9560
Consistent way to get the run filters
matt-aitken Jun 25, 2025
a920cf4
Consistent way to get the run filters
matt-aitken Jun 25, 2025
dbcbd5c
Initial work on the new bulk actions
matt-aitken Jun 26, 2025
03d411a
Initial work on the new bulk actions
matt-aitken Jun 26, 2025
746af29
Initial work on the new bulk actions
matt-aitken Jun 26, 2025
30ca840
WIP actions and filtering
matt-aitken Jun 26, 2025
7b2fb10
WIP actions and filtering
matt-aitken Jun 26, 2025
abd31dc
WIP actions and filtering
matt-aitken Jun 26, 2025
588c538
Empty filter arrays are set to undefined
matt-aitken Jun 27, 2025
f9f18c0
Empty filter arrays are set to undefined
matt-aitken Jun 27, 2025
1dd6c97
Empty filter arrays are set to undefined
matt-aitken Jun 27, 2025
8516ea0
WIP prisma schema
matt-aitken Jun 12, 2025
be683b9
WIP prisma schema
matt-aitken Jun 12, 2025
2648cbc
WIP prisma schema
matt-aitken Jun 12, 2025
c5617ac
Migrations
matt-aitken Jun 16, 2025
b869345
Migrations
matt-aitken Jun 16, 2025
7557871
Migrations
matt-aitken Jun 16, 2025
13f44c6
BulkActionGroup changed some columns around
matt-aitken Jun 23, 2025
413476a
BulkActionGroup changed some columns around
matt-aitken Jun 23, 2025
aea732f
BulkActionGroup changed some columns around
matt-aitken Jun 23, 2025
aa2fdfc
New badge variant, removed unused ones
matt-aitken Jun 26, 2025
498fb31
New badge variant, removed unused ones
matt-aitken Jun 26, 2025
06ac716
New badge variant, removed unused ones
matt-aitken Jun 26, 2025
faf2101
Bulk action button
matt-aitken Jun 26, 2025
866d78a
Bulk action button
matt-aitken Jun 26, 2025
32fdfb8
Bulk action button
matt-aitken Jun 26, 2025
cc519e8
Make the next runs page the default now
matt-aitken Jun 30, 2025
35e1d32
Make the next runs page the default now
matt-aitken Jun 30, 2025
1a81247
Make the next runs page the default now
matt-aitken Jun 30, 2025
0224b9f
Improved the RadioButton style
matt-aitken Jun 30, 2025
2cc4233
Improved the RadioButton style
matt-aitken Jun 30, 2025
24159fe
Improved the RadioButton style
matt-aitken Jun 30, 2025
1cfbdab
Remove the old bulk action bar
matt-aitken Jun 30, 2025
52e247e
Remove the old bulk action bar
matt-aitken Jun 30, 2025
5e4ea1c
Remove the old bulk action bar
matt-aitken Jun 30, 2025
1b0acf5
More UI progress
matt-aitken Jul 1, 2025
f8444b3
More UI progress
matt-aitken Jul 1, 2025
e00a246
More UI progress
matt-aitken Jul 1, 2025
c45f406
Lots of UI changes to the Runs page
matt-aitken Jul 2, 2025
e74be66
Lots of UI changes to the Runs page
matt-aitken Jul 2, 2025
4637981
Lots of UI changes to the Runs page
matt-aitken Jul 2, 2025
91c1ba2
Fixed period filter resetting everything
matt-aitken Jul 2, 2025
2cc8f1a
Fixed period filter resetting everything
matt-aitken Jul 2, 2025
dabb78b
Fixed period filter resetting everything
matt-aitken Jul 2, 2025
5c421ad
Improved the Switch secondary style
matt-aitken Jul 2, 2025
b17251d
Improved the Switch secondary style
matt-aitken Jul 2, 2025
c0702ba
Improved the Switch secondary style
matt-aitken Jul 2, 2025
0bff001
Buggy filter fixes
matt-aitken Jul 2, 2025
f14cf0f
Buggy filter fixes
matt-aitken Jul 2, 2025
352cf0a
Buggy filter fixes
matt-aitken Jul 2, 2025
73fc4ee
Improved the filter display and fixed a bug with search param from ob…
matt-aitken Jul 2, 2025
19ab6c7
Improved the filter display and fixed a bug with search param from ob…
matt-aitken Jul 2, 2025
3a127f6
Improved the filter display and fixed a bug with search param from ob…
matt-aitken Jul 2, 2025
4f6adcb
Clear button is minimal
matt-aitken Jul 2, 2025
5e2bdf2
Clear button is minimal
matt-aitken Jul 2, 2025
1426ad1
Clear button is minimal
matt-aitken Jul 2, 2025
be5585b
Using a presenter now
matt-aitken Jul 7, 2025
39e004e
Using a presenter now
matt-aitken Jul 7, 2025
a7b41e5
Using a presenter now
matt-aitken Jul 7, 2025
020e9f4
Bulk actions are created, but not actually processed (yet)
matt-aitken Jul 8, 2025
3b8e95f
Bulk actions are created, but not actually processed (yet)
matt-aitken Jul 8, 2025
53db053
Bulk actions are created, but not actually processed (yet)
matt-aitken Jul 8, 2025
aaab539
Bulk replay/cancel is working
matt-aitken Jul 8, 2025
932de42
Bulk replay/cancel is working
matt-aitken Jul 8, 2025
678e9ee
Bulk replay/cancel is working
matt-aitken Jul 8, 2025
72c131b
Multiple fixes, added bulk column to PG
matt-aitken Jul 8, 2025
a1f48c9
Multiple fixes, added bulk column to PG
matt-aitken Jul 8, 2025
4022627
Multiple fixes, added bulk column to PG
matt-aitken Jul 8, 2025
3268e0a
Bulk action run filtering working using CH
matt-aitken Jul 8, 2025
6c43a87
Bulk action run filtering working using CH
matt-aitken Jul 8, 2025
ccdf385
Bulk action run filtering working using CH
matt-aitken Jul 8, 2025
5fb35cb
Replay setting the bulk id on the runs
matt-aitken Jul 8, 2025
7edc015
Replay setting the bulk id on the runs
matt-aitken Jul 8, 2025
00058a1
Replay setting the bulk id on the runs
matt-aitken Jul 8, 2025
63c0b1b
Properly cap the time when doing a bulk action
matt-aitken Jul 9, 2025
c5ce66f
Properly cap the time when doing a bulk action
matt-aitken Jul 9, 2025
096317d
Properly cap the time when doing a bulk action
matt-aitken Jul 9, 2025
f39bf84
If the bulk action isn't recent, add it to the dropdown anyway
matt-aitken Jul 9, 2025
625f6a4
If the bulk action isn't recent, add it to the dropdown anyway
matt-aitken Jul 9, 2025
34e4d8f
If the bulk action isn't recent, add it to the dropdown anyway
matt-aitken Jul 9, 2025
dbb577a
Blank version of the bulk actions page
matt-aitken Jul 9, 2025
8dc87bd
Blank version of the bulk actions page
matt-aitken Jul 9, 2025
f4a713c
Blank version of the bulk actions page
matt-aitken Jul 9, 2025
ca00ab4
Individually selected runs working
matt-aitken Jul 9, 2025
23ee423
Individually selected runs working
matt-aitken Jul 9, 2025
28ef8f3
Individually selected runs working
matt-aitken Jul 9, 2025
077dad2
Use selected mode if runs are checked
matt-aitken Jul 9, 2025
1f274c5
Use selected mode if runs are checked
matt-aitken Jul 9, 2025
93febfe
Use selected mode if runs are checked
matt-aitken Jul 9, 2025
df5abd2
Added the modal
matt-aitken Jul 9, 2025
b8bcc31
Added the modal
matt-aitken Jul 9, 2025
c096d52
Added the modal
matt-aitken Jul 9, 2025
fb338e7
Marked the old bulk actions stuff as deprecated
matt-aitken Jul 9, 2025
015e197
Marked the old bulk actions stuff as deprecated
matt-aitken Jul 9, 2025
92c929c
Marked the old bulk actions stuff as deprecated
matt-aitken Jul 9, 2025
a8368e6
Renamed bulk action file
matt-aitken Jul 9, 2025
4b4aa60
Renamed bulk action file
matt-aitken Jul 9, 2025
72d6d09
Renamed bulk action file
matt-aitken Jul 9, 2025
180d9be
Bulk run filter with the name and a default
matt-aitken Jul 9, 2025
be492c9
Bulk run filter with the name and a default
matt-aitken Jul 9, 2025
4656e5e
Bulk run filter with the name and a default
matt-aitken Jul 9, 2025
8688534
WIP on bulk actions page
matt-aitken Jul 9, 2025
460479b
WIP on bulk actions page
matt-aitken Jul 9, 2025
a8c3a84
WIP on bulk actions page
matt-aitken Jul 9, 2025
02e3024
Updated panel, added new truncated id component
matt-aitken Jul 10, 2025
a759903
Updated panel, added new truncated id component
matt-aitken Jul 10, 2025
49918fe
Updated panel, added new truncated id component
matt-aitken Jul 10, 2025
395ce81
Style improvements to the radio buttons
samejr Jul 9, 2025
e272ce3
Style improvements to the radio buttons
samejr Jul 9, 2025
8800e2d
Style improvements to the radio buttons
samejr Jul 9, 2025
b24b7de
Added an option action completion email
matt-aitken Jul 10, 2025
8491bd0
Added an option action completion email
matt-aitken Jul 10, 2025
3ed5f06
Added an option action completion email
matt-aitken Jul 10, 2025
04b5509
Adds a blank state for the bulk actions page
samejr Jul 10, 2025
a761931
Adds a blank state for the bulk actions page
samejr Jul 10, 2025
94f6538
Adds a blank state for the bulk actions page
samejr Jul 10, 2025
c511b62
Nicer completed email
matt-aitken Jul 10, 2025
5beb2a7
Nicer completed email
matt-aitken Jul 10, 2025
1beed6f
Nicer completed email
matt-aitken Jul 10, 2025
d962ed3
Don't open the bulk action panel if there are no runs
matt-aitken Jul 10, 2025
8d63cc1
Don't open the bulk action panel if there are no runs
matt-aitken Jul 10, 2025
0e57231
Don't open the bulk action panel if there are no runs
matt-aitken Jul 10, 2025
b66516d
Runs blank state and bulk action accordion
matt-aitken Jul 10, 2025
ff74318
Runs blank state and bulk action accordion
matt-aitken Jul 10, 2025
3fa16a1
Runs blank state and bulk action accordion
matt-aitken Jul 10, 2025
f33516a
Updates secondary/small switch style
samejr Jul 10, 2025
117c774
Updates secondary/small switch style
samejr Jul 10, 2025
66b8a97
Updates secondary/small switch style
samejr Jul 10, 2025
317f4ba
Pagination buttons no longer split in twain (WIP)
samejr Jul 10, 2025
48bb7d7
Pagination buttons no longer split in twain (WIP)
samejr Jul 10, 2025
2ae73ac
Pagination buttons no longer split in twain (WIP)
samejr Jul 10, 2025
87a5db6
Aborting working
matt-aitken Jul 10, 2025
0d3c507
Aborting working
matt-aitken Jul 10, 2025
719fea2
Aborting working
matt-aitken Jul 10, 2025
71b60ac
Bulk action live reloading
matt-aitken Jul 10, 2025
6010fd6
Bulk action live reloading
matt-aitken Jul 10, 2025
37a95fa
Bulk action live reloading
matt-aitken Jul 10, 2025
fb0684a
ListPagination works correctly in all states
samejr Jul 10, 2025
e69edad
ListPagination works correctly in all states
samejr Jul 10, 2025
3b54687
ListPagination works correctly in all states
samejr Jul 10, 2025
ba186d9
Run page, show friendlyId instead of number
matt-aitken Jul 10, 2025
b154a4c
Run page, show friendlyId instead of number
matt-aitken Jul 10, 2025
698fbe1
Run page, show friendlyId instead of number
matt-aitken Jul 10, 2025
998254d
Bulk action help open by default if you have none
matt-aitken Jul 11, 2025
208a7fe
Bulk action help open by default if you have none
matt-aitken Jul 11, 2025
67e209e
Bulk action help open by default if you have none
matt-aitken Jul 11, 2025
af57ddf
Extra status filtering step because of replication delay
matt-aitken Jul 11, 2025
d814408
Extra status filtering step because of replication delay
matt-aitken Jul 11, 2025
41fe0c8
Extra status filtering step because of replication delay
matt-aitken Jul 11, 2025
e8a6618
Wider bulk action onboarding
matt-aitken Jul 11, 2025
7c832e1
Wider bulk action onboarding
matt-aitken Jul 11, 2025
cc0dffc
Wider bulk action onboarding
matt-aitken Jul 11, 2025
0fd224f
More sensible widths on the bulk action side panel
matt-aitken Jul 11, 2025
cc204de
More sensible widths on the bulk action side panel
matt-aitken Jul 11, 2025
fae499c
More sensible widths on the bulk action side panel
matt-aitken Jul 11, 2025
3a8ec13
Border color tweak to the RadioButton
samejr Jul 11, 2025
0e1cdaa
Border color tweak to the RadioButton
samejr Jul 11, 2025
3061728
Border color tweak to the RadioButton
samejr Jul 11, 2025
e533e34
Improved the accordion component hover states
samejr Jul 11, 2025
320d93c
Improved the accordion component hover states
samejr Jul 11, 2025
a58f66e
Improved the accordion component hover states
samejr Jul 11, 2025
5b3d725
Updates the bulk action blank state images to the latest UI
samejr Jul 11, 2025
2000484
Updates the bulk action blank state images to the latest UI
samejr Jul 11, 2025
ff56de1
Updates the bulk action blank state images to the latest UI
samejr Jul 11, 2025
86864dd
Added R and C shortcuts back in
matt-aitken Jul 11, 2025
aecceec
Added R and C shortcuts back in
matt-aitken Jul 11, 2025
e50a882
Added R and C shortcuts back in
matt-aitken Jul 11, 2025
a5c2dd0
Fix for selecting a single run
matt-aitken Jul 11, 2025
e808156
Fix for selecting a single run
matt-aitken Jul 11, 2025
10377de
Fix for selecting a single run
matt-aitken Jul 11, 2025
027b4f4
Improved exit icon, added shortcut to modal
matt-aitken Jul 11, 2025
d92e80e
Improved exit icon, added shortcut to modal
matt-aitken Jul 11, 2025
632bbee
Improved exit icon, added shortcut to modal
matt-aitken Jul 11, 2025
2b8bae8
Tidy imports
samejr Jul 11, 2025
0dfab94
Tidy imports
samejr Jul 11, 2025
6a4d71b
Tidy imports
samejr Jul 11, 2025
6e025bd
Tidy imports
samejr Jul 11, 2025
62bed7e
Tidy imports
samejr Jul 11, 2025
99d842f
Tidy imports
samejr Jul 11, 2025
edd4ecf
Tidy imports
samejr Jul 11, 2025
b968e14
Tidy imports
samejr Jul 11, 2025
f7fabfb
Tidy imports
samejr Jul 11, 2025
b91f1eb
Tidy imports
samejr Jul 11, 2025
1ae7f0c
Fix for grid layout when 1 page of bulk actions visible
samejr Jul 11, 2025
ed7547b
Fix for grid layout when 1 page of bulk actions visible
samejr Jul 11, 2025
e81b05e
Fix for grid layout when 1 page of bulk actions visible
samejr Jul 11, 2025
474b46f
Removed the ... on the abort button
matt-aitken Jul 11, 2025
9f5bb44
Removed the ... on the abort button
matt-aitken Jul 11, 2025
4637b43
Removed the ... on the abort button
matt-aitken Jul 11, 2025
b24a0c5
Removed the ... on the abort button
matt-aitken Jul 11, 2025
ec14e03
Animate the progress bar
matt-aitken Jul 11, 2025
400b0b2
Set TZ="UTC" in the env example
matt-aitken Jul 11, 2025
2fa4bd8
Filter summary in the bulk inspector
matt-aitken Jul 11, 2025
26d5d5c
Improves the pagination styling
samejr Jul 11, 2025
5c58659
Improves the pagination styling
samejr Jul 11, 2025
9d88b84
Delete old bulk action routes
matt-aitken Jul 11, 2025
8739b05
Removed old Postgres RunListPresenter
matt-aitken Jul 11, 2025
0413dab
Retry any replication error where the message contains "timeout"
matt-aitken Jul 11, 2025
fed987e
Increase wait to make test less flaky
matt-aitken Jul 12, 2025
e823159
The test was using run id instead of friendly id
matt-aitken Jul 12, 2025
00d7121
Safer array access
matt-aitken Jul 12, 2025
885e2bf
Remove error log if there's a bad status
matt-aitken Jul 12, 2025
14915d6
Nicer frontend type safety with the bulk action and mode
matt-aitken Jul 12, 2025
d80af53
Switched a log to a debug log
matt-aitken Jul 12, 2025
f8733b3
Retry replication unless the error is a known non-retry error
matt-aitken Jul 14, 2025
3a4a622
Make ClickHouse required
matt-aitken Jul 14, 2025
e74b750
matt-aitken Jul 14, 2025
7e4c91d
Set a CLICKHOUSE_URL for unit tests
matt-aitken Jul 14, 2025
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 4 additions & 1 deletion .env.example
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,9 @@ APP_ORIGIN=http://localhost:3030
ELECTRIC_ORIGIN=http://localhost:3060
NODE_ENV=development

# Set this to UTC because Node.js uses the system timezone
TZ="UTC"

# Redis is used for the v3 queuing and v2 concurrency control
REDIS_HOST="localhost"
REDIS_PORT="6379"
Expand Down Expand Up @@ -77,4 +80,4 @@ POSTHOG_PROJECT_KEY=
# These control the server-side internal telemetry
# INTERNAL_OTEL_TRACE_EXPORTER_URL=<URL to send traces to>
# INTERNAL_OTEL_TRACE_LOGGING_ENABLED=1
# INTERNAL_OTEL_TRACE_INSTRUMENT_PRISMA_ENABLED=0,
# INTERNAL_OTEL_TRACE_INSTRUMENT_PRISMA_ENABLED=0,
48 changes: 48 additions & 0 deletions apps/webapp/app/assets/icons/ListCheckedIcon.tsx
Original file line number Diff line number Diff line change
@@ -0,0 +1,48 @@
export function ListCheckedIcon({ className }: { className?: string }) {
return (
<svg className={className} viewBox="0 0 18 18" fill="none" xmlns="http://www.w3.org/2000/svg">
<path
d="M2.85001 3.82759L4.09139 5.06897L6.16035 3"
stroke="currentColor"
strokeWidth="1.65517"
strokeLinecap="round"
strokeLinejoin="round"
/>
<path
d="M2.85001 8.82759L4.09139 10.069L6.16035 8"
stroke="currentColor"
strokeWidth="1.65517"
strokeLinecap="round"
strokeLinejoin="round"
/>
<path
d="M2.85001 13.8276L4.09139 15.069L6.16035 13"
stroke="currentColor"
strokeWidth="1.65517"
strokeLinecap="round"
strokeLinejoin="round"
/>
<path
d="M9 4H15"
stroke="currentColor"
strokeWidth="2"
strokeLinecap="round"
strokeLinejoin="round"
/>
<path
d="M9 9H15"
stroke="currentColor"
strokeWidth="2"
strokeLinecap="round"
strokeLinejoin="round"
/>
<path
d="M9 14H15"
stroke="currentColor"
strokeWidth="2"
strokeLinecap="round"
strokeLinejoin="round"
/>
</svg>
);
}
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
66 changes: 61 additions & 5 deletions apps/webapp/app/components/BlankStatePanels.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -11,14 +11,22 @@ import {
Squares2X2Icon,
} from "@heroicons/react/20/solid";
import { useLocation } from "react-use";
import { BranchEnvironmentIconSmall } from "~/assets/icons/EnvironmentIcons";
import { TaskIcon } from "~/assets/icons/TaskIcon";
import { WaitpointTokenIcon } from "~/assets/icons/WaitpointTokenIcon";
import openBulkActionsPanel from "~/assets/images/open-bulk-actions-panel.png";
import selectRunsIndividually from "~/assets/images/select-runs-individually.png";
import selectRunsUsingFilters from "~/assets/images/select-runs-using-filters.png";
import { useEnvironment } from "~/hooks/useEnvironment";
import { useFeatures } from "~/hooks/useFeatures";
import { useOrganization } from "~/hooks/useOrganizations";
import { useProject } from "~/hooks/useProject";
import { type MinimumEnvironment } from "~/presenters/SelectBestEnvironmentPresenter.server";
import { NewBranchPanel } from "~/routes/_app.orgs.$organizationSlug.projects.$projectParam.env.$envParam.branches/route";
import {
docsPath,
v3BillingPath,
v3CreateBulkActionPath,
v3EnvironmentPath,
v3EnvironmentVariablesPath,
v3NewProjectAlertPath,
Expand All @@ -36,12 +44,7 @@ import { StepNumber } from "./primitives/StepNumber";
import { TextLink } from "./primitives/TextLink";
import { InitCommandV3, PackageManagerProvider, TriggerDevStepV3 } from "./SetupCommands";
import { StepContentContainer } from "./StepContentContainer";
import { WaitpointTokenIcon } from "~/assets/icons/WaitpointTokenIcon";
import { BranchEnvironmentIconSmall } from "~/assets/icons/EnvironmentIcons";
import { useFeatures } from "~/hooks/useFeatures";
import { DialogContent, DialogTrigger, Dialog } from "./primitives/Dialog";
import { V4Badge } from "./V4Badge";
import { NewBranchPanel } from "~/routes/_app.orgs.$organizationSlug.projects.$projectParam.env.$envParam.branches/route";

export function HasNoTasksDev() {
return (
Expand Down Expand Up @@ -569,3 +572,56 @@ export function SwitcherPanel({ title = "Switch to a deployed environment" }: {
</div>
);
}

export function BulkActionsNone() {
const organization = useOrganization();
const project = useProject();
const environment = useEnvironment();

return (
<div>
<div className="mb-6 flex items-center justify-between border-b pb-0.5">
<Header1 spacing>Create a bulk action</Header1>
<div className="flex items-center gap-2">
<LinkButton
variant="primary/small"
LeadingIcon={PlusIcon}
to={v3CreateBulkActionPath(organization, project, environment)}
>
New bulk action
</LinkButton>
</div>
</div>
<StepNumber stepNumber="1" title="Select runs individually" />
<StepContentContainer className="mb-4 flex flex-col gap-4">
<Paragraph>Select runs from the runs page individually.</Paragraph>
<div>
<img src={selectRunsIndividually} alt="Select runs individually" />
</div>
</StepContentContainer>
<div className="mb-5 ml-9 flex items-center gap-2">
<div className="h-px w-full bg-grid-bright" />
<Paragraph variant="extra-small" className="text-text-dimmed">
OR
</Paragraph>
<div className="h-px w-full bg-grid-bright" />
</div>
<StepNumber stepNumber="2" title="Select runs using filters" />
<StepContentContainer className="flex flex-col gap-4">
<Paragraph>
Use the filter menu on the runs page to select just the runs you want to bulk action.
</Paragraph>
<div>
<img src={selectRunsUsingFilters} alt="Select runs using filters" />
</div>
</StepContentContainer>
<StepNumber stepNumber="3" title="Open the bulk action panel" />
<StepContentContainer className="flex flex-col gap-4">
<Paragraph>Click the “Bulk actions” button in the top right of the runs page.</Paragraph>
<div>
<img src={openBulkActionsPanel} alt="Open the bulk action panel" />
</div>
</StepContentContainer>
</div>
);
}
Loading
Loading