]> git.ipfire.org Git - thirdparty/pdns.git/commitdiff
Update repo test script.
authorErik Winkels <erik.winkels@powerdns.com>
Thu, 12 Feb 2026 15:45:22 +0000 (16:45 +0100)
committerErik Winkels <erik.winkels@powerdns.com>
Thu, 12 Feb 2026 15:45:22 +0000 (16:45 +0100)
This had not been synced to the repo for a while.

build-scripts/docker/repo-test/README.md
build-scripts/docker/repo-test/generate-repo-files.py
build-scripts/docker/repo-test/templates/Dockerfile-el.jinja2

index ab11ee2e13ed145d3492517220655ac26bb29751..6ba90e1ea3ec62f7f74c17c331f2db77b4ff6d9b 100644 (file)
@@ -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`
index c950d0e2300b8a772bb3c84cc0f07e38aeb88aa6..89d9beb5fdefa4a087dcaac2e33b5887e4d7dc75 100755 (executable)
@@ -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:
index 9dbabb84d9ac754957f309d8ad6b27143e477639..9b9c473206d522e0ce6979c02e95addf41895d9c 100644 (file)
@@ -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)'