| ... |
... |
@@ -12,6 +12,7 @@ import sys |
|
12
|
12
|
import xml.etree.ElementTree as ET
|
|
13
|
13
|
|
|
14
|
14
|
from git import Repo
|
|
|
15
|
+from git.exc import GitCommandError
|
|
15
|
16
|
import requests
|
|
16
|
17
|
import ruamel.yaml
|
|
17
|
18
|
|
| ... |
... |
@@ -155,8 +156,11 @@ class ReleasePreparation: |
|
155
|
156
|
break
|
|
156
|
157
|
if remote is None:
|
|
157
|
158
|
raise RuntimeError("Cannot find the tpo/applications remote.")
|
|
158
|
|
- remote.fetch()
|
|
159
|
|
- remote.fetch(tags=True)
|
|
|
159
|
+ try:
|
|
|
160
|
+ remote.fetch()
|
|
|
161
|
+ remote.fetch(tags=True)
|
|
|
162
|
+ except GitCommandError:
|
|
|
163
|
+ logger.warning(f"Cannot fetch tags from {rem.url}, skipping.")
|
|
160
|
164
|
|
|
161
|
165
|
branch_name = (
|
|
162
|
166
|
"main" if self.version.is_alpha else f"maint-{self.version.major}"
|
| ... |
... |
@@ -314,59 +318,50 @@ class ReleasePreparation: |
|
314
|
318
|
logger.info("Updating addons")
|
|
315
|
319
|
config = self.load_config("browser")
|
|
316
|
320
|
|
|
317
|
|
- logger.debug("Updating NoScript")
|
|
318
|
|
- self.update_addon_amo(
|
|
|
321
|
+ self.update_addon_tpo(
|
|
319
|
322
|
config, "noscript", "{73a6fe31-595d-460b-a920-fcc0f8843232}"
|
|
320
|
323
|
)
|
|
321
|
|
- if self.mullvad_browser:
|
|
322
|
|
- logger.debug("Updating uBlock Origin")
|
|
323
|
|
- self.update_addon_amo(
|
|
324
|
|
- config, "ublock-origin", "uBlock0@raymondhill.net"
|
|
325
|
|
- )
|
|
326
|
|
- logger.debug("Updating the Mullvad Browser extension")
|
|
327
|
|
- self.update_mullvad_addon(config)
|
|
328
|
324
|
|
|
329
|
325
|
self.save_config("browser", config)
|
|
330
|
326
|
|
|
331
|
|
- def update_addon_amo(self, config, name, addon_id):
|
|
332
|
|
- r = requests.get(
|
|
333
|
|
- f"https://services.addons.mozilla.org/api/v4/addons/addon/{addon_id}"
|
|
334
|
|
- )
|
|
335
|
|
- r.raise_for_status()
|
|
336
|
|
- amo_data = r.json()
|
|
337
|
|
- addon = amo_data["current_version"]["files"][0]
|
|
338
|
|
- assert addon["hash"].startswith("sha256:")
|
|
339
|
|
- addon_input = self.find_input(config, name)
|
|
340
|
|
- addon_input["URL"] = addon["url"]
|
|
341
|
|
- addon_input["sha256sum"] = addon["hash"][7:]
|
|
342
|
|
-
|
|
343
|
|
- def update_mullvad_addon(self, config):
|
|
344
|
|
- input_ = self.find_input(config, "mullvad-extension")
|
|
345
|
|
- r = requests.get(
|
|
346
|
|
- "https://cdn.mullvad.net/browser-extension/updates.json"
|
|
|
327
|
+ def update_addon_tpo(self, config, name, addon_id):
|
|
|
328
|
+ channel = "pre" if self.version.is_alpha else "stable"
|
|
|
329
|
+ self.update_addon_any(
|
|
|
330
|
+ config,
|
|
|
331
|
+ name,
|
|
|
332
|
+ addon_id,
|
|
|
333
|
+ f"https://dist.torproject.org/torbrowser/{name}/update-{channel}.json",
|
|
347
|
334
|
)
|
|
348
|
|
- r.raise_for_status()
|
|
349
|
335
|
|
|
|
336
|
+ def update_addon_any(self, config, name, addon_id, updates_url):
|
|
|
337
|
+ logger.debug("Checking updates for addon %s", name)
|
|
|
338
|
+ r = requests.get(updates_url)
|
|
|
339
|
+ r.raise_for_status()
|
|
350
|
340
|
data = r.json()
|
|
351
|
|
- updates = data["addons"]["{d19a89b9-76c1-4a61-bcd4-49e8de916403}"][
|
|
352
|
|
- "updates"
|
|
353
|
|
- ]
|
|
354
|
|
- url = updates[-1]["update_link"]
|
|
|
341
|
+ input_ = self.find_input(config, name)
|
|
|
342
|
+ if "current_version" in data:
|
|
|
343
|
+ # AMO matadata
|
|
|
344
|
+ addon = data["current_version"]["files"][0]
|
|
|
345
|
+ assert addon["hash"].startswith("sha256:")
|
|
|
346
|
+ input_["URL"] = addon["url"]
|
|
|
347
|
+ input_["sha256sum"] = addon["hash"][7:]
|
|
|
348
|
+ return
|
|
|
349
|
+ # self-hosted standalone updates.json
|
|
|
350
|
+ url = data["addons"][addon_id]["updates"][-1]["update_link"]
|
|
355
|
351
|
if input_["URL"] == url:
|
|
356
|
|
- logger.debug("No need to update the Mullvad extension.")
|
|
|
352
|
+ logger.debug("No need to update the %s extension.", name)
|
|
357
|
353
|
return
|
|
358
|
354
|
input_["URL"] = url
|
|
359
|
|
-
|
|
360
|
355
|
path = self.base_path / "out/browser" / url.split("/")[-1]
|
|
361
|
356
|
# The extension should be small enough to easily fit in memory :)
|
|
362
|
|
- if not path.exists:
|
|
|
357
|
+ if not path.exists():
|
|
363
|
358
|
r = requests.get(url)
|
|
364
|
359
|
r.raise_for_status()
|
|
365
|
360
|
with path.open("wb") as f:
|
|
366
|
|
- f.write(r.bytes)
|
|
|
361
|
+ f.write(r.content)
|
|
367
|
362
|
with path.open("rb") as f:
|
|
368
|
363
|
input_["sha256sum"] = sha256(f.read()).hexdigest()
|
|
369
|
|
- logger.debug("Mullvad extension downloaded and updated")
|
|
|
364
|
+ logger.debug("%s extension downloaded and updated.", name)
|
|
370
|
365
|
|
|
371
|
366
|
def update_tor(self):
|
|
372
|
367
|
logger.info("Updating Tor")
|