From: Erik Winkels Date: Thu, 12 Feb 2026 15:45:22 +0000 (+0100) Subject: Update repo test script. X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=237d6861e36bbe66cedbd4282d0aabaebaf26836;p=thirdparty%2Fpdns.git Update repo test script. This had not been synced to the repo for a while. --- diff --git a/build-scripts/docker/repo-test/README.md b/build-scripts/docker/repo-test/README.md index ab11ee2e13..6ba90e1ea3 100644 --- a/build-scripts/docker/repo-test/README.md +++ b/build-scripts/docker/repo-test/README.md @@ -10,6 +10,17 @@ To see the supported releases do `./generate-repo-files.py --help`. This tool is mainly used internally to test releases but might be useful for others. +## EL-10 + +(temporary section) + +We are in the process of updating our GPG keys. For now: + +- `docker run -it quay.io/rockylinux/rockylinux:10` +- `curl -o /etc/yum.repos.d/powerdns-rec-53.repo https://repo.powerdns.com/repo-files/el-rec-53.repo` +- `yum install -y oracle-epel-release bind-utils` +- `yum install --assumeyes --nogpgcheck pdns-recursor` + ## Known Issues - `--test-aarch64` really only makes sense if the test script is running on @@ -60,7 +71,7 @@ an image and run a container using that image. ### `--run-output` This argument can be a little unclear. It is only applicable when -`--test` is also supplied and `--verbose` is *NOT* supplied; otherwise, +`--test` is also supplied and `--verbose` is *NOT* supplied, otherwise it is ignored. Since run output is not a lot when testing releases it can be nice to @@ -76,9 +87,9 @@ show the output from running the container even when `--verbose` is off - option to test a specific release version and not just the latest - maybe: - make error codes we get for building and running containers - readable if we can find a lib for this; otherwise, it requires too + readable if we can find a lib for this, otherwise it requires too much maintenance - - `errno` https://joeyh.name/code/moreutils/ + - `errno` http://joeyh.name/code/moreutils/ - parameter to test all the things! (this can currently easily done by a shell script / command) - `for RELEASE in auth-42 auth-43 auth-44 auth-master rec-42 rec-43 rec-44 rec-45 rec-master dnsdist-15 dnsdist-16 dnsdist-master; do ./generate-repo-files.py --test $RELEASE; done` diff --git a/build-scripts/docker/repo-test/generate-repo-files.py b/build-scripts/docker/repo-test/generate-repo-files.py index c950d0e230..89d9beb5fd 100755 --- a/build-scripts/docker/repo-test/generate-repo-files.py +++ b/build-scripts/docker/repo-test/generate-repo-files.py @@ -34,6 +34,7 @@ g_env = Environment( ) g_dockerfile = 'Dockerfile.' +g_run_output = False # Init Functions @@ -43,16 +44,18 @@ def init_argparser(): 'test PowerDNS repositories.') parser.add_argument('release', metavar='RELEASE', choices=[# Authoritative Server - 'auth-48', 'auth-49', 'auth-50', + 'auth-47', 'auth-48', 'auth-49', 'auth-50', 'auth-master', # Recursor - 'rec-48', 'rec-49', 'rec-50', 'rec-51', 'rec-52', 'rec-53', + 'rec-48', 'rec-49', 'rec-50', 'rec-51', 'rec-52', 'rec-53', 'rec-54', 'rec-master', # DNSDist - 'dnsdist-17', 'dnsdist-18', 'dnsdist-19', 'dnsdist-20', + 'dnsdist-17', 'dnsdist-18', 'dnsdist-19', 'dnsdist-20', 'dnsdist-21', 'dnsdist-master'], help='the release to generate Docker files for: ' + '%(choices)s') + parser.add_argument('--run-output', action='store_true', + help='always show output from running a container') parser.add_argument('--test', action='store_true', help='test the release') parser.add_argument('--test-aarch64', action='store_true', @@ -89,28 +92,31 @@ def write_dockerfile (os, os_version, release): pkg = 'dnsdist' cmd = 'dnsdist' - with open('{}{}.{}-{}'.format(g_dockerfile, release, os, os_version), 'w') as f: - # This comment was in the template for the `--nobest` part but that makes - # the template look even more different than the final output, so: - # - # > When should the logic be in the code and when in the template? :shrug: - # > I prefer it to be in the code but I also do not want to add extra vars - # > and logic to the code unless necessary. - f.write(tpl.render({ "os": os, - "os_image": os_image, - "os_version": os_version, - "release": release, - "cmd": cmd, - "pkg": pkg })) + f = open('{}{}.{}-{}'.format(g_dockerfile, release, os, os_version), 'w') + + # This comment was in the template for the `--nobest` part but that makes + # the template look even more different than the final output, so: + # + # > When should the logic be in the code and when in the template? :shrug: + # > I prefer it to be in the code but I also do not want to add extra vars + # > and logic to the code unless necessary. + f.write(tpl.render({ "os": os, + "os_image": os_image, + "os_version": os_version, + "release": release, + "cmd": cmd, + "pkg": pkg })) + f.close() def write_list_file (os, os_version, release): tpl = g_env.get_template('pdns-list.jinja2') - with open('pdns.list.{}.{}-{}'.format(release, os, os_version), 'w') as f: - f.write(tpl.render({ "os": os, - "os_version": os_version, - "release": release })) + f = open('pdns.list.{}.{}-{}'.format(release, os, os_version), 'w') + f.write(tpl.render({ "os": os, + "os_version": os_version, + "release": release })) + f.close() def write_pkg_pin_file (release): @@ -121,47 +127,49 @@ def write_pkg_pin_file (release): elif release.startswith('dnsdist-'): pkg = 'dnsdist' - with open('pkg-pin', 'w') as f: - f.write(tpl.render({ "pkg": pkg })) + f = open('pkg-pin', 'w') + f.write(tpl.render({ "pkg": pkg })) + f.close() def write_release_files (release): if g_verbose: print("Writing release files...") - if release in ['auth-48', 'auth-49', 'auth-50', 'auth-master', - 'rec-48', 'rec-49', 'rec-50', 'rec-51', 'rec-52', 'rec-53', 'rec-master', - 'dnsdist-17', 'dnsdist-18', 'dnsdist-19', 'dnsdist-20', 'dnsdist-master']: + if release in ['auth-47', 'auth-48', 'auth-49', 'auth-50', 'auth-master', + 'rec-48', 'rec-49', 'rec-50', 'rec-51', 'rec-52', 'rec-53', 'rec-54', 'rec-master', + 'dnsdist-17', 'dnsdist-18', 'dnsdist-19', 'dnsdist-20', 'dnsdist-21', 'dnsdist-master']: write_pkg_pin_file(release) write_dockerfile('el', '8', release) write_dockerfile('el', '9', release) write_dockerfile('debian', 'bullseye', release) write_list_file('debian', 'bullseye', release) - if release != 'auth-50' and release != 'rec-53' and release != 'dnsdist-20': + if release != 'auth-50' and release != 'rec-54' and release != 'rec-53' and release != 'dnsdist-20' and release != 'dnsdist-21': write_dockerfile('ubuntu', 'focal', release) write_list_file('ubuntu', 'focal', release) write_dockerfile('ubuntu', 'jammy', release) write_list_file('ubuntu', 'jammy', release) - if release in ['rec-53', 'rec-master', - 'dnsdist-20', 'dnsdist-master']: + if release in ['auth-50', 'auth-master', + 'rec-53', 'rec-54', 'rec-master', + 'dnsdist-20', 'dnsdist-21', 'dnsdist-master']: write_dockerfile('el', '10', release) if release in ['auth-48', 'auth-49', 'auth-50', 'auth-master', - 'rec-48', 'rec-49', 'rec-50', 'rec-51', 'rec-52', 'rec-53', 'rec-master', - 'dnsdist-19', 'dnsdist-20', 'dnsdist-master']: + 'rec-48', 'rec-49', 'rec-50', 'rec-51', 'rec-52', 'rec-53', 'rec-54', 'rec-master', + 'dnsdist-19', 'dnsdist-20', 'dnsdist-21', 'dnsdist-master']: write_dockerfile('debian', 'bookworm', release) write_list_file('debian', 'bookworm', release) if release in ['auth-49', 'auth-50', 'auth-master', - 'rec-53', 'rec-master', - 'dnsdist-20', 'dnsdist-master']: + 'rec-53', 'rec-54', 'rec-master', + 'dnsdist-20', 'dnsdist-21', 'dnsdist-master']: write_dockerfile('debian', 'trixie', release) write_list_file('debian', 'trixie', release) if release in ['auth-49', 'auth-50', 'auth-master', - 'rec-50', 'rec-51', 'rec-52', 'rec-53', 'rec-master', - 'dnsdist-19', 'dnsdist-20', 'dnsdist-master']: + 'rec-50', 'rec-51', 'rec-52', 'rec-53', 'rec-54', 'rec-master', + 'dnsdist-19', 'dnsdist-20', 'dnsdist-21', 'dnsdist-master']: write_dockerfile('ubuntu', 'noble', release) write_list_file('ubuntu', 'noble', release) @@ -194,6 +202,10 @@ def build (dockerfile, arch='x86_64'): def run (tag, arch='x86_64'): + if g_run_output: + capture_run_output = False + else: + capture_run_output = not(g_verbose) print('Running Docker container tagged {}...'.format(tag)) if arch == 'x86_64': cp = subprocess.run(['docker', 'run', tag], @@ -244,8 +256,8 @@ def test_release (release, arch='x86_64'): returned_versions = [] print('=== testing {} ({}) ==='.format(release, arch)) for df in dockerfiles: - if arch == 'aarch64' and not release in ['auth-50', 'auth-49', 'rec-49', 'rec-50', 'rec-51', 'rec-52', 'rec-53', 'rec-master', - 'dnsdist-19', 'dnsdist-20', 'dnsdist-master']: + if arch == 'aarch64' and not release in ['auth-50', 'auth-49', 'rec-49', 'rec-50', 'rec-51', 'rec-52', 'rec-53', 'rec-54', 'rec-master', + 'dnsdist-19', 'dnsdist-20', 'dnsdist-21', 'dnsdist-master']: continue if g_verbose: print('--- {} ---'.format(df)) @@ -294,6 +306,9 @@ if args.version: if args.verbose: g_verbose = True +if args.run_output: + g_run_output = True + write_release_files(args.release) if args.test: diff --git a/build-scripts/docker/repo-test/templates/Dockerfile-el.jinja2 b/build-scripts/docker/repo-test/templates/Dockerfile-el.jinja2 index 9dbabb84d9..9b9c473206 100644 --- a/build-scripts/docker/repo-test/templates/Dockerfile-el.jinja2 +++ b/build-scripts/docker/repo-test/templates/Dockerfile-el.jinja2 @@ -1,6 +1,12 @@ +{% if os_version == '10' %} +FROM quay.io/rockylinux/rockylinux:{{ os_version }} + +RUN yum install -y epel-release bind-utils +{% else %} FROM {{ os_image }}:{{ os_version }} RUN yum install -y oracle-epel-release-el{{ os_version }} bind-utils +{% endif %} {% if release == 'dnsdist-15' and os_version == '8' %} RUN dnf install -y 'dnf-command(config-manager)'