diff --git a/1299.patch b/1299.patch new file mode 100644 index 0000000..ec98869 --- /dev/null +++ b/1299.patch @@ -0,0 +1,2118 @@ +From ce58262dbb6b9f0b453a84107e7e6dd0f5fbcc96 Mon Sep 17 00:00:00 2001 +From: Cockpit Project +Date: Thu, 1 Jun 2023 03:08:22 +0000 +Subject: [PATCH] Makefile: Update Cockpit lib to + 756b59469637dd2dee00d086b883cffd16dc5efc + +Update to the same PF5 versions as Cockpit. Apply the "-v5" prefixing +and import adjustments. + +Make use of the new pywrap feature from our test. + +See starter-kit commit 2215aa3bf801224. + +Closes #1299 +--- + Makefile | 8 +- + node_modules | 2 +- + package.json | 11 +- + src/ContainerCommitModal.jsx | 8 +- + src/ContainerHeader.jsx | 4 +- + src/ContainerRenameModal.jsx | 2 +- + src/Containers.jsx | 6 +- + src/Containers.scss | 40 ++-- + src/DynamicListForm.scss | 14 +- + src/ImageRunModal.jsx | 42 ++-- + src/ImageRunModal.scss | 20 +- + src/ImageSearchModal.css | 18 +- + src/ImageSearchModal.jsx | 4 +- + src/Images.css | 12 +- + src/Images.jsx | 4 +- + src/PodCreateModal.jsx | 2 +- + src/PublishPort.jsx | 12 +- + src/Volume.jsx | 4 +- + src/app.jsx | 4 +- + src/podman.scss | 42 ++-- + test/check-application | 441 +++++++++++++++++------------------ + 21 files changed, 346 insertions(+), 354 deletions(-) + +Index: cockpit-podman-70/Makefile +=================================================================== +--- cockpit-podman-70.orig/Makefile ++++ cockpit-podman-70/Makefile +@@ -34,13 +34,11 @@ all: $(DIST_TEST) + COCKPIT_REPO_FILES = \ + pkg/lib \ + test/common \ +- tools/git-utils.sh \ +- tools/make-bots \ + tools/node-modules \ + $(NULL) + + COCKPIT_REPO_URL = https://github.com/cockpit-project/cockpit.git +-COCKPIT_REPO_COMMIT = 355c0aa59e3991243e10a61183e62ea129d3261a # 292 + 8 commits ++COCKPIT_REPO_COMMIT = 756b59469637dd2dee00d086b883cffd16dc5efc # 293 + conditional pfv5 + + $(COCKPIT_REPO_FILES): $(COCKPIT_REPO_STAMP) + COCKPIT_REPO_TREE = '$(strip $(COCKPIT_REPO_COMMIT))^{tree}' +@@ -200,8 +198,8 @@ prepare-check: $(NODE_MODULES_TEST) $(VM + check: prepare-check + TEST_AUDIT_NO_SELINUX=1 test/common/run-tests ${RUN_TESTS_OPTIONS} + +-bots: tools/make-bots +- tools/make-bots ++bots: $(COCKPIT_REPO_STAMP) ++ test/common/make-bots + + test/reference: test/common + test/common/pixel-tests pull +Index: cockpit-podman-70/package.json +=================================================================== +--- cockpit-podman-70.orig/package.json ++++ cockpit-podman-70/package.json +@@ -43,11 +43,12 @@ + "stylelint-formatter-pretty": "^3.1.1" + }, + "dependencies": { +- "@patternfly/patternfly": "5.0.0-alpha.43", +- "@patternfly/react-core": "5.0.0-alpha.83", +- "@patternfly/react-icons": "5.0.0-alpha.12", +- "@patternfly/react-styles": "5.0.0-alpha.8", +- "@patternfly/react-table": "5.0.0-alpha.85", ++ "@patternfly/patternfly": "5.0.0-alpha.53", ++ "@patternfly/react-core": "5.0.0-alpha.98", ++ "@patternfly/react-icons": "5.0.0-alpha.14", ++ "@patternfly/react-styles": "5.0.0-alpha.10", ++ "@patternfly/react-table": "5.0.0-alpha.100", ++ "@patternfly/react-tokens": "5.0.0-alpha.9", + "date-fns": "2.28.0", + "docker-names": "1.2.1", + "prop-types": "15.8.1", +Index: cockpit-podman-70/src/ContainerCommitModal.jsx +=================================================================== +--- cockpit-podman-70.orig/src/ContainerCommitModal.jsx ++++ cockpit-podman-70/src/ContainerCommitModal.jsx +@@ -91,7 +91,7 @@ const ContainerCommitModal = ({ containe + { setNameError(""); setImageName(value) }} /> ++ onChange={(_, value) => { setNameError(""); setImageName(value) }} /> + + + +@@ -99,20 +99,20 @@ const ContainerCommitModal = ({ containe + { setNameError(""); setTag(value) }} /> ++ onChange={(_, value) => { setNameError(""); setTag(value) }} /> + + + + ")} + value={author} +- onChange={setAuthor} /> ++ onChange={(_, value) => setAuthor(value)} /> + + + + ++ onChange={(_, value) => setCommand(value)} /> + + + +Index: cockpit-podman-70/src/ContainerHeader.jsx +=================================================================== +--- cockpit-podman-70.orig/src/ContainerHeader.jsx ++++ cockpit-podman-70/src/ContainerHeader.jsx +@@ -15,7 +15,7 @@ const ContainerHeader = ({ user, twoOwne + {_("Owner")} + + +- ++ handleOwnerChanged(value)}> + + + +@@ -27,7 +27,7 @@ const ContainerHeader = ({ user, twoOwne + ++ onChange={(_, value) => handleFilterChanged(value)} /> + + + +Index: cockpit-podman-70/src/ContainerRenameModal.jsx +=================================================================== +--- cockpit-podman-70.orig/src/ContainerRenameModal.jsx ++++ cockpit-podman-70/src/ContainerRenameModal.jsx +@@ -70,7 +70,7 @@ const ContainerRenameModal = ({ containe + validated={nameError ? "error" : "default"} + type="text" + aria-label={nameError} +- onChange={value => handleInputChange("name", value)} /> ++ onChange={(_, value) => handleInputChange("name", value)} /> + + + +Index: cockpit-podman-70/src/Containers.jsx +=================================================================== +--- cockpit-podman-70.orig/src/Containers.jsx ++++ cockpit-podman-70/src/Containers.jsx +@@ -6,7 +6,7 @@ import { Divider } from "@patternfly/rea + import { Dropdown, DropdownItem, DropdownSeparator, KebabToggle } from '@patternfly/react-core/dist/esm/deprecated/components/Dropdown/index.js'; + import { Flex } from "@patternfly/react-core/dist/esm/layouts/Flex"; + import { Popover } from "@patternfly/react-core/dist/esm/components/Popover"; +-import { LabelGroup } from "@patternfly/react-core/dist/esm/components/LabelGroup"; ++import { LabelGroup } from "@patternfly/react-core/dist/esm/components/Label"; + import { Text, TextVariants } from "@patternfly/react-core/dist/esm/components/Text"; + import { FormSelect, FormSelectOption } from "@patternfly/react-core/dist/esm/components/FormSelect"; + import { Tooltip } from "@patternfly/react-core/dist/esm/components/Tooltip"; +@@ -429,7 +429,7 @@ class Containers extends React.Component + ]; + + if (!container.isDownloading) { +- columns.push({ title: , props: { className: "pf-c-table__action" } }); ++ columns.push({ title: , props: { className: "pf-v5-c-table__action" } }); + } + + const tty = containerDetail ? !!containerDetail.Config.Tty : undefined; +@@ -736,7 +736,7 @@ class Containers extends React.Component + {_("Show")} + + +- ++ this.props.handleFilterChange(value)}> + + + +Index: cockpit-podman-70/src/Containers.scss +=================================================================== +--- cockpit-podman-70.orig/src/Containers.scss ++++ cockpit-podman-70/src/Containers.scss +@@ -1,54 +1,54 @@ + @import "global-variables"; + + .container-pod { +- .pf-c-card__header { ++ .pf-v5-c-card__header { + border-color: #ddd; +- padding-top: var(--pf-global--spacer--md); ++ padding-top: var(--pf-v5-global--spacer--md); + } + + .pod-header-details { + border-color: #ddd; +- margin-top: var(--pf-global--spacer--md); +- margin-left: var(--pf-global--spacer--md); +- margin-right: var(--pf-global--spacer--md); ++ margin-top: var(--pf-v5-global--spacer--md); ++ margin-left: var(--pf-v5-global--spacer--md); ++ margin-right: var(--pf-v5-global--spacer--md); + } + + .pod-details-button { + padding-left: 0; + padding-right: 0; +- margin-right: var(--pf-global--spacer--md); ++ margin-right: var(--pf-v5-global--spacer--md); + } + + .pod-details-button-color { +- color: var(--pf-c-button--m-secondary--Color); ++ color: var(--pf-v5-c-button--m-secondary--Color); + } + +- .pf-c-card__title { ++ .pf-v5-c-card__title { + padding: 0; +- font-weight: var(--pf-global--FontWeight--normal); +- font-size: var(--pf-global--FontSize--sm); ++ font-weight: var(--pf-v5-global--FontWeight--normal); ++ font-size: var(--pf-v5-global--FontSize--sm); + + .pod-name { +- font-weight: var(--pf-global--FontWeight--bold); +- font-size: var(--pf-global--FontSize--md); ++ font-weight: var(--pf-v5-global--FontWeight--bold); ++ font-size: var(--pf-v5-global--FontSize--md); + padding-right: 1rem; + } + } + +- > .pf-c-card__header { ++ > .pf-v5-c-card__header { + &:not(:last-child) { +- padding-bottom: var(--pf-global--spacer-sm); ++ padding-bottom: var(--pf-v5-global--spacer-sm); + } + + // Reduce vertical padding of pod header items +- > .pf-c-card__title > .pf-l-flex { +- row-gap: var(--pf-global--spacer--sm); ++ > .pf-v5-c-card__title > .pf-l-flex { ++ row-gap: var(--pf-v5-global--spacer--sm); + } + } + } + + .pod-stat { +- @media (max-width: $pf-global--breakpoint--sm - 1) { ++ @media (max-width: $pf-v5-global--breakpoint--sm - 1) { + // Place each pod stat on its own row + flex-basis: 100%; + display: grid; +@@ -68,7 +68,7 @@ + } + + .ct-table-empty td { +- padding: var(--pf-global--spacer--sm) var(--pf-global--spacer--md) var(--pf-global--spacer--lg); ++ padding: var(--pf-v5-global--spacer--sm) var(--pf-global--spacer--md) var(--pf-global--spacer--lg); + } + + /* HACK - force DescriptionList to wrap but not fill the width */ +@@ -78,8 +78,8 @@ + } + + /* Upstream issue https://github.com/patternfly/patternfly/pull/3714 */ +-.containers-containers .pf-c-toolbar__content-section { +- gap: var(--pf-global--spacer--sm); ++.containers-containers .pf-v5-c-toolbar__content-section { ++ gap: var(--pf-v5-global--spacer--sm); + } + + /* Drop the excessive margin for a Dropdown button */ +Index: cockpit-podman-70/src/DynamicListForm.scss +=================================================================== +--- cockpit-podman-70.orig/src/DynamicListForm.scss ++++ cockpit-podman-70/src/DynamicListForm.scss +@@ -1,11 +1,11 @@ + @import "global-variables"; + + .dynamic-form-group { +- .pf-c-empty-state { ++ .pf-v5-c-empty-state { + padding: 0; + } + +- .pf-c-form__label { ++ .pf-v5-c-form__label { + // Don't allow labels to wrap + white-space: nowrap; + } +@@ -19,21 +19,21 @@ + } + + // Set check to the same height as input widgets and vertically align +- .pf-c-form__group-control > .pf-c-check { ++ .pf-v5-c-form__group-control > .pf-c-check { + // Set height to the same as inputs + // Font height is font size * line height (1rem * 1.5) + // Widgets have 5px padding, 1px border (top & bottom): (5 + 1) * 2 = 12 + // This all equals to 36px +- height: calc(var(--pf-global--FontSize--md) * var(--pf-global--LineHeight--md) + 12px); ++ height: calc(var(--pf-v5-global--FontSize--md) * var(--pf-global--LineHeight--md) + 12px); + align-content: center; + } + + // We use FormFieldGroup PF component for the nested look and for ability to add buttons to the header + // However we want to save space and not add indent to the left so we need to override it +- .pf-c-form__field-group-body { ++ .pf-v5-c-form__field-group-body { + // Stretch content fully +- --pf-c-form__field-group-body--GridColumn: 1 / -1; ++ --pf-v5-c-form__field-group-body--GridColumn: 1 / -1; + // Reduce padding at the top +- --pf-c-form__field-group-body--PaddingTop: var(--pf-global--spacer--xs); ++ --pf-v5-c-form__field-group-body--PaddingTop: var(--pf-v5-global--spacer--xs); + } + } +Index: cockpit-podman-70/src/ImageRunModal.jsx +=================================================================== +--- cockpit-podman-70.orig/src/ImageRunModal.jsx ++++ cockpit-podman-70/src/ImageRunModal.jsx +@@ -90,12 +90,12 @@ const EnvVar = ({ id, item, onChange, id + + handleEnvValue('envKey', value, idx, onChange, additem, itemCount, item.envValue)} /> ++ onChange={(_, value) => handleEnvValue('envKey', value, idx, onChange, additem, itemCount, item.envValue)} /> + + + handleEnvValue('envValue', value, idx, onChange, additem, itemCount, item.envKey)} /> ++ onChange={(_, value) => handleEnvValue('envValue', value, idx, onChange, additem, itemCount, item.envKey)} /> + + + + +@@ -765,7 +765,7 @@ export class ImageRunModal extends React + {cockpit.format(_("Searching: $0"), "quay.io/busybox")} + + }> +- + +@@ -789,7 +789,7 @@ export class ImageRunModal extends React + onClear={this.clearImageSelection} + // onFilter must be set or the spinner crashes https://github.com/patternfly/patternfly-react/issues/6384 + onFilter={() => {}} +- onTypeaheadInputChanged={value => this.debouncedInputChanged(value)} ++ onTypeaheadInputChanged={this.debouncedInputChanged} + footer={footer} + isDisabled={!!this.props.image} + > +@@ -814,7 +814,7 @@ export class ImageRunModal extends React + + this.onValueChanged('command', value)} /> ++ onChange={(_, value) => this.onValueChanged('command', value)} /> + + + +@@ -861,7 +861,7 @@ export class ImageRunModal extends React + +- + +@@ -893,7 +893,7 @@ export class ImageRunModal extends React + +- + +@@ -929,7 +929,7 @@ export class ImageRunModal extends React + + } + +- {_("Integration")}} id="create-image-dialog-tab-integration" className="pf-c-form"> ++ {_("Integration")}} id="create-image-dialog-tab-integration" className="pf-v5-c-form"> + + } /> + +- {_("Health check")}} id="create-image-dialog-tab-healthcheck" className="pf-c-form pf-m-horizontal"> ++ {_("Health check")}} id="create-image-dialog-tab-healthcheck" className="pf-v5-c-form pf-m-horizontal"> + + this.onValueChanged('healthcheck_command', value)} /> ++ onChange={(_, value) => this.onValueChanged('healthcheck_command', value)} /> + + + +- + +@@ -997,7 +997,7 @@ export class ImageRunModal extends React + +- + +@@ -1022,7 +1022,7 @@ export class ImageRunModal extends React + +- + +@@ -1047,7 +1047,7 @@ export class ImageRunModal extends React + +- + +@@ -1070,7 +1070,7 @@ export class ImageRunModal extends React + +- + +Index: cockpit-podman-70/src/ImageRunModal.scss +=================================================================== +--- cockpit-podman-70.orig/src/ImageRunModal.scss ++++ cockpit-podman-70/src/ImageRunModal.scss +@@ -1,14 +1,14 @@ + @import "global-variables"; + + // Ensure the width fits within the screen boundaries (with padding on the sides) +-.pf-c-select__menu { ++.pf-v5-c-select__menu { + // 3xl is the left+right padding for an iPhone SE; + // this works on other screen sizes as well +- max-width: calc(100vw - var(--pf-global--spacer--3xl)); ++ max-width: calc(100vw - var(--pf-v5-global--spacer--3xl)); + } + + // Make sure the footer is visible with more then 5 results. +-.pf-c-select__menu-list { ++.pf-v5-c-select__menu-list { + // 35% viewport height is for 1280x720; + // since it picks the min of the two, it works everywhere + max-height: min(20rem, 35vh); +@@ -16,14 +16,14 @@ + } + + // Fix the dot next to spinner: https://github.com/patternfly/patternfly-react/issues/6383 +-.pf-c-select__list-item.pf-m-loading { ++.pf-v5-c-select__list-item.pf-m-loading { + list-style-type: none; + } + + .image-search-footer { + flex-wrap: wrap; + +- .pf-c-toggle-group__text { ++ .pf-v5-c-toggle-group__text { + word-wrap: break-word; + } + } +@@ -31,17 +31,17 @@ + // PF4 does not yet support multiple form fields for the same label + .ct-input-group-spacer-sm.pf-l-flex { + // Limit width for select entries and inputs in the input groups otherwise they take up the whole space +- > .pf-c-select, .pf-c-form-control:not(.pf-c-select__toggle-typeahead) { ++ > .pf-v5-c-select, .pf-c-form-control:not(.pf-c-select__toggle-typeahead) { + max-width: 8ch; + } + } + + // HACK: A local copy of pf-m-horizontal (as ct-m-horizontal), + // but applied at the FormGroup level instead of Form +-@media (min-width: $pf-global--breakpoint--md) { +- .pf-c-form__group.ct-m-horizontal { ++@media (min-width: $pf-v5-global--breakpoint--md) { ++ .pf-v5-c-form__group.ct-m-horizontal { + display: grid; +- grid-column-gap: var(--pf-c-form--m-horizontal__group-label--md--GridColumnGap); +- grid-template-columns: var(--pf-c-form--m-horizontal__group-label--md--GridColumnWidth) var(--pf-c-form--m-horizontal__group-control--md--GridColumnWidth); ++ grid-column-gap: var(--pf-v5-c-form--m-horizontal__group-label--md--GridColumnGap); ++ grid-template-columns: var(--pf-v5-c-form--m-horizontal__group-label--md--GridColumnWidth) var(--pf-c-form--m-horizontal__group-control--md--GridColumnWidth); + } + } +Index: cockpit-podman-70/src/ImageSearchModal.css +=================================================================== +--- cockpit-podman-70.orig/src/ImageSearchModal.css ++++ cockpit-podman-70/src/ImageSearchModal.css +@@ -1,9 +1,9 @@ +-.podman-search .pf-c-modal-box__body { ++.podman-search .pf-v5-c-modal-box__body { + display: grid; + grid-auto-flow: row; + overflow: hidden; + grid-template-rows: auto auto 1fr; +- grid-gap: var(--pf-global--spacer--sm); ++ grid-gap: var(--pf-v5-global--spacer--sm); + } + + .image-list-item { +@@ -12,11 +12,11 @@ + } + + .image-list-item + .image-list-item { +- border-top: 1px solid var(--pf-global--BorderColor--200); ++ border-top: 1px solid var(--pf-v5-global--BorderColor--200); + } + + .image-list-item > .image-name { +- color: var(--pf-global--Color--100); ++ color: var(--pf-v5-global--Color--100); + } + + @media (min-width: 768px) { +@@ -44,17 +44,17 @@ + } + + .image-search-tag-form { +- margin-bottom: var(--pf-global--spacer--md); ++ margin-bottom: var(--pf-v5-global--spacer--md); + } + +-.podman-search .pf-c-modal-box__footer { ++.podman-search .pf-v5-c-modal-box__footer { + display: initial; + } + +-.podman-search .pf-c-data-list { ++.podman-search .pf-v5-c-data-list { + overflow-y: auto; + } + +-.podman-search .pf-l-flex .pf-c-form__group:nth-child(2) { +- grid-template-columns: 2rem var(--pf-c-form--m-horizontal__group-control--md--GridColumnWidth); ++.podman-search .pf-l-flex .pf-v5-c-form__group:nth-child(2) { ++ grid-template-columns: 2rem var(--pf-v5-c-form--m-horizontal__group-control--md--GridColumnWidth); + } +Index: cockpit-podman-70/src/ImageSearchModal.jsx +=================================================================== +--- cockpit-podman-70.orig/src/ImageSearchModal.jsx ++++ cockpit-podman-70/src/ImageSearchModal.jsx +@@ -170,7 +170,7 @@ export class ImageSearchModal extends Re + placeholder={_("Search by name or description")} + value={this.state.imageIdentifier} + onKeyPress={this.onKeyPress} +- onChange={value => this.onValueChanged('imageIdentifier', value)} /> ++ onChange={(_event, value) => this.onValueChanged('imageIdentifier', value)} /> + + + this.onValueChanged('imageTag', value)} /> ++ onChange={(_event, value) => this.onValueChanged('imageTag', value)} /> + + + + + }> + onChange(idx, 'IP', value)} /> ++ onChange={(_event, value) => onChange(idx, 'IP', value)} /> + + +- + +@@ -47,7 +47,7 @@ export const PublishPort = ({ id, item, + min={1} + max={65535} + value={item.hostPort || ''} +- onChange={value => onChange(idx, 'hostPort', value)} /> ++ onChange={(_event, value) => onChange(idx, 'hostPort', value)} /> + + onChange(idx, 'containerPort', value)} /> ++ onChange={(_event, value) => onChange(idx, 'containerPort', value)} /> + + +- onChange(idx, 'protocol', value)}> +Index: cockpit-podman-70/src/Volume.jsx +=================================================================== +--- cockpit-podman-70.orig/src/Volume.jsx ++++ cockpit-podman-70/src/Volume.jsx +@@ -22,7 +22,7 @@ export const Volume = ({ id, item, onCha + + onChange(idx, 'containerPath', value)} /> ++ onChange={(_event, value) => onChange(idx, 'containerPath', value)} /> + + + + { options && options.selinuxAvailable && + +- onChange(idx, 'selinux', value)}> + +Index: cockpit-podman-70/src/app.jsx +=================================================================== +--- cockpit-podman-70.orig/src/app.jsx ++++ cockpit-podman-70/src/app.jsx +@@ -139,7 +139,7 @@ class Application extends React.Componen + } + } + +- onContainerFilterChanged(_event, value) { ++ onContainerFilterChanged(value) { + this.setState({ + containersFilter: value + }); +@@ -802,7 +802,7 @@ class Application extends React.Componen + variant={PageSectionVariants.light}> + this.onOwnerChanged(value)} ++ handleOwnerChanged={this.onOwnerChanged} + ownerFilter={this.state.ownerFilter} + textFilter={this.state.textFilter} + twoOwners={this.state.systemServiceAvailable && this.state.userServiceAvailable} +Index: cockpit-podman-70/src/podman.scss +=================================================================== +--- cockpit-podman-70.orig/src/podman.scss ++++ cockpit-podman-70/src/podman.scss +@@ -1,25 +1,25 @@ + @use "ct-card.scss"; + @use "page.scss"; + @import "global-variables"; +-// For pf-line-clamp ++// For pf-v5-line-clamp + @import "@patternfly/patternfly/sass-utilities/mixins.scss"; + // For pf-u-disabled-color-100 + @import "@patternfly/patternfly/utilities/Text/text.css"; + +-#app .pf-c-card.containers-containers, #app .pf-c-card.containers-images { ++#app .pf-v5-c-card.containers-containers, #app .pf-c-card.containers-images { + @extend .ct-card; + } + + #containers-images, #containers-containers { + // Decrease padding for the image/container toggle button list +- .pf-c-table.pf-m-compact .pf-c-table__toggle { ++ .pf-v5-c-table.pf-m-compact .pf-c-table__toggle { + padding-left: 0; + } + } + + @media screen and (max-width: 768px) { + // Badges should not stretch in mobile mode +- .pf-c-table [data-label] > .pf-c-badge { ++ .pf-v5-c-table [data-label] > .pf-c-badge { + justify-self: start; + } + } +@@ -30,12 +30,12 @@ + } + + .container-block small { +- @include pf-line-clamp("1"); +- color: var(--pf-global--Color--200); ++ @include pf-v5-line-clamp("1"); ++ color: var(--pf-v5-global--Color--200); + } + + .container-name { +- font-size: var(--pf-global--FontSize--lg); ++ font-size: var(--pf-v5-global--FontSize--lg); + font-weight: 400; + } + +@@ -43,7 +43,7 @@ + max-width: 15em; + } + +-.pf-c-alert__description { ++.pf-v5-c-alert__description { + overflow-wrap: anywhere; + } + +@@ -54,26 +54,26 @@ + } + + .ct-badge-container-running, .ct-badge-pod-running { +- background-color: var(--pf-global--info-color--100); ++ background-color: var(--pf-v5-global--info-color--100); + color: white; + } + + .ct-badge-container-healthy { +- background-color: var(--pf-global--success-color--100); ++ background-color: var(--pf-v5-global--success-color--100); + color: white; + } + + .ct-badge-container-unhealthy { +- background-color: var(--pf-global--danger-color--100); ++ background-color: var(--pf-v5-global--danger-color--100); + color: white; + } + + .green { +- color: var(--pf-global--success-color--100); ++ color: var(--pf-v5-global--success-color--100); + } + + .red { +- color: var(--pf-global--danger-color--100); ++ color: var(--pf-v5-global--danger-color--100); + } + + // Hide the header nav from the expandable rows - this should be better done with JS but the current cockpit-listing-panel implementation does not support this variant +@@ -82,7 +82,7 @@ + } + + .ct-grey-text { +- color: var(--pf-global--Color--200); ++ color: var(--pf-v5-global--Color--200); + } + + .content-action { +@@ -92,19 +92,19 @@ + + // Remove doubled-up padding and borders on nested tables in mobile + .ct-listing-panel-body .ct-table tr { +- --pf-c-table-tr--responsive--PaddingTop: 0; +- --pf-c-table-tr--responsive--PaddingRight: 0; +- --pf-c-table-tr--responsive--PaddingBottom: 0; +- --pf-c-table-tr--responsive--PaddingLeft: 0; ++ --pf-v5-c-table-tr--responsive--PaddingTop: 0; ++ --pf-v5-c-table-tr--responsive--PaddingRight: 0; ++ --pf-v5-c-table-tr--responsive--PaddingBottom: 0; ++ --pf-v5-c-table-tr--responsive--PaddingLeft: 0; + } + +-@media (max-width: $pf-global--breakpoint--md - 1) { ++@media (max-width: $pf-v5-global--breakpoint--md - 1) { + .show-only-when-wide { + display: none; + } + } + +-@media (min-width: $pf-global--breakpoint--md) { ++@media (min-width: $pf-v5-global--breakpoint--md) { + .show-only-when-narrow { + display: none; + } +@@ -112,6 +112,6 @@ + // Add borders to no pod containers list and images list + .container-pod.pf-m-plain tbody, + .containers-images tbody { +- border: var(--pf-c-card--m-flat--BorderWidth) solid var(--pf-c-card--m-flat--BorderColor); ++ border: var(--pf-v5-c-card--m-flat--BorderWidth) solid var(--pf-c-card--m-flat--BorderColor); + } + } +Index: cockpit-podman-70/test/check-application +=================================================================== +--- cockpit-podman-70.orig/test/check-application ++++ cockpit-podman-70/test/check-application +@@ -1,16 +1,9 @@ +-#!/usr/bin/python3 ++#!/usr/bin/python3 -cimport os, sys; os.execv(os.path.dirname(sys.argv[1]) + "/common/pywrap", sys.argv) + # Run this with --help to see available options for tracing and debugging + # See https://github.com/cockpit-project/cockpit/blob/main/test/common/testlib.py + # "class Browser" and "class MachineCase" for the available API. + +-import os + import json +-import sys +- +-# import Cockpit's machinery for test VMs and its browser test API +-TEST_DIR = os.path.dirname(__file__) +-sys.path.append(os.path.join(TEST_DIR, "common")) +-sys.path.append(os.path.join(os.path.dirname(TEST_DIR), "bots/machine")) + + from machine_core import ssh_connection # noqa + import testlib # noqa +@@ -45,8 +38,8 @@ def podman_version(cls): + + + def showImages(browser): +- if browser.attr("#containers-images button.pf-c-expandable-section__toggle", "aria-expanded") == 'false': +- browser.click("#containers-images button.pf-c-expandable-section__toggle") ++ if browser.attr("#containers-images button.pf-v5-c-expandable-section__toggle", "aria-expanded") == 'false': ++ browser.click("#containers-images button.pf-v5-c-expandable-section__toggle") + + + def checkImage(browser, name, owner): +@@ -146,15 +139,15 @@ class TestApplication(testlib.MachineCas + + def performContainerAction(self, container, cmd): + b = self.browser +- b.click(f"#containers-containers tbody tr:contains('{container}') .pf-c-dropdown__toggle") +- b.click(f"#containers-containers tbody tr:contains('{container}') .pf-c-dropdown__menu li:contains({cmd})") ++ b.click(f"#containers-containers tbody tr:contains('{container}') .pf-v5-c-dropdown__toggle") ++ b.click(f"#containers-containers tbody tr:contains('{container}') .pf-v5-c-dropdown__menu li:contains({cmd})") + + def getContainerAction(self, container, cmd): +- return f"#containers-containers tbody tr:contains('{container}') .pf-c-dropdown__menu li:contains({cmd})" ++ return f"#containers-containers tbody tr:contains('{container}') .pf-v5-c-dropdown__menu li:contains({cmd})" + + def toggleExpandedContainer(self, container): + b = self.browser +- b.click(f"#containers-containers tbody tr:contains('{container}') .pf-c-table__toggle button") ++ b.click(f"#containers-containers tbody tr:contains('{container}') .pf-v5-c-table__toggle button") + + def getContainerAttr(self, container, key, selector=""): + b = self.browser +@@ -185,14 +178,14 @@ class TestApplication(testlib.MachineCas + try: + b.wait_visible("#containers-containers") + b.wait_not_in_text("#containers-containers", "Loading") +- b.wait_not_present("#overview div.pf-c-alert") ++ b.wait_not_present("#overview div.pf-v5-c-alert") + except testlib.Error: + if system: +- b.click("#overview div.pf-c-alert .pf-c-alert__action > button:contains(Start)") +- b.wait_not_present("#overview div.pf-c-alert") ++ b.click("#overview div.pf-v5-c-alert .pf-v5-c-alert__action > button:contains(Start)") ++ b.wait_not_present("#overview div.pf-v5-c-alert") + else: +- b.click("#app .pf-c-empty-state button.pf-m-primary") +- b.wait_not_present("#app .pf-c-empty-state button") ++ b.click("#app .pf-v5-c-empty-state button.pf-m-primary") ++ b.wait_not_present("#app .pf-v5-c-empty-state button") + + def waitPodRow(self, podName, present=False): + if present: +@@ -207,9 +200,9 @@ class TestApplication(testlib.MachineCas + cmd=container["command"], state=container["state"], pod=podName) + else: + if self.browser.val("#containers-containers-filter") == "all": +- self.browser.wait_in_text("#table-" + podName + " .pf-c-empty-state", "No containers in this pod") ++ self.browser.wait_in_text("#table-" + podName + " .pf-v5-c-empty-state", "No containers in this pod") + else: +- self.browser.wait_in_text("#table-" + podName + " .pf-c-empty-state", "No running containers in this pod") ++ self.browser.wait_in_text("#table-" + podName + " .pf-v5-c-empty-state", "No running containers in this pod") + + def waitContainerRow(self, container, present=True): + b = self.browser +@@ -295,10 +288,10 @@ class TestApplication(testlib.MachineCas + b.wait(lambda: old_pid != m.execute("podman inspect --format '{{.State.Pid}}' test-pod-1-system".strip())) + + self.performPodAction("pod-1", "system", "Delete") +- b.click(".pf-c-modal-box button:contains(Delete)") +- b.wait_in_text(".pf-c-modal-box__body", "running or paused containers cannot be removed without force") +- b.wait_in_text(".pf-c-modal-box__body .pf-c-list", "test-pod-1-system") +- b.click(".pf-c-modal-box button:contains('Force delete')") ++ b.click(".pf-v5-c-modal-box button:contains(Delete)") ++ b.wait_in_text(".pf-v5-c-modal-box__body", "running or paused containers cannot be removed without force") ++ b.wait_in_text(".pf-v5-c-modal-box__body .pf-v5-c-list", "test-pod-1-system") ++ b.click(".pf-v5-c-modal-box button:contains('Force delete')") + self.waitPodRow("pod-1", False) + + b.set_input_text('#containers-filter', '') +@@ -309,8 +302,8 @@ class TestApplication(testlib.MachineCas + self.machine.execute("podman rm --force -t0 test-pod-2-system") + self.waitPodContainer("pod-2", []) + self.performPodAction("pod-2", "system", "Delete") +- b.wait_not_in_text(".pf-c-modal-box__body", "test-pod-2-system") +- b.click(".pf-c-modal-box button:contains('Delete')") ++ b.wait_not_in_text(".pf-v5-c-modal-box__body", "test-pod-2-system") ++ b.click(".pf-v5-c-modal-box button:contains('Delete')") + self.waitPodRow("pod-2", False) + + # Volumes / mounts +@@ -321,11 +314,11 @@ class TestApplication(testlib.MachineCas + # Verify 1 port mapping + b.wait_in_text("#table-pod-3-title .pod-details-ports-btn", "1") + b.click("#table-pod-3-title .pod-details-ports-btn") +- b.wait_in_text(".pf-c-popover__content", "0.0.0.0:9999 → 9999/tcp") ++ b.wait_in_text(".pf-v5-c-popover__content", "0.0.0.0:9999 → 9999/tcp") + # Verify 1 mount + b.wait_in_text("#table-pod-3-title .pod-details-volumes-btn", "1") + b.click("#table-pod-3-title .pod-details-volumes-btn") +- b.wait_in_text(".pf-c-popover__content", "/tmp ↔ /app") ++ b.wait_in_text(".pf-v5-c-popover__content", "/tmp ↔ /app") + + def testBasicSystem(self): + self._testBasic(True) +@@ -361,19 +354,19 @@ class TestApplication(testlib.MachineCas + b.click("#image-actions-dropdown") + b.click("button:contains(Download new image)") + +- b.wait_visible('div.pf-c-modal-box header:contains("Search for an image")') +- b.wait_visible("div.pf-c-modal-box footer button:contains(Download):disabled") ++ b.wait_visible('div.pf-v5-c-modal-box header:contains("Search for an image")') ++ b.wait_visible("div.pf-v5-c-modal-box footer button:contains(Download):disabled") + b.wait_not_present("#as-user") +- b.click(".pf-c-modal-box button:contains('Cancel')") +- b.wait_not_present('div.pf-c-modal-box header:contains("Search for an image")') ++ b.click(".pf-v5-c-modal-box button:contains('Cancel')") ++ b.wait_not_present('div.pf-v5-c-modal-box header:contains("Search for an image")') + + # Gain privileges + b.become_superuser(passwordless=self.machine.image == "rhel4edge") + + # We are notified that we can also start the system one +- b.wait_in_text("#overview div.pf-c-alert .pf-c-alert__title", "System Podman service is also available") +- b.click("#overview div.pf-c-alert .pf-c-alert__action > button:contains(Start)") +- b.wait_not_present("#overview div.pf-c-alert .pf-c-alert__title") ++ b.wait_in_text("#overview div.pf-v5-c-alert .pf-v5-c-alert__title", "System Podman service is also available") ++ b.click("#overview div.pf-v5-c-alert .pf-v5-c-alert__action > button:contains(Start)") ++ b.wait_not_present("#overview div.pf-v5-c-alert .pf-v5-c-alert__title") + + checkImage(b, IMG_REGISTRY, "system") + checkImage(b, IMG_REGISTRY, "admin") +@@ -388,11 +381,11 @@ class TestApplication(testlib.MachineCas + # Also user selection in image download should be visible + b.click("#image-actions-dropdown") + b.click("button:contains(Download new image)") +- b.wait_visible('div.pf-c-modal-box header:contains("Search for an image")') +- b.wait_visible("div.pf-c-modal-box footer button:contains(Download):disabled") ++ b.wait_visible('div.pf-v5-c-modal-box header:contains("Search for an image")') ++ b.wait_visible("div.pf-v5-c-modal-box footer button:contains(Download):disabled") + b.wait_visible("#as-user") +- b.click(".pf-c-modal-box button:contains('Cancel')") +- b.wait_not_present('div.pf-c-modal-box header:contains("Search for an image")') ++ b.click(".pf-v5-c-modal-box button:contains('Cancel')") ++ b.wait_not_present('div.pf-v5-c-modal-box header:contains("Search for an image")') + + # Check that when we filter only system stuff an then drop privileges that we show user stuff + b.set_val("#containers-containers-owner", "system") +@@ -411,27 +404,27 @@ class TestApplication(testlib.MachineCas + # Check showing of entrypoint + b.click("#containers-containers-create-container-btn") + b.click("#create-image-image-select-typeahead") +- b.click(f'button.pf-c-select__menu-item:contains("{IMG_REGISTRY}")') ++ b.click(f'button.pf-v5-c-select__menu-item:contains("{IMG_REGISTRY}")') + b.wait_val("#run-image-dialog-command", '/etc/docker/registry/config.yml') + b.wait_text("#run-image-dialog-entrypoint", '/entrypoint.sh') + + # Deleting image will cleanup both command and entrypoint +- b.click("button.pf-c-select__toggle-clear") ++ b.click("button.pf-v5-c-select__toggle-clear") + b.wait_val("#run-image-dialog-command", '') + b.wait_not_present("#run-image-dialog-entrypoint") + + # Edited command will not be cleared + b.click("#create-image-image-select-typeahead") +- b.click(f'button.pf-c-select__menu-item:contains("{IMG_REGISTRY}")') ++ b.click(f'button.pf-v5-c-select__menu-item:contains("{IMG_REGISTRY}")') + b.wait_val("#run-image-dialog-command", '/etc/docker/registry/config.yml') + b.set_input_text("#run-image-dialog-command", '/etc/docker/registry/config.yaml') +- b.click("button.pf-c-select__toggle-clear") ++ b.click("button.pf-v5-c-select__toggle-clear") + b.wait_not_present("#run-image-dialog-entrypoint") + b.wait_val("#run-image-dialog-command", '/etc/docker/registry/config.yaml') + + # Setting a new image will still keep the old command and not prefill it + b.click("#create-image-image-select-typeahead") +- b.click(f'button.pf-c-select__menu-item:contains({IMG_ALPINE})') ++ b.click(f'button.pf-v5-c-select__menu-item:contains({IMG_ALPINE})') + b.wait_visible("#run-image-dialog-pull-latest-image") + b.wait_val("#run-image-dialog-command", '/etc/docker/registry/config.yaml') + +@@ -448,7 +441,7 @@ class TestApplication(testlib.MachineCas + b.wait_visible("#app") + + # `User Service is also available` banner should not be present +- b.wait_not_present("#overview div.pf-c-alert") ++ b.wait_not_present("#overview div.pf-v5-c-alert") + # There should not be any duplicate images listed + # The "busybox" and "alpine" images have been deleted by _testBasic. + showImages(b) +@@ -460,7 +453,7 @@ class TestApplication(testlib.MachineCas + # https://github.com/cockpit-project/cockpit-podman/pull/891 + b.click("#containers-containers-create-container-btn") + b.set_input_text("#create-image-image-select-typeahead", "registry") +- b.wait_visible('button.pf-c-select__menu-item:contains("registry")') ++ b.wait_visible('button.pf-v5-c-select__menu-item:contains("registry")') + + def testBasicUser(self): + self._testBasic(False) +@@ -518,23 +511,23 @@ class TestApplication(testlib.MachineCas + # show image listing toggle + hello_sel = f"#containers-images tbody tr[data-row-id={images[IMG_HELLO_LATEST]}{auth}]".lower() + b.wait_visible(hello_sel) +- b.click(hello_sel + " td.pf-c-table__toggle button") +- b.click(hello_sel + " .pf-c-dropdown__toggle") ++ b.click(hello_sel + " td.pf-v5-c-table__toggle button") ++ b.click(hello_sel + " .pf-v5-c-dropdown__toggle") + b.wait_visible(hello_sel + " button.btn-delete") + b.wait_in_text("#containers-images tbody.pf-m-expanded tr .image-details:first-child", "Command/run.sh") + # Show history +- b.click("#containers-images tbody.pf-m-expanded .pf-c-tabs__list li:nth-child(2) button") +- b.wait_in_text("#containers-images .pf-c-table__expandable-row.pf-m-expanded td[data-label=\"ID\"]:first", ++ b.click("#containers-images tbody.pf-m-expanded .pf-v5-c-tabs__list li:nth-child(2) button") ++ b.wait_in_text("#containers-images .pf-v5-c-table__expandable-row.pf-m-expanded td[data-label=\"ID\"]:first", + images[IMG_HELLO_LATEST][:12]) +- b.wait_in_text("#containers-images .pf-c-table__expandable-row.pf-m-expanded td[data-label=\"Created\"]:first", ++ b.wait_in_text("#containers-images .pf-v5-c-table__expandable-row.pf-m-expanded td[data-label=\"Created\"]:first", + "today at") + # topmost (last) layer +- b.wait_in_text("#containers-images .pf-c-table__expandable-row.pf-m-expanded td[data-label=\"Created by\"]:first", ++ b.wait_in_text("#containers-images .pf-v5-c-table__expandable-row.pf-m-expanded td[data-label=\"Created by\"]:first", + "COPY") +- b.wait_in_text("#containers-images .pf-c-table__expandable-row.pf-m-expanded td[data-label=\"Created by\"]:first", ++ b.wait_in_text("#containers-images .pf-v5-c-table__expandable-row.pf-m-expanded td[data-label=\"Created by\"]:first", + "in /test2.txt") + # initial (first) layer +- b.wait_in_text("#containers-images .pf-c-table__expandable-row.pf-m-expanded td[data-label=\"Created by\"]:last", ++ b.wait_in_text("#containers-images .pf-v5-c-table__expandable-row.pf-m-expanded td[data-label=\"Created by\"]:last", + "COPY") + + self.execute(auth, f"podman rmi {IMG_HELLO_LATEST}") +@@ -682,31 +675,31 @@ class TestApplication(testlib.MachineCas + self.execute(auth, f"podman tag {IMG_BUSYBOX} {IMG_BUSYBOX}:4") + + busybox_sel = f"#containers-images tbody tr[data-row-id={images[IMG_BUSYBOX_LATEST]}{auth}]".lower() +- b.click(busybox_sel + " td.pf-c-table__toggle button") ++ b.click(busybox_sel + " td.pf-v5-c-table__toggle button") + + b.wait_in_text(busybox_sel + " + tr", f"{IMG_BUSYBOX}:1") + b.wait_in_text(busybox_sel + " + tr", f"{IMG_BUSYBOX}:2") + b.wait_in_text(busybox_sel + " + tr", f"{IMG_BUSYBOX}:3") + b.wait_in_text(busybox_sel + " + tr", f"{IMG_BUSYBOX}:4") + +- b.click(busybox_sel + " .pf-c-dropdown__toggle") ++ b.click(busybox_sel + " .pf-v5-c-dropdown__toggle") + b.click(busybox_sel + " button.btn-delete") +- self.assertTrue(b.get_checked(f".pf-c-check__input[aria-label='{IMG_BUSYBOX_LATEST}']")) +- b.set_checked(f".pf-c-check__input[aria-label='{IMG_BUSYBOX}:1']", True) +- b.set_checked(f".pf-c-check__input[aria-label='{IMG_BUSYBOX}:3']", True) +- b.set_checked(f".pf-c-check__input[aria-label='{IMG_BUSYBOX_LATEST}']", False) ++ self.assertTrue(b.get_checked(f".pf-v5-c-check__input[aria-label='{IMG_BUSYBOX_LATEST}']")) ++ b.set_checked(f".pf-v5-c-check__input[aria-label='{IMG_BUSYBOX}:1']", True) ++ b.set_checked(f".pf-v5-c-check__input[aria-label='{IMG_BUSYBOX}:3']", True) ++ b.set_checked(f".pf-v5-c-check__input[aria-label='{IMG_BUSYBOX_LATEST}']", False) + self.confirm_modal("Delete") + b.wait_in_text(busybox_sel + " + tr", f"{IMG_BUSYBOX_LATEST}") + b.wait_in_text(busybox_sel + " + tr", f"{IMG_BUSYBOX}:2") + b.wait_not_in_text(busybox_sel + " + tr", f"{IMG_BUSYBOX}:1") + b.wait_not_in_text(busybox_sel + " + tr", f"{IMG_BUSYBOX}:3") + +- b.click(busybox_sel + " .pf-c-dropdown__toggle") ++ b.click(busybox_sel + " .pf-v5-c-dropdown__toggle") + b.click(busybox_sel + " button.btn-delete") + b.click("button:contains('select all')") +- self.assertTrue(b.get_checked(f".pf-c-check__input[aria-label='{IMG_BUSYBOX_LATEST}']")) +- self.assertTrue(b.get_checked(f".pf-c-check__input[aria-label='{IMG_BUSYBOX}:2']")) +- self.assertTrue(b.get_checked(f".pf-c-check__input[aria-label='{IMG_BUSYBOX}:4']")) ++ self.assertTrue(b.get_checked(f".pf-v5-c-check__input[aria-label='{IMG_BUSYBOX_LATEST}']")) ++ self.assertTrue(b.get_checked(f".pf-v5-c-check__input[aria-label='{IMG_BUSYBOX}:2']")) ++ self.assertTrue(b.get_checked(f".pf-v5-c-check__input[aria-label='{IMG_BUSYBOX}:4']")) + self.confirm_modal("Delete") + self.confirm_modal("Force delete") + b.wait_not_in_text("#containers-images", busybox_sel) +@@ -730,8 +723,8 @@ class TestApplication(testlib.MachineCas + b.assert_pixels('#app', "overview", ignore=[".ignore-pixels"], skip_layouts=["rtl", "mobile"]) + alpine_sel = f"#containers-images tbody tr[data-row-id={images[IMG_ALPINE_LATEST]}{auth}]".lower() + b.wait_visible(alpine_sel) +- b.click(alpine_sel + " td.pf-c-table__toggle button") +- b.click(alpine_sel + " .pf-c-dropdown__toggle") ++ b.click(alpine_sel + " td.pf-v5-c-table__toggle button") ++ b.click(alpine_sel + " .pf-v5-c-dropdown__toggle") + b.click(alpine_sel + " button.btn-delete") + self.confirm_modal("Delete") + self.confirm_modal("Force delete") +@@ -768,10 +761,10 @@ class TestApplication(testlib.MachineCas + + # Intermediate images are not shown in create container dialog + b.click("#containers-containers-create-container-btn") +- b.wait_visible('div.pf-c-modal-box header:contains("Create container")') ++ b.wait_visible('div.pf-v5-c-modal-box header:contains("Create container")') + b.click("#create-image-image-select-typeahead") +- b.wait_visible(f".pf-c-select__menu-item:contains('{IMG_REGISTRY}')") +- b.wait_not_present(".pf-c-select__menu-item:contains('none')") ++ b.wait_visible(f".pf-v5-c-select__menu-item:contains('{IMG_REGISTRY}')") ++ b.wait_not_present(".pf-v5-c-select__menu-item:contains('none')") + + def testCommitUser(self): + self._testCommit(False) +@@ -792,9 +785,9 @@ class TestApplication(testlib.MachineCas + self.toggleExpandedContainer("test-sh0") + + self.performContainerAction("test-sh0", "Commit") +- b.wait_visible(".pf-c-modal-box") ++ b.wait_visible(".pf-v5-c-modal-box") + +- b.wait_in_text(".pf-c-modal-box__description", "state of the test-sh0 container") ++ b.wait_in_text(".pf-v5-c-modal-box__description", "state of the test-sh0 container") + + # Empty name yields warning + b.click("button:contains(Commit)") +@@ -820,15 +813,15 @@ class TestApplication(testlib.MachineCas + # Check failing commit + b.set_input_text("#commit-dialog-image-name", "TEST") + b.click("button:contains(Commit)") +- b.wait_in_text(".pf-c-alert", "Failed to commit container test-sh0") +- b.wait_in_text(".pf-c-alert", "repository name must be lowercase") ++ b.wait_in_text(".pf-v5-c-alert", "Failed to commit container test-sh0") ++ b.wait_in_text(".pf-v5-c-alert", "repository name must be lowercase") + + # Test cancel + self.confirm_modal("Cancel") + + # Force commit empty container + self.performContainerAction("test-sh0", "Commit") +- b.wait_visible(".pf-c-modal-box") ++ b.wait_visible(".pf-v5-c-modal-box") + # We prefill command + b.wait_val("#commit-dialog-command", 'sh -c "ls -a"') + # Test docker format +@@ -852,14 +845,14 @@ class TestApplication(testlib.MachineCas + + # Commit with name, tag, author and edited command + self.performContainerAction("test-sh0", "Commit") +- b.wait_visible(".pf-c-modal-box") ++ b.wait_visible(".pf-v5-c-modal-box") + b.set_input_text("#commit-dialog-image-name", "newname") + b.set_input_text("#commit-dialog-image-tag", "24") + b.set_input_text("#commit-dialog-author", "MM") + b.set_input_text("#commit-dialog-command", "sh -c 'ps'") + + if auth: +- b.assert_pixels(".pf-c-modal-box", "commit", skip_layouts=["rtl"]) ++ b.assert_pixels(".pf-v5-c-modal-box", "commit", skip_layouts=["rtl"]) + + self.confirm_modal("Commit") + +@@ -871,7 +864,7 @@ class TestApplication(testlib.MachineCas + # Test commit of running container + self.execute(auth, f"podman run -d --name test-sh2 --stop-timeout 0 {IMG_BUSYBOX} sleep 1000") + self.performContainerAction("test-sh2", "Commit") +- b.wait_visible(".pf-c-modal-box") ++ b.wait_visible(".pf-v5-c-modal-box") + b.set_input_text("#commit-dialog-image-name", "newname") + self.confirm_modal("Commit") + waitImageCount(self.user_images_count + 3) +@@ -881,7 +874,7 @@ class TestApplication(testlib.MachineCas + # This only works on rootless with cgroupsv2 + if auth or self.has_cgroupsV2: + self.performContainerAction("test-sh2", "Commit") +- b.wait_visible(".pf-c-modal-box") ++ b.wait_visible(".pf-v5-c-modal-box") + b.set_input_text("#commit-dialog-image-name", "newname") + b.set_checked("#commit-dialog-pause", True) + b.click("button:contains(Commit)") +@@ -916,8 +909,8 @@ class TestApplication(testlib.MachineCas + # Open get new image modal + b.click("#image-actions-dropdown") + b.click("button:contains(Download new image)") +- b.wait_visible('div.pf-c-modal-box header:contains("Search for an image")') +- b.wait_visible("div.pf-c-modal-box footer button:contains(Download):disabled") ++ b.wait_visible('div.pf-v5-c-modal-box header:contains("Search for an image")') ++ b.wait_visible("div.pf-v5-c-modal-box footer button:contains(Download):disabled") + + return self + +@@ -934,32 +927,32 @@ class TestApplication(testlib.MachineCas + + def selectImageAndDownload(self): + # Select and download the self.imageName image +- b.wait_visible(f".pf-c-data-list .image-name:contains({self.imageName})") +- b.click(f".pf-c-data-list .image-name:contains({self.imageName})") +- b.wait_visible("div.pf-c-modal-box footer button:contains(Download):not([disabled])") +- b.click("div.pf-c-modal-box footer button:contains(Download)") ++ b.wait_visible(f".pf-v5-c-data-list .image-name:contains({self.imageName})") ++ b.click(f".pf-v5-c-data-list .image-name:contains({self.imageName})") ++ b.wait_visible("div.pf-v5-c-modal-box footer button:contains(Download):not([disabled])") ++ b.click("div.pf-v5-c-modal-box footer button:contains(Download)") + + return self + + def expectDownloadErrorForNonExistingTag(self): +- b.wait_not_present('div.pf-c-modal-box') +- b.wait_visible(f'h4.pf-c-alert__title:contains("Danger alert:Failed to download image localhost:5000/{self.imageName}:{self.imageTag}")') ++ b.wait_not_present('div.pf-v5-c-modal-box') ++ b.wait_visible(f'h4.pf-v5-c-alert__title:contains("Danger alert:Failed to download image localhost:5000/{self.imageName}:{self.imageTag}")') + + return self + + def expectSearchErrorForNotExistingImage(self): +- b.wait_visible(f".pf-c-modal-box__body:contains(No results for {self.imageName})") ++ b.wait_visible(f".pf-v5-c-modal-box__body:contains(No results for {self.imageName})") + + return self + + def expectDownloadSuccess(self): + # Confirm that the modal dialog is not open anymore +- b.wait_not_present('div.pf-c-modal-box') ++ b.wait_not_present('div.pf-v5-c-modal-box') + # Confirm that the image got downloaded + checkImage(b, f"localhost:5000/{self.imageName}:{self.imageTag or 'latest'}", "system" if self.user == "system" else "admin") + + # Confirm that no error has happened +- b.wait_not_present('h4.pf-c-alert__title:contains("Failed to download image")') ++ b.wait_not_present('h4.pf-v5-c-alert__title:contains("Failed to download image")') + + # Find out this image ID + self.imageSha = execute(self.user == "system", f"podman inspect --format '{{{{.Id}}}}' localhost:5000/{self.imageName}:{self.imageTag or 'latest'}").strip() +@@ -974,22 +967,22 @@ class TestApplication(testlib.MachineCas + # show image listing toggle + sel = f"#containers-images tbody tr[data-row-id={self.imageSha}{'true' if self.user == 'system' else 'false'}]" + b.wait_visible(sel) +- b.click(sel + " td.pf-c-table__toggle button") ++ b.click(sel + " td.pf-v5-c-table__toggle button") + + # Click the delete icon on the image row +- b.click(sel + " .pf-c-dropdown__toggle") ++ b.click(sel + " .pf-v5-c-dropdown__toggle") + b.click(sel + ' button.btn-delete') + +- b.set_checked(f".pf-c-check__input[aria-label='localhost:5000/{self.imageName}{imageTagSuffix}']", True) ++ b.set_checked(f".pf-v5-c-check__input[aria-label='localhost:5000/{self.imageName}{imageTagSuffix}']", True) + if another: +- b.set_checked(f".pf-c-check__input[aria-label='{another}']", True) ++ b.set_checked(f".pf-v5-c-check__input[aria-label='{another}']", True) + + # Confirm deletion in the delete dialog +- b.click(".pf-c-modal-box #btn-img-delete") ++ b.click(".pf-v5-c-modal-box #btn-img-delete") + + if force: + # Confirm force delete +- b.click(".pf-c-modal-box button:contains('Force delete')") ++ b.click(".pf-v5-c-modal-box button:contains('Force delete')") + + b.wait_not_present(sel) + +@@ -1002,19 +995,19 @@ class TestApplication(testlib.MachineCas + # Test registries + b.click("#image-actions-dropdown") + b.click("button:contains(Download new image)") +- b.wait_visible('div.pf-c-modal-box header:contains("Search for an image")') ++ b.wait_visible('div.pf-v5-c-modal-box header:contains("Search for an image")') + # HACK: Sometimes the value is not shown fully. FIXME + b.set_input_text("#search-image-dialog-name", "my-busybox", value_check=False) + +- b.wait_visible(".pf-c-data-list .image-name:contains('localhost:5000/my-busybox')") +- b.wait_visible(".pf-c-data-list .image-name:contains('localhost:6000/my-busybox')") ++ b.wait_visible(".pf-v5-c-data-list .image-name:contains('localhost:5000/my-busybox')") ++ b.wait_visible(".pf-v5-c-data-list .image-name:contains('localhost:6000/my-busybox')") + b.assert_pixels(".podman-search", "download", skip_layouts=["rtl"]) + + b.set_val('#registry-select', "localhost:6000") +- b.wait_not_present(".pf-c-data-list .image-name:contains('localhost:5000/my-busybox')") +- b.wait_visible(".pf-c-data-list .image-name:contains('localhost:6000/my-busybox')") +- b.click(".pf-c-modal-box button:contains('Cancel')") +- b.wait_not_present('div.pf-c-modal-box') ++ b.wait_not_present(".pf-v5-c-data-list .image-name:contains('localhost:5000/my-busybox')") ++ b.wait_visible(".pf-v5-c-data-list .image-name:contains('localhost:6000/my-busybox')") ++ b.click(".pf-v5-c-modal-box button:contains('Cancel')") ++ b.wait_not_present('div.pf-v5-c-modal-box') + + dialog0 = DownloadImageDialog('my-busybox', user="system") + dialog0.openDialog() \ +@@ -1070,7 +1063,7 @@ class TestApplication(testlib.MachineCas + + b.wait_visible("#containers-containers") + self.waitContainerRow("swamped-crate") +- b.click("#containers-containers tbody tr:contains('swamped-crate') .pf-c-dropdown__toggle") ++ b.click("#containers-containers tbody tr:contains('swamped-crate') .pf-v5-c-dropdown__toggle") + + if not auth: + # Checkpoint/restore is not supported on user containers yet - the related buttons should not be shown +@@ -1080,7 +1073,7 @@ class TestApplication(testlib.MachineCas + # Health check is not set up + b.wait_not_present(self.getContainerAction('swamped-crate', 'Run health check')) + +- b.click("#containers-containers tbody tr:contains('swamped-crate') .pf-c-dropdown__toggle") ++ b.click("#containers-containers tbody tr:contains('swamped-crate') .pf-v5-c-dropdown__toggle") + + # Start the container + self.performContainerAction(IMG_BUSYBOX, "Start") +@@ -1130,9 +1123,9 @@ class TestApplication(testlib.MachineCas + self.waitContainerRow(IMG_BUSYBOX) + if not auth: + # Check that the checkpoint option is not present for rootless +- b.click(f"#containers-containers tbody tr:contains('{IMG_BUSYBOX}') .pf-c-dropdown__toggle") ++ b.click(f"#containers-containers tbody tr:contains('{IMG_BUSYBOX}') .pf-v5-c-dropdown__toggle") + b.wait_not_present(self.getContainerAction(IMG_BUSYBOX, 'Checkpoint')) +- b.click(f"#containers-containers tbody tr:contains('{IMG_BUSYBOX}') .pf-c-dropdown__toggle") ++ b.click(f"#containers-containers tbody tr:contains('{IMG_BUSYBOX}') .pf-v5-c-dropdown__toggle") + # Stop the container + self.performContainerAction(IMG_BUSYBOX, "Force stop") + +@@ -1148,7 +1141,7 @@ class TestApplication(testlib.MachineCas + + # Check that console reconnects when container starts + b.click(".pf-m-expanded button:contains('Console')") +- b.wait_text(".pf-m-expanded .pf-c-empty-state", "Container is not running") ++ b.wait_text(".pf-m-expanded .pf-v5-c-empty-state", "Container is not running") + self.performContainerAction("swamped-crate", "Start") + b.wait_in_text(".pf-m-expanded .xterm-accessibility-tree", "/ # ") + b.focus(".pf-m-expanded .xterm-helper-textarea") +@@ -1191,12 +1184,12 @@ class TestApplication(testlib.MachineCas + + # Checkpoint the container + self.performContainerAction(IMG_BUSYBOX, "Checkpoint") +- b.set_checked('.pf-c-modal-box input#checkpoint-dialog-keep', True) +- b.set_checked('.pf-c-modal-box input#checkpoint-dialog-tcpEstablished', True) +- b.click('.pf-c-modal-box button:contains(Checkpoint)') ++ b.set_checked('.pf-v5-c-modal-box input#checkpoint-dialog-keep', True) ++ b.set_checked('.pf-v5-c-modal-box input#checkpoint-dialog-tcpEstablished', True) ++ b.click('.pf-v5-c-modal-box button:contains(Checkpoint)') + b.wait_not_present('.modal_dialog') + +- b.wait(lambda: "checkpoint/restore requires at least criu" in b.text(".pf-c-alert.pf-m-danger > .pf-c-alert__description").lower()) ++ b.wait(lambda: "checkpoint/restore requires at least criu" in b.text(".pf-v5-c-alert.pf-m-danger > .pf-v5-c-alert__description").lower()) + return + + # Run a container +@@ -1205,9 +1198,9 @@ class TestApplication(testlib.MachineCas + b.wait(lambda: self.execute(True, "podman ps --all | grep -e swamped-crate -e Exited")) + + # Check that the restore option is not present (i.e. start is a regular button) +- b.click(f"#containers-containers tbody tr:contains('{IMG_BUSYBOX}') .pf-c-dropdown__toggle") ++ b.click(f"#containers-containers tbody tr:contains('{IMG_BUSYBOX}') .pf-v5-c-dropdown__toggle") + b.wait_not_present(self.getContainerAction(IMG_BUSYBOX, 'Restore')) +- b.click(f"#containers-containers tbody tr:contains('{IMG_BUSYBOX}') .pf-c-dropdown__toggle") ++ b.click(f"#containers-containers tbody tr:contains('{IMG_BUSYBOX}') .pf-v5-c-dropdown__toggle") + + # Start the container + self.performContainerAction("swamped-crate", "Start") +@@ -1215,29 +1208,29 @@ class TestApplication(testlib.MachineCas + + # Checkpoint the container + self.performContainerAction("swamped-crate", "Checkpoint") +- b.set_checked('.pf-c-modal-box input#checkpoint-dialog-keep', True) +- b.set_checked('.pf-c-modal-box input#checkpoint-dialog-tcpEstablished', True) +- b.click('.pf-c-modal-box button:contains(Checkpoint)') ++ b.set_checked('.pf-v5-c-modal-box input#checkpoint-dialog-keep', True) ++ b.set_checked('.pf-v5-c-modal-box input#checkpoint-dialog-tcpEstablished', True) ++ b.click('.pf-v5-c-modal-box button:contains(Checkpoint)') + + with b.wait_timeout(300): +- b.wait_not_present(".pf-c-modal-box") ++ b.wait_not_present(".pf-v5-c-modal-box") + + if self.has_criu: + b.wait(lambda: self.getContainerAttr("swamped-crate", "State") in NOT_RUNNING) + else: + # expect proper error message +- b.wait_in_text(".pf-c-alert.pf-m-danger", "Failed to checkpoint container swamped-crate") +- b.wait(lambda: "checkpoint/restore requires at least criu" in b.text(".pf-c-alert.pf-m-danger > .pf-c-alert__description").lower()) ++ b.wait_in_text(".pf-v5-c-alert.pf-m-danger", "Failed to checkpoint container swamped-crate") ++ b.wait(lambda: "checkpoint/restore requires at least criu" in b.text(".pf-v5-c-alert.pf-m-danger > .pf-v5-c-alert__description").lower()) + return + + # Restore the container + self.waitContainerRow("swamped-crate") + self.performContainerAction("swamped-crate", "Restore") +- b.set_checked('.pf-c-modal-box input#restore-dialog-keep', True) +- b.set_checked('.pf-c-modal-box input#restore-dialog-tcpEstablished', True) +- b.set_checked('.pf-c-modal-box input#restore-dialog-ignoreStaticIP', True) +- b.set_checked('.pf-c-modal-box input#restore-dialog-ignoreStaticMAC', True) +- b.click('.pf-c-modal-box button:contains(Restore)') ++ b.set_checked('.pf-v5-c-modal-box input#restore-dialog-keep', True) ++ b.set_checked('.pf-v5-c-modal-box input#restore-dialog-tcpEstablished', True) ++ b.set_checked('.pf-v5-c-modal-box input#restore-dialog-ignoreStaticIP', True) ++ b.set_checked('.pf-v5-c-modal-box input#restore-dialog-ignoreStaticMAC', True) ++ b.click('.pf-v5-c-modal-box button:contains(Restore)') + b.wait(lambda: self.getContainerAttr("swamped-crate", "State") in 'Running') + + # A new MAC address should have been generated +@@ -1251,8 +1244,8 @@ class TestApplication(testlib.MachineCas + # Checkpoint the container without stopping + self.waitContainerRow("swamped-crate") + self.performContainerAction("swamped-crate", "Checkpoint") +- b.set_checked('.pf-c-modal-box input#checkpoint-dialog-leaveRunning', True) +- b.click('.pf-c-modal-box button:contains(Checkpoint)') ++ b.set_checked('.pf-v5-c-modal-box input#checkpoint-dialog-leaveRunning', True) ++ b.click('.pf-v5-c-modal-box button:contains(Checkpoint)') + b.wait_not_present('.modal_dialog') + + # Stop the container +@@ -1261,7 +1254,7 @@ class TestApplication(testlib.MachineCas + + # Restore the container + self.performContainerAction("swamped-crate", "Restore") +- b.click('.pf-c-modal-box button:contains(Restore)') ++ b.click('.pf-v5-c-modal-box button:contains(Restore)') + b.wait(lambda: self.getContainerAttr("swamped-crate", "State") in 'Running') + + def testNotRunning(self): +@@ -1297,7 +1290,7 @@ class TestApplication(testlib.MachineCas + self.login_and_go("/podman") + + # Troubleshoot action +- b.click("#app .pf-c-empty-state button.pf-m-link") ++ b.click("#app .pf-v5-c-empty-state button.pf-m-link") + b.enter_page("/system/services") + # services page is too slow + with b.wait_timeout(60): +@@ -1306,10 +1299,10 @@ class TestApplication(testlib.MachineCas + # Start action, with enabling (by default) + b.go("/podman") + b.enter_page("/podman") +- b.click("#app .pf-c-empty-state button.pf-m-primary") ++ b.click("#app .pf-v5-c-empty-state button.pf-m-primary") + + b.wait_visible("#containers-containers") +- b.wait_not_present("#overview div.pf-c-alert.pf-m-info") ++ b.wait_not_present("#overview div.pf-v5-c-alert.pf-m-info") + + is_active_system("active") + is_active_user("active") +@@ -1319,9 +1312,9 @@ class TestApplication(testlib.MachineCas + # Start action, without enabling + disable_system() + disable_user() +- b.click("#app .pf-c-empty-state input[type=checkbox]") +- b.assert_pixels("#app .pf-c-empty-state", "podman-service-disabled", skip_layouts=["medium", "mobile"]) +- b.click("#app .pf-c-empty-state button.pf-m-primary") ++ b.click("#app .pf-v5-c-empty-state input[type=checkbox]") ++ b.assert_pixels("#app .pf-v5-c-empty-state", "podman-service-disabled", skip_layouts=["medium", "mobile"]) ++ b.click("#app .pf-v5-c-empty-state button.pf-m-primary") + + b.wait_visible("#containers-containers") + is_enabled_system("disabled") +@@ -1335,9 +1328,9 @@ class TestApplication(testlib.MachineCas + disable_user() + enable_user() + self.login_and_go("/podman") +- b.wait_in_text("#overview div.pf-c-alert .pf-c-alert__title", "System Podman service is also available") +- b.click("#overview div.pf-c-alert .pf-c-alert__action > button:contains(Start)") +- b.wait_not_present("#overview div.pf-c-alert") ++ b.wait_in_text("#overview div.pf-v5-c-alert .pf-v5-c-alert__title", "System Podman service is also available") ++ b.click("#overview div.pf-v5-c-alert .pf-v5-c-alert__action > button:contains(Start)") ++ b.wait_not_present("#overview div.pf-v5-c-alert") + is_active_system("active") + is_active_user("active") + is_enabled_user("enabled") +@@ -1347,9 +1340,9 @@ class TestApplication(testlib.MachineCas + disable_user() + enable_system() + self.login_and_go("/podman") +- b.wait_in_text("#overview div.pf-c-alert .pf-c-alert__title", "User Podman service is also available") +- b.click("#overview div.pf-c-alert .pf-c-alert__action > button:contains(Start)") +- b.wait_not_present("#overview div.pf-c-alert") ++ b.wait_in_text("#overview div.pf-v5-c-alert .pf-v5-c-alert__title", "User Podman service is also available") ++ b.click("#overview div.pf-v5-c-alert .pf-v5-c-alert__action > button:contains(Start)") ++ b.wait_not_present("#overview div.pf-v5-c-alert") + is_active_system("active") + is_active_user("active") + is_enabled_user("enabled") +@@ -1359,9 +1352,9 @@ class TestApplication(testlib.MachineCas + disable_user() + disable_system() + self.login_and_go("/podman", superuser=False) +- b.click("#app .pf-c-empty-state button.pf-m-primary") ++ b.click("#app .pf-v5-c-empty-state button.pf-m-primary") + b.wait_visible("#containers-containers") +- b.wait_not_present("#overview div.pf-c-alert") ++ b.wait_not_present("#overview div.pf-v5-c-alert") + + is_active_system("inactive") + is_active_user("active") +@@ -1375,10 +1368,10 @@ class TestApplication(testlib.MachineCas + self.restore_dir("/usr/share/cockpit/systemd") + self.machine.execute("rm /usr/share/cockpit/systemd/manifest.json") + self.login_and_go("/podman") +- b.wait_visible("#app .pf-c-empty-state button.pf-m-primary") +- self.assertFalse(b.is_present("#app .pf-c-empty-state button.pf-m-link")) ++ b.wait_visible("#app .pf-v5-c-empty-state button.pf-m-primary") ++ self.assertFalse(b.is_present("#app .pf-v5-c-empty-state button.pf-m-link")) + # starting still works +- b.click("#app .pf-c-empty-state button.pf-m-primary") ++ b.click("#app .pf-v5-c-empty-state button.pf-m-primary") + b.wait_visible("#containers-containers") + + self.allow_restart_journal_messages() +@@ -1414,35 +1407,35 @@ class TestApplication(testlib.MachineCas + b = self.browser + container_name = "busybox-downloaded" + +- b.click("#containers-containers button.pf-c-button.pf-m-primary") ++ b.click("#containers-containers button.pf-v5-c-button.pf-m-primary") + b.set_input_text("#run-image-dialog-name", container_name) + + # No local results found + b.set_input_text("#create-image-image-select-typeahead", "notfound") + +- b.click('button.pf-c-toggle-group__button:contains("Local")') +- b.wait_text("button.pf-c-select__menu-item.pf-m-disabled", "No images found") ++ b.click('button.pf-v5-c-toggle-group__button:contains("Local")') ++ b.wait_text("button.pf-v5-c-select__menu-item.pf-m-disabled", "No images found") + + # Local results found + b.set_input_text("#create-image-image-select-typeahead", "registry") + if auth: +- b.assert_pixels(".pf-c-modal-box", "image-select", skip_layouts=["rtl"]) +- b.click('button.pf-c-toggle-group__button:contains("Local")') +- b.wait_text("button.pf-c-select__menu-item", IMG_REGISTRY_LATEST) ++ b.assert_pixels(".pf-v5-c-modal-box", "image-select", skip_layouts=["rtl"]) ++ b.click('button.pf-v5-c-toggle-group__button:contains("Local")') ++ b.wait_text("button.pf-v5-c-select__menu-item", IMG_REGISTRY_LATEST) + + # Local registry + b.set_input_text("#create-image-image-select-typeahead", "my-busybox") +- b.click('button.pf-c-toggle-group__button:contains("localhost:5000")') +- b.wait_text("button.pf-c-select__menu-item:not(.pf-m-disabled)", "localhost:5000/my-busybox") ++ b.click('button.pf-v5-c-toggle-group__button:contains("localhost:5000")') ++ b.wait_text("button.pf-v5-c-select__menu-item:not(.pf-m-disabled)", "localhost:5000/my-busybox") + + # Select image +- b.click('button.pf-c-select__menu-item:contains("localhost:5000/my-busybox")') ++ b.click('button.pf-v5-c-select__menu-item:contains("localhost:5000/my-busybox")') + + # Remote image, no pull latest image option + b.wait_not_present("#run-image-dialog-pull-latest-image") + + # Create Container, image is pulled and should end up being "running" +- b.click('.pf-c-modal-box__footer #create-image-create-run-btn') ++ b.click('.pf-v5-c-modal-box__footer #create-image-create-run-btn') + sel = " span:not(.downloading)" + b.wait(lambda: self.getContainerAttr(container_name, "State", sel) in 'Running') + output = self.execute(auth, f"podman exec {container_name} ls -lh /latest || true").strip() +@@ -1457,21 +1450,21 @@ class TestApplication(testlib.MachineCas + + container_name = "busybox-latest" + +- b.click("#containers-containers button.pf-c-button.pf-m-primary") ++ b.click("#containers-containers button.pf-v5-c-button.pf-m-primary") + b.set_input_text("#run-image-dialog-name", container_name) + + # Local registry + b.set_input_text("#create-image-image-select-typeahead", "my-busybox") +- b.click('button.pf-c-toggle-group__button:contains("Local")') ++ b.click('button.pf-v5-c-toggle-group__button:contains("Local")') + + # Select image +- b.click('button.pf-c-select__menu-item:contains("localhost:5000/my-busybox")') ++ b.click('button.pf-v5-c-select__menu-item:contains("localhost:5000/my-busybox")') + + # Pull the latest image + b.set_checked("#run-image-dialog-pull-latest-image", True) + + # Create Container, image is pulled and should end up being "running" +- b.click('.pf-c-modal-box__footer #create-image-create-run-btn') ++ b.click('.pf-v5-c-modal-box__footer #create-image-create-run-btn') + sel = " span:not(.downloading)" + b.wait(lambda: self.getContainerAttr(container_name, "State", sel) in 'Running') + # Verify that the latest file exists +@@ -1481,7 +1474,7 @@ class TestApplication(testlib.MachineCas + # Test creating a container with + if auth: + container_name = "busybox-download-admin" +- b.click("#containers-containers button.pf-c-button.pf-m-primary") ++ b.click("#containers-containers button.pf-v5-c-button.pf-m-primary") + + # Start container as admin + b.click('#run-image-dialog-owner-user') +@@ -1490,10 +1483,10 @@ class TestApplication(testlib.MachineCas + b.set_input_text("#run-image-dialog-name", container_name) + + b.set_input_text("#create-image-image-select-typeahead", IMG_BUSYBOX) +- b.click('button.pf-c-toggle-group__button:contains("Local")') +- b.click(f'button.pf-c-select__menu-item:contains("{IMG_BUSYBOX}")') ++ b.click('button.pf-v5-c-toggle-group__button:contains("Local")') ++ b.click(f'button.pf-v5-c-select__menu-item:contains("{IMG_BUSYBOX}")') + +- b.click('.pf-c-modal-box__footer #create-image-create-run-btn') ++ b.click('.pf-v5-c-modal-box__footer #create-image-create-run-btn') + b.wait(lambda: self.getContainerAttr(container_name, "State", sel) in 'Running') + + def testRunImageSystem(self): +@@ -1512,7 +1505,7 @@ class TestApplication(testlib.MachineCas + + self.login(auth) + +- b.click("#containers-images button.pf-c-expandable-section__toggle") ++ b.click("#containers-images button.pf-v5-c-expandable-section__toggle") + + b.wait_in_text("#containers-images", IMG_BUSYBOX) + b.wait_in_text("#containers-images", IMG_ALPINE) +@@ -1522,7 +1515,7 @@ class TestApplication(testlib.MachineCas + # Check command in alpine + b.wait_visible(f'#containers-images td[data-label="Image"]:contains("{IMG_ALPINE}")') + b.click(f'#containers-images tbody tr:contains("{IMG_ALPINE}") .ct-container-create') +- b.wait_visible('div.pf-c-modal-box header:contains("Create container")') ++ b.wait_visible('div.pf-v5-c-modal-box header:contains("Create container")') + # depending on the precise container, this can be /bin/sh or /bin/ash + cmd = self.execute(auth, 'podman image inspect --format "{{.Config.Cmd}}" ' + IMG_ALPINE) + cmd = cmd.strip().replace('[', '').replace(']', '') +@@ -1532,7 +1525,7 @@ class TestApplication(testlib.MachineCas + # Open run image dialog + b.wait_visible(f'#containers-images td[data-label="Image"]:contains("{IMG_BUSYBOX}")') + b.click(f'#containers-images tbody tr:contains("{IMG_BUSYBOX}") .ct-container-create') +- b.wait_visible('div.pf-c-modal-box header:contains("Create container")') ++ b.wait_visible('div.pf-v5-c-modal-box header:contains("Create container")') + + # Inspect and fill modal dialog + b.wait_val("#create-image-image-select-typeahead", IMG_BUSYBOX_LATEST) +@@ -1640,7 +1633,7 @@ class TestApplication(testlib.MachineCas + else: + b.wait_not_present('#run-image-dialog-volume-0-selinux') + +- b.set_file_autocomplete_val("#run-image-dialog-volume-0 .pf-c-select", rodir) ++ b.set_file_autocomplete_val("#run-image-dialog-volume-0 .pf-v5-c-select", rodir) + b.key_press(["\r"]) + b.set_input_text('#run-image-dialog-volume-0-container-path', '/tmp/ro') + ro_label = m.execute(f"ls -dZ {rodir}").split(" ")[0] +@@ -1652,8 +1645,8 @@ class TestApplication(testlib.MachineCas + b.click('.volume-form .btn-add') + + if auth: +- b.assert_pixels(".pf-c-modal-box", "integration", +- ignore=["#run-image-dialog-volume-0 input.pf-c-select__toggle-typeahead"], ++ b.assert_pixels(".pf-v5-c-modal-box", "integration", ++ ignore=["#run-image-dialog-volume-0 input.pf-v5-c-select__toggle-typeahead"], + skip_layouts=["rtl"]) + + if self.has_selinux: +@@ -1661,13 +1654,13 @@ class TestApplication(testlib.MachineCas + else: + b.wait_not_present('#run-image-dialog-volume-1-selinux') + +- b.set_file_autocomplete_val("#run-image-dialog-volume-1 .pf-c-select", rwdir) ++ b.set_file_autocomplete_val("#run-image-dialog-volume-1 .pf-v5-c-select", rwdir) + b.key_press(["\r"]) + b.set_input_text('#run-image-dialog-volume-1-container-path', '/tmp/rw') + rw_label = m.execute(f"ls -dZ {rwdir}").split(" ")[0] + +- b.click('.pf-c-modal-box__footer #create-image-create-run-btn') +- b.wait_not_present("div.pf-c-modal-box") ++ b.click('.pf-v5-c-modal-box__footer #create-image-create-run-btn') ++ b.wait_not_present("div.pf-v5-c-modal-box") + self.waitContainerRow(IMG_BUSYBOX) + sha = self.execute(auth, "podman inspect --format '{{.Id}}' busybox-with-tty").strip() + self.waitContainer(sha, auth, name='busybox-with-tty', image=IMG_BUSYBOX, +@@ -1787,7 +1780,7 @@ class TestApplication(testlib.MachineCas + b.wait_visible(f'#containers-images td[data-label="Image"]:contains("{IMG_BUSYBOX}")') + self.toggleExpandedContainer(IMG_BUSYBOX) + b.click(f'#containers-images tbody tr:contains("{IMG_BUSYBOX}") .ct-container-create') +- b.wait_visible('div.pf-c-modal-box header:contains("Create container")') ++ b.wait_visible('div.pf-v5-c-modal-box header:contains("Create container")') + + b.wait_val("#create-image-image-select-typeahead", IMG_BUSYBOX_LATEST) + b.set_input_text("#run-image-dialog-name", "busybox-without-publish") +@@ -1798,8 +1791,8 @@ class TestApplication(testlib.MachineCas + # Run without tty, console should be able to `exec` + b.set_checked("#run-image-dialog-tty", False) + +- b.click('.pf-c-modal-box__footer #create-image-create-run-btn') +- b.wait_not_present("div.pf-c-modal-box") ++ b.click('.pf-v5-c-modal-box__footer #create-image-create-run-btn') ++ b.wait_not_present("div.pf-v5-c-modal-box") + + self.waitContainerRow("busybox-without-publish") + self.toggleExpandedContainer("busybox-without-publish") +@@ -1848,7 +1841,7 @@ class TestApplication(testlib.MachineCas + self.filter_containers("running") + id_with_tty = self.execute(auth, "podman inspect --format '{{.Id}}' busybox-with-tty").strip() + +- b.click(f'#containers-images tbody tr:contains("{IMG_BUSYBOX}") td.pf-c-table__toggle button') ++ b.click(f'#containers-images tbody tr:contains("{IMG_BUSYBOX}") td.pf-v5-c-table__toggle button') + # running container, just selects it, but leaves "Only running" alone + b.click(f"#containers-images tbody tr:contains('{IMG_BUSYBOX}') + tr div.ct-listing-panel-body dt:contains('Used by') + dd button:contains('busybox-with-tty')") + b.wait_js_cond('window.location.hash === "#' + id_with_tty + '"') +@@ -1862,14 +1855,14 @@ class TestApplication(testlib.MachineCas + container_name = "busybox-not-started" + b.wait_visible(f'#containers-images td[data-label="Image"]:contains("{IMG_BUSYBOX}")') + b.click(f'#containers-images tbody tr:contains("{IMG_BUSYBOX}") .ct-container-create') +- b.wait_visible('div.pf-c-modal-box header:contains("Create container")') ++ b.wait_visible('div.pf-v5-c-modal-box header:contains("Create container")') + + b.wait_val("#create-image-image-select-typeahead", IMG_BUSYBOX_LATEST) + b.set_input_text("#run-image-dialog-name", container_name) + b.set_input_text("#run-image-dialog-command", "sh -c sleep infinity") + +- b.click('.pf-c-modal-box__footer #create-image-create-btn') +- b.wait_not_present("div.pf-c-modal-box") ++ b.click('.pf-v5-c-modal-box__footer #create-image-create-btn') ++ b.wait_not_present("div.pf-v5-c-modal-box") + + sha = self.execute(auth, "podman inspect --format '{{.Id}}' " + container_name).strip() + self.waitContainer(sha, auth, name=container_name, image=IMG_BUSYBOX, state=['Configured', 'Created']) +@@ -1883,12 +1876,12 @@ class TestApplication(testlib.MachineCas + # auto-expands container details + b.wait_in_text("#containers-containers tbody tr:contains('busybox-not-started') + tr", "sleep infinity") + +- b.click(f'#containers-images tbody tr:contains("{IMG_ALPINE}") td.pf-c-table__toggle button') ++ b.click(f'#containers-images tbody tr:contains("{IMG_ALPINE}") td.pf-v5-c-table__toggle button') + b.wait_in_text(f"#containers-images tbody tr:contains('{IMG_ALPINE}') td[data-label='Used by']", 'unused') + + b.set_input_text('#containers-filter', 'foobar') +- b.wait_in_text('#containers-containers .pf-c-empty-state', 'No containers that match the current filter') +- b.wait_in_text('#containers-images .pf-c-empty-state', 'No images that match the current filter') ++ b.wait_in_text('#containers-containers .pf-v5-c-empty-state', 'No containers that match the current filter') ++ b.wait_in_text('#containers-images .pf-v5-c-empty-state', 'No images that match the current filter') + b.set_input_text('#containers-filter', '') + + if not auth or not self.machine.ostree_image: # don't kill ws container +@@ -1897,10 +1890,10 @@ class TestApplication(testlib.MachineCas + # Remove all containers first as it is not possible to set --time 0 to rmi command + self.execute(auth, "podman rm --all --force --time 0") + self.execute(auth, "podman rmi -af") +- b.wait_in_text('#containers-containers .pf-c-empty-state', 'No containers') ++ b.wait_in_text('#containers-containers .pf-v5-c-empty-state', 'No containers') + b.set_val("#containers-containers-filter", "running") +- b.wait_in_text('#containers-containers .pf-c-empty-state', 'No running containers') +- b.wait_in_text('#containers-images .pf-c-empty-state', 'No images') ++ b.wait_in_text('#containers-containers .pf-v5-c-empty-state', 'No running containers') ++ b.wait_in_text('#containers-images .pf-v5-c-empty-state', 'No images') + + def check_content(self, type, present, not_present): + b = self.browser +@@ -1946,8 +1939,8 @@ class TestApplication(testlib.MachineCas + def confirm_modal(self, text): + """Wait for the pop up window and click the button with text""" + b = self.browser +- b.click(f".pf-c-modal-box footer button:contains({text})") +- b.wait_not_present(f".pf-c-modal-box footer button:contains({text})") ++ b.click(f".pf-v5-c-modal-box footer button:contains({text})") ++ b.wait_not_present(f".pf-v5-c-modal-box footer button:contains({text})") + + def testPruneUnusedImagesSystem(self): + self._testPruneUnusedImagesSystem(True) +@@ -1978,12 +1971,12 @@ class TestApplication(testlib.MachineCas + b.click("button:contains(Prune unused images)") + + if auth: +- b.wait_js_func("ph_count_check", ".pf-c-modal-box__body .pf-c-list li", (self.user_images_count + self.system_images_count) - leftover_images) ++ b.wait_js_func("ph_count_check", ".pf-v5-c-modal-box__body .pf-v5-c-list li", (self.user_images_count + self.system_images_count) - leftover_images) + elif root: +- b.wait_js_func("ph_count_check", ".pf-c-modal-box__body .pf-c-list li", self.system_images_count - leftover_images) ++ b.wait_js_func("ph_count_check", ".pf-v5-c-modal-box__body .pf-v5-c-list li", self.system_images_count - leftover_images) + else: +- b.wait_js_func("ph_count_check", ".pf-c-modal-box__body .pf-c-list li", self.user_images_count - leftover_images) +- b.click(".pf-c-modal-box button:contains(Prune)") ++ b.wait_js_func("ph_count_check", ".pf-v5-c-modal-box__body .pf-v5-c-list li", self.user_images_count - leftover_images) ++ b.click(".pf-v5-c-modal-box button:contains(Prune)") + + # When being superuser, admin images are also removed + if auth: +@@ -2011,16 +2004,16 @@ class TestApplication(testlib.MachineCas + # Deselect both + b.click("#deleteSystemImages") + b.click("#deleteUserImages") +- b.wait_visible(".pf-c-modal-box button:contains(Prune):disabled") ++ b.wait_visible(".pf-v5-c-modal-box button:contains(Prune):disabled") + + # Admin / user images are selected + expected_images = self.user_images_count + self.system_images_count + if self.machine.ostree_image: + expected_images -= 1 +- b.wait_js_func("ph_count_check", ".pf-c-modal-box__body .pf-c-list li", expected_images) ++ b.wait_js_func("ph_count_check", ".pf-v5-c-modal-box__body .pf-v5-c-list li", expected_images) + # Select user images + b.click("#deleteUserImages") +- b.click(".pf-c-modal-box button:contains(Prune)") ++ b.click(".pf-v5-c-modal-box button:contains(Prune)") + + # System images are left over + self.waitNumImages(self.system_images_count) +@@ -2031,8 +2024,8 @@ class TestApplication(testlib.MachineCas + # Pruning again, should delete all system images + b.click("#image-actions-dropdown") + b.click("button:contains(Prune unused images)") +- b.wait_js_func("ph_count_check", ".pf-c-modal-box__body .pf-c-list li", self.system_images_count - 1 if self.machine.ostree_image else self.system_images_count) +- b.click(".pf-c-modal-box button:contains(Prune)") ++ b.wait_js_func("ph_count_check", ".pf-v5-c-modal-box__body .pf-v5-c-list li", self.system_images_count - 1 if self.machine.ostree_image else self.system_images_count) ++ b.click(".pf-v5-c-modal-box button:contains(Prune)") + self.waitNumImages(1 if self.machine.ostree_image else 0) + + # Prune button should now be disabled +@@ -2070,13 +2063,13 @@ class TestApplication(testlib.MachineCas + b.click("button:contains(Prune unused containers)") + + if auth: +- b.wait_in_text(".pf-c-modal-box__body tbody tr:nth-child(1) td[data-label=Name]", "adminnotrunning") +- b.wait_in_text(".pf-c-modal-box__body tbody tr:nth-child(2) td[data-label=Name]", "notrunning") ++ b.wait_in_text(".pf-v5-c-modal-box__body tbody tr:nth-child(1) td[data-label=Name]", "adminnotrunning") ++ b.wait_in_text(".pf-v5-c-modal-box__body tbody tr:nth-child(2) td[data-label=Name]", "notrunning") + else: +- b.wait_in_text(".pf-c-modal-box__body tbody td[data-label=Name]", "notrunning") ++ b.wait_in_text(".pf-v5-c-modal-box__body tbody td[data-label=Name]", "notrunning") + +- b.click(".pf-c-modal-box button:contains(Prune)") +- b.wait_not_present(".pf-c-modal-box__body") ++ b.click(".pf-v5-c-modal-box button:contains(Prune)") ++ b.wait_not_present(".pf-v5-c-modal-box__body") + + if auth: + self.waitContainerRow("notrunning", False) +@@ -2097,11 +2090,11 @@ class TestApplication(testlib.MachineCas + + # Start a podman container which uses a port + self.execute(False, f"podman run -d -p 5000:5000 --name registry --stop-timeout 0 {IMG_REGISTRY}") +- b.click("#containers-images button.pf-c-expandable-section__toggle") ++ b.click("#containers-images button.pf-v5-c-expandable-section__toggle") + + b.wait_visible(f'#containers-images td[data-label="Image"]:contains("{IMG_BUSYBOX}")') + b.click(f'#containers-images tbody tr:contains("{IMG_BUSYBOX}") .ct-container-create') +- b.wait_visible('div.pf-c-modal-box header:contains("Create container")') ++ b.wait_visible('div.pf-v5-c-modal-box header:contains("Create container")') + + b.set_input_text("#run-image-dialog-name", container_name) + +@@ -2110,12 +2103,12 @@ class TestApplication(testlib.MachineCas + b.click('.publish-port-form .btn-add') + b.set_input_text('#run-image-dialog-publish-0-host-port', '5000') + b.set_input_text('#run-image-dialog-publish-0-container-port', '5000') +- b.click('.pf-c-modal-box__footer #create-image-create-run-btn') +- b.wait_in_text(".pf-c-alert", "address already in use") ++ b.click('.pf-v5-c-modal-box__footer #create-image-create-run-btn') ++ b.wait_in_text(".pf-v5-c-alert", "address already in use") + + # Changing the port should allow creation of container + b.set_input_text('#run-image-dialog-publish-0-host-port', '5001') +- b.click('.pf-c-modal-box__footer #create-image-create-run-btn') ++ b.click('.pf-v5-c-modal-box__footer #create-image-create-run-btn') + self.waitContainerRow(container_name) + + def _testHealthcheck(self, auth): +@@ -2127,11 +2120,11 @@ class TestApplication(testlib.MachineCas + + self.login(auth) + +- b.click("#containers-images button.pf-c-expandable-section__toggle") ++ b.click("#containers-images button.pf-v5-c-expandable-section__toggle") + + b.wait_visible(f'#containers-images td[data-label="Image"]:contains("{IMG_BUSYBOX}")') + b.click(f'#containers-images tbody tr:contains("{IMG_BUSYBOX}") .ct-container-create') +- b.wait_visible('div.pf-c-modal-box header:contains("Create container")') ++ b.wait_visible('div.pf-v5-c-modal-box header:contains("Create container")') + + b.set_input_text("#run-image-dialog-name", "healthy") + +@@ -2143,14 +2136,14 @@ class TestApplication(testlib.MachineCas + b.click('#run-image-healthcheck-retries button:nth-child(1)') + b.wait_val("#run-image-healthcheck-retries input", 2) + if auth: +- b.assert_pixels('.pf-c-modal-box', "healthcheck-modal", skip_layouts=["rtl"]) ++ b.assert_pixels('.pf-v5-c-modal-box', "healthcheck-modal", skip_layouts=["rtl"]) + # Test that the healthcheck option is not available before podman 4.3 + if podman_version(self) < (4, 3, 0): + b.wait_not_present("#run-image-healthcheck-action") +- b.click('.pf-c-modal-box__footer #create-image-create-run-btn') ++ b.click('.pf-v5-c-modal-box__footer #create-image-create-run-btn') + + self.waitContainerRow("healthy") +- b.click("#containers-images button.pf-c-expandable-section__toggle") ++ b.click("#containers-images button.pf-v5-c-expandable-section__toggle") + + healthy_sha = self.execute(auth, "podman inspect --format '{{.Id}}' healthy").strip() + self.waitContainer(healthy_sha, auth, state='RunningHealthy') +@@ -2198,18 +2191,18 @@ class TestApplication(testlib.MachineCas + self.assertGreater(int(b.text('.pf-m-expanded #container-details-healthcheck dt:contains("Failing streak") + dd')), 3) + if auth: + b.wait_js_func("ph_count_check", ".pf-m-expanded table[aria-label=Logs] tbody tr", 5) +- b.assert_pixels(".pf-m-expanded .pf-c-table__expandable-row-content", ++ b.assert_pixels(".pf-m-expanded .pf-v5-c-table__expandable-row-content", + "healthcheck-details", + ignore=["thead", "#container-details-healthcheck dt:contains('Failing streak') + dd", + "td[data-label='Started at']"], + skip_layouts=["rtl"]) + + self.toggleExpandedContainer("sick") +- b.click("#containers-images button.pf-c-expandable-section__toggle") ++ b.click("#containers-images button.pf-v5-c-expandable-section__toggle") + + b.wait_visible('#containers-images td[data-label="Image"]:contains("busybox:latest")') + b.click('#containers-images tbody tr:contains("busybox:latest") .ct-container-create') +- b.wait_visible('div.pf-c-modal-box header:contains("Create container")') ++ b.wait_visible('div.pf-v5-c-modal-box header:contains("Create container")') + + # Test the health check action, only supported in podman 4.3 and later. + # To test this we make a healthcheck which depends on a file, so when starting the +@@ -2227,7 +2220,7 @@ class TestApplication(testlib.MachineCas + b.set_input_text('#run-image-healthcheck-interval input', '1') + b.set_input_text('#run-image-healthcheck-timeout input', '1') + b.click('#run-image-healthcheck-action-2') +- b.click('.pf-c-modal-box__footer #create-image-create-run-btn') ++ b.click('.pf-v5-c-modal-box__footer #create-image-create-run-btn') + + self.waitContainerRow(containername) + self.toggleExpandedContainer(containername) +@@ -2270,17 +2263,17 @@ class TestApplication(testlib.MachineCas + self.execute(False, f"podman rmi {IMG_BUSYBOX}") + + self.login(auth) +- b.click("#containers-images button.pf-c-expandable-section__toggle") ++ b.click("#containers-images button.pf-v5-c-expandable-section__toggle") + + def create_container(name, policy=None): + b.wait_visible(f'#containers-images td[data-label="Image"]:contains("{IMG_BUSYBOX}")') + b.click(f'#containers-images tbody tr:contains("{IMG_BUSYBOX}") .ct-container-create') +- b.wait_visible('div.pf-c-modal-box header:contains("Create container")') ++ b.wait_visible('div.pf-v5-c-modal-box header:contains("Create container")') + + b.set_input_text("#run-image-dialog-name", name) + if policy: + b.set_val("#run-image-dialog-restart-policy", "always") +- b.click('.pf-c-modal-box__footer #create-image-create-run-btn') ++ b.click('.pf-v5-c-modal-box__footer #create-image-create-run-btn') + self.waitContainerRow(name) + + container_name = 'none' +@@ -2315,9 +2308,9 @@ class TestApplication(testlib.MachineCas + + b.set_input_text("#run-image-dialog-name", container_name) + b.set_input_text("#create-image-image-select-typeahead", IMG_BUSYBOX_LATEST) +- b.click('button.pf-c-toggle-group__button:contains("Local")') +- b.click(f'button.pf-c-select__menu-item:contains("{IMG_BUSYBOX_LATEST}")') +- b.click('.pf-c-modal-box__footer #create-image-create-run-btn') ++ b.click('button.pf-v5-c-toggle-group__button:contains("Local")') ++ b.click(f'button.pf-v5-c-select__menu-item:contains("{IMG_BUSYBOX_LATEST}")') ++ b.click('.pf-v5-c-modal-box__footer #create-image-create-run-btn') + b.wait_not_present("#run-image-dialog-name") + + container_sha = self.execute(auth, f"podman inspect --format '{{{{.Id}}}}' {container_name}").strip() +@@ -2460,11 +2453,11 @@ class TestApplication(testlib.MachineCas + else: + b.wait_not_present('#create-pod-dialog-volume-0-selinux') + +- b.set_file_autocomplete_val("#create-pod-dialog-volume-0 .pf-c-select", rodir) ++ b.set_file_autocomplete_val("#create-pod-dialog-volume-0 .pf-v5-c-select", rodir) + b.set_input_text('#create-pod-dialog-volume-0-container-path', '/tmp/ro') + b.click('.volume-form .btn-add') + +- b.set_file_autocomplete_val("#create-pod-dialog-volume-1 .pf-c-select", rwdir) ++ b.set_file_autocomplete_val("#create-pod-dialog-volume-1 .pf-v5-c-select", rwdir) + b.set_input_text('#create-pod-dialog-volume-1-container-path', '/tmp/rw') + + b.click("#create-pod-create-btn") +@@ -2514,7 +2507,7 @@ class TestApplication(testlib.MachineCas + self.waitContainerRow(container_name) + self.toggleExpandedContainer(container_name) + b.click(".pf-m-expanded button:contains('Logs')") +- b.wait_in_text(".pf-m-expanded .pf-c-empty-state__content", "failed to obtain logs for Container") ++ b.wait_in_text(".pf-m-expanded .pf-v5-c-empty-state__content", "failed to obtain logs for Container") + + + if __name__ == '__main__': diff --git a/cockpit-podman.changes b/cockpit-podman.changes index 55d065a..e392181 100644 --- a/cockpit-podman.changes +++ b/cockpit-podman.changes @@ -11,7 +11,9 @@ Fri Jun 16 10:18:09 UTC 2023 - Adam Majer * Create new pod group functionality * Show all containers by default * Stability and performance improvements + - load-css-overrides.patch: refreshed +- 1299.patch: fixes build with new PF5 ------------------------------------------------------------------- Tue Sep 20 10:11:52 UTC 2022 - Adam Majer diff --git a/cockpit-podman.spec b/cockpit-podman.spec index d846328..e179425 100644 --- a/cockpit-podman.spec +++ b/cockpit-podman.spec @@ -26,7 +26,8 @@ Source: https://github.com/cockpit-project/cockpit-podman/archive/%{vers Source10: package-lock.json Source11: node_modules.spec.inc %include %_sourcedir/node_modules.spec.inc -Patch1: load-css-overrides.patch +Patch1: 1299.patch +Patch10: load-css-overrides.patch BuildArch: noarch BuildRequires: appstream-glib Requires: cockpit-bridge >= 138 @@ -46,12 +47,14 @@ rm -r node_modules local-npm-registry %{_sourcedir} install --with=dev %build +export PREFIX=%{_prefix} mkdir -p pkg/lib cp -r %{_datadir}/cockpit/devel/lib/* pkg/lib npm run build %install +export PREFIX=%{_prefix} %make_install appstream-util validate-relax --nonet %{buildroot}/%{_datadir}/metainfo/* diff --git a/node_modules.obscpio b/node_modules.obscpio index 9e897b6..55cf043 100644 --- a/node_modules.obscpio +++ b/node_modules.obscpio @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:e11f4a259270472ef4d7b3b3c7fb30774de2920f23f8ac33cf447c47c4509a31 -size 113179660 +oid sha256:ebb74011716b57feec59196258076051559f41c073eb567a50fe00e2d2fd109e +size 113278592 diff --git a/node_modules.spec.inc b/node_modules.spec.inc index db33b34..e3beff1 100644 --- a/node_modules.spec.inc +++ b/node_modules.spec.inc @@ -67,12 +67,12 @@ Source10065: https://registry.npmjs.org/@jridgewell/trace-mapping/-/trac Source10066: https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz#/@nodelib-fs.scandir-2.1.5.tgz Source10067: https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz#/@nodelib-fs.stat-2.0.5.tgz Source10068: https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz#/@nodelib-fs.walk-1.2.8.tgz -Source10069: https://registry.npmjs.org/@patternfly/patternfly/-/patternfly-5.0.0-alpha.43.tgz#/@patternfly-patternfly-5.0.0-alpha.43.tgz -Source10070: https://registry.npmjs.org/@patternfly/react-core/-/react-core-5.0.0-alpha.83.tgz#/@patternfly-react-core-5.0.0-alpha.83.tgz -Source10071: https://registry.npmjs.org/@patternfly/react-icons/-/react-icons-5.0.0-alpha.12.tgz#/@patternfly-react-icons-5.0.0-alpha.12.tgz -Source10072: https://registry.npmjs.org/@patternfly/react-styles/-/react-styles-5.0.0-alpha.8.tgz#/@patternfly-react-styles-5.0.0-alpha.8.tgz -Source10073: https://registry.npmjs.org/@patternfly/react-table/-/react-table-5.0.0-alpha.85.tgz#/@patternfly-react-table-5.0.0-alpha.85.tgz -Source10074: https://registry.npmjs.org/@patternfly/react-tokens/-/react-tokens-5.0.0-prerelease.4.tgz#/@patternfly-react-tokens-5.0.0-prerelease.4.tgz +Source10069: https://registry.npmjs.org/@patternfly/patternfly/-/patternfly-5.0.0-alpha.53.tgz#/@patternfly-patternfly-5.0.0-alpha.53.tgz +Source10070: https://registry.npmjs.org/@patternfly/react-core/-/react-core-5.0.0-alpha.98.tgz#/@patternfly-react-core-5.0.0-alpha.98.tgz +Source10071: https://registry.npmjs.org/@patternfly/react-icons/-/react-icons-5.0.0-alpha.14.tgz#/@patternfly-react-icons-5.0.0-alpha.14.tgz +Source10072: https://registry.npmjs.org/@patternfly/react-styles/-/react-styles-5.0.0-alpha.10.tgz#/@patternfly-react-styles-5.0.0-alpha.10.tgz +Source10073: https://registry.npmjs.org/@patternfly/react-table/-/react-table-5.0.0-alpha.100.tgz#/@patternfly-react-table-5.0.0-alpha.100.tgz +Source10074: https://registry.npmjs.org/@patternfly/react-tokens/-/react-tokens-5.0.0-alpha.9.tgz#/@patternfly-react-tokens-5.0.0-alpha.9.tgz Source10075: https://registry.npmjs.org/@types/json5/-/json5-0.0.29.tgz#/@types-json5-0.0.29.tgz Source10076: https://registry.npmjs.org/@types/minimist/-/minimist-1.2.2.tgz#/@types-minimist-1.2.2.tgz Source10077: https://registry.npmjs.org/@types/normalize-package-data/-/normalize-package-data-2.4.1.tgz#/@types-normalize-package-data-2.4.1.tgz @@ -214,7 +214,7 @@ Source10212: https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tg Source10213: https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz#/find-up-5.0.0.tgz Source10214: https://registry.npmjs.org/flat-cache/-/flat-cache-3.0.4.tgz#/flat-cache-3.0.4.tgz Source10215: https://registry.npmjs.org/flatted/-/flatted-3.2.7.tgz#/flatted-3.2.7.tgz -Source10216: https://registry.npmjs.org/focus-trap/-/focus-trap-7.4.0.tgz#/focus-trap-7.4.0.tgz +Source10216: https://registry.npmjs.org/focus-trap/-/focus-trap-7.4.1.tgz#/focus-trap-7.4.1.tgz Source10217: https://registry.npmjs.org/for-each/-/for-each-0.3.3.tgz#/for-each-0.3.3.tgz Source10218: https://registry.npmjs.org/fs-extra/-/fs-extra-10.1.0.tgz#/fs-extra-10.1.0.tgz Source10219: https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz#/fs.realpath-1.0.0.tgz diff --git a/package-lock.json b/package-lock.json index 4d41e08..ceb74d6 100644 --- a/package-lock.json +++ b/package-lock.json @@ -7,11 +7,12 @@ "name": "podman", "license": "LGPL-2.1", "dependencies": { - "@patternfly/patternfly": "5.0.0-alpha.43", - "@patternfly/react-core": "5.0.0-alpha.83", - "@patternfly/react-icons": "5.0.0-alpha.12", - "@patternfly/react-styles": "5.0.0-alpha.8", - "@patternfly/react-table": "5.0.0-alpha.85", + "@patternfly/patternfly": "5.0.0-alpha.53", + "@patternfly/react-core": "5.0.0-alpha.98", + "@patternfly/react-icons": "5.0.0-alpha.14", + "@patternfly/react-styles": "5.0.0-alpha.10", + "@patternfly/react-table": "5.0.0-alpha.100", + "@patternfly/react-tokens": "5.0.0-alpha.9", "date-fns": "2.28.0", "docker-names": "1.2.1", "prop-types": "15.8.1", @@ -1038,19 +1039,19 @@ } }, "node_modules/@patternfly/patternfly": { - "version": "5.0.0-alpha.43", - "resolved": "https://registry.npmjs.org/@patternfly/patternfly/-/patternfly-5.0.0-alpha.43.tgz", - "integrity": "sha512-O3tOXGTxNbR8AOAiJUIth/0MAiKniTvM2L//lDisRXst0fP43I7/p0Ba3hU3ECAfMf4MsIe9tt5ZhO5Hz9lpZg==" + "version": "5.0.0-alpha.53", + "resolved": "https://registry.npmjs.org/@patternfly/patternfly/-/patternfly-5.0.0-alpha.53.tgz", + "integrity": "sha512-sy9lk98PLVGjFuJ6li9uIwKc/IXXhjv8Ow0Q/MDOCFrhnj2gWLjMr4uB4d0393mAGfD1vk8KkqF+7tfEDIBjpQ==" }, "node_modules/@patternfly/react-core": { - "version": "5.0.0-alpha.83", - "resolved": "https://registry.npmjs.org/@patternfly/react-core/-/react-core-5.0.0-alpha.83.tgz", - "integrity": "sha512-z2Erly7inGlRXgrJ79AmvQy7JfzqOLKoen+V6ko8zaIQWAluxZdgZppw/PX5fyj3Hi55sBN/GsDV8fD+o/LxbA==", + "version": "5.0.0-alpha.98", + "resolved": "https://registry.npmjs.org/@patternfly/react-core/-/react-core-5.0.0-alpha.98.tgz", + "integrity": "sha512-LouTqxWPtvzK3834i1JW5kTjDoqIWnvbioZaRIJOuL3eGgBYk+ORpoa9EZ8j4r+NQWxeogMFgxzsP9Oe04xjcQ==", "dependencies": { - "@patternfly/react-icons": "^5.0.0-alpha.12", - "@patternfly/react-styles": "^5.0.0-alpha.8", - "@patternfly/react-tokens": "^5.0.0-alpha.7", - "focus-trap": "7.4.0", + "@patternfly/react-icons": "^5.0.0-alpha.14", + "@patternfly/react-styles": "^5.0.0-alpha.10", + "@patternfly/react-tokens": "^5.0.0-alpha.9", + "focus-trap": "7.4.1", "react-dropzone": "^14.2.3", "tslib": "^2.5.0" }, @@ -1060,28 +1061,28 @@ } }, "node_modules/@patternfly/react-icons": { - "version": "5.0.0-alpha.12", - "resolved": "https://registry.npmjs.org/@patternfly/react-icons/-/react-icons-5.0.0-alpha.12.tgz", - "integrity": "sha512-VwCGlB+JtpsjHJtqCcfy+CpaE+rAY2si7cd4ufJouybkoBPve/6wuTPA3K3eGtgn5cAIr18IF1Pkfkp2lR18sg==", + "version": "5.0.0-alpha.14", + "resolved": "https://registry.npmjs.org/@patternfly/react-icons/-/react-icons-5.0.0-alpha.14.tgz", + "integrity": "sha512-+FXETYc+x0xKqktrcgrpxPTZgtaJ6rfpObu/qM4YGuwXkJRIu0OJaoNQTPH9QsxKAeZ+VUh9CnhOcNTRfq9plA==", "peerDependencies": { "react": "^17 || ^18", "react-dom": "^17 || ^18" } }, "node_modules/@patternfly/react-styles": { - "version": "5.0.0-alpha.8", - "resolved": "https://registry.npmjs.org/@patternfly/react-styles/-/react-styles-5.0.0-alpha.8.tgz", - "integrity": "sha512-V/jhoKp6pz3c+2N1Yi/Ez/EJIHKEHe4SSCzF5ocGpOfaYlQpDGdttKIF0GSWksXlShYZJ5heKfARuESK9XjqRA==" + "version": "5.0.0-alpha.10", + "resolved": "https://registry.npmjs.org/@patternfly/react-styles/-/react-styles-5.0.0-alpha.10.tgz", + "integrity": "sha512-SJsLPtTKE1u6YpEAvx+zUre+u9poc/IIIKJ9dk0Jze94HtC/2kI4fhhvm2iQE5Z4rNAPrFlC4fVsvbr7skS3kg==" }, "node_modules/@patternfly/react-table": { - "version": "5.0.0-alpha.85", - "resolved": "https://registry.npmjs.org/@patternfly/react-table/-/react-table-5.0.0-alpha.85.tgz", - "integrity": "sha512-rFpHkEwWstAMt4qg7YTWHYODb/NeySSaMhIWdAspvtWVU+hWkD02ejQ0eIlHSghLLKqXNsxICS1TcyDLShuyvw==", + "version": "5.0.0-alpha.100", + "resolved": "https://registry.npmjs.org/@patternfly/react-table/-/react-table-5.0.0-alpha.100.tgz", + "integrity": "sha512-w3phwe/O8tc5Lxy9KnIXsE5VxanyjwCPeVxWZCWOqWWeiokJoANX5dWI2RdVrDdauQGYohsmYs4+93OYhhSI8A==", "dependencies": { - "@patternfly/react-core": "^5.0.0-alpha.83", - "@patternfly/react-icons": "^5.0.0-alpha.12", - "@patternfly/react-styles": "^5.0.0-alpha.8", - "@patternfly/react-tokens": "^5.0.0-alpha.7", + "@patternfly/react-core": "^5.0.0-alpha.98", + "@patternfly/react-icons": "^5.0.0-alpha.14", + "@patternfly/react-styles": "^5.0.0-alpha.10", + "@patternfly/react-tokens": "^5.0.0-alpha.9", "lodash": "^4.17.19", "tslib": "^2.5.0" }, @@ -1091,9 +1092,9 @@ } }, "node_modules/@patternfly/react-tokens": { - "version": "5.0.0-prerelease.4", - "resolved": "https://registry.npmjs.org/@patternfly/react-tokens/-/react-tokens-5.0.0-prerelease.4.tgz", - "integrity": "sha512-bg+ABSLRflyLltv9+fx3w/cyF9i/eWy1/m1SNgeBMtJtfOgl+RLKejChYQ/PPYHoFaxllbPBamgWbi6YppD4Ew==" + "version": "5.0.0-alpha.9", + "resolved": "https://registry.npmjs.org/@patternfly/react-tokens/-/react-tokens-5.0.0-alpha.9.tgz", + "integrity": "sha512-8P8u9BJdQmiunZbGAlDIunlGI6D4V81YZA16z9hw5qXReWztWyF9IXXB4L6lG5+VJZEnocBpJPenNJ1n1FmiBQ==" }, "node_modules/@types/json5": { "version": "0.0.29", @@ -2938,11 +2939,11 @@ "dev": true }, "node_modules/focus-trap": { - "version": "7.4.0", - "resolved": "https://registry.npmjs.org/focus-trap/-/focus-trap-7.4.0.tgz", - "integrity": "sha512-yI7FwUqU4TVb+7t6PaQ3spT/42r/KLEi8mtdGoQo2li/kFzmu9URmalTvw7xCCJtSOyhBxscvEAmvjeN9iHARg==", + "version": "7.4.1", + "resolved": "https://registry.npmjs.org/focus-trap/-/focus-trap-7.4.1.tgz", + "integrity": "sha512-rnXP5ERIjlo1gEZp7hQb4ekYqUxRuSDQeyWvxhahH3/GkWtd8h8g1C8Eu/KGpuvbUWNVeogK0kuzzrM4u2Z9jA==", "dependencies": { - "tabbable": "^6.1.1" + "tabbable": "^6.1.2" } }, "node_modules/for-each": {