Sitelet https://github.com/flutter/flutter/issues/192308
Skip to content

[material_ui] Reduce web test suite #192308

Description

@elliette

See #189278 for additional context here.

The web test shards that contain the material_ui and material_ui/example tests take too long to complete (currently ~1 hour, which is the timeout limit). Initial solution involved changing the sharding logic so that the material_ui and material_ui/example tests were assigned to separate shards, but that will need more design (see #189278).

Instead, we are going to reduce the number of test we are running on web, using a similar mechanism to the reduced-test-set tag in flutter/flutter. We can call it something like reduced-web-test-set.

We should only run tests on web that are specifically targeting web behavior or regressions. These test cases can be tagged with reduced-web-test-set. They will run on both web and non-web platforms, whereas tests without that tag will only run on non-web platforms.

Below is a list of test cases targeting web that should use the new test tag (note: the following were identifying via agentic analysis so it's possible some were missed, however I think this subset will still guarantee us solid web coverage):

Web test audit

File: action_chip_test.dart

Path: packages/material_ui/test/action_chip_test.dart

Test Case Line Reasons / Mechanism Explanation
ActionChip has expected default mouse cursor on hover L504 kIsWeb Verifies that mouse cursor changes to SystemMouseCursors.click when hovered on Web (vs basic cursor on desktop/mobile).

File: back_button_test.dart

Path: packages/material_ui/test/back_button_test.dart

Test Case Line Reasons / Mechanism Explanation
BackButton icon L69 kIsWeb Tests web-specific platform behavior or conditionals.
BackButton has expected default mouse cursor on hover L384 kIsWeb Verifies that mouse cursor changes to SystemMouseCursors.click when hovered on Web (vs basic cursor on desktop/mobile).
CloseButton has expected default mouse cursor on hover L404 kIsWeb Verifies that mouse cursor changes to SystemMouseCursors.click when hovered on Web (vs basic cursor on desktop/mobile).

File: checkbox_list_tile_test.dart

Path: packages/material_ui/test/checkbox_list_tile_test.dart

Test Case Line Reasons / Mechanism Explanation
CheckboxListTile respects mouseCursor when hovered L579 kIsWeb Verifies that mouse cursor changes to SystemMouseCursors.click when hovered on Web (vs basic cursor on desktop/mobile).
Material3 - CheckboxListTile respects overlayColor in active/pressed/hovered states L912 kIsWeb Tests web-specific platform behavior or conditionals.

File: checkbox_test.dart

Path: packages/material_ui/test/checkbox_test.dart

Test Case Line Reasons / Mechanism Explanation
Checkbox can be toggled by keyboard shortcuts L1021 kIsWeb
Web comment / regression
Asserts web-specific keyboard interaction: on Web, widgets do not respond to the Enter key.
Checkbox changes mouse cursor when hovered L1219 kIsWeb Verifies that mouse cursor changes to SystemMouseCursors.click when hovered on Web (vs basic cursor on desktop/mobile).
Checkbox.adaptive respects Checkbox.mouseCursor on iOS/macOS L2338 kIsWeb Verifies that mouse cursor changes to SystemMouseCursors.click when hovered on Web (vs basic cursor on desktop/mobile).

File: chip_test.dart

Path: packages/material_ui/test/chip_test.dart

Test Case Line Reasons / Mechanism Explanation
Material3 - Selection with avatar works as expected on RawChip L2152 kIsWeb Tests web-specific platform behavior or conditionals.
Material3 - Selection without avatar works as expected on RawChip L2314 kIsWeb Tests web-specific platform behavior or conditionals.
Material3 - Activation works as expected on RawChip L2451 kIsWeb Tests web-specific platform behavior or conditionals.
label only L2833 kIsWeb Asserts web-specific semantics flag behavior (e.g. SemanticsFlag.hasCheckedState vs hasSelectedState or SemanticsFlag.isButton).
delete L2881 kIsWeb Asserts web-specific semantics flag behavior (e.g. SemanticsFlag.hasCheckedState vs hasSelectedState or SemanticsFlag.isButton).
with onPressed L2945 kIsWeb Asserts web-specific semantics flag behavior (e.g. SemanticsFlag.hasCheckedState vs hasSelectedState or SemanticsFlag.isButton).
with onSelected L2999 kIsWeb Asserts web-specific semantics flag behavior (e.g. SemanticsFlag.hasCheckedState vs hasSelectedState or SemanticsFlag.isButton).
disabled L3122 kIsWeb Asserts web-specific semantics flag behavior (e.g. SemanticsFlag.hasCheckedState vs hasSelectedState or SemanticsFlag.isButton).
tapEnabled explicitly false L3174 kIsWeb Asserts web-specific semantics flag behavior (e.g. SemanticsFlag.hasCheckedState vs hasSelectedState or SemanticsFlag.isButton).
enabled when tapEnabled and canTap L3223 kIsWeb Asserts web-specific semantics flag behavior (e.g. SemanticsFlag.hasCheckedState vs hasSelectedState or SemanticsFlag.isButton).
disabled when tapEnabled but not canTap L3278 kIsWeb Asserts web-specific semantics flag behavior (e.g. SemanticsFlag.hasCheckedState vs hasSelectedState or SemanticsFlag.isButton).

File: choice_chip_test.dart

Path: packages/material_ui/test/choice_chip_test.dart

Test Case Line Reasons / Mechanism Explanation
ChoiceChip has expected default mouse cursor on hover L765 kIsWeb Verifies that mouse cursor changes to SystemMouseCursors.click when hovered on Web (vs basic cursor on desktop/mobile).

File: date_picker_theme_test.dart

Path: packages/material_ui/test/date_picker_theme_test.dart

Test Case Line Reasons / Mechanism Explanation
DatePickerDialog resolves DatePickerTheme.dayOverlayColor states L964 kIsWeb Tests web-specific platform behavior or conditionals.
DateRangePickerDialog resolves DatePickerTheme.rangeSelectionOverlayColor states L1146 kIsWeb Tests web-specific platform behavior or conditionals.

File: drawer_button_test.dart

Path: packages/material_ui/test/drawer_button_test.dart

Test Case Line Reasons / Mechanism Explanation
DrawerButton has expected default mouse cursor on hover L293 kIsWeb Verifies that mouse cursor changes to SystemMouseCursors.click when hovered on Web (vs basic cursor on desktop/mobile).
EndDrawerButton has expected default mouse cursor on hover L316 kIsWeb Verifies that mouse cursor changes to SystemMouseCursors.click when hovered on Web (vs basic cursor on desktop/mobile).

File: dropdown_form_field_test.dart

Path: packages/material_ui/test/dropdown_form_field_test.dart

Test Case Line Reasons / Mechanism Explanation
DropdownFormField has expected default mouse cursor on hover L1466 kIsWeb Verifies that mouse cursor changes to SystemMouseCursors.click when hovered on Web (vs basic cursor on desktop/mobile).

File: dropdown_menu_test.dart

Path: packages/material_ui/test/dropdown_menu_test.dart

Test Case Line Reasons / Mechanism Explanation
DropdownMenuEntries do not overflow when width is specified L2980 Web comment / regression Tests web-specific platform behavior or conditionals.
DropdownMenuEntry.labelWidget is Text that specifies maxLines 1 or 2 L3023 Web comment / regression Tests web-specific platform behavior or conditionals.
Setting DropdownMenu.requestFocusOnTap to false makes TextField a button L3699 kIsWeb Tests web-specific platform behavior or conditionals.
ensure exclude semantics for trailing button L4379 kIsWeb Tests web-specific platform behavior or conditionals.

File: dropdown_test.dart

Path: packages/material_ui/test/dropdown_test.dart

Test Case Line Reasons / Mechanism Explanation
DropdownMenuItem has expected default mouse cursor on hover L3963 kIsWeb Verifies that mouse cursor changes to SystemMouseCursors.click when hovered on Web (vs basic cursor on desktop/mobile).
DropdownButton changes mouse cursor when hovered as expected L4012 kIsWeb Verifies that mouse cursor changes to SystemMouseCursors.click when hovered on Web (vs basic cursor on desktop/mobile).

File: elevated_button_test.dart

Path: packages/material_ui/test/elevated_button_test.dart

Test Case Line Reasons / Mechanism Explanation
ElevatedButton uses InkSparkle only for Android non-web when useMaterial3 is true L1632 kIsWeb Tests web-specific platform behavior or conditionals.
ElevatedButton changes mouse cursor when hovered L1810 kIsWeb Verifies that mouse cursor changes to SystemMouseCursors.click when hovered on Web (vs basic cursor on desktop/mobile).

File: filled_button_test.dart

Path: packages/material_ui/test/filled_button_test.dart

Test Case Line Reasons / Mechanism Explanation
FilledButton.icon responds to applied padding L1306 kIsWeb Tests web-specific platform behavior or conditionals.
FilledButton uses InkSparkle only for Android non-web when useMaterial3 is true L1766 kIsWeb Tests web-specific platform behavior or conditionals.
FilledButton changes mouse cursor when hovered L1924 kIsWeb Verifies that mouse cursor changes to SystemMouseCursors.click when hovered on Web (vs basic cursor on desktop/mobile).

File: filter_chip_test.dart

Path: packages/material_ui/test/filter_chip_test.dart

Test Case Line Reasons / Mechanism Explanation
FilterChip has expected default mouse cursor on hover L1267 kIsWeb Verifies that mouse cursor changes to SystemMouseCursors.click when hovered on Web (vs basic cursor on desktop/mobile).

File: icon_button_test.dart

Path: packages/material_ui/test/icon_button_test.dart

Test Case Line Reasons / Mechanism Explanation
Disabled IconButton can L800 kIsWeb Tests web-specific platform behavior or conditionals.
IconButton.mouseCursor changes cursor on hover L945 kIsWeb
Web comment / regression
Verifies that mouse cursor changes to SystemMouseCursors.click when hovered on Web (vs basic cursor on desktop/mobile).
does not draw focus color when focused by semantics on the web L3378 isBrowser Tests web-specific platform behavior or conditionals.

File: ink_paint_test.dart

Path: packages/material_ui/test/ink_paint_test.dart

Test Case Line Reasons / Mechanism Explanation
Material3 - InkWell widget renders an ink splash L92 kIsWeb Tests web-specific platform behavior or conditionals.

File: ink_splash_test.dart

Path: packages/material_ui/test/ink_splash_test.dart

Test Case Line Reasons / Mechanism Explanation
Material3 - InkWell with NoSplash splashFactory paints nothing L93 kIsWeb Tests web-specific platform behavior or conditionals.

File: ink_well_test.dart

Path: packages/material_ui/test/ink_well_test.dart

Test Case Line Reasons / Mechanism Explanation
InkWell.mouseCursor changes cursor on hover L1143 kIsWeb Verifies that mouse cursor changes to SystemMouseCursors.click when hovered on Web (vs basic cursor on desktop/mobile).
InkResponse containing selectable text changes mouse cursor when hovered L1235 kIsWeb Verifies that mouse cursor changes to SystemMouseCursors.click when hovered on Web (vs basic cursor on desktop/mobile).

File: input_chip_test.dart

Path: packages/material_ui/test/input_chip_test.dart

Test Case Line Reasons / Mechanism Explanation
InputChip has expected default mouse cursor on hover L609 kIsWeb Verifies that mouse cursor changes to SystemMouseCursors.click when hovered on Web (vs basic cursor on desktop/mobile).

File: input_decorator_test.dart

Path: packages/material_ui/test/input_decorator_test.dart

Test Case Line Reasons / Mechanism Explanation
uses alphabetic baseline for CJK layout L15184 isBrowser Tests web-specific platform behavior or conditionals.

File: list_tile_test.dart

Path: packages/material_ui/test/list_tile_test.dart

Test Case Line Reasons / Mechanism Explanation
leading L2753 Web comment / regression Tests web-specific platform behavior or conditionals.
trailing L2780 Web comment / regression Tests web-specific platform behavior or conditionals.

File: material_button_test.dart

Path: packages/material_ui/test/material_button_test.dart

Test Case Line Reasons / Mechanism Explanation
MaterialButton changes mouse cursor when hovered L431 kIsWeb Verifies that mouse cursor changes to SystemMouseCursors.click when hovered on Web (vs basic cursor on desktop/mobile).

File: menu_anchor_test.dart

Path: packages/material_ui/test/menu_anchor_test.dart

Test Case Line Reasons / Mechanism Explanation
Shortcuts of MenuAnchor do not rely on WidgetsApp.shortcuts L2424 Web comment / regression Tests web-specific platform behavior or conditionals.
MenuItemButton has platform-adaptive button semantics L4467 kIsWeb
Web comment / regression
Asserts web-specific semantics flag behavior (e.g. SemanticsFlag.hasCheckedState vs hasSelectedState or SemanticsFlag.isButton).
SubmenuButton has platform-adaptive button semantics L4533 kIsWeb
Web comment / regression
Asserts web-specific semantics flag behavior (e.g. SemanticsFlag.hasCheckedState vs hasSelectedState or SemanticsFlag.isButton).
SubmenuButton expanded/collapsed state L4583 kIsWeb Asserts web-specific semantics flag behavior (e.g. SemanticsFlag.hasCheckedState vs hasSelectedState or SemanticsFlag.isButton).
SubmenuButton has expected default mouse cursor on hover L5457 kIsWeb Verifies that mouse cursor changes to SystemMouseCursors.click when hovered on Web (vs basic cursor on desktop/mobile).
MenuItemButton has expected default mouse cursor on hover L5491 kIsWeb Verifies that mouse cursor changes to SystemMouseCursors.click when hovered on Web (vs basic cursor on desktop/mobile).
CheckboxMenuButton has expected default mouse cursor on hover L5535 kIsWeb Verifies that mouse cursor changes to SystemMouseCursors.click when hovered on Web (vs basic cursor on desktop/mobile).
RadioMenuButton has expected default mouse cursor on hover L5571 kIsWeb Verifies that mouse cursor changes to SystemMouseCursors.click when hovered on Web (vs basic cursor on desktop/mobile).

File: navigation_bar_test.dart

Path: packages/material_ui/test/navigation_bar_test.dart

Test Case Line Reasons / Mechanism Explanation
Navigation bar semantics L455 kIsWeb Tests web-specific platform behavior or conditionals.
Navigation bar disabled semantics L561 kIsWeb Tests web-specific platform behavior or conditionals.
Navigation bar semantics with some labels hidden L589 kIsWeb Tests web-specific platform behavior or conditionals.
NavigationBar respects overlayColor in active/pressed/hovered states L1124 kIsWeb Tests web-specific platform behavior or conditionals.

File: navigation_bar_theme_test.dart

Path: packages/material_ui/test/navigation_bar_theme_test.dart

Test Case Line Reasons / Mechanism Explanation
NavigationBar respects NavigationBarTheme.overlayColor in active/pressed/hovered states L244 kIsWeb Tests web-specific platform behavior or conditionals.

File: outlined_button_test.dart

Path: packages/material_ui/test/outlined_button_test.dart

Test Case Line Reasons / Mechanism Explanation
OutlinedButton uses InkSparkle only for Android non-web when useMaterial3 is true L1861 kIsWeb Tests web-specific platform behavior or conditionals.
OutlinedButton changes mouse cursor when hovered L2039 kIsWeb Verifies that mouse cursor changes to SystemMouseCursors.click when hovered on Web (vs basic cursor on desktop/mobile).

File: popup_menu_test.dart

Path: packages/material_ui/test/popup_menu_test.dart

Test Case Line Reasons / Mechanism Explanation
PopupMenuButton has expected default mouse cursor on hover L2542 kIsWeb Verifies that mouse cursor changes to SystemMouseCursors.click when hovered on Web (vs basic cursor on desktop/mobile).
PopupMenuItem changes mouse cursor when hovered L2573 kIsWeb Verifies that mouse cursor changes to SystemMouseCursors.click when hovered on Web (vs basic cursor on desktop/mobile).
CheckedPopupMenuItem changes mouse cursor when hovered L2667 kIsWeb Verifies that mouse cursor changes to SystemMouseCursors.click when hovered on Web (vs basic cursor on desktop/mobile).

File: popup_menu_theme_test.dart

Path: packages/material_ui/test/popup_menu_theme_test.dart

Test Case Line Reasons / Mechanism Explanation
Passing no PopupMenuThemeData returns defaults L134 kIsWeb Verifies that mouse cursor changes to SystemMouseCursors.click when hovered on Web (vs basic cursor on desktop/mobile).
Passing no PopupMenuThemeData returns defaults L479 kIsWeb Verifies that mouse cursor changes to SystemMouseCursors.click when hovered on Web (vs basic cursor on desktop/mobile).

File: radio_list_tile_test.dart

Path: packages/material_ui/test/radio_list_tile_test.dart

Test Case Line Reasons / Mechanism Explanation
Radio changes mouse cursor when hovered L846 kIsWeb Verifies that mouse cursor changes to SystemMouseCursors.click when hovered on Web (vs basic cursor on desktop/mobile).

File: radio_test.dart

Path: packages/material_ui/test/radio_test.dart

Test Case Line Reasons / Mechanism Explanation
Radio can be controlled by keyboard shortcuts L921 kIsWeb
Web comment / regression
Asserts web-specific keyboard interaction: on Web, widgets do not respond to the Enter key.
Radio changes mouse cursor when hovered L1049 kIsWeb Verifies that mouse cursor changes to SystemMouseCursors.click when hovered on Web (vs basic cursor on desktop/mobile).

File: raw_material_button_test.dart

Path: packages/material_ui/test/raw_material_button_test.dart

Test Case Line Reasons / Mechanism Explanation
RawMaterialButton responds to shortcut when activated L45 kIsWeb Tests web-specific platform behavior or conditionals.
RawMaterialButton changes mouse cursor as expected when hovered L597 kIsWeb Verifies that mouse cursor changes to SystemMouseCursors.click when hovered on Web (vs basic cursor on desktop/mobile).

File: scaffold_test.dart

Path: packages/material_ui/test/scaffold_test.dart

Test Case Line Reasons / Mechanism Explanation
Back arrow uses correct default L1090 kIsWeb Tests web-specific platform behavior or conditionals.
Call to Scaffold.of() without context L2497 Web comment / regression Tests web-specific platform behavior or conditionals.
Call to Scaffold.geometryOf() without context L2570 Web comment / regression Tests web-specific platform behavior or conditionals.

File: scrollbar_test.dart

Path: packages/material_ui/test/scrollbar_test.dart

Test Case Line Reasons / Mechanism Explanation
Simultaneous dragging and pointer scrolling does not cause a crash L1588 kIsWeb Tests web-specific platform behavior or conditionals.

File: search_anchor_test.dart

Path: packages/material_ui/test/search_anchor_test.dart

Test Case Line Reasons / Mechanism Explanation
SearchAnchor.bar.scrollPadding is passed through to EditableText L3778 kIsWeb Tests web-specific platform behavior or conditionals.

File: search_test.dart

Path: packages/material_ui/test/search_test.dart

Test Case Line Reasons / Mechanism Explanation
Custom flexibleSpace value L675 kIsWeb Tests web-specific platform behavior or conditionals.
does not include routeName L863 kIsWeb Tests web-specific platform behavior or conditionals.

File: segmented_button_test.dart

Path: packages/material_ui/test/segmented_button_test.dart

Test Case Line Reasons / Mechanism Explanation
SegmentedButton has expected default mouse cursor on hover L1503 kIsWeb Verifies that mouse cursor changes to SystemMouseCursors.click when hovered on Web (vs basic cursor on desktop/mobile).

File: selection_area_test.dart

Path: packages/material_ui/test/selection_area_test.dart

Test Case Line Reasons / Mechanism Explanation
builds the default context menu by default on Android and iOS web L133 kIsWeb Tests web-specific platform behavior or conditionals.
Can only drag one selection handle at a time on Android web L488 kIsWeb Web-only test (skip: !kIsWeb), runs exclusively on web platforms.

File: stepper_test.dart

Path: packages/material_ui/test/stepper_test.dart

Test Case Line Reasons / Mechanism Explanation
Nested stepper error test L476 Web comment / regression Tests web-specific platform behavior or conditionals.

File: switch_test.dart

Path: packages/material_ui/test/switch_test.dart

Test Case Line Reasons / Mechanism Explanation
Switch.adaptive default mouse cursor(Cupertino) L1222 kIsWeb Verifies that mouse cursor changes to SystemMouseCursors.click when hovered on Web (vs basic cursor on desktop/mobile).
Switch can be toggled by keyboard shortcuts L2017 kIsWeb
Web comment / regression
Asserts web-specific keyboard interaction: on Web, widgets do not respond to the Enter key.

File: tabs_test.dart

Path: packages/material_ui/test/tabs_test.dart

Test Case Line Reasons / Mechanism Explanation
correct semantics L4254 kIsWeb Tests web-specific platform behavior or conditionals.
correct scrolling semantics L4337 kIsWeb Tests web-specific platform behavior or conditionals.
can override semantics of tabs L4534 kIsWeb Tests web-specific platform behavior or conditionals.
Test semantics of TabPageSelector L6387 kIsWeb Tests web-specific platform behavior or conditionals.

File: text_button_test.dart

Path: packages/material_ui/test/text_button_test.dart

Test Case Line Reasons / Mechanism Explanation
TextButton uses InkSparkle only for Android non-web when useMaterial3 is true L1575 kIsWeb Tests web-specific platform behavior or conditionals.
TextButton changes mouse cursor when hovered L1751 kIsWeb Verifies that mouse cursor changes to SystemMouseCursors.click when hovered on Web (vs basic cursor on desktop/mobile).

File: text_field_test.dart

Path: packages/material_ui/test/text_field_test.dart

Test Case Line Reasons / Mechanism Explanation
Live Text button shows and hides correctly when LiveTextStatus changes L75 kIsWeb Tests web-specific platform behavior or conditionals.
Read only text field basic L2051 isBrowser
Web comment / regression
Tests web-specific platform behavior or conditionals.
Dynamically switching to read only should close input connection L2228 isBrowser
Web comment / regression
Tests web-specific platform behavior or conditionals.
Dynamically switching to non read only should open input connection L2260 isBrowser
Web comment / regression
Tests web-specific platform behavior or conditionals.
Can only drag one selection handle at a time on Android web L3531 kIsWeb
Web comment / regression
Web-only test (skip: !kIsWeb), runs exclusively on web platforms.
Does not show handles when updated from the web engine L14755 kIsWeb Tests web-specific platform behavior or conditionals.
TextField icons change mouse cursor when hovered L15349 kIsWeb Verifies that mouse cursor changes to SystemMouseCursors.click when hovered on Web (vs basic cursor on desktop/mobile).
using default behavior for different platforms. L15836 kIsWeb Tests web-specific platform behavior or conditionals.
Tapping outside doesn L17968 kIsWeb Tests web-specific platform behavior or conditionals.
Default TextField handling of onTapOutside follows platform conventions for ${pointerDeviceKind.name} L18102 kIsWeb Tests web-specific platform behavior or conditionals.

File: theme_data_test.dart

Path: packages/material_ui/test/theme_data_test.dart

Test Case Line Reasons / Mechanism Explanation
splashFactory is InkSparkle only for Android non-web when useMaterial3 is true L952 kIsWeb Tests web-specific platform behavior or conditionals.

File: toggle_buttons_test.dart

Path: packages/material_ui/test/toggle_buttons_test.dart

Test Case Line Reasons / Mechanism Explanation
ToggleButtons changes mouse cursor when the button is hovered L1712 kIsWeb Verifies that mouse cursor changes to SystemMouseCursors.click when hovered on Web (vs basic cursor on desktop/mobile).

Package: packages/material_ui/example

File: editable_text_toolbar_builder.2_test.dart

Path: packages/material_ui/example/test/context_menu/editable_text_toolbar_builder.2_test.dart

Test Case Line Reasons / Mechanism Explanation
showing and hiding the context menu in TextField with a custom toolbar L14 kIsWeb Tests web-specific platform behavior or conditionals.

File: selectable_region_toolbar_builder.0_test.dart

Path: packages/material_ui/example/test/context_menu/selectable_region_toolbar_builder.0_test.dart

Test Case Line Reasons / Mechanism Explanation
showing and hiding the custom context menu on SelectionArea L14 kIsWeb Tests web-specific platform behavior or conditionals.

File: text_form_field.1_test.dart

Path: packages/material_ui/example/test/text_form_field/text_form_field.1_test.dart

Test Case Line Reasons / Mechanism Explanation
Pressing space should focus the next field L12 isBrowser Tests web-specific platform behavior or conditionals.

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    P1High-priority issues at the top of the work listpackageflutter/packages repository. See also p: labels.team-designOwned by Design Languages teamtriaged-designTriaged by Design Languages team

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions