From a9d8d21f53ba21dd5d87a66ae42088b5ce6f5ce3 Mon Sep 17 00:00:00 2001 From: Licaon_Kter Date: Mon, 18 Aug 2025 15:38:31 +0300 Subject: [PATCH 01/12] buildserver: update to trixie --- buildserver/Vagrantfile | 2 +- buildserver/provision-apt-get-install | 12 ++++++------ makebuildserver | 12 ++++++------ 3 files changed, 13 insertions(+), 13 deletions(-) diff --git a/buildserver/Vagrantfile b/buildserver/Vagrantfile index 1449d0e2..f6044bd5 100644 --- a/buildserver/Vagrantfile +++ b/buildserver/Vagrantfile @@ -35,7 +35,7 @@ Vagrant.configure("2") do |config| config.cache.enable :chef end - config.vm.box = "debian/bookworm64" + config.vm.box = "debian/testing64" if not configfile.has_key? "vm_provider" or configfile["vm_provider"] == "virtualbox" # default to VirtualBox if not set diff --git a/buildserver/provision-apt-get-install b/buildserver/provision-apt-get-install index ca39c47b..86445c7a 100644 --- a/buildserver/provision-apt-get-install +++ b/buildserver/provision-apt-get-install @@ -39,11 +39,11 @@ if echo $debian_mirror | grep '^https' 2>&1 > /dev/null; then fi cat << EOF > /etc/apt/sources.list -deb ${debian_mirror} bookworm main -deb https://security.debian.org/debian-security bookworm-security main -deb ${debian_mirror} bookworm-updates main +deb ${debian_mirror} trixie main +deb https://security.debian.org/debian-security trixie-security main +deb ${debian_mirror} trixie-updates main EOF -echo "deb ${debian_mirror} bookworm-backports main" > /etc/apt/sources.list.d/backports.list +echo "deb ${debian_mirror} trixie-backports main" > /etc/apt/sources.list.d/backports.list apt-get update || apt-get update @@ -104,7 +104,7 @@ apt-get upgrade apt-get update || apt-get update packages=" - androguard/bookworm-backports + androguard/trixie-backports apksigner default-jdk-headless default-jre-headless @@ -118,7 +118,7 @@ packages=" python3-magic python3-packaging rsync - sdkmanager/bookworm-backports + sdkmanager sudo unzip " diff --git a/makebuildserver b/makebuildserver index 52346937..ce54ff1c 100755 --- a/makebuildserver +++ b/makebuildserver @@ -41,18 +41,18 @@ logging.basicConfig(format=logformat, level=loglevel) tail = None -BASEBOX_DEFAULT = 'debian/bookworm64' -BASEBOX_VERSION_DEFAULT = "12.20250126.1" +BASEBOX_DEFAULT = 'debian/testing64' +BASEBOX_VERSION_DEFAULT = "20250426.1" BASEBOX_CHECKSUMS = { - "12.20250126.1": { + "20250426.1": { "libvirt": { - "box.img": "64eb111ab8b0785253c7542caaa7f560d4532b8133266ec94804882d209017d3", + "box.img": "f5b8527139e775083e9d42a590fbdfec180005e25ef95a683353838051907d8c", "Vagrantfile": "f9c6fcbb47a4d0d33eb066859c8e87efd642287a638bd7da69a9e7a6f25fec47", "metadata.json": "20dc0268a79410dbf01c7e544ba5138f6f695a298b53c56c87a25f68c5031173", }, "virtualbox": { - "box.ovf": "d8493bdfc4c42b5f66b815efe2a90d20b639eb2ce12cc8c7c51a3039674d146a", - "box.vmdk": "6927001058f57b325544c399297c41ec9c6fbfc21cb764b58f2ff0495864a4fa", + "box.ovf": "0efe4d92ebe4a9ae3a9f332adfc56dd74318d1bca7ef842d649d8735504ca62b", + "box.vmdk": "d83566ba214a297e53db6750db0789213efcca027e583c0fcbf36bfaa1859487", "Vagrantfile": "0bbc2ae97668d8da27ab97b766752dcd0bf9e41900e21057de15a58ee7fae47d", "metadata.json": "ffdaa989f2f6932cd8042e1102371f405cc7ad38e324210a1326192e4689e83a", } From 89079d4d735a76c725a801e902d6e9a96f78f1a3 Mon Sep 17 00:00:00 2001 From: Licaon_Kter Date: Mon, 18 Aug 2025 17:22:45 +0300 Subject: [PATCH 02/12] checkupdates: update blocklist to trixie update more checkupdate --- fdroidserver/checkupdates.py | 15 ++++++++++++--- 1 file changed, 12 insertions(+), 3 deletions(-) diff --git a/fdroidserver/checkupdates.py b/fdroidserver/checkupdates.py index ea33ee72..d17d187c 100644 --- a/fdroidserver/checkupdates.py +++ b/fdroidserver/checkupdates.py @@ -616,7 +616,7 @@ def checkupdates_app(app: metadata.App, auto: bool, make_commit: bool = False) - newbuilds = copy.deepcopy(builds[-len(vercodes):]) # These are either built-in or invalid in newer system versions - bookworm_blocklist = [ + trixie_blocklist = [ 'apt-get install -y openjdk-11-jdk', 'apt-get install openjdk-11-jdk-headless', 'apt-get install -y openjdk-11-jdk-headless', @@ -625,14 +625,23 @@ def checkupdates_app(app: metadata.App, auto: bool, make_commit: bool = False) - 'apt-get install -y openjdk-17-jdk', 'apt-get install openjdk-17-jdk-headless', 'apt-get install -y openjdk-17-jdk-headless', + 'apt-get install -y -t trixie openjdk-17-jdk-headless', + 'apt-get install -t trixie openjdk-21-jdk-headless', + 'apt-get install -y openjdk-21-jdk-headless', + 'apt-get install -y -t sid openjdk-21-jdk-headless', + 'apt-get install -y -t trixie openjdk-21-jdk-headless', + 'apt-get install -y -t trixie openjdk-22-jdk-headless', + 'apt-get install -y -t trixie openjdk-23-jdk-headless', + 'echo "deb http://deb.debian.org/debian trixie main" > /etc/apt/sources.list.d/trixie.list', + 'echo "deb https://deb.debian.org/debian trixie main" > /etc/apt/sources.list.d/trixie.list', 'update-alternatives --auto java', 'update-java-alternatives -a', ] for build in newbuilds: if "sudo" in build: - if any("openjdk-11" in line for line in build["sudo"]) or any("openjdk-17" in line for line in build["sudo"]): - build["sudo"] = [line for line in build["sudo"] if line not in bookworm_blocklist] + if any("openjdk-11" in line for line in build["sudo"]) or any("openjdk-17" in line for line in build["sudo"]) or any("openjdk-21" in line for line in build["sudo"]): + build["sudo"] = [line for line in build["sudo"] if line not in trixie_blocklist] if build["sudo"] == ['apt-get update']: build["sudo"] = '' From 892c8f1f730ac7461d6a614fb0108770febb22d4 Mon Sep 17 00:00:00 2001 From: Licaon_Kter Date: Thu, 28 Aug 2025 16:03:16 +0300 Subject: [PATCH 03/12] CI: update to trixie --- .gitlab-ci.yml | 26 +++++++++++++------------- 1 file changed, 13 insertions(+), 13 deletions(-) diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index 06bf77bb..420291f1 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -263,7 +263,7 @@ ubuntu_jammy_pip: # Run all the various linters and static analysis tools. hooks/pre-commit: stage: lint - image: debian:bookworm-slim + image: debian:trixie-slim variables: LANG: C.UTF-8 script: @@ -285,7 +285,7 @@ hooks/pre-commit: - ./hooks/pre-commit bandit: - image: debian:bookworm-slim + image: debian:trixie-slim <<: *python-rules-changes <<: *apt-template script: @@ -295,7 +295,7 @@ bandit: pylint: stage: lint - image: debian:bookworm-slim + image: debian:trixie-slim <<: *python-rules-changes <<: *apt-template script: @@ -315,7 +315,7 @@ pylint: shellcheck: stage: lint - image: debian:bookworm-slim + image: debian:trixie-slim rules: - changes: - .gitlab-ci.yml @@ -354,7 +354,7 @@ pip-audit: # so important to scan that kind of install in CI. # https://docs.safetycli.com/safety-docs/installation/gitlab safety: - image: debian:bookworm-slim + image: debian:trixie-slim rules: - if: $SAFETY_API_KEY changes: @@ -380,7 +380,7 @@ safety: # TODO tests/*/*/*.yaml are not covered yamllint: stage: lint - image: debian:bookworm-slim + image: debian:trixie-slim rules: - changes: - .gitlab-ci.yml @@ -409,7 +409,7 @@ yamllint: locales: stage: lint - image: debian:bookworm-slim + image: debian:trixie-slim variables: LANG: C.UTF-8 script: @@ -591,7 +591,7 @@ fdroid build: # fdroiddata because that one is known to work, and this is a CI job, # so it should be isolated from the normal churn of fdroiddata. plugin_fetchsrclibs: - image: debian:bookworm-slim + image: debian:trixie-slim <<: *apt-template rules: - changes: @@ -635,7 +635,7 @@ plugin_fetchsrclibs: # test a full update and deploy cycle to gitlab.com servergitmirrors: - image: debian:bookworm-slim + image: debian:trixie-slim <<: *apt-template rules: - if: $CI_COMMIT_BRANCH == "master" && $CI_PROJECT_PATH == "fdroid/fdroidserver" @@ -679,12 +679,12 @@ servergitmirrors: - diff repo/index-v1.jar index-v1.jar Build documentation: - image: debian:bookworm-slim + image: debian:trixie-slim <<: *python-rules-changes <<: *apt-template script: - apt-get install make python3-sphinx python3-numpydoc python3-pydata-sphinx-theme pydocstyle fdroidserver - - apt purge fdroidserver + - apt-get purge fdroidserver # ignore vendored files - pydocstyle --verbose --match='(?!apksigcopier|looseversion|setup|test_).*\.py' fdroidserver - cd docs @@ -783,7 +783,7 @@ docker: - cd buildserver - docker build -t $TEST_IMAGE --build-arg GIT_REV_PARSE_HEAD=$(git rev-parse HEAD) . - docker tag $TEST_IMAGE $RELEASE_IMAGE - - docker tag $TEST_IMAGE ${RELEASE_IMAGE}-bookworm + - docker tag $TEST_IMAGE ${RELEASE_IMAGE}-trixie - echo $CI_JOB_TOKEN | docker login -u gitlab-ci-token --password-stdin registry.gitlab.com # This avoids filling up gitlab.com free tier accounts with unused docker images. - if test -z "$FDROID_PUSH_DOCKER_IMAGE"; then @@ -793,7 +793,7 @@ docker: exit 0; fi - docker push $RELEASE_IMAGE - - docker push $RELEASE_IMAGE-bookworm + - docker push $RELEASE_IMAGE-trixie # PUBLISH is the signing server. It has a very minimal manual setup. From 502433e0e6e6a2ede4148eabef8f807411afce04 Mon Sep 17 00:00:00 2001 From: linsui <2873532-linsui@users.noreply.gitlab.com> Date: Mon, 19 Jan 2026 21:50:43 +0800 Subject: [PATCH 04/12] CI: update to nose2 --- .gitlab-ci.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index 420291f1..a78deb73 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -279,7 +279,7 @@ hooks/pre-commit: pyflakes3 python3-dev python3-git - python3-nose + python3-nose2 python3-pip python3-yaml - ./hooks/pre-commit From 2d1e0be98816370fc9173db5faec02515365fd41 Mon Sep 17 00:00:00 2001 From: linsui <2873532-linsui@users.noreply.gitlab.com> Date: Mon, 19 Jan 2026 21:53:36 +0800 Subject: [PATCH 05/12] fix E721 type-comparison --- fdroidserver/common.py | 4 ++-- fdroidserver/deploy.py | 2 +- fdroidserver/lint.py | 2 +- fdroidserver/metadata.py | 2 +- fdroidserver/update.py | 2 +- 5 files changed, 6 insertions(+), 6 deletions(-) diff --git a/fdroidserver/common.py b/fdroidserver/common.py index 5de346c6..b8392e5b 100644 --- a/fdroidserver/common.py +++ b/fdroidserver/common.py @@ -904,7 +904,7 @@ def parse_human_readable_size(size): try: return int(float(size)) except (ValueError, TypeError) as exc: - if type(size) != str: + if type(size) is not str: raise ValueError( _('Could not parse size "{size}", wrong type "{type}"').format( size=size, type=type(size) @@ -2516,7 +2516,7 @@ def is_strict_application_id(name): def parse_srclib_spec(spec): - if type(spec) != str: + if type(spec) is not str: raise MetaDataException( _("can not parse scrlib spec (not a string): '{}'").format(spec) ) diff --git a/fdroidserver/deploy.py b/fdroidserver/deploy.py index d5380637..15c80896 100644 --- a/fdroidserver/deploy.py +++ b/fdroidserver/deploy.py @@ -998,7 +998,7 @@ def upload_to_github_releases_repo(repo_conf, release_infos, global_gh_token): ) return conf_package_names = repo_conf.get("packageNames", []) - if type(conf_package_names) == str: + if type(conf_package_names) is str: conf_package_names = [conf_package_names] if not conf_package_names: logging.warning( diff --git a/fdroidserver/lint.py b/fdroidserver/lint.py index 66bc6505..3c3bd3b8 100644 --- a/fdroidserver/lint.py +++ b/fdroidserver/lint.py @@ -2360,7 +2360,7 @@ def lint_config(arg): if type(data[key]) not in (str, list, dict): passed = False show_error = True - elif type(data[key]) != t: + elif type(data[key]) is not t: passed = False show_error = True if show_error: diff --git a/fdroidserver/metadata.py b/fdroidserver/metadata.py index 385d1408..10302ce2 100644 --- a/fdroidserver/metadata.py +++ b/fdroidserver/metadata.py @@ -390,7 +390,7 @@ class FieldValidator: def check(self, v, appid): if not v: return - if type(v) == list: + if type(v) is list: values = v else: values = [v] diff --git a/fdroidserver/update.py b/fdroidserver/update.py index f6943a7a..0a9762fe 100644 --- a/fdroidserver/update.py +++ b/fdroidserver/update.py @@ -973,7 +973,7 @@ def insert_funding_yml_donation_links(apps): ) ) logging.error(e) - if not data or type(data) != dict: + if not data or type(data) is not dict: continue if not app.get('Liberapay') and 'liberapay' in data: s = sanitize_funding_yml_name(data['liberapay']) From 14ebe3edb2135be8ca0736098e6784689d97bf95 Mon Sep 17 00:00:00 2001 From: linsui <2873532-linsui@users.noreply.gitlab.com> Date: Wed, 1 Oct 2025 23:45:18 +0800 Subject: [PATCH 06/12] fix C0207 use-maxsplit-arg --- fdroidserver/common.py | 2 +- fdroidserver/update.py | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/fdroidserver/common.py b/fdroidserver/common.py index b8392e5b..47cf5d53 100644 --- a/fdroidserver/common.py +++ b/fdroidserver/common.py @@ -183,7 +183,7 @@ def get_default_cachedir(): removed. """ - appname = __name__.split('.')[0] + appname = __name__.split('.', maxsplit=1)[0] try: import platformdirs diff --git a/fdroidserver/update.py b/fdroidserver/update.py index 0a9762fe..ce71e9b3 100644 --- a/fdroidserver/update.py +++ b/fdroidserver/update.py @@ -1420,9 +1420,9 @@ def parse_ios_screenshot_name(path): s = path.stem.split('@') if len(s) >= 2: if "iphone" in s[0].lower(): - return ("phoneScreenshots", s[0].strip(), ('@'.join(s[1:])).split('-')[0].strip()) + return ("phoneScreenshots", s[0].strip(), ('@'.join(s[1:])).split('-', maxsplit=1)[0].strip()) elif "ipad" in s[0].lower(): - return ("tenInchScreenshots", s[0].strip(), ('@'.join(s[1:])).split('-')[0].strip()) + return ("tenInchScreenshots", s[0].strip(), ('@'.join(s[1:])).split('-', maxsplit=1)[0].strip()) else: fragments = path.stem.lower().split("_") device = "unknown" From bdbe3e501def4171a14bff8a0b11ba7bc1e2c2c8 Mon Sep 17 00:00:00 2001 From: linsui <2873532-linsui@users.noreply.gitlab.com> Date: Wed, 1 Oct 2025 23:45:55 +0800 Subject: [PATCH 07/12] pylint: disable global-variable-not-assigned, global-statement, global-variable-undefined, too-many-positional-arguments and unspecified-encoding --- pyproject.toml | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/pyproject.toml b/pyproject.toml index 5c5a159c..1c669271 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -99,6 +99,9 @@ confidence = ["HIGH", "INFERENCE"] disable = [ "broad-exception-caught", "broad-exception-raised", + "global-statement", + "global-variable-not-assigned", + "global-variable-undefined", "invalid-name", "missing-class-docstring", "missing-function-docstring", @@ -107,6 +110,8 @@ disable = [ "no-else-raise", "no-else-return", "subprocess-run-check", + "too-many-positional-arguments", + "unspecified-encoding", "use-dict-literal", ] From 2c5299b6d05cd9d1d7ea376d50336c25a05aaae1 Mon Sep 17 00:00:00 2001 From: linsui <2873532-linsui@users.noreply.gitlab.com> Date: Wed, 1 Oct 2025 23:04:40 +0800 Subject: [PATCH 08/12] scanner: fix json_per_appid['disabled'] is None --- fdroidserver/scanner.py | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/fdroidserver/scanner.py b/fdroidserver/scanner.py index d892e1d9..d34c0277 100644 --- a/fdroidserver/scanner.py +++ b/fdroidserver/scanner.py @@ -1246,9 +1246,7 @@ def main(): if app.Disabled and not options.force: logging.info(_("Skipping {appid}: disabled").format(appid=appid)) - json_per_appid['disabled'] = MessageStore().infos.append( - 'Skipping: disabled' - ) + json_per_appid['disabled'] = MessageStore().infos + ['Skipping: disabled'] continue try: From fa040155c6bcba296ff46269f54fbfadcf4b6b66 Mon Sep 17 00:00:00 2001 From: linsui <2873532-linsui@users.noreply.gitlab.com> Date: Mon, 22 Dec 2025 18:00:39 +0800 Subject: [PATCH 09/12] CI: fix pip install --- .gitlab-ci.yml | 7 ++++--- fdroidserver/checkupdates.py | 1 + 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index a78deb73..4d4a92bd 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -371,8 +371,11 @@ safety: python3-biplist python3-pip python3-pycountry + python3-venv - $pip install --break-system-packages . + - python3 -m venv --system-site-packages env + - . env/bin/activate - $pip install --break-system-packages safety - python3 -m safety --key "$SAFETY_API_KEY" --stage cicd scan @@ -609,13 +612,12 @@ plugin_fetchsrclibs: python3-pil python3-pip python3-pycparser + python3-setuptools python3-venv - python3 -m venv --system-site-packages env - . env/bin/activate - export PATH="$CI_PROJECT_DIR:$PATH" - export PYTHONPATH="$CI_PROJECT_DIR/examples" - # workaround https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=1003252 - - export SETUPTOOLS_USE_DISTUTILS=stdlib - $pip install -e . - fdroid | grep fetchsrclibs @@ -660,7 +662,6 @@ servergitmirrors: - python3 -m venv --system-site-packages env - . env/bin/activate - export PYTHONPATH=`pwd` - - export SETUPTOOLS_USE_DISTUTILS=stdlib # https://github.com/pypa/setuptools/issues/2956 - $pip install -e . - mkdir /root/.ssh/ - ./tests/key-tricks.py diff --git a/fdroidserver/checkupdates.py b/fdroidserver/checkupdates.py index d17d187c..57718bb5 100644 --- a/fdroidserver/checkupdates.py +++ b/fdroidserver/checkupdates.py @@ -632,6 +632,7 @@ def checkupdates_app(app: metadata.App, auto: bool, make_commit: bool = False) - 'apt-get install -y -t trixie openjdk-21-jdk-headless', 'apt-get install -y -t trixie openjdk-22-jdk-headless', 'apt-get install -y -t trixie openjdk-23-jdk-headless', + 'apt-get install -y -t trixie openjdk-25-jdk-headless', 'echo "deb http://deb.debian.org/debian trixie main" > /etc/apt/sources.list.d/trixie.list', 'echo "deb https://deb.debian.org/debian trixie main" > /etc/apt/sources.list.d/trixie.list', 'update-alternatives --auto java', From 54a1bceff857aab87688a2a427da5d670f57935c Mon Sep 17 00:00:00 2001 From: linsui <2873532-linsui@users.noreply.gitlab.com> Date: Fri, 16 Jan 2026 21:22:28 +0800 Subject: [PATCH 10/12] docker: update to trixie --- buildserver/Dockerfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/buildserver/Dockerfile b/buildserver/Dockerfile index 27ada3f8..61a78452 100644 --- a/buildserver/Dockerfile +++ b/buildserver/Dockerfile @@ -1,5 +1,5 @@ -FROM debian:bookworm +FROM debian:trixie ENV LANG=C.UTF-8 \ DEBIAN_FRONTEND=noninteractive From 14573e7ccb2377974927b421c1f7c073658fe74f Mon Sep 17 00:00:00 2001 From: linsui <2873532-linsui@users.noreply.gitlab.com> Date: Mon, 19 Jan 2026 20:58:30 +0800 Subject: [PATCH 11/12] fix B105 hardcoded_password_string --- fdroidserver/nightly.py | 4 ++-- tests/test_deploy.py | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/fdroidserver/nightly.py b/fdroidserver/nightly.py index 9565b8d8..3b892ea8 100644 --- a/fdroidserver/nightly.py +++ b/fdroidserver/nightly.py @@ -230,9 +230,9 @@ def clone_git_repo(clone_url, git_mirror_path): 'GIT_ASKPASS': '/bin/true', 'SSH_ASKPASS': '/bin/true', 'GIT_USERNAME': 'u', - 'GIT_PASSWORD': 'p', + 'GIT_PASSWORD': 'p', # nosec B105 'GIT_HTTP_USERNAME': 'u', - 'GIT_HTTP_PASSWORD': 'p', + 'GIT_HTTP_PASSWORD': 'p', # nosec B105 'GIT_SSH': '/bin/false', # for git < 2.3 'GIT_TERMINAL_PROMPT': '0', }, diff --git a/tests/test_deploy.py b/tests/test_deploy.py index 15c3c49a..9f900f61 100755 --- a/tests/test_deploy.py +++ b/tests/test_deploy.py @@ -1079,7 +1079,7 @@ class GitHubReleasesTest(unittest.TestCase): { "projectUrl": "https://github.com/custom/app", "packageNames": ["more.custom.app"], - "token": "custom_token", + "token": "custom_token", # nosec B105 }, ] @@ -1121,7 +1121,7 @@ class GitHubReleasesTest(unittest.TestCase): { "projectUrl": "https://github.com/custom/app", "packageNames": ["more.custom.app"], - "token": "custom_token", + "token": "custom_token", # nosec B105 }, "fri_result", "fake_global_token", From 5887c5e8dbcf01f15ee67f108eed04b81bfd31c5 Mon Sep 17 00:00:00 2001 From: linsui <2873532-linsui@users.noreply.gitlab.com> Date: Mon, 19 Jan 2026 22:08:08 +0800 Subject: [PATCH 12/12] update ruamel.yaml version restriction --- setup.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/setup.py b/setup.py index 49b81467..349d90b4 100755 --- a/setup.py +++ b/setup.py @@ -103,7 +103,7 @@ setup( 'python-vagrant', 'PyYAML', 'qrcode', - 'ruamel.yaml >= 0.15, < 0.17.22', + 'ruamel.yaml >= 0.17.22', 'requests >= 2.5.2, != 2.11.0, != 2.12.2, != 2.18.0', 'sdkmanager >= 0.6.4', 'yamllint',