Script 'mail_helper' called by obssrc Hello community, here is the log from the commit of package cockpit for openSUSE:Factory checked in at 2026-04-11 22:22:54 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/cockpit (Old) and /work/SRC/openSUSE:Factory/.cockpit.new.21863 (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "cockpit" Sat Apr 11 22:22:54 2026 rev:74 rq:1345802 version:360 Changes: -------- --- /work/SRC/openSUSE:Factory/cockpit/cockpit.changes 2026-02-27 17:04:56.195753826 +0100 +++ /work/SRC/openSUSE:Factory/.cockpit.new.21863/cockpit.changes 2026-04-11 22:23:06.164344895 +0200 @@ -1,0 +2,35 @@ +Thu Apr 9 13:05:29 UTC 2026 - Alice Brooks <[email protected]> + +- Update to 360 + * 360 + - ws: be more explicit when handling hostnames on cli bsc#1261829/CVE-2026-4631 + - ws: support loading a custom login page + - Translation updates + * 359 + - Bug fixes and translation updates + +------------------------------------------------------------------- +Wed Mar 25 13:38:23 UTC 2026 - Alice Brooks <[email protected]> + +- Update to 358 + * 358 + - Networking: Add Wi-Fi support + - Cockpit Client updated to GTK 4 + - Bugfixes and translation updates + - Dependency updates + * 357 + - lib: Use browser context menu on shift + - bridge: support Python 3.14 on old kernels (RHEL 8) + +------------------------------------------------------------------- +Wed Mar 25 07:23:18 UTC 2026 - Luna D Dragon <[email protected]> + +- add 0010-Override-kdump-message.patch bsc#1259774 + +------------------------------------------------------------------- +Wed Mar 18 11:36:38 UTC 2026 - Miika Alikirri <[email protected]> + +- Refactor packagekit-single-install.patch to match upstream + * bsc#1259210 + +------------------------------------------------------------------- Old: ---- cockpit-356.tar.gz New: ---- 0010-Override-kdump-message.patch cockpit-360.tar.gz ----------(New B)---------- New: - add 0010-Override-kdump-message.patch bsc#1259774 ----------(New E)---------- ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ cockpit.spec ++++++ --- /var/tmp/diff_new_pack.oXpfcQ/_old 2026-04-11 22:23:25.449134302 +0200 +++ /var/tmp/diff_new_pack.oXpfcQ/_new 2026-04-11 22:23:25.461134793 +0200 @@ -56,7 +56,7 @@ License: LGPL-2.1-or-later AND GPL-3.0-or-later AND MIT AND CC-BY-SA-3.0 AND BSD-3-Clause URL: https://cockpit-project.org/ -Version: 356 +Version: 360 Release: 0 Source0: cockpit-%{version}.tar.gz Source2: cockpit-rpmlintrc @@ -90,6 +90,7 @@ Patch112: 0002-cockpit-kdump-support-SLE-micro-6.2.patch Patch113: 0003-branding-use-SUSE_SUPPORT_PRODUCT-and-SUSE_SUPPORT_P.patch Patch114: 0009-packagekit-reboot-notification.patch +Patch115: 0010-Override-kdump-message.patch Patch201: remove_rh_links.patch %define build_all 1 @@ -273,6 +274,7 @@ %if 0%{?suse_version} >= 1600 %patch -P 110 -p1 +%patch -P 115 -p1 %if !0%{?is_opensuse} %patch -P 111 -p1 %patch -P 112 -p1 ++++++ 0001-selinux-allow-login-to-read-motd-file.patch ++++++ --- /var/tmp/diff_new_pack.oXpfcQ/_old 2026-04-11 22:23:25.905152969 +0200 +++ /var/tmp/diff_new_pack.oXpfcQ/_new 2026-04-11 22:23:25.925153788 +0200 @@ -7,11 +7,11 @@ Index: cockpit/selinux/cockpit.te =================================================================== diff --git a/selinux/cockpit.te b/selinux/cockpit.te -index 931cbd775..4a439c8d5 100644 +index 9f3f68b68..70d6c0b44 100644 --- a/selinux/cockpit.te +++ b/selinux/cockpit.te -@@ -232,6 +232,14 @@ optional_policy(` - allow cockpit_session_t pidfs_t:filesystem getattr; +@@ -233,6 +233,14 @@ optional_policy(` + allow cockpit_ws_t pidfs_t:filesystem getattr; ') +# login may read motd file through pam ++++++ 0010-Override-kdump-message.patch ++++++ >From de6f14c1bdf0ac9fc879c38ed12c290e7a49e50f Mon Sep 17 00:00:00 2001 From: Luna D Dragon <[email protected]> Date: Wed, 25 Mar 2026 12:06:22 +0530 Subject: [PATCH] Override kdump message --- pkg/kdump/kdump-view.jsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pkg/kdump/kdump-view.jsx b/pkg/kdump/kdump-view.jsx index c9cc2fa8f..54ebc4997 100644 --- a/pkg/kdump/kdump-view.jsx +++ b/pkg/kdump/kdump-view.jsx @@ -555,7 +555,7 @@ ${enableCrashKernel} <span className="pf-v6-u-font-family-monospace-vf">crashkernel</span> ); alertDetail = fmt_to_fragments( - _("Reserve memory at boot time by setting a '$0' option on the kernel command line. For example, append '$1' to $2 in $3 or use your distribution's kernel argument editor."), + _("Reserve memory at boot time by running systemctl enable --now kdump.service. This service is expected to fail the first time it run. After rebooting it will succeed."), <span className="pf-v6-u-font-family-monospace-vf">crashkernel</span>, <span className="pf-v6-u-font-family-monospace-vf">crashkernel=512M</span>, <span className="pf-v6-u-font-family-monospace-vf">GRUB_CMDLINE_LINUX</span>, -- 2.53.0 ++++++ _scmsync.obsinfo ++++++ --- /var/tmp/diff_new_pack.oXpfcQ/_old 2026-04-11 22:23:26.361171636 +0200 +++ /var/tmp/diff_new_pack.oXpfcQ/_new 2026-04-11 22:23:26.381172454 +0200 @@ -1,6 +1,6 @@ -mtime: 1771859327 -commit: ce15cb3124ac8f27c4ae3ec2266ea935faef72971cbc056753a71add56f39c7e +mtime: 1775805036 +commit: 46f7def4105baeeeb44b93c685892be5bac3197958b2bc602cf17fa9df4606c9 url: https://src.opensuse.org/cockpit/cockpit.git -revision: ce15cb3124ac8f27c4ae3ec2266ea935faef72971cbc056753a71add56f39c7e +revision: 46f7def4105baeeeb44b93c685892be5bac3197958b2bc602cf17fa9df4606c9 projectscmsync: https://src.opensuse.org/cockpit/_ObsPrj.git ++++++ build.specials.obscpio ++++++ ++++++ build.specials.obscpio ++++++ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/.gitignore new/.gitignore --- old/.gitignore 1970-01-01 01:00:00.000000000 +0100 +++ new/.gitignore 2026-04-10 12:52:04.000000000 +0200 @@ -0,0 +1,3 @@ +.osc +node_modules.sums +_build* \ No newline at end of file diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/update_version.sh new/update_version.sh --- old/update_version.sh 1970-01-01 01:00:00.000000000 +0100 +++ new/update_version.sh 2026-04-10 12:52:04.000000000 +0200 @@ -0,0 +1,121 @@ +#!/usr/bin/bash + +set -e + +curVersion=$(grep Version: cockpit.spec | sed -e 's,^\(\s*Version:\s*\)\(.*\)\s*$,\2,') + +if [[ ! "$curVersion" =~ ^[0-9]+(.[0-9]+)?$ ]]; then + echo "Error: curVersion is not a valid integer" + exit 1 +fi + +if [[ "$curVersion" =~ '.' ]]; then + curMajor=$(echo ${curVersion} | cut -d'.' -f1) + curMinor=$(echo ${curVersion} | cut -d'.' -f2) +else + curMajor=$curVersion + curMinor='0' +fi + +### +### Fetch latest soruces +### + +# fetch latest theme +if [ ! -d cockpit-suse-theme ]; then + git clone https://github.com/dgdavid/cockpit-suse-theme.git +else + git -C cockpit-suse-theme pull --ff-only +fi +git -C cockpit-suse-theme archive --format=tar --prefix=cockpit-suse-theme/ -o ../cockpit-suse-theme.tar HEAD + +# fetch latest cockpit +if [ ! -d cockpit ]; then + git clone https://github.com/cockpit-project/cockpit.git cockpit +else + git -C cockpit checkout main + git -C cockpit fetch +fi + +newVersion=$(git -C cockpit tag | grep '^[0-9.]\+$' | sort -rn | head -1) + +if [[ ! "$newVersion" =~ ^[0-9]+(.[0-9]+)?$ ]]; then + echo "Error: newVersion cannot be determined" + exit 1 +fi + +if [[ "$newVersion" =~ '.' ]]; then + newMajor=$(echo ${newVersion} | cut -d'.' -f1) + newMinor=$(echo ${newVersion} | cut -d'.' -f2) +else + newMajor=$newVersion + newMinor='0' +fi + +if [ "$curMajor" -gt "$newMajor" ]; then + echo "Nothing to do." + exit 0 +elif [[ "$curMajor" -eq "$newMajor" && "$curMinor" -ge "$newMinor" ]]; then + echo "Nothing to do." + exit 0 +fi + +### +### UPDATE +### +git -C cockpit checkout $newVersion +pushd $PWD +cd cockpit +npm install --include optional +rm -rf node_modules +popd +cp "cockpit/package-lock.json" . +# update node_modules +osc service mr +rm --verbose *.tgz || true + +# # initialize all submodules +git -C cockpit submodule update --init --depth 1 +# remove node_modules and tests +git -C cockpit submodule deinit node_modules test/reference + +# update tarballs +CockpitPath="cockpit-$newVersion/" +MainTarball="cockpit.tar" +D=$PWD + +git -C cockpit archive --format=tar --prefix=$CockpitPath -o "$D/$MainTarball" $newVersion + +# append each initialized submodule +git -C cockpit submodule foreach "n=\$(basename \$sm_path) +git archive --format=tar --prefix=${CockpitPath}\${sm_path}/ -o \"$D/\$n.tar\" HEAD +" +SubmoduleTarballs=$(git -C cockpit submodule foreach --quiet "echo \$(basename \$sm_path.tar)") + +# need to unpack and pack again, because OBS can't deal with concatenated tarballs :( +rm -f "cockpit-$newVersion.tar" +rm -rf cockpit-$newVersion/ +for i in $MainTarball $SubmoduleTarballs; do + tar xf $i +done +rm $MainTarball $SubmoduleTarballs +tar zcf cockpit-$newVersion.tar.gz cockpit-$newVersion/ + +echo "Archive created: cockpit-$newVersion.tar" + +# Update spec file +git -C cockpit remote show suse || git -C cockpit remote add suse [email protected]:openSUSE/cockpit.git +git -C cockpit fetch suse opensuse-$curVersion +git -C cockpit checkout -b opensuse-$newVersion suse/opensuse-$curVersion +git -C cockpit rebase -i $newVersion || true + +echo "Don't forget to:" +echo " 1. finish rebase" +echo " 2. push new branch" +echo " 3. update cockpit.spec, and" +echo " 4. set new default branch on GitHub" + +# Updating version in spec file +sed -i -e "s,^\(\s*Version:\s*\)\(.*\)\s*$,\1${newVersion}," cockpit/tools/cockpit.spec +git rm cockpit-$curVersion.tar.gz +git add cockpit-$newVersion.tar.gz ++++++ cockpit-356.tar.gz -> cockpit-360.tar.gz ++++++ /work/SRC/openSUSE:Factory/cockpit/cockpit-356.tar.gz /work/SRC/openSUSE:Factory/.cockpit.new.21863/cockpit-360.tar.gz differ: char 14, line 1 ++++++ node_modules.obscpio ++++++ /work/SRC/openSUSE:Factory/cockpit/node_modules.obscpio /work/SRC/openSUSE:Factory/.cockpit.new.21863/node_modules.obscpio differ: char 218464, line 929 ++++++ node_modules.spec.inc ++++++ ++++ 963 lines (skipped) ++++ between /work/SRC/openSUSE:Factory/cockpit/node_modules.spec.inc ++++ and /work/SRC/openSUSE:Factory/.cockpit.new.21863/node_modules.spec.inc ++++++ package-lock.json ++++++ ++++ 2691 lines (skipped) ++++ between /work/SRC/openSUSE:Factory/cockpit/package-lock.json ++++ and /work/SRC/openSUSE:Factory/.cockpit.new.21863/package-lock.json ++++++ packagekit-single-install.patch ++++++ --- /var/tmp/diff_new_pack.oXpfcQ/_old 2026-04-11 22:23:26.981197016 +0200 +++ /var/tmp/diff_new_pack.oXpfcQ/_new 2026-04-11 22:23:26.985197179 +0200 @@ -15,12 +15,14 @@ up the UI for multiple seconds when there's hundreds of packages. And tens of seconds when there are thousands of packages. --- - pkg/packagekit/updates.jsx | 239 ++++++++++++++++++++++++++++++++---- + pkg/packagekit/updates.jsx | 244 ++++++++++++++++++++++++++++++++---- pkg/packagekit/updates.scss | 6 +- 2 files changed, 220 insertions(+), 25 deletions(-) diff --git a/pkg/packagekit/updates.jsx b/pkg/packagekit/updates.jsx -index 40fca0a..abc8c70 100644 +index 898ff7c1f..90d77c51c 100644 +--- a/pkg/packagekit/updates.jsx ++++ b/pkg/packagekit/updates.jsx @@ -67,6 +67,7 @@ import { read_os_release } from "os-release.js"; import callTracerScript from './callTracer.py'; @@ -29,7 +31,7 @@ import { Truncate } from '@patternfly/react-core/dist/esm/components/Truncate/index.js'; import { Severity } from '_internal/packagemanager-abstract'; import { getPackageManager } from 'packagemanager'; -@@ -95,6 +96,7 @@ const UPDATES = { +@@ -82,6 +83,7 @@ const UPDATES = { ALL: 0, SECURITY: 1, KPATCHES: 2, @@ -37,15 +39,17 @@ }; function init() { -@@ -119,6 +121,195 @@ function init() { +@@ -106,6 +108,201 @@ function init() { PK_STATUS_LOG_STRINGS[PK.Enum.STATUS_SIGCHECK] = _("Verified"); } ++/** @import { UpdateDetail } from "_internal/packagemanager-abstract" */ ++ +/** + * @typedef SelecetedState + * @type {object} + * @property {boolean} allSelected - Are all items selected -+ * @property {Object.<string, boolean>} selected - (Un)selected items. ++ * @property {Object.<string, UpdateDetail | null | undefined>} selected - (Un)selected items. + * If allSelected is set, this refers to unselecetd + */ + @@ -53,7 +57,7 @@ + * @typedef SelecetedAction + * @type {object} + * @property {"ADD" | "REMOVE" | "ALL" | "NONE"} type - Type of reducer action -+ * @property {string=} id - Added removed item, only used by "ADD" and "REMOVE" ++ * @property {UpdateDetail=} update - Added removed item, only used by "ADD" and "REMOVE" + */ + +const SelectedContext = React.createContext({selected: {}, allSelected: true}); @@ -67,19 +71,19 @@ + const reducer = (state, action) => { + switch (action.type) { + case "ADD": -+ if (action.id) { ++ if (action.update) { + if (state.allSelected) -+ delete state.selected[action.id]; ++ delete state.selected[action.update.id]; + else -+ state.selected[action.id] = true; ++ state.selected[action.update.id] = action.update; + } + break; + case "REMOVE": -+ if (action.id) { ++ if (action.update) { + if (state.allSelected) -+ state.selected[action.id] = true; ++ state.selected[action.update.id] = action.update; + else -+ delete state.selected[action.id]; ++ delete state.selected[action.update.id]; + } + break; + case "ALL": @@ -110,7 +114,7 @@ +/** + * @param {{ + * onClick: (state: SelecetedState) => void -+ * updates: string[], ++ * updates: UpdateDetail[], + * num_updates: number + * }} props; + */ @@ -122,7 +126,6 @@ + num_updates, + } = props; + -+ + const buttonText = () => { + if (state.allSelected && Object.keys(state.selected).length == 0 || + !state.allSelected && Object.keys(state.selected).length == num_updates) @@ -157,39 +160,44 @@ + ); +} + ++/** ++ * @param {{ ++* update: UpdateDetail, ++* }} props; ++*/ +const SelectedSwitch = (props) => { + const { state, dispatch } = useSelected(); + + const dispatchChecked = checked => { + if (checked) { -+ dispatch({type: "ADD", id: props.id}); ++ dispatch({type: "ADD", update: props.update}); + } else { -+ dispatch({type: "REMOVE", id: props.id}); ++ dispatch({type: "REMOVE", update: props.update}); + } + } + + const isChecked = () => { + if (state.allSelected) { -+ return !!!state.selected[props.id]; ++ return !!!state.selected[props.update.id]; + } else { -+ return !!state.selected[props.id]; ++ return !!state.selected[props.update.id]; + } + } + + return ( -+ <Checkbox aria-label="select-update-checkbox" isChecked={isChecked()} id={`selectable-${props.id}`} onChange={(_event, checked) => dispatchChecked(checked)} /> ++ <Checkbox aria-label="select-update-checkbox" isChecked={isChecked()} id={`selectable-${props.update.id}`} onChange={(_event, checked) => dispatchChecked(checked)} /> + ); +} + +/** + * @param {{ -+* updates: string[], ++* updates: UpdateDetail[], +* }} props; +*/ +const WebConsoleRestartWarn = (props) => { + const { state } = useSelected(); + -+ if (calculateSelected(props.updates, state).findIndex((value) => value.includes("cockpit-ws")) === -1) ++ if (calculateSelected(props.updates, state).findIndex((value) => value.id.includes("cockpit-ws")) === -1) + return null; + + return ( @@ -212,36 +220,36 @@ +} + +/** -+ * @param {string[]} allIds ++ * @param {UpdateDetail[]} allUpdates + * @param {SelecetedState} state -+ * @returns {string[]} ++ * @returns {UpdateDetail[]} + */ -+function calculateSelected(allIds, state) { -+ const selected = Object.keys(state.selected); ++function calculateSelected(allUpdates, state) { ++ const selected = Object.values(state.selected).filter(update => !!update); + + if (!state.allSelected) { -+ return selected; ++ return selected + } + + if (selected.length === 0) { -+ return allIds; ++ return allUpdates; + } + -+ return allIds.filter((id) => !!!state.selected[id]); ++ return allUpdates.filter((update) => !!!state.selected[update.id]); +} + function deduplicate(list) { return [...new Set(list)].sort(); } -@@ -381,6 +572,7 @@ function updateItem(remarkable, info, pkgNames, key) { +@@ -368,6 +565,7 @@ function updateItem(remarkable, info, pkgNames, key) { { title: <TableText wrapModifier="truncate">{info.version}</TableText>, props: { className: "version" } }, { title: <TableText wrapModifier="nowrap">{type}</TableText>, props: { className: "type" } }, { title: descriptionFirstLine, props: { className: "changelog" } }, -+ { title: <SelectedSwitch id={ key }/>, props: { className: "select-update" } }, ++ { title: <SelectedSwitch update={ info } />, props: { className: "select-update" } }, ], props: { key, -@@ -430,6 +622,7 @@ const UpdatesList = ({ updates }) => { +@@ -417,6 +615,7 @@ const UpdatesList = ({ updates }) => { { title: _("Version"), props: { width: 15 } }, { title: _("Severity"), props: { width: 15 } }, { title: _("Details"), props: { width: 30 } }, @@ -249,7 +257,7 @@ ]} rows={combined_updates.map(update => updateItem(remarkable, update, packageNames[update.id].sort((a, b) => a.name > b.name), update.id))} /> ); -@@ -913,25 +1106,12 @@ class CardsPage extends React.Component { +@@ -904,25 +1103,12 @@ class CardsPage extends React.Component { id: "available-updates", title: _("Available updates"), actions: (<div className="pk-updates--header--actions"> @@ -269,7 +277,7 @@ - </Popover> - </FlexItem> - </Flex>} -+ <WebConsoleRestartWarn updates={Object.keys(this.props.updates)} /> ++ <WebConsoleRestartWarn updates={this.props.updates} /> {this.props.applyKpatches} {this.props.applySecurity} {this.props.applyAll} @@ -278,7 +286,7 @@ </div>), containsList: true, body: <UpdatesList updates={this.props.updates} /> -@@ -1315,13 +1495,19 @@ class OsUpdates extends React.Component { +@@ -1284,13 +1470,19 @@ class OsUpdates extends React.Component { }); } @@ -294,12 +302,12 @@ updates = updates.filter(update => isKpatchPackage(update.name)); } + if (type === UPDATES.SELECTED && selected) { -+ ids = calculateSelected(ids, selected); ++ updates = calculateSelected(updates, selected); + } PK.transaction() .then(transactionPath => { -@@ -1347,6 +1533,8 @@ class OsUpdates extends React.Component { +@@ -1316,6 +1508,8 @@ class OsUpdates extends React.Component { let applySecurity; let applyKpatches; let applyAll; @@ -308,7 +316,7 @@ /* On unregistered RHEL systems we need some heuristics: If the "main" OS repos (which provide coreutils) require * a subscription, then point this out and don't show available updates, even if there are some auxiliary -@@ -1399,12 +1587,8 @@ class OsUpdates extends React.Component { +@@ -1368,12 +1562,8 @@ class OsUpdates extends React.Component { const num_kpatches = count_kpatch_updates(this.state.updates); const highest_severity = find_highest_severity(this.state.updates); @@ -318,12 +326,12 @@ - ? _("Install security updates") - : _("Install all updates") } - </Button>); -+ applySelected = <SelectedButton updates={Object.keys(this.state.updates)} num_updates={num_updates} onClick={ (items) => this.applyUpdates(UPDATES.SELECTED, items) }/>; ++ applySelected = <SelectedButton updates={this.state.updates} num_updates={num_updates} onClick={ (items) => this.applyUpdates(UPDATES.SELECTED, items) }/>; + applySelectAll = <SelectedAllButton />; if (num_security_updates > 0 && num_updates > num_security_updates) { applySecurity = ( -@@ -1445,6 +1629,8 @@ class OsUpdates extends React.Component { +@@ -1414,6 +1604,8 @@ class OsUpdates extends React.Component { <CardsPage handleRefresh={this.handleRefresh} applySecurity={applySecurity} applyAll={applyAll} @@ -332,7 +340,7 @@ applyKpatches={applyKpatches} highestSeverity={highest_severity} onValueChanged={this.onValueChanged} -@@ -1642,5 +1828,9 @@ document.addEventListener("DOMContentLoaded", async () => { +@@ -1611,5 +1803,9 @@ document.addEventListener("DOMContentLoaded", async () => { } const root = createRoot(document.getElementById('app')); @@ -344,10 +352,10 @@ + ); }); diff --git a/pkg/packagekit/updates.scss b/pkg/packagekit/updates.scss -index 174d6fd..82979ff 100644 +index 397f26973..352885120 100644 --- a/pkg/packagekit/updates.scss +++ b/pkg/packagekit/updates.scss -@@ -71,7 +71,7 @@ +@@ -72,7 +72,7 @@ } &, p { @@ -356,7 +364,7 @@ margin-block-end: 0; // counter-act <Markdown> overflow: hidden; text-overflow: ellipsis; -@@ -280,3 +280,7 @@ table.header-buttons { +@@ -281,3 +281,7 @@ table.header-buttons { .ct-info-circle { color: var(--pf-t--global--icon--color--status--info--default); }
