[Git][qa/jenkins.debian.net][master] 2 commits: Fix reproduce.debian.net /all/api/ nginx proxy rules

Holger Levsen (@holger) gitlab at salsa.debian.org
Thu Feb 20 13:03:28 GMT 2025



Holger Levsen pushed to branch master at Debian QA / jenkins.debian.net


Commits:
e62b098f by kpcyrd at 2025-02-20T11:55:15+01:00
Fix reproduce.debian.net /all/api/ nginx proxy rules

Signed-off-by: Holger Levsen <holger at layer-acht.org>

- - - - -
e742ee8b by Holger Levsen at 2025-02-20T14:03:08+01:00
r.d.n: move to r.d.n/$arch

Signed-off-by: Holger Levsen <holger at layer-acht.org>

- - - - -


9 changed files:

- bin/rebuilderd_stats.py
- hosts/osuosl5-amd64/etc/nginx/nginx.conf
- hosts/osuosl5-amd64/var/www/html/index_all.html → hosts/osuosl5-amd64/var/www/html/all/index.html
- hosts/osuosl5-amd64/var/www/html/index_amd64.html → hosts/osuosl5-amd64/var/www/html/amd64/index.html
- hosts/osuosl5-amd64/var/www/html/index_arm64.html → hosts/osuosl5-amd64/var/www/html/arm64/index.html
- hosts/osuosl5-amd64/var/www/html/index_armhf.html → hosts/osuosl5-amd64/var/www/html/armhf/index.html
- hosts/osuosl5-amd64/var/www/html/index_i386.html → hosts/osuosl5-amd64/var/www/html/i386/index.html
- hosts/osuosl5-amd64/var/www/html/rdn_index.html → hosts/osuosl5-amd64/var/www/html/index.html
- hosts/osuosl5-amd64/var/www/html/index_riscv64.html → hosts/osuosl5-amd64/var/www/html/riscv64/index.html


Changes:

=====================================
bin/rebuilderd_stats.py
=====================================
@@ -92,10 +92,10 @@ def main() -> None:
     print(
         '<!DOCTYPE html><html lang="en"><head>'
         '<meta charset="utf-8">'
-        f"<title>https://{arch}.reproduce.debian.net/ stats</title>"
+        f"<title>https://reproduce.debian.net/{arcj}/stats</title>"
         '<meta name="viewport" content="width=device-width, initial-scale=1">'
         "</head><body>"
-        f'<header><h1>https://<a href="/">{arch}</a>.reproduce.debian.net/ stats</h1></header> <main>'
+        f'<header><h1>https://<a href="/">reproduce</a>.debian.net/<a href="/{arch}">{arch}</a>/stats</h1></header> <main>'
     )
     print(f"Database size: {bytes2human(path.getsize(db))}<br/>")
     print(f"Last changed: {datetime.now().replace(microsecond=0)} - updated every 3h.")


