launchpad-reviewers team mailing list archive
-
launchpad-reviewers team
-
Mailing list archive
-
Message #33198
[Merge] ~artemstreltsov/launchpad-buildd:snaps_snap_download_workaround into launchpad-buildd:master
Artem Streltsov has proposed merging ~artemstreltsov/launchpad-buildd:snaps_snap_download_workaround into launchpad-buildd:master.
Commit message:
Add workaround to update snapd to latest version in snap builds to avoid icon download issue
Requested reviews:
Launchpad code reviewers (launchpad-reviewers)
For more details, see:
https://code.launchpad.net/~artemstreltsov/launchpad-buildd/+git/launchpad-buildd/+merge/495050
--
Your team Launchpad code reviewers is requested to review the proposed merge of ~artemstreltsov/launchpad-buildd:snaps_snap_download_workaround into launchpad-buildd:master.
diff --git a/lpbuildd/target/build_snap.py b/lpbuildd/target/build_snap.py
index 5d957ae..098daf2 100644
--- a/lpbuildd/target/build_snap.py
+++ b/lpbuildd/target/build_snap.py
@@ -150,6 +150,39 @@ class BuildSnap(
self.backend.run(["apt-get", "-y", "install"] + deps)
if self.backend.supports_snapd:
self.snap_store_set_proxy()
+ if self.args.proxy_url:
+ # XXX jugmac00 2024-04-17: this is configuring an SVN server;
+ # it is currently unclear whether this is still necessary for
+ # building snaps
+ # jugmac00 reached out both to William and Claudio to figure out
+ self.install_svn_servers(self.args.proxy_url)
+ if not self.args.use_fetch_service:
+ self.install_snapd_proxy(self.args.proxy_url)
+ if self.args.use_fetch_service:
+ # Deleting apt cache /var/lib/apt/lists before
+ # installing the fetch service
+ self.install_apt_proxy()
+ self.delete_apt_cache()
+ self.install_mitm_certificate()
+ self.install_snapd_proxy(proxy_url=self.args.proxy_url)
+ self.backend.run(["apt-get", "-y", "update"])
+ self.restart_snapd()
+ self.configure_git_protocol_v2()
+
+ if self.backend.supports_snapd:
+ # Upgrade snapd to latest version
+ env = self.build_proxy_environment(
+ proxy_url=self.args.proxy_url,
+ use_fetch_service=self.args.use_fetch_service,
+ )
+ cmd = ["snap", "download", "snapd", "--basename=snapd"]
+ if env:
+ self.backend.run(cmd, env=env)
+ else:
+ self.backend.run(cmd)
+ self.backend.run(["snap", "ack", "snapd.assert"])
+ self.backend.run(["snap", "install", "snapd.snap"])
+
for snap_name, channel in sorted(self.args.channels.items()):
# snapcraft is handled separately, since it requires --classic.
if snap_name != "snapcraft":
@@ -172,22 +205,6 @@ class BuildSnap(
"snapcraft",
]
)
- if self.args.proxy_url:
- # XXX jugmac00 2024-04-17: this is configuring an SVN server;
- # it is currently unclear whether this is still necessary for
- # building snaps
- # jugmac00 reached out both to William and Claudio to figure out
- self.install_svn_servers(self.args.proxy_url)
- if self.args.use_fetch_service:
- # Deleting apt cache /var/lib/apt/lists before
- # installing the fetch service
- self.install_apt_proxy()
- self.delete_apt_cache()
- self.install_mitm_certificate()
- self.install_snapd_proxy(proxy_url=self.args.proxy_url)
- self.backend.run(["apt-get", "-y", "update"])
- self.restart_snapd()
- self.configure_git_protocol_v2()
def repo(self):
"""Collect git or bzr branch."""
diff --git a/lpbuildd/target/run_ci.py b/lpbuildd/target/run_ci.py
index 79a7732..8f60ab1 100644
--- a/lpbuildd/target/run_ci.py
+++ b/lpbuildd/target/run_ci.py
@@ -1,9 +1,9 @@
# Copyright 2022 Canonical Ltd. This software is licensed under the
# GNU Affero General Public License version 3 (see the file LICENSE).
-import subprocess
import logging
import os
+import subprocess
from lpbuildd.target.build_snap import SnapChannelsAction
from lpbuildd.target.operation import Operation
@@ -69,7 +69,7 @@ class RunCIPrepare(
result = subprocess.run(
["sudo", "service", "apparmor", "restart"],
capture_output=True,
- check=True
+ check=True,
)
logger.info("Command output: %s" % result.stdout)
logger.info("Command errors (if any): %s" % result.stderr)
diff --git a/lpbuildd/target/tests/test_build_snap.py b/lpbuildd/target/tests/test_build_snap.py
index 3a94727..35079f4 100644
--- a/lpbuildd/target/tests/test_build_snap.py
+++ b/lpbuildd/target/tests/test_build_snap.py
@@ -73,6 +73,9 @@ class TestBuildSnap(TestCase):
MatchesListwise(
[
RanAptGet("install", "bzr", "snapcraft"),
+ RanSnap("download", "snapd", "--basename=snapd"),
+ RanSnap("ack", "snapd.assert"),
+ RanSnap("install", "snapd.snap"),
]
),
)
@@ -96,6 +99,9 @@ class TestBuildSnap(TestCase):
MatchesListwise(
[
RanAptGet("install", "git", "snapcraft"),
+ RanSnap("download", "snapd", "--basename=snapd"),
+ RanSnap("ack", "snapd.assert"),
+ RanSnap("install", "snapd.snap"),
]
),
)
@@ -147,6 +153,9 @@ class TestBuildSnap(TestCase):
RanCommand(
["snap", "set", "core", "proxy.store=store-id"]
),
+ RanSnap("download", "snapd", "--basename=snapd"),
+ RanSnap("ack", "snapd.assert"),
+ RanSnap("install", "snapd.snap"),
]
),
)
@@ -181,6 +190,35 @@ class TestBuildSnap(TestCase):
"install", "python3", "socat", "git", "snapcraft"
),
RanCommand(["mkdir", "-p", "/root/.subversion"]),
+ RanCommand(
+ [
+ "snap",
+ "set",
+ "system",
+ "proxy.http=http://proxy.example:3128/",
+ ]
+ ),
+ RanCommand(
+ [
+ "snap",
+ "set",
+ "system",
+ "proxy.https=http://proxy.example:3128/",
+ ]
+ ),
+ RanSnap(
+ "download",
+ "snapd",
+ "--basename=snapd",
+ http_proxy="http://proxy.example:3128/",
+ https_proxy="http://proxy.example:3128/",
+ HTTP_PROXY="http://proxy.example:3128/",
+ HTTPS_PROXY="http://proxy.example:3128/",
+ GIT_PROXY_COMMAND="/usr/local/bin/lpbuildd-git-proxy",
+ SNAPPY_STORE_NO_CDN="1",
+ ),
+ RanSnap("ack", "snapd.assert"),
+ RanSnap("install", "snapd.snap"),
]
),
)
@@ -258,6 +296,26 @@ class TestBuildSnap(TestCase):
"snapd",
]
),
+ RanSnap(
+ "download",
+ "snapd",
+ "--basename=snapd",
+ http_proxy="http://proxy.example:3128/",
+ https_proxy="http://proxy.example:3128/",
+ HTTP_PROXY="http://proxy.example:3128/",
+ HTTPS_PROXY="http://proxy.example:3128/",
+ GIT_PROXY_COMMAND="/usr/local/bin/lpbuildd-git-proxy",
+ SNAPPY_STORE_NO_CDN="1",
+ CARGO_HTTP_CAINFO=(
+ "/usr/local/share/ca-certificates/local-ca.crt"
+ ),
+ REQUESTS_CA_BUNDLE=(
+ "/usr/local/share/ca-certificates/local-ca.crt"
+ ),
+ GOPROXY="direct",
+ ),
+ RanSnap("ack", "snapd.assert"),
+ RanSnap("install", "snapd.snap"),
]
),
)
@@ -357,6 +415,26 @@ class TestBuildSnap(TestCase):
"snapd",
]
),
+ RanSnap(
+ "download",
+ "snapd",
+ "--basename=snapd",
+ http_proxy="http://proxy.example:3128/",
+ https_proxy="http://proxy.example:3128/",
+ HTTP_PROXY="http://proxy.example:3128/",
+ HTTPS_PROXY="http://proxy.example:3128/",
+ GIT_PROXY_COMMAND="/usr/local/bin/lpbuildd-git-proxy",
+ SNAPPY_STORE_NO_CDN="1",
+ CARGO_HTTP_CAINFO=(
+ "/usr/local/share/ca-certificates/local-ca.crt"
+ ),
+ REQUESTS_CA_BUNDLE=(
+ "/usr/local/share/ca-certificates/local-ca.crt"
+ ),
+ GOPROXY="direct",
+ ),
+ RanSnap("ack", "snapd.assert"),
+ RanSnap("install", "snapd.snap"),
]
),
)
@@ -410,6 +488,9 @@ class TestBuildSnap(TestCase):
MatchesListwise(
[
RanAptGet("install", "bzr", "sudo"),
+ RanSnap("download", "snapd", "--basename=snapd"),
+ RanSnap("ack", "snapd.assert"),
+ RanSnap("install", "snapd.snap"),
RanSnap("install", "--channel=candidate", "core"),
RanSnap("refresh", "--channel=candidate", "core"),
RanSnap("install", "--channel=beta", "core18"),