From 2e8df5df92a1688d2a6d1d6791e649bd74f6a255 Mon Sep 17 00:00:00 2001 From: Ali Mirjamali Date: Wed, 17 Sep 2025 19:33:45 +0330 Subject: [PATCH 1/2] Update CI Drop r4.1, add r4.3 Update codecov Add `run-tests` --- .gitlab-ci.yml | 8 +++---- ci/codecov-keys.asc | 52 +++++++++++++++++++++++++++++++++++++++++++++ ci/codecov-wrapper | 17 +++++++++++---- ci/requirements.txt | 1 + run-tests | 4 ++++ 5 files changed, 74 insertions(+), 8 deletions(-) create mode 100644 ci/codecov-keys.asc create mode 100755 run-tests diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index dfa7980..97b5d51 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -1,12 +1,12 @@ include: -- file: /r4.1/gitlab-base.yml - project: QubesOS/qubes-continuous-integration -- file: /r4.1/gitlab-vm.yml - project: QubesOS/qubes-continuous-integration - file: /r4.2/gitlab-base.yml project: QubesOS/qubes-continuous-integration - file: /r4.2/gitlab-vm.yml project: QubesOS/qubes-continuous-integration +- file: /r4.3/gitlab-base.yml + project: QubesOS/qubes-continuous-integration +- file: /r4.3/gitlab-vm.yml + project: QubesOS/qubes-continuous-integration checks:tests: stage: checks diff --git a/ci/codecov-keys.asc b/ci/codecov-keys.asc new file mode 100644 index 0000000..b7dfce0 --- /dev/null +++ b/ci/codecov-keys.asc @@ -0,0 +1,52 @@ +-----BEGIN PGP PUBLIC KEY BLOCK----- + +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 +=ch7z +-----END PGP PUBLIC KEY BLOCK----- diff --git a/ci/codecov-wrapper b/ci/codecov-wrapper index 2b800f1..c955f73 100755 --- a/ci/codecov-wrapper +++ b/ci/codecov-wrapper @@ -1,8 +1,17 @@ #!/bin/bash -PATH="$PATH:$HOME/.local/bin" +set -xe -set -x +curl -Os https://uploader.codecov.io/latest/linux/codecov +curl -Os https://uploader.codecov.io/latest/linux/codecov.SHA256SUM +curl -Os https://uploader.codecov.io/latest/linux/codecov.SHA256SUM.sig + +sqv --keyring ci/codecov-keys.asc codecov.SHA256SUM.sig codecov.SHA256SUM +shasum -a 256 -c codecov.SHA256SUM + +chmod +x codecov + +python3 -m coverage xml || : if [[ "$CI_COMMIT_BRANCH" =~ ^pr- ]]; then PR=${CI_COMMIT_BRANCH#pr-} @@ -12,6 +21,6 @@ if [[ "$CI_COMMIT_BRANCH" =~ ^pr- ]]; then else commit_sha=$(git show -s --format='%H') fi - exec codecov --pr "$PR" --commit "$commit_sha" "$@" + exec ./codecov --pr "$PR" --sha "$commit_sha" "$@" fi -exec codecov "$@" +exec ./codecov "$@" diff --git a/ci/requirements.txt b/ci/requirements.txt index 959441c..48f6432 100644 --- a/ci/requirements.txt +++ b/ci/requirements.txt @@ -1,5 +1,6 @@ # WARNING: those requirements are used only for travis-ci.org # they SHOULD NOT be used under normal conditions; use system package manager +coverage xcffib pyudev pylint diff --git a/run-tests b/run-tests new file mode 100755 index 0000000..a6ed5a2 --- /dev/null +++ b/run-tests @@ -0,0 +1,4 @@ +#!/bin/bash + +set -x +xvfb-run python3 -m coverage run -m unittest discover -v From 2b8220c69f84b577a3978d0841ad6371939e20b6 Mon Sep 17 00:00:00 2001 From: Ali Mirjamali Date: Wed, 17 Sep 2025 19:53:52 +0330 Subject: [PATCH 2/2] Initialize asyncio event loop before using it Python 3.14 (in Fedora 43) throws RunetimeError if event loop is not initialized before using it. Resolves: QubesOS/qubes-issues#10188 --- qubesidle/idleness_monitor.py | 5 ++++- qubesidle/tests_idleness_monitor.py | 2 ++ 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/qubesidle/idleness_monitor.py b/qubesidle/idleness_monitor.py index b8d6381..b1ec1ee 100644 --- a/qubesidle/idleness_monitor.py +++ b/qubesidle/idleness_monitor.py @@ -110,10 +110,13 @@ def main(): if not os.path.exists('/var/run/qubes-service/shutdown-idle'): return + # Initialize event loop for Python 3.14 compatibility + asyncio.set_event_loop(asyncio.new_event_loop()) + monitor = IdlenessMonitor() monitor.load_watchers() - asyncio.get_event_loop().run_until_complete(monitor.monitor_idleness()) + asyncio.run(monitor.monitor_idleness()) subprocess.call(['sudo', 'poweroff']) diff --git a/qubesidle/tests_idleness_monitor.py b/qubesidle/tests_idleness_monitor.py index a0bbcc8..37d9093 100644 --- a/qubesidle/tests_idleness_monitor.py +++ b/qubesidle/tests_idleness_monitor.py @@ -76,6 +76,8 @@ def is_idle(self): class MonitorTest(unittest.IsolatedAsyncioTestCase): def setUp(self): + # Initialize event loop for Python 3.14 compatibility + asyncio.set_event_loop(asyncio.new_event_loop()) idleness_monitor.TIMEOUT_SECONDS = LOOP_TIMEOUT self.monitor = idleness_monitor.IdlenessMonitor()