=====================================
hosts/osuosl5-amd64/etc/nginx/nginx.conf
=====================================
@@ -13,14 +13,33 @@ http {
     server_tokens       off;
 
     server {
+        listen          80;
+        server_name     all.reproduce.debian.net;
+        server_name     reproduce.debian.net;
         server_name     amd64.reproduce.debian.net;
+        server_name     i386.reproduce.debian.net;
+        server_name     arm64.reproduce.debian.net;
+        server_name     armhf.reproduce.debian.net;
+        server_name     riscv64.reproduce.debian.net;
+        location /.well-known/acme-challenge/ {
+            alias /var/lib/dehydrated/acme-challenges/;
+            disable_symlinks off;
+            autoindex off;
+        }
+        location / {
+            return 301 https://$host$request_uri;
+        }
+    }
+
+    server {
+        server_name     reproduce.debian.net;
         ssi on;
-        index index_amd64.html;
+        autoindex on;
         root /var/www/html;
 
         listen 443 ssl;
-        ssl_certificate /var/lib/dehydrated/certs/amd64.reproduce.debian.net/fullchain.pem;
-        ssl_certificate_key /var/lib/dehydrated/certs/amd64.reproduce.debian.net/privkey.pem;
+        ssl_certificate /var/lib/dehydrated/certs/reproduce.debian.net/fullchain.pem;
+        ssl_certificate_key /var/lib/dehydrated/certs/reproduce.debian.net/privkey.pem;
 
         ssl_session_cache shared:le_nginx_SSL:10m;
         ssl_session_timeout 1440m;
@@ -36,90 +55,99 @@ http {
             autoindex off;
         }
 
-        location / {
-            # First attempt to serve request as file, then
-            # as directory, then fall back to displaying a 404.
-            try_files $uri $uri/ =404;
+        # all
+        location /all/api/ {
+            proxy_set_header    X-Real-IP          $remote_addr;
+            proxy_pass http://127.0.0.1:8489/api/;
         }
-
-        location /api/ {
+        location = /all/api/v0/build/report {
+            client_max_body_size 200M;
             proxy_set_header    X-Real-IP          $remote_addr;
-            proxy_pass http://127.0.0.1:8484;
+            proxy_pass http://127.0.0.1:8489/api/v0/build/report;
         }
-        location = /api/v0/build/report {
+        location /all/stats/ {
+            alias /srv/rebuilderd/all/stats/ ;
+            disable_symlinks off;
+        }
+        # amd64
+        location /amd64/api/ {
+            proxy_set_header    X-Real-IP          $remote_addr;
+            proxy_pass http://127.0.0.1:8484/api/;
+        }
+        location = /amd64/api/v0/build/report {
             client_max_body_size 200M;
             proxy_set_header    X-Real-IP          $remote_addr;
-            proxy_pass http://127.0.0.1:8484;
+            proxy_pass http://127.0.0.1:8484/api/v0/build/report;
         }
-
-	location /stats/ {
+        location /amd64/stats/ {
             alias /srv/rebuilderd/amd64/stats/ ;
             disable_symlinks off;
-            autoindex on;
-            index index.html;
         }
-
-    }
-
-    server {
-        server_name     i386.reproduce.debian.net;
-        ssi on;
-        index index_i386.html;
-        root /var/www/html;
-
-        listen 443 ssl;
-        ssl_certificate /var/lib/dehydrated/certs/i386.reproduce.debian.net/fullchain.pem;
-        ssl_certificate_key /var/lib/dehydrated/certs/i386.reproduce.debian.net/privkey.pem;
-
-        ssl_session_cache shared:le_nginx_SSL:10m;
-        ssl_session_timeout 1440m;
-        ssl_session_tickets off;
-        ssl_protocols TLSv1.2 TLSv1.3;
-        ssl_prefer_server_ciphers off;
-        ssl_ciphers "ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-C
-        HACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384";
-
-        location /.well-known/acme-challenge/ {
-            alias /var/lib/dehydrated/acme-challenges/;
+        # arm64
+        location /arm64/api/ {
+            proxy_set_header    X-Real-IP          $remote_addr;
+            proxy_pass http://127.0.0.1:8486/api/;
+        }
+        location = /arm64/api/v0/build/report {
+            client_max_body_size 200M;
+            proxy_set_header    X-Real-IP          $remote_addr;
+            proxy_pass http://127.0.0.1:8486/api/v0/build/report;
+        }
+        location /arm64/stats/ {
+            alias /srv/rebuilderd/arm64/stats/ ;
             disable_symlinks off;
-            autoindex off;
         }
-
-        location / {
-            # First attempt to serve request as file, then
-            # as directory, then fall back to displaying a 404.
-            try_files $uri $uri/ =404;
+        # armhf
+        location /armhf/api/ {
+            proxy_set_header    X-Real-IP          $remote_addr;
+            proxy_pass http://127.0.0.1:8487/api/;
         }
-
-        location /api/ {
+        location = /armhf/api/v0/build/report {
+            client_max_body_size 200M;
             proxy_set_header    X-Real-IP          $remote_addr;
-            proxy_pass http://127.0.0.1:8485;
+            proxy_pass http://127.0.0.1:8487/api/v0/build/report;
         }
-        location = /api/v0/build/report {
+        location /armhf/stats/ {
+            alias /srv/rebuilderd/armhf/stats/ ;
+            disable_symlinks off;
+        }
+        # i386
+        location /i386/api/ {
+            proxy_set_header    X-Real-IP          $remote_addr;
+            proxy_pass http://127.0.0.1:8485/api/;
+        }
+        location = /i386/api/v0/build/report {
             client_max_body_size 200M;
             proxy_set_header    X-Real-IP          $remote_addr;
-            proxy_pass http://127.0.0.1:8485;
+            proxy_pass http://127.0.0.1:8485/api/v0/build/report;
         }
-
-	location /stats/ {
+        location /i386/stats/ {
             alias /srv/rebuilderd/i386/stats/ ;
             disable_symlinks off;
-            autoindex on;
-            index index.html;
         }
-
+        # riscv64
+        location /riscv64/api/ {
+            proxy_set_header    X-Real-IP          $remote_addr;
+            proxy_pass http://127.0.0.1:8488/api/;
+        }
+        location = /riscv64/api/v0/build/report {
+            client_max_body_size 200M;
+            proxy_set_header    X-Real-IP          $remote_addr;
+            proxy_pass http://127.0.0.1:8488/api/v0/build/report;
+        }
+        location /riscv64/stats/ {
+            alias /srv/rebuilderd/riscv64/stats/ ;
+            disable_symlinks off;
+        }
     }
 
     server {
-        server_name     arm64.reproduce.debian.net;
+        server_name     all.reproduce.debian.net;
         ssi on;
-        index index_arm64.html;
         root /var/www/html;
-
         listen 443 ssl;
-        ssl_certificate /var/lib/dehydrated/certs/arm64.reproduce.debian.net/fullchain.pem;
-        ssl_certificate_key /var/lib/dehydrated/certs/arm64.reproduce.debian.net/privkey.pem;
-
+        ssl_certificate /var/lib/dehydrated/certs/all.reproduce.debian.net/fullchain.pem;
+        ssl_certificate_key /var/lib/dehydrated/certs/all.reproduce.debian.net/privkey.pem;
         ssl_session_cache shared:le_nginx_SSL:10m;
         ssl_session_timeout 1440m;
         ssl_session_tickets off;
@@ -127,48 +155,23 @@ http {
         ssl_prefer_server_ciphers off;
         ssl_ciphers "ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-C
         HACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384";
-
         location /.well-known/acme-challenge/ {
             alias /var/lib/dehydrated/acme-challenges/;
             disable_symlinks off;
             autoindex off;
         }
-
         location / {
-            # First attempt to serve request as file, then
-            # as directory, then fall back to displaying a 404.
-            try_files $uri $uri/ =404;
+            return 301 https://reproduce.debian.net/all$request_uri;
         }
-
-        location /api/ {
-            proxy_set_header    X-Real-IP          $remote_addr;
-            proxy_pass http://127.0.0.1:8486;
-        }
-        location = /api/v0/build/report {
-            client_max_body_size 200M;
-            proxy_set_header    X-Real-IP          $remote_addr;
-            proxy_pass http://127.0.0.1:8486;
-        }
-
-	location /stats/ {
-            alias /srv/rebuilderd/arm64/stats/ ;
-            disable_symlinks off;
-            autoindex on;
-            index index.html;
-        }
-
     }
 
     server {
-        server_name     armhf.reproduce.debian.net;
+        server_name     amd64.reproduce.debian.net;
         ssi on;
-        index index_armhf.html;
         root /var/www/html;
-
         listen 443 ssl;
-        ssl_certificate /var/lib/dehydrated/certs/armhf.reproduce.debian.net/fullchain.pem;
-        ssl_certificate_key /var/lib/dehydrated/certs/armhf.reproduce.debian.net/privkey.pem;
-
+        ssl_certificate /var/lib/dehydrated/certs/amd64.reproduce.debian.net/fullchain.pem;
+        ssl_certificate_key /var/lib/dehydrated/certs/amd64.reproduce.debian.net/privkey.pem;
         ssl_session_cache shared:le_nginx_SSL:10m;
         ssl_session_timeout 1440m;
         ssl_session_tickets off;
@@ -176,47 +179,23 @@ http {
         ssl_prefer_server_ciphers off;
         ssl_ciphers "ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-C
         HACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384";
-
         location /.well-known/acme-challenge/ {
             alias /var/lib/dehydrated/acme-challenges/;
             disable_symlinks off;
             autoindex off;
         }
-
         location / {
-            # First attempt to serve request as file, then
-            # as directory, then fall back to displaying a 404.
-            try_files $uri $uri/ =404;
+            return 301 https://reproduce.debian.net/amd64$request_uri;
         }
-
-        location /api/ {
-            proxy_set_header    X-Real-IP          $remote_addr;
-            proxy_pass http://127.0.0.1:8487;
-        }
-        location = /api/v0/build/report {
-            client_max_body_size 200M;
-            proxy_set_header    X-Real-IP          $remote_addr;
-            proxy_pass http://127.0.0.1:8487;
-        }
-
-	location /stats/ {
-            alias /srv/rebuilderd/armhf/stats/ ;
-            disable_symlinks off;
-            autoindex on;
-            index index.html;
-        }
-
     }
 
     server {
-        server_name     riscv64.reproduce.debian.net;
+        server_name     arm64.reproduce.debian.net;
         ssi on;
-        index index_riscv64.html;
         root /var/www/html;
-
         listen 443 ssl;
-        ssl_certificate /var/lib/dehydrated/certs/riscv64.reproduce.debian.net/fullchain.pem;
-        ssl_certificate_key /var/lib/dehydrated/certs/riscv64.reproduce.debian.net/privkey.pem;
+        ssl_certificate /var/lib/dehydrated/certs/arm64.reproduce.debian.net/fullchain.pem;
+        ssl_certificate_key /var/lib/dehydrated/certs/arm64.reproduce.debian.net/privkey.pem;
 
         ssl_session_cache shared:le_nginx_SSL:10m;
         ssl_session_timeout 1440m;
@@ -225,47 +204,23 @@ http {
         ssl_prefer_server_ciphers off;
         ssl_ciphers "ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-C
         HACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384";
-
         location /.well-known/acme-challenge/ {
             alias /var/lib/dehydrated/acme-challenges/;
             disable_symlinks off;
             autoindex off;
         }
-
         location / {
-            # First attempt to serve request as file, then
-            # as directory, then fall back to displaying a 404.
-            try_files $uri $uri/ =404;
-        }
-
-        location /api/ {
-            proxy_set_header    X-Real-IP          $remote_addr;
-            proxy_pass http://127.0.0.1:8488;
-        }
-        location = /api/v0/build/report {
-            client_max_body_size 200M;
-            proxy_set_header    X-Real-IP          $remote_addr;
-            proxy_pass http://127.0.0.1:8488;
-        }
-
-	location /stats/ {
-            alias /srv/rebuilderd/riscv64/stats/ ;
-            disable_symlinks off;
-            autoindex on;
-            index index.html;
+            return 301 https://reproduce.debian.net/arm64$request_uri;
         }
-
     }
 
     server {
-        server_name     all.reproduce.debian.net;
+        server_name     armhf.reproduce.debian.net;
         ssi on;
-        index index_all.html;
         root /var/www/html;
-
         listen 443 ssl;
-        ssl_certificate /var/lib/dehydrated/certs/all.reproduce.debian.net/fullchain.pem;
-        ssl_certificate_key /var/lib/dehydrated/certs/all.reproduce.debian.net/privkey.pem;
+        ssl_certificate /var/lib/dehydrated/certs/armhf.reproduce.debian.net/fullchain.pem;
+        ssl_certificate_key /var/lib/dehydrated/certs/armhf.reproduce.debian.net/privkey.pem;
 
         ssl_session_cache shared:le_nginx_SSL:10m;
         ssl_session_timeout 1440m;
@@ -274,48 +229,23 @@ http {
         ssl_prefer_server_ciphers off;
         ssl_ciphers "ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-C
         HACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384";
-
         location /.well-known/acme-challenge/ {
             alias /var/lib/dehydrated/acme-challenges/;
             disable_symlinks off;
             autoindex off;
         }
-
         location / {
-            # First attempt to serve request as file, then
-            # as directory, then fall back to displaying a 404.
-            try_files $uri $uri/ =404;
-        }
-
-        location /api/ {
-            proxy_set_header    X-Real-IP          $remote_addr;
-            proxy_pass http://127.0.0.1:8489;
+            return 301 https://reproduce.debian.net/armhf$request_uri;
         }
-        location = /api/v0/build/report {
-            client_max_body_size 200M;
-            proxy_set_header    X-Real-IP          $remote_addr;
-            proxy_pass http://127.0.0.1:8489;
-        }
-
-	location /stats/ {
-            alias /srv/rebuilderd/all/stats/ ;
-            disable_symlinks off;
-            autoindex on;
-            index index.html;
-        }
-
     }
 
     server {
-        server_name     reproduce.debian.net;
+        server_name     i386.reproduce.debian.net;
         ssi on;
-        index rdn_index.html;
         root /var/www/html;
-
         listen 443 ssl;
-        ssl_certificate /var/lib/dehydrated/certs/reproduce.debian.net/fullchain.pem;
-        ssl_certificate_key /var/lib/dehydrated/certs/reproduce.debian.net/privkey.pem;
-
+        ssl_certificate /var/lib/dehydrated/certs/i386.reproduce.debian.net/fullchain.pem;
+        ssl_certificate_key /var/lib/dehydrated/certs/i386.reproduce.debian.net/privkey.pem;
         ssl_session_cache shared:le_nginx_SSL:10m;
         ssl_session_timeout 1440m;
         ssl_session_tickets off;
@@ -323,55 +253,38 @@ http {
         ssl_prefer_server_ciphers off;
         ssl_ciphers "ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-C
         HACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384";
-
         location /.well-known/acme-challenge/ {
             alias /var/lib/dehydrated/acme-challenges/;
             disable_symlinks off;
             autoindex off;
         }
-
-        # all
-        location /all/ {
-            alias /var/www/html ;
-            index index_all.html;
-        }
-        location /all/api/ {
-            proxy_set_header    X-Real-IP          $remote_addr;
-            proxy_pass http://127.0.0.1:8489;
-        }
-        location = /all/api/v0/build/report {
-            client_max_body_size 200M;
-            proxy_set_header    X-Real-IP          $remote_addr;
-            proxy_pass http://127.0.0.1:8489;
-        }
-	location /all/stats/ {
-            alias /srv/rebuilderd/all/stats/ ;
-            disable_symlinks off;
-            autoindex on;
-            index index.html;
+        location / {
+            return 301 https://reproduce.debian.net/i386$request_uri;
         }
     }
 
     server {
-        listen          80;
-        server_name     reproduce.debian.net;
-        server_name     amd64.reproduce.debian.net;
-        server_name     i386.reproduce.debian.net;
-        server_name     arm64.reproduce.debian.net;
-        server_name     armhf.reproduce.debian.net;
         server_name     riscv64.reproduce.debian.net;
-        server_name     all.reproduce.debian.net;
-
+        ssi on;
+        root /var/www/html;
+        listen 443 ssl;
+        ssl_certificate /var/lib/dehydrated/certs/riscv64.reproduce.debian.net/fullchain.pem;
+        ssl_certificate_key /var/lib/dehydrated/certs/riscv64.reproduce.debian.net/privkey.pem;
+        ssl_session_cache shared:le_nginx_SSL:10m;
+        ssl_session_timeout 1440m;
+        ssl_session_tickets off;
+        ssl_protocols TLSv1.2 TLSv1.3;
+        ssl_prefer_server_ciphers off;
+        ssl_ciphers "ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-C
+        HACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384";
         location /.well-known/acme-challenge/ {
             alias /var/lib/dehydrated/acme-challenges/;
             disable_symlinks off;
             autoindex off;
         }
-
         location / {
-            return 301 https://$host$request_uri;
+            return 301 https://reproduce.debian.net/riscv64$request_uri;
         }
-
     }
 
 


=====================================
hosts/osuosl5-amd64/var/www/html/index_all.html → hosts/osuosl5-amd64/var/www/html/all/index.html
=====================================
@@ -3,7 +3,7 @@
     <head>
         <meta charset="utf-8">
         <title>
-		all.reproduce.debian.net - trixie (arch:all)
+		reproduce.debian.net/all - trixie (arch:all)
         </title>
         <style>
         body {
@@ -68,7 +68,7 @@
 
             function searchPkgs(query) {
                 let div = document.getElementById('search-results');
-                let url = '/api/v0/pkgs/list?' + new URLSearchParams({
+                let url = '/all/api/v0/pkgs/list?' + new URLSearchParams({
                     name: query,
                     distro: 'debian',
                 });
@@ -98,19 +98,19 @@
 
                             if (build_id) {
                                 r.appendChild(spanWith(' ['));
-                                r.appendChild(linkTo(`/api/v0/builds/${build_id}/log`, 'log'));
+                                r.appendChild(linkTo(`/all/api/v0/builds/${build_id}/log`, 'log'));
                                 r.appendChild(spanWith(']'));
                             }
 
                             if (pkg.has_attestation) {
                                 r.appendChild(spanWith(' ['));
-                                r.appendChild(linkTo(`/api/v0/builds/${build_id}/attestation`, 'attestation'));
+                                r.appendChild(linkTo(`/all/api/v0/builds/${build_id}/attestation`, 'attestation'));
                                 r.appendChild(spanWith(']'));
                             }
 
                             if (pkg.has_diffoscope) {
                                 r.appendChild(spanWith(' ['));
-                                r.appendChild(linkTo(`/api/v0/builds/${build_id}/diffoscope`, 'diffoscope'));
+                                r.appendChild(linkTo(`/all/api/v0/builds/${build_id}/diffoscope`, 'diffoscope'));
                                 r.appendChild(spanWith(']'));
                             }
 
@@ -145,7 +145,7 @@
             }
 
             function fetchStats() {
-                fetch('/api/v0/dashboard')
+                fetch('/all/api/v0/dashboard')
                     .then(response => response.json())
                     .then(data => {
                         let div = document.getElementById('stats');
@@ -176,9 +176,9 @@
         </script>
     </head>
     <body>
-        <img src="/stats/rb.png" align="right">
+        <img src="/all/stats/rb.png" align="right">
         <h1>
-		all.reproduce.debian.net
+		reproduce.debian.net/all
         </h1>
         <h3>
 		trixie (arch:all)
@@ -200,17 +200,17 @@
             pew pew, <a href="https://github.com/kpcyrd/rebuilderd">rebuilderd</a> using <a href="https://tracker.debian.org/pkg/devscripts">debrebuild</a> (with <a href="https://tracker.debian.org/pkg/sbuild">sbuild+unshare</a> as backend) to reproduce what Debian distributes via <code><a href="https://deb.debian.org/debian/dists/">deb.debian.org</a></code>. ♥️
 	    <br/>
 	    <a href="https://reproduce.debian.net">https://reproduce.debian.net</a>
-		/ all
-		/ <a href="https://amd64.reproduce.debian.net">amd64</a>
-		/ <a href="https://arm64.reproduce.debian.net">arm64</a>
-		/ <a href="https://armhf.reproduce.debian.net">armhf</a>
-		/ <a href="https://i386.reproduce.debian.net">i386</a>
-		/ <a href="https://riscv64.reproduce.debian.net">riscv64</a>
+		/ ( all
+		| <a href="https://reproduce.debian.net/amd64">amd64</a>
+		| <a href="https://reproduce.debian.net/arm64">arm64</a>
+		| <a href="https://reproduce.debian.net/armhf">armhf</a>
+		| <a href="https://reproduce.debian.net/i386">i386</a>
+		| <a href="https://reproduce.debian.net/riscv64">riscv64</a> )
 	    <br/>
-	    <a href="/stats/">Statistics about BAD packages</a> on all.
+	    <a href="stats/">Statistics about BAD packages</a> on all.
 	    <br/>
-	    <a href="/api/v0/pkgs/list">/api/v0/pkgs/list</a> (JSON)
-	    / <a href="/stats/db-backup/">rebuilderd database backups</a>
+	    <a href="api/v0/pkgs/list">/all/api/v0/pkgs/list</a> (JSON)
+	    / <a href="stats/db-backup/">rebuilderd database backups</a>
 	    <br/>
 	    <code>
 		# How to judge your own systen:


=====================================
hosts/osuosl5-amd64/var/www/html/index_amd64.html → hosts/osuosl5-amd64/var/www/html/amd64/index.html
=====================================
@@ -3,7 +3,7 @@
     <head>
         <meta charset="utf-8">
         <title>
-		amd64.reproduce.debian.net - trixie (arch:amd64)
+		reproduce.debian.net/amd64 - trixie (arch:amd64)
         </title>
         <style>
         body {
@@ -68,7 +68,7 @@
 
             function searchPkgs(query) {
                 let div = document.getElementById('search-results');
-                let url = '/api/v0/pkgs/list?' + new URLSearchParams({
+                let url = '/amd64/api/v0/pkgs/list?' + new URLSearchParams({
                     name: query,
                     distro: 'debian',
                 });
@@ -98,19 +98,19 @@
 
                             if (build_id) {
                                 r.appendChild(spanWith(' ['));
-                                r.appendChild(linkTo(`/api/v0/builds/${build_id}/log`, 'log'));
+                                r.appendChild(linkTo(`/amd64/api/v0/builds/${build_id}/log`, 'log'));
                                 r.appendChild(spanWith(']'));
                             }
 
                             if (pkg.has_attestation) {
                                 r.appendChild(spanWith(' ['));
-                                r.appendChild(linkTo(`/api/v0/builds/${build_id}/attestation`, 'attestation'));
+                                r.appendChild(linkTo(`/amd64/api/v0/builds/${build_id}/attestation`, 'attestation'));
                                 r.appendChild(spanWith(']'));
                             }
 
                             if (pkg.has_diffoscope) {
                                 r.appendChild(spanWith(' ['));
-                                r.appendChild(linkTo(`/api/v0/builds/${build_id}/diffoscope`, 'diffoscope'));
+                                r.appendChild(linkTo(`/amd64/api/v0/builds/${build_id}/diffoscope`, 'diffoscope'));
                                 r.appendChild(spanWith(']'));
                             }
 
@@ -145,7 +145,7 @@
             }
 
             function fetchStats() {
-                fetch('/api/v0/dashboard')
+                fetch('/amd64/api/v0/dashboard')
                     .then(response => response.json())
                     .then(data => {
                         let div = document.getElementById('stats');
@@ -176,9 +176,9 @@
         </script>
     </head>
     <body>
-        <img src="/stats/rb.png" align="right">
+        <img src="stats/rb.png" align="right">
         <h1>
-		amd64.reproduce.debian.net
+		reproduce.debian.net/amd64
         </h1>
         <h3>
 		trixie (arch:amd64)
@@ -200,17 +200,17 @@
             pew pew, <a href="https://github.com/kpcyrd/rebuilderd">rebuilderd</a> using <a href="https://tracker.debian.org/pkg/devscripts">debrebuild</a> (with <a href="https://tracker.debian.org/pkg/sbuild">sbuild+unshare</a> as backend) to reproduce what Debian distributes via <code><a href="https://deb.debian.org/debian/dists/">deb.debian.org</a></code>. ♥️
 	    <br/>
 	    <a href="https://reproduce.debian.net">https://reproduce.debian.net</a>
-		/ <a href="https://all.reproduce.debian.net">all</a>
-		/ amd64
-		/ <a href="https://arm64.reproduce.debian.net">arm64</a>
-		/ <a href="https://armhf.reproduce.debian.net">armhf</a>
-		/ <a href="https://i386.reproduce.debian.net">i386</a>
-		/ <a href="https://riscv64.reproduce.debian.net">riscv64</a>
+		( <a href="https://reproduce.debian.net/all">all</a>
+		| amd64
+		| <a href="https://reproduce.debian.net/arm64">arm64</a>
+		| <a href="https://reproduce.debian.net/armhf">armhf</a>
+		| <a href="https://reproduce.debian.net/i386">i386</a>
+		| <a href="https://reproduce.debian.net/riscv64">riscv64</a> )
 	    <br/>
-	    <a href="/stats/">Statistics about BAD packages</a> on amd64.
+	    <a href="stats/">Statistics about BAD packages</a> on amd64.
 	    <br/>
-	    <a href="/api/v0/pkgs/list">/api/v0/pkgs/list</a> (JSON)
-	    / <a href="/stats/db-backup/">rebuilderd database backups</a>
+	    <a href="/amd64/api/v0/pkgs/list">/amd64/api/v0/pkgs/list</a> (JSON)
+	    / <a href="stats/db-backup/">rebuilderd database backups</a>
 	    <br/>
 	    <code>
 		# How to judge your own systen:


=====================================
hosts/osuosl5-amd64/var/www/html/index_arm64.html → hosts/osuosl5-amd64/var/www/html/arm64/index.html
=====================================
@@ -3,7 +3,7 @@
     <head>
         <meta charset="utf-8">
         <title>
-		arm64.reproduce.debian.net - trixie (arch:arm64)
+		reproduce.debian.net/arm64 - trixie (arch:arm64)
         </title>
         <style>
         body {
@@ -68,7 +68,7 @@
 
             function searchPkgs(query) {
                 let div = document.getElementById('search-results');
-                let url = '/api/v0/pkgs/list?' + new URLSearchParams({
+                let url = '/arm64/api/v0/pkgs/list?' + new URLSearchParams({
                     name: query,
                     distro: 'debian',
                 });
@@ -98,19 +98,19 @@
 
                             if (build_id) {
                                 r.appendChild(spanWith(' ['));
-                                r.appendChild(linkTo(`/api/v0/builds/${build_id}/log`, 'log'));
+                                r.appendChild(linkTo(`/arm64/api/v0/builds/${build_id}/log`, 'log'));
                                 r.appendChild(spanWith(']'));
                             }
 
                             if (pkg.has_attestation) {
                                 r.appendChild(spanWith(' ['));
-                                r.appendChild(linkTo(`/api/v0/builds/${build_id}/attestation`, 'attestation'));
+                                r.appendChild(linkTo(`/arm64/api/v0/builds/${build_id}/attestation`, 'attestation'));
                                 r.appendChild(spanWith(']'));
                             }
 
                             if (pkg.has_diffoscope) {
                                 r.appendChild(spanWith(' ['));
-                                r.appendChild(linkTo(`/api/v0/builds/${build_id}/diffoscope`, 'diffoscope'));
+                                r.appendChild(linkTo(`/arm64/api/v0/builds/${build_id}/diffoscope`, 'diffoscope'));
                                 r.appendChild(spanWith(']'));
                             }
 
@@ -145,7 +145,7 @@
             }
 
             function fetchStats() {
-                fetch('/api/v0/dashboard')
+                fetch('/arm64/api/v0/dashboard')
                     .then(response => response.json())
                     .then(data => {
                         let div = document.getElementById('stats');
@@ -176,9 +176,9 @@
         </script>
     </head>
     <body>
-        <img src="/stats/rb.png" align="right">
+        <img src="stats/rb.png" align="right">
         <h1>
-		arm64.reproduce.debian.net
+		reproduce.debian.net/arm64
         </h1>
         <h3>
 		trixie (arch:arm64)
@@ -200,17 +200,17 @@
             pew pew, <a href="https://github.com/kpcyrd/rebuilderd">rebuilderd</a> using <a href="https://tracker.debian.org/pkg/devscripts">debrebuild</a> (with <a href="https://tracker.debian.org/pkg/sbuild">sbuild+unshare</a> as backend) to reproduce what Debian distributes via <code><a href="https://deb.debian.org/debian/dists/">deb.debian.org</a></code>. ♥️
 	    <br/>
 	    <a href="https://reproduce.debian.net">https://reproduce.debian.net</a>
-		/ <a href="https://all.reproduce.debian.net">all</a>
-		/ <a href="https://amd64.reproduce.debian.net">amd64</a>
-		/ arm64
-		/ <a href="https://armhf.reproduce.debian.net">armhf</a>
-		/ <a href="https://i386.reproduce.debian.net">i386</a>
-		/ <a href="https://riscv64.reproduce.debian.net">riscv64</a>
+		( <a href="https://reproduce.debian.net/all">all</a>
+		| <a href="https://reproduce.debian.net/amd64">amd64</a>
+		| arm64
+		| <a href="https://reproduce.debian.net/armhf">armhf</a>
+		| <a href="https://reproduce.debian.net/i386">i386</a>
+		| <a href="https://reproduce.debian.net/riscv64">riscv64</a> )
 	    <br/>
-	    <a href="/stats/">Statistics about BAD packages</a> on arm64.
+	    <a href="stats/">Statistics about BAD packages</a> on arm64.
 	    <br/>
-	    <a href="/api/v0/pkgs/list">/api/v0/pkgs/list</a> (JSON)
-	    / <a href="/stats/db-backup/">rebuilderd database backups</a>
+	    <a href="/arm64/api/v0/pkgs/list">/arm64/api/v0/pkgs/list</a> (JSON)
+	    / <a href="stats/db-backup/">rebuilderd database backups</a>
 	    <br/>
 	    <code>
 		# How to judge your own systen:


=====================================
hosts/osuosl5-amd64/var/www/html/index_armhf.html → hosts/osuosl5-amd64/var/www/html/armhf/index.html
=====================================
@@ -3,7 +3,7 @@
     <head>
         <meta charset="utf-8">
         <title>
-		armhf.reproduce.debian.net - trixie (arch:armhf)
+		reproduce.debian.net/armhf - trixie (arch:armhf)
         </title>
         <style>
         body {
@@ -68,7 +68,7 @@
 
             function searchPkgs(query) {
                 let div = document.getElementById('search-results');
-                let url = '/api/v0/pkgs/list?' + new URLSearchParams({
+                let url = '/armhf/api/v0/pkgs/list?' + new URLSearchParams({
                     name: query,
                     distro: 'debian',
                 });
@@ -98,19 +98,19 @@
 
                             if (build_id) {
                                 r.appendChild(spanWith(' ['));
-                                r.appendChild(linkTo(`/api/v0/builds/${build_id}/log`, 'log'));
+                                r.appendChild(linkTo(`/armhf/api/v0/builds/${build_id}/log`, 'log'));
                                 r.appendChild(spanWith(']'));
                             }
 
                             if (pkg.has_attestation) {
                                 r.appendChild(spanWith(' ['));
-                                r.appendChild(linkTo(`/api/v0/builds/${build_id}/attestation`, 'attestation'));
+                                r.appendChild(linkTo(`/armhf/api/v0/builds/${build_id}/attestation`, 'attestation'));
                                 r.appendChild(spanWith(']'));
                             }
 
                             if (pkg.has_diffoscope) {
                                 r.appendChild(spanWith(' ['));
-                                r.appendChild(linkTo(`/api/v0/builds/${build_id}/diffoscope`, 'diffoscope'));
+                                r.appendChild(linkTo(`/armhf/api/v0/builds/${build_id}/diffoscope`, 'diffoscope'));
                                 r.appendChild(spanWith(']'));
                             }
 
@@ -145,7 +145,7 @@
             }
 
             function fetchStats() {
-                fetch('/api/v0/dashboard')
+                fetch('/armhf/api/v0/dashboard')
                     .then(response => response.json())
                     .then(data => {
                         let div = document.getElementById('stats');
@@ -176,9 +176,9 @@
         </script>
     </head>
     <body>
-        <img src="/stats/rb.png" align="right">
+        <img src="stats/rb.png" align="right">
         <h1>
-		armhf.reproduce.debian.net
+		reproduce.debian.net/armhf
         </h1>
         <h3>
 		trixie (arch:armhf)
@@ -200,17 +200,17 @@
             pew pew, <a href="https://github.com/kpcyrd/rebuilderd">rebuilderd</a> using <a href="https://tracker.debian.org/pkg/devscripts">debrebuild</a> (with <a href="https://tracker.debian.org/pkg/sbuild">sbuild+unshare</a> as backend) to reproduce what Debian distributes via <code><a href="https://deb.debian.org/debian/dists/">deb.debian.org</a></code>. ♥️
 	    <br/>
 	    <a href="https://reproduce.debian.net">https://reproduce.debian.net</a>
-		/ <a href="https://all.reproduce.debian.net">all</a>
-		/ <a href="https://amd64.reproduce.debian.net">amd64</a>
-		/ <a href="https://arm64.reproduce.debian.net">arm64</a>
-		/ armhf
-		/ <a href="https://i386.reproduce.debian.net">i386</a>
-		/ <a href="https://riscv64.reproduce.debian.net">riscv64</a>
+		( <a href="https://reproduce.debian.net/all">all</a>
+		| <a href="https://reproduce.debian.net/amd64">amd64</a>
+		| <a href="https://reproduce.debian.net/arm64">arm64</a>
+		| armhf
+		| <a href="https://reproduce.debian.net/i386">i386</a>
+		| <a href="https://reproduce.debian.net/riscv64">riscv64</a> )
 	    <br/>
-	    <a href="/stats/">Statistics about BAD packages</a> on armhf.
+	    <a href="stats/">Statistics about BAD packages</a> on armhf.
 	    <br/>
-	    <a href="/api/v0/pkgs/list">/api/v0/pkgs/list</a> (JSON)
-	    / <a href="/stats/db-backup/">rebuilderd database backups</a>
+	    <a href="/armhf/api/v0/pkgs/list">/armhf/api/v0/pkgs/list</a> (JSON)
+	    / <a href="stats/db-backup/">rebuilderd database backups</a>
 	    <br/>
 	    <code>
 		# How to judge your own systen:


=====================================
hosts/osuosl5-amd64/var/www/html/index_i386.html → hosts/osuosl5-amd64/var/www/html/i386/index.html
=====================================
@@ -3,7 +3,7 @@
     <head>
         <meta charset="utf-8">
         <title>
-		i386.reproduce.debian.net - trixie (arch:i386)
+		reproduce.debian.net/i386 - trixie (arch:i386)
         </title>
         <style>
         body {
@@ -68,7 +68,7 @@
 
             function searchPkgs(query) {
                 let div = document.getElementById('search-results');
-                let url = '/api/v0/pkgs/list?' + new URLSearchParams({
+                let url = '/i386/api/v0/pkgs/list?' + new URLSearchParams({
                     name: query,
                     distro: 'debian',
                 });
@@ -98,19 +98,19 @@
 
                             if (build_id) {
                                 r.appendChild(spanWith(' ['));
-                                r.appendChild(linkTo(`/api/v0/builds/${build_id}/log`, 'log'));
+                                r.appendChild(linkTo(`/i386/api/v0/builds/${build_id}/log`, 'log'));
                                 r.appendChild(spanWith(']'));
                             }
 
                             if (pkg.has_attestation) {
                                 r.appendChild(spanWith(' ['));
-                                r.appendChild(linkTo(`/api/v0/builds/${build_id}/attestation`, 'attestation'));
+                                r.appendChild(linkTo(`/i386/api/v0/builds/${build_id}/attestation`, 'attestation'));
                                 r.appendChild(spanWith(']'));
                             }
 
                             if (pkg.has_diffoscope) {
                                 r.appendChild(spanWith(' ['));
-                                r.appendChild(linkTo(`/api/v0/builds/${build_id}/diffoscope`, 'diffoscope'));
+                                r.appendChild(linkTo(`/i386/api/v0/builds/${build_id}/diffoscope`, 'diffoscope'));
                                 r.appendChild(spanWith(']'));
                             }
 
@@ -145,7 +145,7 @@
             }
 
             function fetchStats() {
-                fetch('/api/v0/dashboard')
+                fetch('/i386/api/v0/dashboard')
                     .then(response => response.json())
                     .then(data => {
                         let div = document.getElementById('stats');
@@ -176,9 +176,9 @@
         </script>
     </head>
     <body>
-        <img src="/stats/rb.png" align="right">
+        <img src="stats/rb.png" align="right">
         <h1>
-		i386.reproduce.debian.net
+		reproduce.debian.net/i386
         </h1>
         <h3>
 		trixie (arch:i386)
@@ -200,17 +200,17 @@
             pew pew, <a href="https://github.com/kpcyrd/rebuilderd">rebuilderd</a> using <a href="https://tracker.debian.org/pkg/devscripts">debrebuild</a> (with <a href="https://tracker.debian.org/pkg/sbuild">sbuild+unshare</a> as backend) to reproduce what Debian distributes via <code><a href="https://deb.debian.org/debian/dists/">deb.debian.org</a></code>. ♥️
 	    <br/>
 	    <a href="https://reproduce.debian.net">https://reproduce.debian.net</a>
-		/ <a href="https://all.reproduce.debian.net">all</a>
-		/ <a href="https://amd64.reproduce.debian.net">amd64</a>
-		/ <a href="https://arm64.reproduce.debian.net">arm64</a>
-		/ <a href="https://armhf.reproduce.debian.net">armhf</a>
-		/ i386
-		/ <a href="https://riscv64.reproduce.debian.net">riscv64</a>
+		( <a href="https://reproduce.debian.net/all">all</a>
+		| <a href="https://reproduce.debian.net/amd64">amd64</a>
+		| <a href="https://reproduce.debian.net/arm64">arm64</a>
+		| <a href="https://reproduce.debian.net/armhf">armhf</a>
+		| i386
+		| <a href="https://reproduce.debian.net/riscv64">riscv64</a> )
 	    <br/>
-	    <a href="/stats/">Statistics about BAD packages</a> on i386.
+	    <a href="stats/">Statistics about BAD packages</a> on i386.
 	    <br/>
-	    <a href="/api/v0/pkgs/list">/api/v0/pkgs/list</a> (JSON)
-	    / <a href="/stats/db-backup/">rebuilderd database backups</a>
+	    <a href="/i386/api/v0/pkgs/list">/i386/api/v0/pkgs/list</a> (JSON)
+	    / <a href="stats/db-backup/">rebuilderd database backups</a>
 	    <br/>
 	    <code>
 		# How to judge your own systen:


=====================================
hosts/osuosl5-amd64/var/www/html/rdn_index.html → hosts/osuosl5-amd64/var/www/html/index.html
=====================================
@@ -71,52 +71,52 @@
 	<table>
 	<tr>
 	<td>
-		<a href="https://all.reproduce.debian.net/">all.r.d.n</a>
+		<a href="https://reproduce.debian.net/all/">r.d.n/all</a>
 	</td><td>
 		trixie (arch:all)
 	</td><td>
-		<a href="https://all.reproduce.debian.net/">
-		<img src="https://all.reproduce.debian.net/stats/rb.png" width="20%">
+		<a href="https://reproduce.debian.net/all/">
+		<img src="https://reproduce.debian.net/all/stats/rb.png" width="20%">
 		</a>
 	</td></tr><tr><td>
-		<a href="https://amd64.reproduce.debian.net/">amd64.r.d.n</a>
+		<a href="https://reproduce.debian.net/amd64/">r.d.n/amd64</a>
 	</td><td>
 		trixie (arch:amd64)
 	</td><td>
-		<a href="https://amd64.reproduce.debian.net/">
-		<img src="https://amd64.reproduce.debian.net/stats/rb.png" width="20%">
+		<a href="https://reproduce.debian.net/amd64/">
+		<img src="https://reproduce.debian.net/amd64/stats/rb.png" width="20%">
 		</a>
 	</td></tr><tr><td>
-		<a href="https://arm64.reproduce.debian.net/">arm64.r.d.n</a>
+		<a href="https://reproduce.debian.net/arm64/">r.d.n/arm64</a>
 	</td><td>
 		trixie (arch:arm64)
 	</td><td>
-		<a href="https://arm64.reproduce.debian.net/">
-		<img src="https://arm64.reproduce.debian.net/stats/rb.png" width="20%">
+		<a href="https://reproduce.debian.net/arm64/">
+		<img src="https://reproduce.debian.net/arm64/stats/rb.png" width="20%">
 		</a>
 	</td></tr><tr><td>
-		<a href="https://armhf.reproduce.debian.net/">armhf.r.d.n</a>
+		<a href="https://reproduce.debian.net/armhf/">r.d.n/armhf</a>
 	</td><td>
 		trixie (arch:armhf)
 	</td><td>
-		<a href="https://armhf.reproduce.debian.net/">
-		<img src="https://armhf.reproduce.debian.net/stats/rb.png" width="20%">
+		<a href="https://reproduce.debian.net/armhf/">
+		<img src="https://reproduce.debian.net/armhf/stats/rb.png" width="20%">
 		</a>
 	</td></tr><tr><td>
-		<a href="https://i386.reproduce.debian.net/">i386.r.d.n</a>
+		<a href="https://reproduce.debian.net/i386/">r.d.n/i386</a>
 	</td><td>
 		trixie (arch:i386)
 	</td><td>
-		<a href="https://i386.reproduce.debian.net/">
-		<img src="https://i386.reproduce.debian.net/stats/rb.png" width="20%">
+		<a href="https://reproduce.debian.net/i386/">
+		<img src="https://reproduce.debian.net/i386/stats/rb.png" width="20%">
 		</a>
 	</td></tr><tr><td>
-		<a href="https://riscv64.reproduce.debian.net/">riscv64.r.d.n</a>
+		<a href="https://reproduce.debian.net/riscv64/">r.d.n/riscv64</a>
 	</td><td>
 		trixie (arch:riscv64)
 	</td><td>
-		<a href="https://riscv64.reproduce.debian.net/">
-		<img src="https://riscv64.reproduce.debian.net/stats/rb.png" width="20%">
+		<a href="https://reproduce.debian.net/riscv64/">
+		<img src="https://reproduce.debian.net/riscv64/stats/rb.png" width="20%">
 		</a>
 	</td></tr>
 	</table>


=====================================
hosts/osuosl5-amd64/var/www/html/index_riscv64.html → hosts/osuosl5-amd64/var/www/html/riscv64/index.html
=====================================
@@ -3,7 +3,7 @@
     <head>
         <meta charset="utf-8">
         <title>
-		riscv64.reproduce.debian.net - trixie (arch:riscv64)
+		reproduce.debian.net/riscv64 - trixie (arch:riscv64)
         </title>
         <style>
         body {
@@ -68,7 +68,7 @@
 
             function searchPkgs(query) {
                 let div = document.getElementById('search-results');
-                let url = '/api/v0/pkgs/list?' + new URLSearchParams({
+                let url = '/riscv64/api/v0/pkgs/list?' + new URLSearchParams({
                     name: query,
                     distro: 'debian',
                 });
@@ -98,19 +98,19 @@
 
                             if (build_id) {
                                 r.appendChild(spanWith(' ['));
-                                r.appendChild(linkTo(`/api/v0/builds/${build_id}/log`, 'log'));
+                                r.appendChild(linkTo(`/riscv64/api/v0/builds/${build_id}/log`, 'log'));
                                 r.appendChild(spanWith(']'));
                             }
 
                             if (pkg.has_attestation) {
                                 r.appendChild(spanWith(' ['));
-                                r.appendChild(linkTo(`/api/v0/builds/${build_id}/attestation`, 'attestation'));
+                                r.appendChild(linkTo(`/riscv64/api/v0/builds/${build_id}/attestation`, 'attestation'));
                                 r.appendChild(spanWith(']'));
                             }
 
                             if (pkg.has_diffoscope) {
                                 r.appendChild(spanWith(' ['));
-                                r.appendChild(linkTo(`/api/v0/builds/${build_id}/diffoscope`, 'diffoscope'));
+                                r.appendChild(linkTo(`/riscv64/api/v0/builds/${build_id}/diffoscope`, 'diffoscope'));
                                 r.appendChild(spanWith(']'));
                             }
 
@@ -145,7 +145,7 @@
             }
 
             function fetchStats() {
-                fetch('/api/v0/dashboard')
+                fetch('/riscv64/api/v0/dashboard')
                     .then(response => response.json())
                     .then(data => {
                         let div = document.getElementById('stats');
@@ -176,9 +176,9 @@
         </script>
     </head>
     <body>
-        <img src="/stats/rb.png" align="right">
+        <img src="stats/rb.png" align="right">
         <h1>
-		riscv64.reproduce.debian.net
+		reproduce.debian.net/riscv64
         </h1>
         <h3>
 		trixie (arch:riscv64)
@@ -200,17 +200,17 @@
             pew pew, <a href="https://github.com/kpcyrd/rebuilderd">rebuilderd</a> using <a href="https://tracker.debian.org/pkg/devscripts">debrebuild</a> (with <a href="https://tracker.debian.org/pkg/sbuild">sbuild+unshare</a> as backend) to reproduce what Debian distributes via <code><a href="https://deb.debian.org/debian/dists/">deb.debian.org</a></code>. ♥️
 	    <br/>
 	    <a href="https://reproduce.debian.net">https://reproduce.debian.net</a>
-		/ <a href="https://all.reproduce.debian.net">all</a>
-		/ <a href="https://amd64.reproduce.debian.net">amd64</a>
-		/ <a href="https://arm64.reproduce.debian.net">arm64</a>
-		/ <a href="https://armhf.reproduce.debian.net">armhf</a>
-		/ <a href="https://i386.reproduce.debian.net">i386</a>
-		/ riscv64
+		( <a href="https://reproduce.debian.net/all">all</a>
+		| <a href="https://reproduce.debian.net/amd64">amd64</a>
+		| <a href="https://reproduce.debian.net/arm64">arm64</a>
+		| <a href="https://reproduce.debian.net/armhf">armhf</a>
+		| <a href="https://reproduce.debian.net/i386">i386</a>
+		| riscv64 )
 	    <br/>
-	    <a href="/stats/">Statistics about BAD packages</a> on riscv64.
+	    <a href="stats/">Statistics about BAD packages</a> on riscv64.
 	    <br/>
-	    <a href="/api/v0/pkgs/list">/api/v0/pkgs/list</a> (JSON)
-	    / <a href="/stats/db-backup/">rebuilderd database backups</a>
+	    <a href="/riscv64/api/v0/pkgs/list">/riscv64/api/v0/pkgs/list</a> (JSON)
+	    / <a href="stats/db-backup/">rebuilderd database backups</a>
 	    <br/>
 	    <code>
 		# How to judge your own systen:



View it on GitLab: https://salsa.debian.org/qa/jenkins.debian.net/-/compare/5e761039121cd5c00650b4dd469f46f02caa2255...e742ee8b899021323f0408ce61cc55f923697ee4

-- 
View it on GitLab: https://salsa.debian.org/qa/jenkins.debian.net/-/compare/5e761039121cd5c00650b4dd469f46f02caa2255...e742ee8b899021323f0408ce61cc55f923697ee4
You're receiving this email because of your account on salsa.debian.org.


-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://alioth-lists.debian.net/pipermail/qa-jenkins-scm/attachments/20250220/c89a6f02/attachment-0001.htm>


More information about the Qa-jenkins-scm mailing list