Skip to content
Draft
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
43 changes: 43 additions & 0 deletions vmupdate/agent/source/plugins/flatpak_updater.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,43 @@
# coding=utf-8
#
# The Qubes OS Project, http://www.qubes-os.org
#
# Copyright (C) 2025 Ali Mirjamali <[email protected]>
#
# This program is free software; you can redistribute it and/or
# modify it under the terms of the GNU General Public License
# as published by the Free Software Foundation; either version 2
# of the License, or (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
# USA.

import subprocess

from pathlib import Path

def flatpak_updater(os_data, log, **kwargs):
"""
Distro agnostic plugin to update system-wide flatpaks
"""

if not Path("/usr/bin/flatpak"):
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Did you mean .exists()? but then, I don't think you can assume it's always /usr/bin, especially with NixOS existing out there...
We use distutils.spawn.find_executable() in various places

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

We use distutils.spawn.find_executable() in various places

Where? distutils is deprecated since version 3.10, removed in version 3.12.

Anyways, I will replace it with appropriate supported lib (i.e. shutil.which).

return
log.info("Flatpak is installed. Checking for flatpak updates.")
if not subprocess.Popen(
["flatpak", "remote-ls", "--system", "--updates"],
stdout=subprocess.PIPE
).stdout.read().decode().strip():
Comment on lines +34 to +37
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This should consider exit code (and report as update failure, not "no updates". subprocess.check_output may be helpful.

log.info("No flatpak updates found.")
return
log.info("Flatpak updates found. Updating flatpaks...")
subprocess.run(
["flatpak", "update", "--system", "--noninteractive", "-y"]
)