[buildbot] phase1: add support for overriding feeds host

LEDE Commits lede-commits at lists.infradead.org
Sat Dec 13 21:10:20 PST 2025


ynezz pushed a commit to buildbot.git, branch main:
https://git.openwrt.org/057e8adc9d49eda73499b5b771cba5df5e8f80d1

commit 057e8adc9d49eda73499b5b771cba5df5e8f80d1
Author: Petr Štetiar <ynezz at true.cz>
AuthorDate: Fri Dec 12 21:41:01 2025 +0000

    phase1: add support for overriding feeds host
    
    Currently git.openwrt.org is sometimes overloaded, so lets implement a
    mechanism to override the source host for feeds.
    
    This introduces a `feeds_host_override` configuration option. When set,
    the buildmaster will temporarily modify `feeds.conf.default` to point to
    the alternate host (e.g., GitHub) before updating feeds, and restore the
    original configuration afterwards.
    
    This is particularly useful when the primary git server is returning 503
    errors:
    
        Updating feed 'packages' from 'https://git.openwrt.org/feed/packages.git' ...
        Cloning into './feeds/packages'...
        fatal: unable to access 'https://git.openwrt.org/feed/packages.git/': The requested URL returned error: 503
        failed.
    
    Signed-off-by: Petr Štetiar <ynezz at true.cz>
---
 docker/config.ini         |  1 +
 phase1/config.ini.example |  1 +
 phase1/master.cfg         | 52 +++++++++++++++++++++++++++++++++++++++++++++++
 3 files changed, 54 insertions(+)

diff --git a/docker/config.ini b/docker/config.ini
index 9da83eb..8daa00e 100644
--- a/docker/config.ini
+++ b/docker/config.ini
@@ -10,6 +10,7 @@ status_password = admin
 buildbot_url = http://buildmaster-phase1:8010/
 expire = 1209600
 port = ssl:9989:privateKey=/certs/master.key:certKey=/certs/master.crt
+feeds_host_override = github.com/openwrt
 config_seed = # Seed configuration
 	CONFIG_BUILDBOT=y
 	CONFIG_DEVEL=y
diff --git a/phase1/config.ini.example b/phase1/config.ini.example
index 455507e..79cb44f 100644
--- a/phase1/config.ini.example
+++ b/phase1/config.ini.example
@@ -9,6 +9,7 @@ status_bind = tcp:8010:interface=127.0.0.1
 status_user = example
 status_password = example
 port = 9989
+feeds_host_override =
 
 [irc]
 host = irc.freenode.net
diff --git a/phase1/master.cfg b/phase1/master.cfg
index a2870da..9967eaf 100644
--- a/phase1/master.cfg
+++ b/phase1/master.cfg
@@ -107,6 +107,7 @@ def ini_parse_branch(section):
 
 # PB port can be either a numeric port or a connection string
 pb_port = inip1.get("port") or 9989
+feeds_host_override = inip1.get("feeds_host_override", "").strip()
 
 # This is the dictionary that the buildmaster pays attention to. We also use
 # a shorter alias to save typing.
@@ -609,6 +610,15 @@ def IsRemoteShaSumsAvailable(step):
     return step.getProperty("have_remote_shasums")
 
 
+def IsFeedsHostOverrideEnabled(step):
+    return bool(feeds_host_override)
+
+
+ at util.renderer
+def GetFeedsHostOverride(props):
+    return feeds_host_override
+
+
 def GetBaseVersion(branch):
     if re.match(r"^[^-]+-[0-9]+\.[0-9]+$", branch):
         return branch.split("-")[1]
@@ -986,6 +996,37 @@ def prepareFactory(target):
         )
     )
 
+    factory.addStep(
+        ShellCommand(
+            name="feeds-backup",
+            description="Backing up feeds.conf.default",
+            descriptionDone="feeds.conf.default backed up",
+            command=["cp", "-p", "feeds.conf.default", "feeds.conf.default.bak"],
+            doStepIf=IsFeedsHostOverrideEnabled,
+            haltOnFailure=True,
+        )
+    )
+
+    factory.addStep(
+        ShellCommand(
+            name="feeds-override",
+            description="Overriding feeds host",
+            descriptionDone="Feeds host overridden",
+            command=[
+                "sed",
+                "-i",
+                "-E",
+                Interpolate(
+                    "s;git.openwrt.org/(feed|project);%(kw:host)s;",
+                    host=GetFeedsHostOverride,
+                ),
+                "feeds.conf.default",
+            ],
+            doStepIf=IsFeedsHostOverrideEnabled,
+            haltOnFailure=True,
+        )
+    )
+
     # feed
     factory.addStep(
         ShellCommand(
@@ -998,6 +1039,17 @@ def prepareFactory(target):
         )
     )
 
+    factory.addStep(
+        ShellCommand(
+            name="feeds-restore",
+            description="Restoring feeds.conf.default",
+            descriptionDone="feeds.conf.default restored",
+            command="test -f feeds.conf.default.bak && mv -f feeds.conf.default.bak feeds.conf.default || true",
+            doStepIf=IsFeedsHostOverrideEnabled,
+            haltOnFailure=True,
+        )
+    )
+
     # feed
     factory.addStep(
         ShellCommand(




More information about the lede-commits mailing list