From 34c248c38bc09bb3fa742bede2dd5256d13ea87b Mon Sep 17 00:00:00 2001 From: Silke Hofstra Date: Wed, 6 Dec 2023 14:13:33 +0100 Subject: [PATCH 1/2] common: add list of packages included in all ISOs --- common/iso_packages.txt | 1056 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 1056 insertions(+) create mode 100644 common/iso_packages.txt diff --git a/common/iso_packages.txt b/common/iso_packages.txt new file mode 100644 index 00000000000..f1a9c04828f --- /dev/null +++ b/common/iso_packages.txt @@ -0,0 +1,1056 @@ +aalib +aa-lsm-hook +accounts-qml-module +accountsservice +acl +adwaita-icon-theme +adw-gtk3-theme +aha +alsa-firmware +alsa-lib +alsa-plugins +alsa-utils +aom +apparmor +appstream +appstream-data +appstream-glib +ark +atkmm +at-spi2 +attica +attr +audit +avahi +baloo +baloo-widgets +baobab +baselayout +bash +bash-completion +bc +bind-utils +bluedevil +bluez +bluez-qt +bolt +botan2 +breeze +breeze-cursor-theme +breeze-gtk-theme +breeze-icons +breeze-light-cursor-theme +brotli +btrfs-progs +btrfs-progs-libbtrfs +bubblewrap +budgie-backgrounds +budgie-control-center +budgie-desktop +budgie-desktop-branding +budgie-desktop-branding-livecd +budgie-desktop-view +budgie-screensaver +bzip2 +ca-certs +cairomm +calamares +canon-ufriilt-common +celluloid +celt +chmlib +chromaprint +cinnamon-translations +clinfo +clr-boot-manager +clutter +clutter-gst +clutter-gtk +cogl +coinmp +colord +colord-kde +comar +comar-api +coreutils +cpio +cracklib +cryptsetup +cups +cups-filters +cups-pk-helper +curl +cyrus-sasl +dav1d +db5 +dbus +dbus-broker +dbus-glib +dbus-launch +dconf +ddcutil +dejavu-fonts-ttf +desktop-file-utils +discount +disktype +djvulibre +dmidecode +docbook-xml +doflicky +dolphin +dolphin-plugins +dosfstools +dotconf +drkonqi +duktape +e2fsprogs +ebook-tools +editorconfig-core-c +efivar +elisa +enchant +eog +espeak-ng +evince +evolution-data-server +exfatprogs +exiv2 +exo +expat +f2fs-tools +fdk-aac +ffmpeg +ffmpegthumbnailer +ffmpegthumbs +fftw +file +file-roller +findutils +firefox +flatpak +flatpak-kcm +fluidsynth +fontconfig +font-droid-ttf +font-hack-ttf +font-symbola-ttf +font-terminus-console +font-tlwg-ttf +foomatic-db +foomatic-db-engine +frameworkintegration +freeglut +freetype2 +freetype2-subpixel +fribidi +fuse +fuse2 +fuse-common +garcon +gawk +gcab +gcr +gcr-4 +gd +gdbm +gdk-pixbuf +gdm +gedit +geoclue +gettext +gexiv2 +ghostscript +giflib +gjs +glib2 +glibc +glibmm +glib-networking +gmmlib +gmp +gnome-autoar +gnome-bluetooth +gnome-bluetooth-1 +gnome-bluetooth-1-common +gnome-browser-connector +gnome-calculator +gnome-calendar +gnome-color-manager +gnome-control-center +gnome-desktop-branding +gnome-desktop-branding-livecd +gnome-disk-utility +gnome-doc-utils +gnome-keyring +gnome-online-accounts +gnome-screenshot +gnome-session +gnome-session-shell +gnome-settings-daemon +gnome-shell +gnome-shell-extension-appindicator +gnome-shell-extensions +gnome-shell-extension-speedinator +gnome-system-monitor +gnome-terminal +gnome-themes-extra +gnome-tweaks +gnome-user-docs +gnome-video-effects +gnupg +gnuplot +gobject-introspection +gpart +gparted +gpgme +gpm +gptfdisk +graphene +graphite2 +graphviz +grep +groff +grub2 +gsettings-desktop-schemas +gsm +gsound +gspell +gssdp +gstreamer-1.0 +gstreamer-1.0-libav +gstreamer-1.0-plugins-bad +gstreamer-1.0-plugins-base +gstreamer-1.0-plugins-good +gstreamer-1.0-plugins-ugly +gtk2-engine-murrine +gtk-engines +gts +gupnp +gupnp-igd +gutenprint +gvfs +gvfs-goa +gwenview +gzip +harfbuzz +haruna +hicolor-icon-theme +highway +hplip-drivers +hunspell-en +hwdata +hyphen +ibus +iceauth +iio-sensor-proxy +imagemagick +imath +imlib2 +inetutils +inotify-tools +intel-media-driver +intel-microcode +inxi +isl +iso-codes +jack-audio-connection-kit +jansson +jasper +jbig2dec +json-c +kaccounts-integration +kaccounts-providers +kactivities +kactivities-stats +kactivitymanagerd +kamera +karchive +kate +kauth +kbd +kbookmarks +kcalc +kcalendarcore +kcharselect +kcmutils +kcodecs +kcolorpicker +kcompletion +kconfig +kconfigwidgets +kcontacts +kcoreaddons +kcrash +kdbusaddons +kdeclarative +kde-cli-tools +kdeconnect +kdecoration +kded +kdegraphics-mobipocket +kdegraphics-thumbnailers +kde-gtk-config +kdelibs4support +kdenetwork-filesharing +kdeplasma-addons +kdesignerplugin +kdesu +kdialog +kdnssd +kdoctools +kdsoap +kemoticons +kerberos +kernel-glue +keybinder +keyutils +kfilemetadata +kgamma5 +kglobalaccel +kguiaddons +kholidays +khotkeys +khtml +ki18n +kiconthemes +kidletime +kimageannotator +kimageformats +kinfocenter +kinit +kio +kio-extras +kio-fuse +kio-gdrive +kirigami2 +kirigami-addons +kitemmodels +kitemviews +kjobwidgets +kjs +kmenuedit +kmod +knewstuff +knotifications +knotifyconfig +konsole +kpackage +kparts +kpeople +kpeoplevcard +kpipewire +kpmcore +kpty +kquickcharts +krunner +kscreen +kscreenlocker +kservice +ksshaskpass +ksystemstats +ktexteditor +ktextwidgets +kunitconversion +kuserfeedback +kwallet +kwalletmanager +kwallet-pam +kwayland +kwayland-integration +kwidgetsaddons +kwin +kwindowsystem +kwrited +kxmlgui +ladspa +lame +lash +layer-shell-qt +ldb +ldns +less +liba52dec +libabw +libaccounts-glib +libaccounts-qt +libadwaita +libaio +libao +libarchive +libass +libassuan +libatasmart +libavif +libayatana-appindicator +libayatana-ido +libayatana-indicator +libb2 +libblockdev +libbluray +libboost +libburn +libbytesize +libcaca +libcairo +libcanberra +libcap2 +libcap-ng +libcbor +libcddb +libcdio +libcdio-paranoia +libcdr +libcheese +libcinnamon-desktop +libcloudproviders +libcmis +libcolord-gtk +libcue +libdaemon +libdbusmenu +libdbusmenu-qt +libdc1394 +libde265 +libdecor +libdisplay-info +libdmtx +libdovi +libdrm +libdv +libdvdcss +libdvdnav +libdvdread +libdw +libe-book +libeconf +libedit +libei +libelf +libepoxy +libetonyek +libevdev +libevent +libexempi +libexif +libexttextcat +libfakekey +libffi +libfido2 +libflac +libfontenc +libfreeaptx +libfreehand +libgcc +libgcrypt +libgdata +libgedit-amtk +libgedit-gtksourceview +libgee +libgeocode-glib2 +libgeocode-glib-common +libglade +libglu +libglvnd +libgnome-desktop +libgnomekbd +libgnome-menus +libgnutls +libgomp +libgpg-error +libgphoto2 +libgpod +libgsf +libgtk-2 +libgtk-3 +libgtk-4 +libgtk-layer-shell +libgtkmm-3 +libgtksourceview4 +libgtksourceview5 +libgtop +libgudev +libgusb +libgweather +libgxps +libhandy +libheif +libhogweed +libhunspell +libical +libice +libicu +libidn2 +libieee1284 +libimobiledevice +libinput +libinstpatch +libiptcdata +libisofs +libixion +libjpeg-turbo +libjson-glib +libjxl +libkate +libkdcraw +libkexiv2 +libkgapi +libksba +libkscreen +libksysguard +liblangtag +liblcms2 +libldac +libltc +libmaxminddb +libmbim +libmpeg2 +libmspack +libmspub +libmtp +libmwaw +libndp +libnettle +libnfs +libnice +libnl +libnma +libnotify +libnspr +libnss +libnumbertext +libnvme +liboauth +libodfgen +libogg +libopenmpt +liborcus +libosinfo +libp11-kit +libpagemaker +libpaper +libparted +libpcap +libpciaccess +libpcre +libpeas +libpipeline +libplacebo +libplist +libpng +libportal +libproxy +libpsl +libpwquality +libqalculate +libqmi +libqrtr-glib +libqxp +libraw +libraw1394 +libreoffice-calc +libreoffice-common +libreoffice-common-kde-integration +libreoffice-draw +libreoffice-impress +libreoffice-writer +librest +librevenge +librsvg +libsamplerate +libseccomp +libsecret +libselinux +libshout +libsigc++ +libsm +libsndfile +libsoup +libsoup3 +libsoxr +libspectre +libspeex +libssh +libssh2 +libstartup-notification +libstdc++ +libstemmer +libtasn1 +libtelepathy-glib +libtheora +libtiff +libtirpc +libtool +libunibreak +libunistring +libunwind +liburing +libusb +libusbmuxd +libuv +libva +libva-intel-driver +libvdpau +libvisio +libvoikko +libvorbis +libvpx +libvte +libwacom +libwebkit-gtk +libwebkit-gtk41 +libwebkit-gtk5 +libwebp +libwnck +libwpd +libwpe +libwpg +libwps +libx11 +libxau +libxcb +libxcomposite +libxcrypt +libxcursor +libxcvt +libxdamage +libxdmcp +libxext +libxfce4ui +libxfce4util +libxfixes +libxfont2 +libxft +libxi +libxinerama +libxkbcommon +libxkbfile +libxklavier +libxml2 +libxmlb +libxmu +libxpm +libxpresent +libxrandr +libxrender +libxres +libxscrnsaver +libxshmfence +libxslt +libxt +libxtst +libxv +libxvmc +libxxf86dga +libxxf86vm +libzip +libzmf +lightdm +lilv +linux-current +linux-driver-management +linux-driver-management-gdm-integration +linux-driver-management-lightdm-integration +linux-driver-management-sddm-integration +linux-firmware +llvm +lmdb +lm_sensors +lsb-release +lsof +luajit +lvm2 +lz4 +lzip +lzo +magpie +man-db +mariadb-libs +materia-gtk-theme +materia-gtk-theme-compact +materia-gtk-theme-dark +materia-gtk-theme-dark-compact +materia-gtk-theme-light +materia-gtk-theme-light-compact +mdadm +media-player-info +mesa-demos +mesalib +microdns +milou +minizip-ng +mkfontscale +mobile-broadband-provider-info +modem-manager +modemmanager-qt +mousepad +mozjs +mpc +mpfr +mpg123 +mpv-libs +mtdev +mtools +mutagen +mutter +mutter-common +mythes +nano +nanorc +nautilus +nautilus-extension +nautilus-python +ncurses +nemo +nemo-fileroller +net-snmp +network-manager +network-manager-applet +network-manager-livecd +networkmanager-openconnect +networkmanager-openvpn +networkmanager-qt +nghttp2 +noto-sans-ttf +noto-serif-ttf +npth +nss-mdns +ntfs-3g +nvidia-470-glx-driver-modaliases +nvidia-glx-driver-modaliases +ocl-icd +okular +onboard +openal-soft +openconnect +openexr +openjpeg +openldap +openssh +openssl +openssl-11 +openvpn +opus +orc +orca +osinfo-db +os-prober +ostree +pam +pango +pangomm +papirus-icon-theme +parole +parted +partitionmanager +pavucontrol +pcaudiolib +pciutils +pcre2 +pcsc-lite +perl +perl-common-sense +perl-json-xs +perl-net-dbus +perl-types-serialiser +perl-x11-protocol +perl-xmlparser +perl-xml-twig +phonon +phonon-backend-gstreamer +piksemel +pinentry +pipewire-lib +pisi +pixman +pkcs11-helper +plasma-browser-integration +plasma-desktop +plasma-desktop-branding +plasma-desktop-branding-livecd +plasma-disks +plasma-framework +plasma-integration +plasma-nm +plasma-pa +plasma-systemmonitor +plasma-thunderbolt +plasma-wayland-protocols +plasma-workspace +polkit +polkit-gnome +polkit-kde-agent +polkit-qt-1 +poppler +poppler-data +poppler-qt5 +poppler-utils +popt +portaudio +powerdevil +power-profiles-daemon +ppp +print-manager +prison +procps-ng +psmisc +pulseaudio +pulseaudio-qt +purpose +pyatspi2 +pycups +python +python3 +python3-cairo +python3-dbus +python3-pycryptodome +python3-pyudev +python-certifi +python-cffi +python-chardet +python-charset-normalizer +python-cparser +python-cryptography +python-dbus +python-gobject +python-idna +python-libevdev +python-magic +python-notify2 +python-openssl +python-pycurl +python-pyliblzma +python-pysmbc +python-pysocks +python-requests +python-six +python-urllib3 +python-websockets +qca +qemu-guest-agent +qogir-gtk-theme +qol-assist +qpdf +qqc2-desktop-style +qrencode +qt5-base +qt5-charts +qt5-declarative +qt5-graphicaleffects +qt5-imageformats +qt5-location +qt5-multimedia +qt5-quickcontrols +qt5-quickcontrols2 +qt5-sensors +qt5-speech +qt5-svg +qt5-tools +qt5-virtualkeyboard +qt5-wayland +qt5-webchannel +qt5-webengine +qt5-x11extras +qtstyleplugins +raqm +rav1e +re2 +readline +reiserfsprogs +rhythmbox +rhythmbox-alternative-toolbar +ristretto +rsync +rtkit +rtmpdump +rubberband +ruby +samba +sane-backends +sbc +sddm +sddm-kcm +sdl2 +seahorse +sed +serd +setxkbmap +sg3_utils +shaderc +shadow +shared-mime-info +sharutils +shim-signed +signond +signon-kwallet-extension +signon-plugin-oauth2 +signon-ui +slick-greeter +smartmontools +snapd +snappy +socat +sof-firmware +solid +solus-artwork +solus-artwork-plasma +solus-hardware-config +solus-sc +solus-sc-icons +sonnet +sord +sound-theme-freedesktop +soundtouch +spectacle +speech-dispatcher +spice-vdagent +spirv-tools +sqlite3 +squashfs-tools +sratom +srt +sshfs-fuse +stoken +sudo +svt-av1 +switcheroo-control +syndication +syntax-highlighting +system-config-printer +systemd +systemsettings +taglib +talloc +tar +tcl +tdb +telepathy-logger +tepl +tevent +threadweaver +thunar +thunar-archive-plugin +thunar-shares-plugin +thunar-volman +thunderbird +time +totem-pl-parser +tpm2-tss +tracker +tracker-miners +tree +tumbler +twolame +tzdata +uchardet +udisks +unicode-character-database +unixodbc +unrar +unzip +upower +usb-modeswitch +usbutils +usysconf +util-linux +v4l-utils +vala-panel-appmenu +vamp-plugin-sdk +vapoursynth +vid.stab +vo-aacenc +volume_key +vpnc +vulkan +vulkan-tools +wavpack +wayland +wayland-utils +webrtc-audio-processing +wget +which +wireless-regdb +wireless-tools +woff2 +wpa_supplicant +wpebackend-fdo +wsdd +wxwidgets +x264 +x265 +xapp +xauth +xcb-util +xcb-util-cursor +xcb-util-image +xcb-util-keysyms +xcb-util-renderutil +xcb-util-wm +xdg-dbus-proxy +xdg-desktop-portal +xdg-desktop-portal-gnome +xdg-desktop-portal-gtk +xdg-desktop-portal-kde +xdg-desktop-portal-xapp +xdg-user-dirs +xdg-user-dirs-gtk +xdg-utils +xdotool +xdpyinfo +xfburn +xfce4-appfinder +xfce4-desktop-branding +xfce4-desktop-branding-livecd +xfce4-notifyd +xfce4-panel +xfce4-panel-profiles +xfce4-power-manager +xfce4-pulseaudio-plugin +xfce4-screenshooter +xfce4-session +xfce4-settings +xfce4-terminal +xfce4-whiskermenu-plugin +xfconf +xfdesktop +xfwm4 +xhost +xinit +xkbcomp +xkeyboard-config +xmlsec1 +xmodmap +xorg-driver-input-libinput +xorg-driver-input-wacom +xorg-driver-video-amdgpu +xorg-driver-video-fbdev +xorg-driver-video-intel +xorg-driver-video-nouveau +xorg-driver-video-qxl +xorg-driver-video-radeon +xorg-driver-video-vesa +xorg-driver-video-vmware +xorg-server +xorg-server-xvfb +xorg-xwayland +xprop +xrandr +xrdb +xset +xsetroot +xsettingsd +xvidcore +xxhash +xz +yaml +yaml-cpp +yelp +yelp-xsl +yt-dlp +zbar +zenity +zimg +zip +zlib +zram-generator +zram-generator-defaults +zstd From 06ce2aa892990a52a041d4b1aa303b6ae678ff2b Mon Sep 17 00:00:00 2001 From: Silke Hofstra Date: Wed, 6 Dec 2023 14:13:17 +0100 Subject: [PATCH 2/2] ci/package_checks: add check for frozen packages Add a simple configuration file for the CI checks, that includes dates for a package freeze. Packages updates for packages in `common/iso_packages.txt` result in either a notice outside of freeze periods, or a warning in freeze periods. --- common/CI/config.yaml | 4 ++ common/CI/package_checks.py | 75 +++++++++++++++++++++++++++++++++++++ 2 files changed, 79 insertions(+) create mode 100644 common/CI/config.yaml diff --git a/common/CI/config.yaml b/common/CI/config.yaml new file mode 100644 index 00000000000..0ecd3c2cb0d --- /dev/null +++ b/common/CI/config.yaml @@ -0,0 +1,4 @@ +--- +freeze: + start: null + end: null diff --git a/common/CI/package_checks.py b/common/CI/package_checks.py index cf2ef542a35..19bd65169bf 100755 --- a/common/CI/package_checks.py +++ b/common/CI/package_checks.py @@ -6,6 +6,7 @@ import re import subprocess from dataclasses import dataclass +from datetime import datetime, timezone from enum import Enum from typing import Any, Dict, List, Optional, TextIO, Tuple, Union from urllib import request @@ -14,6 +15,30 @@ import yaml +@dataclass +class FreezeConfig: + start: Optional[datetime] + end: Optional[datetime] + + def active(self) -> bool: + now = datetime.now(tz=timezone.utc) + + return (self.start is not None and now > self.start and + (self.end is None or now < self.end)) + + +@dataclass +class Config: + freeze: FreezeConfig + + @staticmethod + def load(stream: Any) -> 'Config': + return Config(**yaml.safe_load(stream)) + + def __post_init__(self) -> None: + self.freeze = FreezeConfig(**self.freeze) # type: ignore + + class Git: def __init__(self, path: str): self.path = path @@ -66,6 +91,8 @@ def untracked_files(self) -> List[str]: class Level(str, Enum): __str__ = Enum.__str__ + DEBUG = 'debug' + NOTICE = 'notice' ERROR = 'error' WARNING = 'warning' @@ -109,6 +136,7 @@ def _property(self, key: str) -> str: class PullRequestCheck: _package_files = ['package.yml'] _two_letter_dirs = ['py'] + _config: Optional[Config] = None def __init__(self, git: Git, files: List[str], commits: List[str], base: Optional[str]): self.git = git @@ -119,6 +147,14 @@ def __init__(self, git: Git, files: List[str], commits: List[str], base: Optiona def run(self) -> List[Result]: raise NotImplementedError + @property + def config(self) -> Config: + if self._config is None: + with self._open(os.path.join('common', 'CI', 'config.yaml')) as f: + self._config = Config.load(f) + + return self._config + @property def package_files(self) -> List[str]: return self._filter_packages(self.files) @@ -160,6 +196,14 @@ def package_file(self, package: str, file: str) -> str: def package_dir(self, package: str) -> str: return os.path.join('packages', self._package_subdir(package), package) + @staticmethod + def package_for(path: str) -> str: + parts = path.split("/") + if len(parts) != 3 or parts[0] != "packages": + return "" + + return parts[2] + def _package_subdir(self, package: str) -> str: package = package.lower() @@ -189,6 +233,36 @@ def _check_commit(self, commit: str) -> List[Result]: return results +class FrozenPackage(PullRequestCheck): + __packages: Optional[List[str]] = None + __message_normal = ('This package is included in the ISO. ' + 'Consider validating the functionality in a newly built ISO.') + __message_freeze = ('This package is included in the ISO and is currently frozen. ' + 'It can only be updated to fix critical bugs, ' + 'in consultation with multiple Solus staff members.') + + def run(self) -> List[Result]: + return [self._make_result(f) + for f in self.package_files + if not self._is_frozen(f)] + + def _make_result(self, file: str) -> Result: + if self.config.freeze.active(): + return Result(message=self.__message_freeze, file=file, level=Level.WARNING) + + return Result(message=self.__message_normal, file=file, level=Level.NOTICE) + + def _is_frozen(self, file: str) -> bool: + return self.package_for(file) in self._packages() + + def _packages(self) -> List[str]: + if self.__packages is None: + with self._open(os.path.join('common', 'iso_packages.txt')) as file: + self.__packages = [line.strip() for line in file] + + return self.__packages + + class Homepage(PullRequestCheck): _error = '`homepage` is not set' _level = Level.ERROR @@ -481,6 +555,7 @@ def _commit_package_yaml(self, ref: str) -> Optional[Dict[str, Any]]: class Checker: checks = [ CommitMessage, + FrozenPackage, Homepage, PackageBumped, PackageDependenciesOrder,