* [gentoo-commits] proj/chromium-tools:master commit in: /
@ 2011-10-25 16:36 Paweł Hajdan
0 siblings, 0 replies; 37+ messages in thread
From: Paweł Hajdan @ 2011-10-25 16:36 UTC (permalink / raw
To: gentoo-commits
commit: 149fe3801a3bb99caf635cfe26b31522171349d1
Author: Pawel Hajdan, Jr <phajdan.jr <AT> gentoo <DOT> org>
AuthorDate: Tue Oct 25 16:35:21 2011 +0000
Commit: Paweł Hajdan <phajdan.jr <AT> gentoo <DOT> org>
CommitDate: Tue Oct 25 16:35:55 2011 +0000
URL: http://git.overlays.gentoo.org/gitweb/?p=proj/chromium-tools.git;a=commit;h=149fe380
Add tool to extract CVE numbers from a webpage.
Useful for filing the security bug based on release notes.
---
| 31 +++++++++++++++++++++++++++++++
1 files changed, 31 insertions(+), 0 deletions(-)
--git a/extract-cves.py b/extract-cves.py
new file mode 100755
index 0000000..8769511
--- /dev/null
+++ b/extract-cves.py
@@ -0,0 +1,31 @@
+#!/usr/bin/env python
+
+import re
+import sys
+import urllib2
+
+
+CVE_PATTERN = re.compile('CVE-(\d{4})-(\d+)')
+
+
+def main(argv):
+ response = urllib2.urlopen(argv[0])
+ cves = CVE_PATTERN.findall(response.read())
+ years = {}
+ for year, no in cves:
+ if year not in years:
+ years[year] = []
+ years[year].append(no)
+ result = []
+ for year in sorted(years.keys()):
+ nos = years[year]
+ if len(nos) == 1:
+ result.append('CVE-%s-%s' % (year, nos[0]))
+ else:
+ result.append('CVE-%s-{%s}' % (year, ','.join(sorted(nos))))
+ print ' '.join(result)
+ return 0
+
+
+if __name__ == '__main__':
+ sys.exit(main(sys.argv[1:]))
^ permalink raw reply related [flat|nested] 37+ messages in thread
* [gentoo-commits] proj/chromium-tools:master commit in: /
@ 2012-06-18 7:38 Paweł Hajdan
0 siblings, 0 replies; 37+ messages in thread
From: Paweł Hajdan @ 2012-06-18 7:38 UTC (permalink / raw
To: gentoo-commits
commit: 31e12833015525826359340f568b2b6fad783203
Author: Pawel Hajdan, Jr <phajdan.jr <AT> gentoo <DOT> org>
AuthorDate: Mon Jun 18 07:37:23 2012 +0000
Commit: Paweł Hajdan <phajdan.jr <AT> gentoo <DOT> org>
CommitDate: Mon Jun 18 07:37:23 2012 +0000
URL: http://git.overlays.gentoo.org/gitweb/?p=proj/chromium-tools.git;a=commit;h=31e12833
Add sqlite-vacuum script, bug #413295.
---
sqlite-vacuum.py | 26 ++++++++++++++++++++++++++
1 files changed, 26 insertions(+), 0 deletions(-)
diff --git a/sqlite-vacuum.py b/sqlite-vacuum.py
new file mode 100755
index 0000000..03b610a
--- /dev/null
+++ b/sqlite-vacuum.py
@@ -0,0 +1,26 @@
+#!/usr/bin/env python
+
+import os.path
+
+import magic
+import sqlite3
+
+home = os.path.expanduser('~')
+
+try:
+ m = magic.open(magic.MAGIC_NONE)
+ m.load()
+
+ for root, dirs, files in os.walk(os.path.join(home, '.config', 'chromium')):
+ for f in files:
+ path = os.path.join(root, f)
+ magic_type = m.file(path)
+ if magic_type and 'SQLite' in magic_type:
+ try:
+ c = sqlite3.connect(path)
+ c.execute('VACUUM')
+ c.execute('REINDEX')
+ finally:
+ c.close()
+finally:
+ m.close()
^ permalink raw reply related [flat|nested] 37+ messages in thread
* [gentoo-commits] proj/chromium-tools:master commit in: /
@ 2012-07-31 20:39 Mike Gilbert
0 siblings, 0 replies; 37+ messages in thread
From: Mike Gilbert @ 2012-07-31 20:39 UTC (permalink / raw
To: gentoo-commits
commit: 1be11c73e5a2c0d854957696dabc1566a13061af
Author: Mike Gilbert <floppym <AT> gentoo <DOT> org>
AuthorDate: Tue Jul 31 20:29:52 2012 +0000
Commit: Mike Gilbert <floppym <AT> gentoo <DOT> org>
CommitDate: Tue Jul 31 20:29:52 2012 +0000
URL: http://git.overlays.gentoo.org/gitweb/?p=proj/chromium-tools.git;a=commit;h=1be11c73
Python 3 compatibility.
---
| 14 +++++++++-----
1 files changed, 9 insertions(+), 5 deletions(-)
--git a/extract-cves.py b/extract-cves.py
index 8769511..4ccfbf7 100755
--- a/extract-cves.py
+++ b/extract-cves.py
@@ -1,16 +1,20 @@
#!/usr/bin/env python
+from __future__ import print_function
+
import re
import sys
-import urllib2
-
+try:
+ from urllib.request import urlopen
+except ImportError:
+ from urllib2 import urlopen
CVE_PATTERN = re.compile('CVE-(\d{4})-(\d+)')
def main(argv):
- response = urllib2.urlopen(argv[0])
- cves = CVE_PATTERN.findall(response.read())
+ response = urlopen(argv[0])
+ cves = CVE_PATTERN.findall(str(response.read()))
years = {}
for year, no in cves:
if year not in years:
@@ -23,7 +27,7 @@ def main(argv):
result.append('CVE-%s-%s' % (year, nos[0]))
else:
result.append('CVE-%s-{%s}' % (year, ','.join(sorted(nos))))
- print ' '.join(result)
+ print(' '.join(result))
return 0
^ permalink raw reply related [flat|nested] 37+ messages in thread
* [gentoo-commits] proj/chromium-tools:master commit in: /
@ 2012-07-31 23:27 Mike Gilbert
0 siblings, 0 replies; 37+ messages in thread
From: Mike Gilbert @ 2012-07-31 23:27 UTC (permalink / raw
To: gentoo-commits
commit: ad1d4e64ef7b780f9cb2dc3d7a4c00d599c08e83
Author: Mike Gilbert <floppym <AT> gentoo <DOT> org>
AuthorDate: Tue Jul 31 23:27:38 2012 +0000
Commit: Mike Gilbert <floppym <AT> gentoo <DOT> org>
CommitDate: Tue Jul 31 23:27:38 2012 +0000
URL: http://git.overlays.gentoo.org/gitweb/?p=proj/chromium-tools.git;a=commit;h=ad1d4e64
Add dependency information to sqlite-vaccum.py.
---
sqlite-vacuum.py | 4 ++++
1 files changed, 4 insertions(+), 0 deletions(-)
diff --git a/sqlite-vacuum.py b/sqlite-vacuum.py
index 03b610a..a63e312 100755
--- a/sqlite-vacuum.py
+++ b/sqlite-vacuum.py
@@ -1,5 +1,9 @@
#!/usr/bin/env python
+# Dependencies:
+# dev-lang/python[sqlite]
+# sys-apps/file[python]
+
import os.path
import magic
^ permalink raw reply related [flat|nested] 37+ messages in thread
* [gentoo-commits] proj/chromium-tools:master commit in: /
@ 2015-08-13 20:53 Mike Gilbert
0 siblings, 0 replies; 37+ messages in thread
From: Mike Gilbert @ 2015-08-13 20:53 UTC (permalink / raw
To: gentoo-commits
commit: 70a26591a5872c48a140edd2256e89a88b24b9de
Author: Mike Gilbert <floppym <AT> gentoo <DOT> org>
AuthorDate: Thu Aug 13 20:53:26 2015 +0000
Commit: Mike Gilbert <floppym <AT> gentoo <DOT> org>
CommitDate: Thu Aug 13 20:53:26 2015 +0000
URL: https://gitweb.gentoo.org/proj/chromium-tools.git/commit/?id=70a26591
Add my script for bumping google-chrome
chrome-bump | 140 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
1 file changed, 140 insertions(+)
diff --git a/chrome-bump b/chrome-bump
new file mode 100755
index 0000000..b3f82a5
--- /dev/null
+++ b/chrome-bump
@@ -0,0 +1,140 @@
+#!/usr/bin/env python
+
+from __future__ import print_function
+
+import argparse
+from contextlib import closing
+from debian import deb822
+from glob import glob
+import os
+import os.path
+import portage
+import shutil
+import subprocess
+import sys
+try:
+ from urllib.request import urlopen
+except ImportError:
+ from urllib2 import urlopen
+
+ARCHIVE = 'https://dl.google.com/linux/chrome/deb'
+DIST = 'stable'
+COMP = 'main'
+ARCH = 'amd64'
+
+PORTDIR = portage.settings.repositories['gentoo'].location
+
+PKGMAP = {
+ 'www-client/google-chrome': {
+ '*.ebuild': ('_p', 'google-chrome-stable'),
+ },
+ 'www-client/google-chrome-beta': {
+ '*.ebuild': ('_p', 'google-chrome-beta'),
+ },
+ 'www-client/google-chrome-unstable': {
+ '*.ebuild': ('_p', 'google-chrome-unstable'),
+ },
+ 'www-plugins/chrome-binary-plugins': {
+ '*_p*.ebuild': ('_p', 'google-chrome-stable'),
+ '*_beta*.ebuild': ('_beta', 'google-chrome-beta'),
+ '*_alpha*.ebuild': ('_alpha', 'google-chrome-unstable'),
+ },
+}
+
+ARGS = None
+
+def get_deb_release(archive, dist):
+ url = '%s/dists/%s/Release' % (archive, dist)
+ with closing(urlopen(url)) as fp:
+ return deb822.Release(fp)
+
+def get_deb_packages(archive, dist, comp, arch):
+ url = '%s/dists/%s/%s/binary-%s/Packages' % (archive, dist, comp, arch)
+ with closing(urlopen(url)) as fp:
+ return list(deb822.Packages.iter_paragraphs(fp))
+
+def ebuild_pvr(pn, ebuild):
+ return ebuild[len(pn) + 1 : -7]
+
+def ebuild_pv(pn, ebuild):
+ return ebuild_pvr(pn, ebuild).split('-r')[0]
+
+def ebuild_version(pn, ebuild):
+ return ebuild_pv(pn, ebuild).split('_')[0]
+
+def new_ebuild(pn, version, sep, revision):
+ return pn + '-' + version + sep + revision + '.ebuild'
+
+def copy_ebuild(src, dest):
+ print('cp ' + src + ' ' + dest)
+ if not ARGS.dry_run:
+ shutil.copyfile(src, dest)
+ print('git add ' + dest)
+ if not ARGS.dry_run:
+ subprocess.check_call(['git', 'add', dest])
+
+def remove_ebuild(ebuild):
+ print('git rm ' + ebuild)
+ if not ARGS.dry_run:
+ subprocess.check_call(['git', 'rm', ebuild])
+
+def sync_ebuilds(pkg, debs):
+ os.chdir(os.path.join(PORTDIR, pkg))
+ pn = pkg.split('/')[1]
+ changed = False
+
+ for pattern in PKGMAP[pkg]:
+ (sep, name) = PKGMAP[pkg][pattern]
+ ebuilds = sorted(glob(pattern), reverse=True)
+
+ for deb in debs:
+ if deb['Package'] != name:
+ continue
+
+ (version, revision) = deb['Version'].split('-')
+ found = False
+ for ebuild in ebuilds:
+ if version == ebuild_version(pn, ebuild):
+ found = True
+ break
+ if not found:
+ copy_ebuild(ebuilds[0], new_ebuild(pn, version, sep, revision))
+ changed = True
+
+ for ebuild in ebuilds:
+ found = False
+ for deb in debs:
+ if deb['Package'] != name:
+ continue
+
+ (version, revision) = deb['Version'].split('-')
+ if version == ebuild_version(pn, ebuild):
+ found = True
+ break
+ if not found:
+ remove_ebuild(ebuild)
+ changed = True
+
+ if changed:
+ if ARGS.commit:
+ print('repoman commit')
+ if not ARGS.dry_run:
+ subprocess.check_call(['repoman', 'commit', '-S', '-m', pkg + ': automated update'])
+ else:
+ print('repoman manifest')
+ if not ARGS.dry_run:
+ subprocess.check_call(['repoman', 'manifest'])
+
+def main():
+ parser = argparse.ArgumentParser()
+ parser.add_argument('--commit', '-c', action='store_true')
+ parser.add_argument('--dry-run', '-n', action='store_true')
+ global ARGS
+ ARGS = parser.parse_args()
+
+ debs = get_deb_packages(ARCHIVE, DIST, COMP, ARCH)
+ for pkg in PKGMAP:
+ sync_ebuilds(pkg, debs)
+
+if __name__ == '__main__':
+ main()
^ permalink raw reply related [flat|nested] 37+ messages in thread
* [gentoo-commits] proj/chromium-tools:master commit in: /
@ 2016-09-15 16:11 Mike Gilbert
0 siblings, 0 replies; 37+ messages in thread
From: Mike Gilbert @ 2016-09-15 16:11 UTC (permalink / raw
To: gentoo-commits
commit: f1b0fc1adfd405ff9ebb5738959ce4966371f936
Author: Mike Gilbert <floppym <AT> gentoo <DOT> org>
AuthorDate: Thu Sep 15 16:10:49 2016 +0000
Commit: Mike Gilbert <floppym <AT> gentoo <DOT> org>
CommitDate: Thu Sep 15 16:10:49 2016 +0000
URL: https://gitweb.gentoo.org/proj/chromium-tools.git/commit/?id=f1b0fc1a
extract-cves: simplify output
This allows for easy copy/paste into the bugzilla alias field.
| 18 +++---------------
1 file changed, 3 insertions(+), 15 deletions(-)
--git a/extract-cves.py b/extract-cves.py
index 4ccfbf7..a1dc5ee 100755
--- a/extract-cves.py
+++ b/extract-cves.py
@@ -9,25 +9,13 @@ try:
except ImportError:
from urllib2 import urlopen
-CVE_PATTERN = re.compile('CVE-(\d{4})-(\d+)')
+CVE_PATTERN = re.compile('CVE-\d{4}-\d+')
def main(argv):
response = urlopen(argv[0])
- cves = CVE_PATTERN.findall(str(response.read()))
- years = {}
- for year, no in cves:
- if year not in years:
- years[year] = []
- years[year].append(no)
- result = []
- for year in sorted(years.keys()):
- nos = years[year]
- if len(nos) == 1:
- result.append('CVE-%s-%s' % (year, nos[0]))
- else:
- result.append('CVE-%s-{%s}' % (year, ','.join(sorted(nos))))
- print(' '.join(result))
+ cves = set(CVE_PATTERN.findall(str(response.read())))
+ print(','.join(cves))
return 0
^ permalink raw reply related [flat|nested] 37+ messages in thread
* [gentoo-commits] proj/chromium-tools:master commit in: /
@ 2016-09-15 16:15 Mike Gilbert
0 siblings, 0 replies; 37+ messages in thread
From: Mike Gilbert @ 2016-09-15 16:15 UTC (permalink / raw
To: gentoo-commits
commit: 5a6c895eb7b1ab210533130a948235ac812e78ef
Author: Mike Gilbert <floppym <AT> gentoo <DOT> org>
AuthorDate: Thu Sep 15 16:14:43 2016 +0000
Commit: Mike Gilbert <floppym <AT> gentoo <DOT> org>
CommitDate: Thu Sep 15 16:14:43 2016 +0000
URL: https://gitweb.gentoo.org/proj/chromium-tools.git/commit/?id=5a6c895e
chrome-bump: drop the version suffix from google-chrome
chrome-bump | 10 +++++-----
1 file changed, 5 insertions(+), 5 deletions(-)
diff --git a/chrome-bump b/chrome-bump
index b3f82a5..d8df1fc 100755
--- a/chrome-bump
+++ b/chrome-bump
@@ -26,16 +26,16 @@ PORTDIR = portage.settings.repositories['gentoo'].location
PKGMAP = {
'www-client/google-chrome': {
- '*.ebuild': ('_p', 'google-chrome-stable'),
+ '*.ebuild': ('', 'google-chrome-stable'),
},
'www-client/google-chrome-beta': {
- '*.ebuild': ('_p', 'google-chrome-beta'),
+ '*.ebuild': ('', 'google-chrome-beta'),
},
'www-client/google-chrome-unstable': {
- '*.ebuild': ('_p', 'google-chrome-unstable'),
+ '*.ebuild': ('', 'google-chrome-unstable'),
},
'www-plugins/chrome-binary-plugins': {
- '*_p*.ebuild': ('_p', 'google-chrome-stable'),
+ '*[0123456789].ebuild': ('', 'google-chrome-stable'),
'*_beta*.ebuild': ('_beta', 'google-chrome-beta'),
'*_alpha*.ebuild': ('_alpha', 'google-chrome-unstable'),
},
@@ -98,7 +98,7 @@ def sync_ebuilds(pkg, debs):
found = True
break
if not found:
- copy_ebuild(ebuilds[0], new_ebuild(pn, version, sep, revision))
+ copy_ebuild(ebuilds[0], new_ebuild(pn, version, sep, ''))
changed = True
for ebuild in ebuilds:
^ permalink raw reply related [flat|nested] 37+ messages in thread
* [gentoo-commits] proj/chromium-tools:master commit in: /
@ 2020-10-26 17:48 Mike Gilbert
0 siblings, 0 replies; 37+ messages in thread
From: Mike Gilbert @ 2020-10-26 17:48 UTC (permalink / raw
To: gentoo-commits
commit: 1c4fc5a149952a22b74a8d0fc498716ee5c7dfa8
Author: Mike Gilbert <floppym <AT> gentoo <DOT> org>
AuthorDate: Mon Oct 26 17:47:40 2020 +0000
Commit: Mike Gilbert <floppym <AT> gentoo <DOT> org>
CommitDate: Mon Oct 26 17:47:40 2020 +0000
URL: https://gitweb.gentoo.org/proj/chromium-tools.git/commit/?id=1c4fc5a1
Update chrome-bump script
Signed-off-by: Mike Gilbert <floppym <AT> gentoo.org>
chrome-bump | 12 ++++++++++--
1 file changed, 10 insertions(+), 2 deletions(-)
diff --git a/chrome-bump b/chrome-bump
index d8df1fc..1b138e5 100755
--- a/chrome-bump
+++ b/chrome-bump
@@ -51,7 +51,7 @@ def get_deb_release(archive, dist):
def get_deb_packages(archive, dist, comp, arch):
url = '%s/dists/%s/%s/binary-%s/Packages' % (archive, dist, comp, arch)
with closing(urlopen(url)) as fp:
- return list(deb822.Packages.iter_paragraphs(fp))
+ return list(deb822.Packages.iter_paragraphs(fp, use_apt_pkg=False))
def ebuild_pvr(pn, ebuild):
return ebuild[len(pn) + 1 : -7]
@@ -82,11 +82,15 @@ def sync_ebuilds(pkg, debs):
os.chdir(os.path.join(PORTDIR, pkg))
pn = pkg.split('/')[1]
changed = False
+ new_versions = []
for pattern in PKGMAP[pkg]:
(sep, name) = PKGMAP[pkg][pattern]
ebuilds = sorted(glob(pattern), reverse=True)
+ if not ebuilds:
+ continue
+
for deb in debs:
if deb['Package'] != name:
continue
@@ -99,6 +103,7 @@ def sync_ebuilds(pkg, debs):
break
if not found:
copy_ebuild(ebuilds[0], new_ebuild(pn, version, sep, ''))
+ new_versions.append(version)
changed = True
for ebuild in ebuilds:
@@ -119,7 +124,10 @@ def sync_ebuilds(pkg, debs):
if ARGS.commit:
print('repoman commit')
if not ARGS.dry_run:
- subprocess.check_call(['repoman', 'commit', '-S', '-m', pkg + ': automated update'])
+ message = '%s: automated update (%s)' % (pkg, ', '.join(new_versions))
+ if len(message) > 69:
+ message = '%s: automated update' % pkg
+ subprocess.check_call(['repoman', 'commit', '-S', '-m', message])
else:
print('repoman manifest')
if not ARGS.dry_run:
^ permalink raw reply related [flat|nested] 37+ messages in thread
* [gentoo-commits] proj/chromium-tools:master commit in: /
@ 2020-11-21 19:34 Stephan Hartmann
0 siblings, 0 replies; 37+ messages in thread
From: Stephan Hartmann @ 2020-11-21 19:34 UTC (permalink / raw
To: gentoo-commits
commit: 7e33e3e27556dd8c7774b5b2ec94250c4e687f50
Author: Stephan Hartmann <sultan <AT> gentoo <DOT> org>
AuthorDate: Sat Nov 21 19:34:38 2020 +0000
Commit: Stephan Hartmann <sultan <AT> gentoo <DOT> org>
CommitDate: Sat Nov 21 19:34:38 2020 +0000
URL: https://gitweb.gentoo.org/proj/chromium-tools.git/commit/?id=7e33e3e2
Add alternative chrome bump script
Signed-off-by: Stephan Hartmann <sultan <AT> gentoo.org>
bump_chrome.py | 258 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++
1 file changed, 258 insertions(+)
diff --git a/bump_chrome.py b/bump_chrome.py
new file mode 100755
index 0000000..a046815
--- /dev/null
+++ b/bump_chrome.py
@@ -0,0 +1,258 @@
+#!/bin/env python3
+
+import argparse
+import json
+import os
+import shutil
+import sys
+import urllib.request
+
+from portage.dbapi.porttree import portdbapi
+from portage.versions import *
+from portage.package.ebuild import digestgen, config
+from portage.output import EOutput
+
+from git import Repo
+
+channels = ["stable", "beta", "dev"]
+pkg_data = \
+{
+ "www-client" :
+ {
+ "stable" :
+ {
+ "pkg" : "google-chrome",
+ "suffix" : None,
+ "version" : None,
+ "bump" : False,
+ "stable" : False
+ },
+ "beta" :
+ {
+ "pkg" : "google-chrome-beta",
+ "suffix" : None,
+ "version" : None,
+ "bump" : False,
+ "stable" : False
+ },
+ "dev" :
+ {
+ "pkg" : "google-chrome-unstable",
+ "suffix" : None,
+ "version" : None,
+ "bump" : False,
+ "stable" : False
+ }
+ },
+ "www-plugins" :
+ {
+ "stable" :
+ {
+ "pkg" : "chrome-binary-plugins",
+ "suffix" : None,
+ "version" : None,
+ "bump" : False,
+ "stable" : True
+ },
+ "beta" :
+ {
+ "pkg" : "chrome-binary-plugins",
+ "suffix" : "beta",
+ "version" : None,
+ "bump" : False,
+ "stable" : False
+ },
+ "dev" :
+ {
+ "pkg" : "chrome-binary-plugins",
+ "suffix" : "alpha",
+ "version" : None,
+ "bump" : False,
+ "stable" : False
+ }
+ }
+}
+
+def getChromeVersionData(base_url, os):
+ if not base_url.endswith("/"):
+ url = base_url + "/"
+ url += f"all.json?os={os}"
+
+ response = urllib.request.urlopen(url)
+ data = json.loads(response.read())
+ return data[0]["versions"]
+
+def getChromeChannelVersion(versions, channel):
+ for item in versions:
+ if item["channel"] == channel:
+ return item["current_version"]
+ return None
+
+def isMajorBump(uversion, tversion):
+ uv_list = uversion.split('.')
+ tv_list = tversion.split('.')
+ if int(uv_list[0]) > int(tv_list[0]):
+ return True
+ return False
+
+def getPrevChannel(channel):
+ channel_list = channels + [channels[len(channels) - 1]]
+ for i in range(0, len(channel_list) - 1):
+ if channel_list[i] == channel:
+ return channel_list[i + 1]
+ raise ValueError(f"Unknown channel \"{channel}\".")
+
+def main():
+ parser = argparse.ArgumentParser()
+ parser.add_argument('--commit', '-c', action='store_true')
+ parser.add_argument('--dry-run', '-n', action='store_true')
+ args = parser.parse_args()
+
+ output = EOutput()
+
+ output.einfo("Fetching upstream version information ...")
+
+ versions = getChromeVersionData(base_url="https://omahaproxy.appspot.com",
+ os="linux")
+
+ chrome_info = {}
+ for channel in channels:
+ chrome_info[channel] = None
+
+ for channel in channels:
+ chrome_info[channel] = getChromeChannelVersion(versions=versions,
+ channel=channel)
+
+ output.einfo("Looking up Chrome version information in tree ...")
+
+ db = portdbapi()
+ repo_path = db.getRepositoryPath(repository_id="gentoo")
+ for category in pkg_data.keys():
+ for channel in channels:
+ pkg = pkg_data[category][channel]["pkg"]
+ cpvs = db.cp_list(mycp=f"{category}/{pkg}", mytree=repo_path)
+ pkg_data[category][channel]["version"] = None
+ for cpv in cpvs:
+ (cp, version, rev) = pkgsplit(mypkg=cpv)
+ suffix = pkg_data[category][channel]['suffix']
+ if suffix is not None:
+ suffix = "_" + suffix
+ if version.endswith(suffix):
+ pkg_data[category][channel]["version"] = version[:-len(suffix)]
+ elif not "_" in version:
+ pkg_data[category][channel]["version"] = version
+ if pkg_data[category][channel]["version"] is None:
+ output.ewarn("Couldn't determine tree version for "+
+ "{category}/{pkg}")
+
+ output.einfo("Comparing Chrome version informations ...")
+
+ for channel in channels:
+ if chrome_info[channel] is None:
+ output.ewarn(f"Upstream version unknown for channel \"{channel}\".")
+ else:
+ for category in pkg_data.keys():
+ pkg_data[category][channel]["bump"] = False
+ ver_info = vercmp(chrome_info[channel],
+ pkg_data[category][channel]["version"])
+ if ver_info is None:
+ output.ewarn("Cannot determine new version for " +
+ f"channel \"{channel}\" of " +
+ f"{category}/" +
+ f"{pkg_data[category][channel]['pkg']}.")
+ elif ver_info > 0:
+ pkg_data[category][channel]["bump"] = True
+ elif ver_info < 0:
+ output.ewarn("Upstream reverted bump for " +
+ f"channel \"{channel}\" of " +
+ f"{category}/" +
+ f"{pkg_data[category][channel]['pkg']}.")
+
+ for category in pkg_data.keys():
+ for channel in channels:
+ pkg = pkg_data[category][channel]["pkg"]
+ output.einfo(f"{category}/{pkg} version information:")
+ need_bump = pkg_data[category][channel]["bump"]
+ uversion = chrome_info[channel]
+ tversion = pkg_data[category][channel]["version"]
+ output.einfo(f"\t{channel}\t{tversion}\t{uversion}" +
+ f"\t==> {'bump' if need_bump else 'no bump'}")
+
+ repo = Repo(repo_path)
+ if repo.is_dirty():
+ output.eerror("Git Repository is dirty, can't continue.")
+ sys.exit(1)
+
+ index = repo.index
+ for channel in channels:
+ for category in pkg_data.keys():
+ if not pkg_data[category][channel]["bump"]:
+ continue
+ uversion = chrome_info[channel]
+ tversion = pkg_data[category][channel]["version"]
+ major_bump = isMajorBump(uversion=uversion, tversion=tversion)
+ pkg = pkg_data[category][channel]["pkg"]
+ suffix = pkg_data[category][channel]["suffix"]
+ if suffix is not None:
+ suffix = "_" + suffix
+ else:
+ suffix = ""
+ output.einfo(f"Bumping {category}/{pkg} ...")
+ if major_bump:
+ prev_channel = getPrevChannel(channel=channel)
+ prev_pkg = pkg_data[category][prev_channel]["pkg"]
+ prev_version = pkg_data[category][prev_channel]["version"]
+ prev_suffix = pkg_data[category][prev_channel]["suffix"]
+ print(prev_pkg)
+ if prev_suffix is not None:
+ prev_suffix = "_" + prev_suffix
+ else:
+ prev_suffix = ""
+ from_ebuild = os.path.join(repo_path,
+ category,
+ prev_pkg,
+ prev_pkg + "-" +
+ prev_version + prev_suffix +
+ ".ebuild")
+ else:
+ from_ebuild = os.path.join(repo_path,
+ category,
+ pkg,
+ pkg + "-" +
+ tversion + suffix +
+ ".ebuild")
+ to_ebuild = os.path.join(repo_path,
+ category,
+ pkg,
+ pkg + "-" +
+ uversion + suffix +
+ ".ebuild")
+
+ shutil.copyfile(from_ebuild, to_ebuild)
+
+ index.add(to_ebuild)
+ if major_bump:
+ old_ebuild = os.path.join(repo_path,
+ category,
+ pkg,
+ pkg + "-" +
+ tversion + suffix +
+ ".ebuild")
+ index.remove(old_ebuild, working_tree=True)
+ else:
+ index.remove(from_ebuild, working_tree=True)
+
+ to_path = os.path.dirname(to_ebuild)
+ cfg = config.config()
+ cfg["O"] = to_path
+
+ digestgen.digestgen(None, cfg, db)
+
+ index.add(os.path.join(to_path, "Manifest"))
+
+ repo.git.commit("-m",
+ f"{category}/{pkg}: automated update ({uversion})",
+ "-s", "-S")
+
+if __name__ == "__main__":
+ main()
^ permalink raw reply related [flat|nested] 37+ messages in thread
* [gentoo-commits] proj/chromium-tools:master commit in: /
@ 2022-01-31 20:20 Stephan Hartmann
0 siblings, 0 replies; 37+ messages in thread
From: Stephan Hartmann @ 2022-01-31 20:20 UTC (permalink / raw
To: gentoo-commits
commit: 715c1a649eed5da8b292bf105351024c90ba6f9e
Author: Stephan Hartmann <sultan <AT> gentoo <DOT> org>
AuthorDate: Mon Jan 31 20:19:56 2022 +0000
Commit: Stephan Hartmann <sultan <AT> gentoo <DOT> org>
CommitDate: Mon Jan 31 20:19:56 2022 +0000
URL: https://gitweb.gentoo.org/proj/chromium-tools.git/commit/?id=715c1a64
Add edge-bump script
Signed-off-by: Stephan Hartmann <sultan <AT> gentoo.org>
edge-bump | 347 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
1 file changed, 347 insertions(+)
diff --git a/edge-bump b/edge-bump
new file mode 100755
index 0000000..5a44177
--- /dev/null
+++ b/edge-bump
@@ -0,0 +1,347 @@
+#!/bin/env python3
+
+import argparse
+import json
+import os
+import shutil
+import sys
+import urllib.request
+import subprocess
+import functools
+import operator
+
+from debian import deb822
+from contextlib import closing
+
+from portage.dbapi.porttree import portdbapi
+from portage.versions import *
+from portage.package.ebuild import digestgen, config
+from portage.output import EOutput
+
+from git import Repo
+
+pkg_data = \
+{
+ "stable" :
+ {
+ "pkg" : "microsoft-edge",
+ "suffix" : "stable",
+ "version" : [],
+ "dversion" : [],
+ "bversion" : [],
+ "stable" : True,
+ "count" : 1
+ },
+ "beta" :
+ {
+ "pkg" : "microsoft-edge-beta",
+ "suffix" : None,
+ "version" : [],
+ "dversion" : [],
+ "bversion" : [],
+ "stable" : False,
+ "count" : 3
+ },
+ "dev" :
+ {
+ "pkg" : "microsoft-edge-dev",
+ "suffix" : None,
+ "version" : [],
+ "dversion" : [],
+ "bversion" : [],
+ "stable" : False,
+ "count" : 3
+ }
+}
+
+def getEdgeVersionData(base_url, archive, dist, comp, arch):
+ if not base_url.endswith("/"):
+ url = base_url + "/"
+ url += f"{archive}/dists/{dist}/{comp}/binary-{arch}/Packages"
+
+ with closing(urllib.request.urlopen(url)) as fp:
+ return list(deb822.Packages.iter_paragraphs(fp, use_apt_pkg=False))
+
+def compareEdgeVersion(item1, item2):
+ return -vercmp(item1[0], item2[0])
+
+def getEdgeChannelVersions(versions, channel):
+ pkg = pkg_data[channel]["pkg"]
+ if pkg_data[channel]["suffix"] is not None:
+ pkg += "-" + pkg_data[channel]["suffix"]
+ v = []
+ for item in versions:
+ if item["Package"] == pkg:
+ (version, revision) = item["Version"].split("-")
+ v.append((version, revision))
+ v.sort(key=functools.cmp_to_key(compareEdgeVersion))
+ return v
+
+def isMajorBump(uversion, tversion):
+ uv_list = uversion.split(".")
+ tv_list = tversion.split(".")
+ if int(uv_list[0]) > int(tv_list[0]):
+ return True
+ return False
+
+def getPrevChannel(channel):
+ channels = list(pkg_data.keys())
+ channel_list = channels + [channels[len(channels) - 1]]
+ for i in range(0, len(channel_list) - 1):
+ if channel_list[i] == channel:
+ return channel_list[i + 1]
+ raise ValueError(f"Unknown channel \"{channel}\".")
+
+def getEbuildVersion(version):
+ if version[1] == "r0":
+ return version[0]
+ return f"{version[0]}-{version[1]}"
+
+def main():
+ parser = argparse.ArgumentParser()
+ parser.add_argument("--dry-run", "-n", action="store_true")
+ args = parser.parse_args()
+
+ output = EOutput()
+
+ output.einfo("Fetching upstream version information ...")
+
+ versions = getEdgeVersionData(base_url="https://packages.microsoft.com/repos",
+ archive="edge", dist="stable", comp="main",
+ arch="amd64")
+
+ edge_info = {}
+ for channel in pkg_data.keys():
+ edge_info[channel] = []
+
+ for channel in pkg_data.keys():
+ edge_info[channel] = getEdgeChannelVersions(versions=versions,
+ channel=channel)
+
+ output.einfo("Looking up Edge versions information in tree ...")
+
+ db = portdbapi()
+ repo_path = db.getRepositoryPath(repository_id="gentoo")
+ for channel in pkg_data.keys():
+ pkg = pkg_data[channel]["pkg"]
+ cpvs = db.cp_list(mycp=f"www-client/{pkg}", mytree=repo_path)
+ for cpv in cpvs:
+ (cp, version, rev) = pkgsplit(mypkg=cpv)
+ pkg_data[channel]["version"].append((version,rev))
+ if len(pkg_data[channel]["version"]) == 0:
+ output.ewarn("Couldn't determine tree versions for "+
+ "www-client/{pkg}")
+ pkg_data[channel]["version"].sort(key=functools.cmp_to_key(compareEdgeVersion))
+
+ output.einfo("Comparing Edge version informations ...")
+
+ for channel in pkg_data.keys():
+ versions = map(operator.itemgetter(0), edge_info[channel])
+ for ver in pkg_data[channel]["version"]:
+ if ver[0] not in versions:
+ output.ewarn("Upstream dropped version " +
+ f"{ver} from channel " +
+ f"\"{channel}\" of www-client/" +
+ f"{pkg_data[channel]['pkg']}.")
+ pkg_data[channel]["dversion"].append(ver)
+
+ for channel in pkg_data.keys():
+ if len(edge_info[channel]) == 0:
+ output.ewarn(f"Upstream version unknown for channel \"{channel}\".")
+ else:
+ for uver in edge_info[channel]:
+ bump = None
+ for tver in pkg_data[channel]["version"]:
+ ver_info = vercmp(uver[0], getEbuildVersion(tver))
+ if ver_info is None:
+ output.ewarn("Cannot determine new version for " +
+ f"channel \"{channel}\" of " +
+ f"www-client/" +
+ f"{pkg_data[channel]['pkg']}.")
+ bump = False
+ break
+ elif ver_info > 0:
+ if bump is None:
+ bump = True
+ elif ver_info == 0:
+ bump = False
+ elif ver_info < 0:
+ bump = False
+ if bump:
+ pkg_data[channel]["bversion"].append((uver[0], "r0"))
+
+ if ( len(pkg_data[channel]["bversion"]) == 0 and
+ len(pkg_data[channel]["dversion"]) ==
+ len(pkg_data[channel]["version"]) ):
+ output.ewarn("Update would remove all versions " +
+ f"from tree for channel \"{channel}\" of " +
+ f"www-client/" +
+ f"{pkg_data[channel]['pkg']}.")
+ pkg_data[channel]["dversion"] = []
+ elif ( len(pkg_data[channel]["bversion"]) >=
+ pkg_data[channel]["count"] ):
+ count = pkg_data[channel]["count"]
+ pkg_data[channel]["bversion"] = \
+ pkg_data[channel]["bversion"][:count]
+ pkg_data[channel]["dversion"] = pkg_data[channel]["version"]
+ elif ( len(pkg_data[channel]["bversion"]) +
+ len(pkg_data[channel]["version"]) >
+ pkg_data[channel]["count"] ):
+ count = len(pkg_data[channel]["bversion"]) + \
+ len(pkg_data[channel]["version"]) - \
+ pkg_data[channel]["count"]
+ pkg_data[channel]["dversion"] = \
+ pkg_data[channel]["version"][-count:]
+
+ for channel in pkg_data.keys():
+ pkg = pkg_data[channel]["pkg"]
+ output.einfo(f"www-client/{pkg} version information:")
+ vstr = ""
+ for ver in reversed(pkg_data[channel]["version"]):
+ if ver in pkg_data[channel]["dversion"]:
+ vstr += f"({getEbuildVersion(ver)})\t"
+ else:
+ vstr += f"{getEbuildVersion(ver)}\t"
+ for ver in pkg_data[channel]["bversion"]:
+ vstr += f"{getEbuildVersion(ver)}*\t"
+ output.einfo(f"\t{channel}\t{vstr}")
+
+ if len(pkg_data[channel]["bversion"]) > 0:
+ output.einfo(f"\t\t==> bump")
+ elif len(pkg_data[channel]["dversion"]) > 0:
+ output.einfo(f"\t\t==> cleanup")
+ else:
+ output.einfo(f"\t\t==> unchanged")
+
+ if not args.dry_run:
+ repo = Repo(repo_path)
+ if repo.is_dirty():
+ output.eerror("Git Repository is dirty, can't continue.")
+ sys.exit(1)
+
+ index = repo.index
+
+ for channel in pkg_data.keys():
+ pkg = pkg_data[channel]["pkg"]
+ tver = pkg_data[channel]["version"][0]
+ tversion = getEbuildVersion(tver)
+ for uver in pkg_data[channel]["bversion"]:
+ uversion = getEbuildVersion(uver)
+ major_bump = isMajorBump(uversion=uver[0], tversion=tver[0])
+ output.einfo(f"Bumping www-client/{pkg}-{uversion} ...")
+ if major_bump:
+ prev_channel = getPrevChannel(channel=channel)
+ prev_pkg = pkg_data[prev_channel]["pkg"]
+ prev_version = getEbuildVersion(
+ pkg_data[prev_channel]["version"][0])
+ from_ebuild = os.path.join("www-client",
+ prev_pkg,
+ prev_pkg + "-" +
+ prev_version +
+ ".ebuild")
+ else:
+ from_ebuild = os.path.join("www-client",
+ pkg,
+ pkg + "-" +
+ tversion +
+ ".ebuild")
+ to_ebuild = os.path.join("www-client",
+ pkg,
+ pkg + "-" +
+ uversion +
+ ".ebuild")
+
+ if args.dry_run:
+ print(f"cp {from_ebuild} {to_ebuild}")
+ if pkg_data[channel]["stable"]:
+ print(f"ekeyword ~amd64 {to_ebuild}")
+ print(f"git add {to_ebuild}")
+ else:
+ to_ebuild = os.path.join(repo_path, to_ebuild)
+ from_ebuild = os.path.join(repo_path, from_ebuild)
+ shutil.copyfile(from_ebuild, to_ebuild)
+ if pkg_data[channel]["stable"]:
+ subprocess.check_call(["ekeyword", "~amd64", to_ebuild])
+ index.add(to_ebuild)
+
+ if args.dry_run:
+ print(f"git add {os.path.join('www-client', pkg, 'Manifest')}")
+ print("git commit -m",
+ f"\"www-client/{pkg}: automated bump",
+ f"({uversion})",
+ "-s -S\"")
+ else:
+ to_path = os.path.dirname(to_ebuild)
+ cfg = config.config()
+ cfg["O"] = to_path
+
+ digestgen.digestgen(None, cfg, db)
+ index.add(os.path.join(to_path, "Manifest"))
+
+ repo.git.commit("-m",
+ f"www-client/{pkg}: automated bump ({uversion})",
+ "-s", "-S")
+
+ if pkg_data[channel]["stable"]:
+ for bver in pkg_data[channel]["bversion"]:
+ bversion = getEbuildVersion(bver)
+ output.einfo(f"Stabilizing www-client/{pkg}-{bversion} ...")
+ ebuild = os.path.join("www-client",
+ pkg,
+ pkg + "-" +
+ bversion +
+ ".ebuild")
+ if args.dry_run:
+ print(f"ekeyword amd64 {ebuild}")
+ print(f"git add {os.path.join('www-client', pkg, 'Manifest')}")
+ print("git commit -m",
+ f"\"www-client/{pkg}: amd64 stable ({bversion})\" -s -S")
+ else:
+ ebuild = os.path.join(repo_path, ebuild)
+ subprocess.check_call(["ekeyword", "amd64", ebuild])
+ index.add(ebuild)
+
+ to_path = os.path.dirname(ebuild)
+ cfg = config.config()
+ cfg["O"] = to_path
+
+ digestgen.digestgen(None, cfg, db)
+ index.add(os.path.join(to_path, "Manifest"))
+
+ repo.git.commit("-m",
+ f"www-client/{pkg}: amd64 stable ({bversion})",
+ "-s", "-S")
+
+ for dver in pkg_data[channel]["dversion"]:
+ dversion = getEbuildVersion(dver)
+ output.einfo(f"Removing www-client/{pkg}-{dversion} ...")
+ rm_ebuild = os.path.join("www-client",
+ pkg,
+ pkg + "-" +
+ dversion +
+ ".ebuild")
+ if args.dry_run:
+ print(f"git rm {os.path.relpath(rm_ebuild, repo_path)}")
+ else:
+ rm_ebuild = os.path.join(repo_path, rm_ebuild)
+ index.remove(rm_ebuild, working_tree=True)
+
+ if len(pkg_data[channel]["dversion"]) > 0:
+ if args.dry_run:
+ print(f"git add {os.path.join('www-client', pkg, 'Manifest')}")
+ print("git commit -m",
+ f"\"www-client/{pkg}: remove old\" -s -S")
+ else:
+ to_path = os.path.dirname(rm_ebuild)
+ cfg = config.config()
+ cfg["O"] = to_path
+
+ digestgen.digestgen(None, cfg, db)
+ index.add(os.path.join(to_path, "Manifest"))
+
+ repo.git.commit("-m",
+ f"www-client/{pkg}: remove old",
+ "-s", "-S")
+
+if __name__ == "__main__":
+ main()
^ permalink raw reply related [flat|nested] 37+ messages in thread
* [gentoo-commits] proj/chromium-tools:master commit in: /
@ 2022-02-05 16:29 Stephan Hartmann
0 siblings, 0 replies; 37+ messages in thread
From: Stephan Hartmann @ 2022-02-05 16:29 UTC (permalink / raw
To: gentoo-commits
commit: 46e5883adc29ea0ae920800a449db4684004dc3a
Author: Stephan Hartmann <sultan <AT> gentoo <DOT> org>
AuthorDate: Sat Feb 5 16:28:38 2022 +0000
Commit: Stephan Hartmann <sultan <AT> gentoo <DOT> org>
CommitDate: Sat Feb 5 16:29:12 2022 +0000
URL: https://gitweb.gentoo.org/proj/chromium-tools.git/commit/?id=46e5883a
bump_chrome.py: add revision and dry run support
Signed-off-by: Stephan Hartmann <sultan <AT> gentoo.org>
bump_chrome.py | 99 ++++++++++++++++++++++++++++++++++++++--------------------
1 file changed, 66 insertions(+), 33 deletions(-)
diff --git a/bump_chrome.py b/bump_chrome.py
index a046815..dadc059 100755
--- a/bump_chrome.py
+++ b/bump_chrome.py
@@ -6,6 +6,7 @@ import os
import shutil
import sys
import urllib.request
+import subprocess
from portage.dbapi.porttree import portdbapi
from portage.versions import *
@@ -25,7 +26,7 @@ pkg_data = \
"suffix" : None,
"version" : None,
"bump" : False,
- "stable" : False
+ "stable" : True
},
"beta" :
{
@@ -102,9 +103,13 @@ def getPrevChannel(channel):
return channel_list[i + 1]
raise ValueError(f"Unknown channel \"{channel}\".")
+def getEbuildVersion(version):
+ if version[1] == "r0":
+ return version[0]
+ return f"{version[0]}-{version[1]}"
+
def main():
parser = argparse.ArgumentParser()
- parser.add_argument('--commit', '-c', action='store_true')
parser.add_argument('--dry-run', '-n', action='store_true')
args = parser.parse_args()
@@ -134,13 +139,14 @@ def main():
pkg_data[category][channel]["version"] = None
for cpv in cpvs:
(cp, version, rev) = pkgsplit(mypkg=cpv)
- suffix = pkg_data[category][channel]['suffix']
+ suffix = pkg_data[category][channel]["suffix"]
if suffix is not None:
suffix = "_" + suffix
if version.endswith(suffix):
- pkg_data[category][channel]["version"] = version[:-len(suffix)]
+ pkg_data[category][channel]["version"] = (version[:-len(suffix)],
+ rev)
elif not "_" in version:
- pkg_data[category][channel]["version"] = version
+ pkg_data[category][channel]["version"] = (version, rev)
if pkg_data[category][channel]["version"] is None:
output.ewarn("Couldn't determine tree version for "+
"{category}/{pkg}")
@@ -154,7 +160,7 @@ def main():
for category in pkg_data.keys():
pkg_data[category][channel]["bump"] = False
ver_info = vercmp(chrome_info[channel],
- pkg_data[category][channel]["version"])
+ pkg_data[category][channel]["version"][0])
if ver_info is None:
output.ewarn("Cannot determine new version for " +
f"channel \"{channel}\" of " +
@@ -174,23 +180,26 @@ def main():
output.einfo(f"{category}/{pkg} version information:")
need_bump = pkg_data[category][channel]["bump"]
uversion = chrome_info[channel]
- tversion = pkg_data[category][channel]["version"]
+ tversion = getEbuildVersion(pkg_data[category][channel]["version"])
output.einfo(f"\t{channel}\t{tversion}\t{uversion}" +
f"\t==> {'bump' if need_bump else 'no bump'}")
- repo = Repo(repo_path)
- if repo.is_dirty():
- output.eerror("Git Repository is dirty, can't continue.")
- sys.exit(1)
+ if not args.dry_run:
+ repo = Repo(repo_path)
+ if repo.is_dirty():
+ output.eerror("Git Repository is dirty, can't continue.")
+ sys.exit(1)
+
+ index = repo.index
- index = repo.index
for channel in channels:
for category in pkg_data.keys():
if not pkg_data[category][channel]["bump"]:
continue
uversion = chrome_info[channel]
- tversion = pkg_data[category][channel]["version"]
- major_bump = isMajorBump(uversion=uversion, tversion=tversion)
+ tversion = getEbuildVersion(pkg_data[category][channel]["version"])
+ major_bump = isMajorBump(uversion=uversion,
+ tversion=pkg_data[category][channel]["version"][0])
pkg = pkg_data[category][channel]["pkg"]
suffix = pkg_data[category][channel]["suffix"]
if suffix is not None:
@@ -201,58 +210,82 @@ def main():
if major_bump:
prev_channel = getPrevChannel(channel=channel)
prev_pkg = pkg_data[category][prev_channel]["pkg"]
- prev_version = pkg_data[category][prev_channel]["version"]
+ prev_version = getEbuildVersion(pkg_data[category][prev_channel]["version"])
prev_suffix = pkg_data[category][prev_channel]["suffix"]
- print(prev_pkg)
if prev_suffix is not None:
prev_suffix = "_" + prev_suffix
else:
prev_suffix = ""
- from_ebuild = os.path.join(repo_path,
- category,
+ from_ebuild = os.path.join(category,
prev_pkg,
prev_pkg + "-" +
prev_version + prev_suffix +
".ebuild")
else:
- from_ebuild = os.path.join(repo_path,
- category,
+ from_ebuild = os.path.join(category,
pkg,
pkg + "-" +
tversion + suffix +
".ebuild")
- to_ebuild = os.path.join(repo_path,
- category,
+ to_ebuild = os.path.join(category,
pkg,
pkg + "-" +
uversion + suffix +
".ebuild")
- shutil.copyfile(from_ebuild, to_ebuild)
+ if args.dry_run:
+ print(f"cp {from_ebuild} {to_ebuild}")
+ if not major_bump:
+ print(f"git rm {from_ebuild}")
+ else:
+ from_ebuild = os.path.join(repo_path, from_ebuild)
+ shutil.copyfile(from_ebuild,
+ os.path.join(repo_path, to_ebuild))
+ if not major_bump:
+ index.remove(from_ebuild, working_tree=True)
- index.add(to_ebuild)
if major_bump:
- old_ebuild = os.path.join(repo_path,
- category,
+ old_ebuild = os.path.join(category,
pkg,
pkg + "-" +
tversion + suffix +
".ebuild")
- index.remove(old_ebuild, working_tree=True)
+ if args.dry_run:
+ print(f"git rm {old_ebuild}")
+ else:
+ index.remove(os.path.join(repo_path, old_ebuild),
+ working_tree=True)
+ if pkg_data[category][channel]["stable"]:
+ if args.dry_run:
+ print(f"ekeyword amd64 {to_ebuild}")
+ else:
+ subprocess.run(["ekeyword", "amd64",
+ os.path.join(repo_path, to_ebuild)])
+
+ if args.dry_run:
+ print(f"git add {to_ebuild}")
else:
- index.remove(from_ebuild, working_tree=True)
+ to_ebuild = os.path.join(repo_path, to_ebuild)
+ index.add(to_ebuild)
to_path = os.path.dirname(to_ebuild)
cfg = config.config()
cfg["O"] = to_path
- digestgen.digestgen(None, cfg, db)
+ if args.dry_run:
+ print(f"git add {os.path.join(to_path, 'Manifest')}")
+ print("git commit -m",
+ f"\"{category}/{pkg}: automated update",
+ f"({uversion}{suffix})",
+ "-s -S\"")
+ else:
+ digestgen.digestgen(None, cfg, db)
- index.add(os.path.join(to_path, "Manifest"))
+ index.add(os.path.join(to_path, "Manifest"))
- repo.git.commit("-m",
- f"{category}/{pkg}: automated update ({uversion})",
- "-s", "-S")
+ repo.git.commit("-m",
+ f"{category}/{pkg}: automated update ({uversion}{suffix})",
+ "-s", "-S")
if __name__ == "__main__":
main()
^ permalink raw reply related [flat|nested] 37+ messages in thread
* [gentoo-commits] proj/chromium-tools:master commit in: /
@ 2022-02-11 17:16 Stephan Hartmann
0 siblings, 0 replies; 37+ messages in thread
From: Stephan Hartmann @ 2022-02-11 17:16 UTC (permalink / raw
To: gentoo-commits
commit: bc93089a28f77b14ffe49280024e404247323848
Author: Stephan Hartmann <sultan <AT> gentoo <DOT> org>
AuthorDate: Fri Feb 11 17:16:20 2022 +0000
Commit: Stephan Hartmann <sultan <AT> gentoo <DOT> org>
CommitDate: Fri Feb 11 17:16:41 2022 +0000
URL: https://gitweb.gentoo.org/proj/chromium-tools.git/commit/?id=bc93089a
edge-bump: copy metadata.xml
Signed-off-by: Stephan Hartmann <sultan <AT> gentoo.org>
edge-bump | 23 ++++++++++++++++++++---
1 file changed, 20 insertions(+), 3 deletions(-)
diff --git a/edge-bump b/edge-bump
index 5a44177..e77f87d 100755
--- a/edge-bump
+++ b/edge-bump
@@ -77,10 +77,11 @@ def getEdgeChannelVersions(versions, channel):
v.sort(key=functools.cmp_to_key(compareEdgeVersion))
return v
-def isMajorBump(uversion, tversion):
+def isMajorBump(channel, uversion, tversion):
uv_list = uversion.split(".")
tv_list = tversion.split(".")
- if int(uv_list[0]) > int(tv_list[0]):
+ if ( int(uv_list[0]) > int(tv_list[0]) and
+ getPrevChannel(channel=channel) != channel ):
return True
return False
@@ -227,7 +228,9 @@ def main():
tversion = getEbuildVersion(tver)
for uver in pkg_data[channel]["bversion"]:
uversion = getEbuildVersion(uver)
- major_bump = isMajorBump(uversion=uver[0], tversion=tver[0])
+ major_bump = isMajorBump(channel=channel,
+ uversion=uver[0],
+ tversion=tver[0])
output.einfo(f"Bumping www-client/{pkg}-{uversion} ...")
if major_bump:
prev_channel = getPrevChannel(channel=channel)
@@ -239,6 +242,12 @@ def main():
prev_pkg + "-" +
prev_version +
".ebuild")
+ from_meta = os.path.join("www-client",
+ prev_pkg,
+ "metadata.xml")
+ to_meta = os.path.join("www-client",
+ pkg,
+ "metadata.xml")
else:
from_ebuild = os.path.join("www-client",
pkg,
@@ -256,6 +265,9 @@ def main():
if pkg_data[channel]["stable"]:
print(f"ekeyword ~amd64 {to_ebuild}")
print(f"git add {to_ebuild}")
+ if major_bump:
+ print(f"cp {from_meta} {to_meta}")
+ print(f"git add {to_meta}")
else:
to_ebuild = os.path.join(repo_path, to_ebuild)
from_ebuild = os.path.join(repo_path, from_ebuild)
@@ -263,6 +275,11 @@ def main():
if pkg_data[channel]["stable"]:
subprocess.check_call(["ekeyword", "~amd64", to_ebuild])
index.add(to_ebuild)
+ if major_bump:
+ to_meta = os.path.join(repo_path, to_meta)
+ from_meta = os.path.join(repo_path, from_meta)
+ shutil.copyfile(from_meta, to_meta)
+ index.add(to_meta)
if args.dry_run:
print(f"git add {os.path.join('www-client', pkg, 'Manifest')}")
^ permalink raw reply related [flat|nested] 37+ messages in thread
* [gentoo-commits] proj/chromium-tools:master commit in: /
@ 2022-05-03 16:54 Mike Gilbert
0 siblings, 0 replies; 37+ messages in thread
From: Mike Gilbert @ 2022-05-03 16:54 UTC (permalink / raw
To: gentoo-commits
commit: 856061d17ae4b31662b007fb9dd3e4b07775e94b
Author: Mike Gilbert <floppym <AT> gentoo <DOT> org>
AuthorDate: Tue May 3 16:54:35 2022 +0000
Commit: Mike Gilbert <floppym <AT> gentoo <DOT> org>
CommitDate: Tue May 3 16:54:35 2022 +0000
URL: https://gitweb.gentoo.org/proj/chromium-tools.git/commit/?id=856061d1
Rename bump_chrome.py to chrome-bump
Signed-off-by: Mike Gilbert <floppym <AT> gentoo.org>
bump_chrome.py => chrome-bump | 0
1 file changed, 0 insertions(+), 0 deletions(-)
diff --git a/bump_chrome.py b/chrome-bump
similarity index 100%
rename from bump_chrome.py
rename to chrome-bump
^ permalink raw reply [flat|nested] 37+ messages in thread
* [gentoo-commits] proj/chromium-tools:master commit in: /
@ 2022-05-03 16:54 Mike Gilbert
0 siblings, 0 replies; 37+ messages in thread
From: Mike Gilbert @ 2022-05-03 16:54 UTC (permalink / raw
To: gentoo-commits
commit: 681e72c7924ed57d7b73183fb07e28f4fb524919
Author: Mike Gilbert <floppym <AT> gentoo <DOT> org>
AuthorDate: Tue May 3 16:53:01 2022 +0000
Commit: Mike Gilbert <floppym <AT> gentoo <DOT> org>
CommitDate: Tue May 3 16:53:32 2022 +0000
URL: https://gitweb.gentoo.org/proj/chromium-tools.git/commit/?id=681e72c7
Remove old chrome-bump script
Signed-off-by: Mike Gilbert <floppym <AT> gentoo.org>
chrome-bump | 148 ------------------------------------------------------------
1 file changed, 148 deletions(-)
diff --git a/chrome-bump b/chrome-bump
deleted file mode 100755
index 1b138e5..0000000
--- a/chrome-bump
+++ /dev/null
@@ -1,148 +0,0 @@
-#!/usr/bin/env python
-
-from __future__ import print_function
-
-import argparse
-from contextlib import closing
-from debian import deb822
-from glob import glob
-import os
-import os.path
-import portage
-import shutil
-import subprocess
-import sys
-try:
- from urllib.request import urlopen
-except ImportError:
- from urllib2 import urlopen
-
-ARCHIVE = 'https://dl.google.com/linux/chrome/deb'
-DIST = 'stable'
-COMP = 'main'
-ARCH = 'amd64'
-
-PORTDIR = portage.settings.repositories['gentoo'].location
-
-PKGMAP = {
- 'www-client/google-chrome': {
- '*.ebuild': ('', 'google-chrome-stable'),
- },
- 'www-client/google-chrome-beta': {
- '*.ebuild': ('', 'google-chrome-beta'),
- },
- 'www-client/google-chrome-unstable': {
- '*.ebuild': ('', 'google-chrome-unstable'),
- },
- 'www-plugins/chrome-binary-plugins': {
- '*[0123456789].ebuild': ('', 'google-chrome-stable'),
- '*_beta*.ebuild': ('_beta', 'google-chrome-beta'),
- '*_alpha*.ebuild': ('_alpha', 'google-chrome-unstable'),
- },
-}
-
-ARGS = None
-
-def get_deb_release(archive, dist):
- url = '%s/dists/%s/Release' % (archive, dist)
- with closing(urlopen(url)) as fp:
- return deb822.Release(fp)
-
-def get_deb_packages(archive, dist, comp, arch):
- url = '%s/dists/%s/%s/binary-%s/Packages' % (archive, dist, comp, arch)
- with closing(urlopen(url)) as fp:
- return list(deb822.Packages.iter_paragraphs(fp, use_apt_pkg=False))
-
-def ebuild_pvr(pn, ebuild):
- return ebuild[len(pn) + 1 : -7]
-
-def ebuild_pv(pn, ebuild):
- return ebuild_pvr(pn, ebuild).split('-r')[0]
-
-def ebuild_version(pn, ebuild):
- return ebuild_pv(pn, ebuild).split('_')[0]
-
-def new_ebuild(pn, version, sep, revision):
- return pn + '-' + version + sep + revision + '.ebuild'
-
-def copy_ebuild(src, dest):
- print('cp ' + src + ' ' + dest)
- if not ARGS.dry_run:
- shutil.copyfile(src, dest)
- print('git add ' + dest)
- if not ARGS.dry_run:
- subprocess.check_call(['git', 'add', dest])
-
-def remove_ebuild(ebuild):
- print('git rm ' + ebuild)
- if not ARGS.dry_run:
- subprocess.check_call(['git', 'rm', ebuild])
-
-def sync_ebuilds(pkg, debs):
- os.chdir(os.path.join(PORTDIR, pkg))
- pn = pkg.split('/')[1]
- changed = False
- new_versions = []
-
- for pattern in PKGMAP[pkg]:
- (sep, name) = PKGMAP[pkg][pattern]
- ebuilds = sorted(glob(pattern), reverse=True)
-
- if not ebuilds:
- continue
-
- for deb in debs:
- if deb['Package'] != name:
- continue
-
- (version, revision) = deb['Version'].split('-')
- found = False
- for ebuild in ebuilds:
- if version == ebuild_version(pn, ebuild):
- found = True
- break
- if not found:
- copy_ebuild(ebuilds[0], new_ebuild(pn, version, sep, ''))
- new_versions.append(version)
- changed = True
-
- for ebuild in ebuilds:
- found = False
- for deb in debs:
- if deb['Package'] != name:
- continue
-
- (version, revision) = deb['Version'].split('-')
- if version == ebuild_version(pn, ebuild):
- found = True
- break
- if not found:
- remove_ebuild(ebuild)
- changed = True
-
- if changed:
- if ARGS.commit:
- print('repoman commit')
- if not ARGS.dry_run:
- message = '%s: automated update (%s)' % (pkg, ', '.join(new_versions))
- if len(message) > 69:
- message = '%s: automated update' % pkg
- subprocess.check_call(['repoman', 'commit', '-S', '-m', message])
- else:
- print('repoman manifest')
- if not ARGS.dry_run:
- subprocess.check_call(['repoman', 'manifest'])
-
-def main():
- parser = argparse.ArgumentParser()
- parser.add_argument('--commit', '-c', action='store_true')
- parser.add_argument('--dry-run', '-n', action='store_true')
- global ARGS
- ARGS = parser.parse_args()
-
- debs = get_deb_packages(ARCHIVE, DIST, COMP, ARCH)
- for pkg in PKGMAP:
- sync_ebuilds(pkg, debs)
-
-if __name__ == '__main__':
- main()
^ permalink raw reply related [flat|nested] 37+ messages in thread
* [gentoo-commits] proj/chromium-tools:master commit in: /
@ 2022-05-06 9:55 Stephan Hartmann
0 siblings, 0 replies; 37+ messages in thread
From: Stephan Hartmann @ 2022-05-06 9:55 UTC (permalink / raw
To: gentoo-commits
commit: eb9734c60aff0ea27cf030a88b4779ae613f88dd
Author: Stephan Hartmann <sultan <AT> gentoo <DOT> org>
AuthorDate: Fri May 6 09:54:02 2022 +0000
Commit: Stephan Hartmann <sultan <AT> gentoo <DOT> org>
CommitDate: Fri May 6 09:55:51 2022 +0000
URL: https://gitweb.gentoo.org/proj/chromium-tools.git/commit/?id=eb9734c6
Add opera-bump script
Signed-off-by: Stephan Hartmann <sultan <AT> gentoo.org>
opera-bump | 397 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
1 file changed, 397 insertions(+)
diff --git a/opera-bump b/opera-bump
new file mode 100755
index 0000000..c1e3c46
--- /dev/null
+++ b/opera-bump
@@ -0,0 +1,397 @@
+#!/bin/env python3
+
+import argparse
+import json
+import os
+import shutil
+import sys
+import urllib.request
+import subprocess
+import functools
+import operator
+
+from bs4 import BeautifulSoup
+from debian import deb822
+from contextlib import closing
+
+from portage.dbapi.porttree import portdbapi
+from portage.versions import *
+from portage.package.ebuild import digestgen, config
+from portage.output import EOutput
+
+from git import Repo
+
+pkg_data = \
+{
+ "stable" :
+ {
+ "pkg" : "opera",
+ "suffix" : "stable",
+ "version" : [],
+ "dversion" : [],
+ "bversion" : [],
+ "stable" : True,
+ "count" : 1
+ },
+ "beta" :
+ {
+ "pkg" : "opera-beta",
+ "suffix" : None,
+ "version" : [],
+ "dversion" : [],
+ "bversion" : [],
+ "stable" : False,
+ "count" : 3
+ },
+ "dev" :
+ {
+ "pkg" : "opera-developer",
+ "suffix" : None,
+ "version" : [],
+ "dversion" : [],
+ "bversion" : [],
+ "stable" : False,
+ "count" : 3
+ }
+}
+
+def getOperaVersionInfo(base_url, archive, arch, version):
+ if not base_url.endswith("/"):
+ url = base_url + "/"
+ url += f"{version}/linux"
+ try:
+ req = urllib.request.urlopen(url)
+ except urllib.error.HTTPError:
+ return None
+ soup = BeautifulSoup(req, "html.parser")
+ base_fn = f"{archive}_{version}_{arch}."
+ rpm = False
+ for node in soup.find_all("a"):
+ v = node.get("href")
+ if v.startswith(base_fn):
+ if v.endswith("rpm"):
+ rpm = True
+ elif v.endswith("deb"):
+ return (version, "0", "deb")
+ if rpm:
+ return (version, "0", "rpm")
+ return None
+
+def getOperaVersionData(base_url, package, archive, arch, tversion,
+ platform=None):
+ if not base_url.endswith("/"):
+ url = base_url + "/"
+ url += package
+ if platform is not None:
+ url += f"/{platform}"
+
+ req = urllib.request.urlopen(url)
+ soup = BeautifulSoup(req, "html.parser")
+ versions = []
+ for node in soup.find_all("a"):
+ v = node.get("href")
+ if v.endswith("/"):
+ v = v[:-1]
+ if v != "..":
+ check = False
+ for tver in tversion:
+ c = vercmp(v, tver[0])
+ if c is not None and c >= 0:
+ check = True
+ if check:
+ ver = getOperaVersionInfo(base_url=url,
+ archive=archive,
+ arch=arch,
+ version=v)
+ if ver is not None:
+ versions.append(ver)
+ return versions
+
+def compareOperaVersion(item1, item2):
+ return -vercmp(item1[0], item2[0])
+
+def isMajorBump(channel, uversion, tversion):
+ uv_list = uversion.split(".")
+ tv_list = tversion.split(".")
+ if ( int(uv_list[0]) > int(tv_list[0]) and
+ getPrevChannel(channel=channel) != channel ):
+ return True
+ return False
+
+def getPrevChannel(channel):
+ channels = list(pkg_data.keys())
+ channel_list = channels + [channels[len(channels) - 1]]
+ for i in range(0, len(channel_list) - 1):
+ if channel_list[i] == channel:
+ return channel_list[i + 1]
+ raise ValueError(f"Unknown channel \"{channel}\".")
+
+def getEbuildVersion(version):
+ if version[1] == "r0":
+ return version[0]
+ return f"{version[0]}-{version[1]}"
+
+def main():
+ parser = argparse.ArgumentParser()
+ parser.add_argument("--dry-run", "-n", action="store_true")
+ args = parser.parse_args()
+
+ output = EOutput()
+
+ output.einfo("Looking up Opera versions information in tree ...")
+
+ db = portdbapi()
+ repo_path = db.getRepositoryPath(repository_id="gentoo")
+ for channel in pkg_data.keys():
+ pkg = pkg_data[channel]["pkg"]
+ cpvs = db.cp_list(mycp=f"www-client/{pkg}", mytree=repo_path)
+ for cpv in cpvs:
+ (cp, version, rev) = pkgsplit(mypkg=cpv)
+ pkg_data[channel]["version"].append((version,rev))
+ if len(pkg_data[channel]["version"]) == 0:
+ output.ewarn("Couldn't determine tree versions for "+
+ "www-client/{pkg}")
+ pkg_data[channel]["version"].sort(key=functools.cmp_to_key(compareOperaVersion))
+
+ opera_info = {}
+ for channel in pkg_data.keys():
+ archive = pkg_data[channel]["pkg"]
+ platform = None
+ if pkg_data[channel]["suffix"] is not None:
+ archive += "-" + pkg_data[channel]["suffix"]
+ platform = "desktop"
+ output.einfo(f"Fetching upstream version information \"{archive}\" ...")
+ versions = getOperaVersionData(base_url="https://download1.operacdn.com/pub",
+ package=pkg_data[channel]["pkg"],
+ archive=archive, arch="amd64",
+ tversion=pkg_data[channel]["version"],
+ platform=platform)
+ versions.sort(key=functools.cmp_to_key(compareOperaVersion))
+ opera_info[channel] = versions
+
+ output.einfo("Comparing Opera version informations ...")
+
+ for channel in pkg_data.keys():
+ versions = map(operator.itemgetter(0), opera_info[channel])
+ for ver in pkg_data[channel]["version"]:
+ if ver[0] not in versions:
+ output.ewarn("Upstream dropped version " +
+ f"{ver[0]} from channel " +
+ f"\"{channel}\" of www-client/" +
+ f"{pkg_data[channel]['pkg']}.")
+ pkg_data[channel]["dversion"].append(ver)
+
+ for channel in pkg_data.keys():
+ if len(opera_info[channel]) == 0:
+ output.ewarn(f"Upstream version unknown for channel \"{channel}\".")
+ else:
+ for uver in opera_info[channel]:
+ bump = None
+ for tver in pkg_data[channel]["version"]:
+ ver_info = vercmp(uver[0], getEbuildVersion(tver))
+ if ver_info is None:
+ output.ewarn("Cannot determine new version for " +
+ f"channel \"{channel}\" of " +
+ f"www-client/" +
+ f"{pkg_data[channel]['pkg']}.")
+ bump = False
+ break
+ elif ver_info > 0:
+ if bump is None:
+ bump = True
+ elif ver_info == 0:
+ bump = False
+ elif ver_info < 0:
+ bump = False
+ if bump:
+ pkg_data[channel]["bversion"].append((uver[0], "r0"))
+
+ if ( len(pkg_data[channel]["bversion"]) == 0 and
+ len(pkg_data[channel]["dversion"]) ==
+ len(pkg_data[channel]["version"]) ):
+ output.ewarn("Update would remove all versions " +
+ f"from tree for channel \"{channel}\" of " +
+ f"www-client/" +
+ f"{pkg_data[channel]['pkg']}.")
+ pkg_data[channel]["dversion"] = []
+ elif ( len(pkg_data[channel]["bversion"]) >=
+ pkg_data[channel]["count"] ):
+ count = pkg_data[channel]["count"]
+ pkg_data[channel]["bversion"] = \
+ pkg_data[channel]["bversion"][:count]
+ pkg_data[channel]["dversion"] = pkg_data[channel]["version"]
+ elif ( len(pkg_data[channel]["bversion"]) +
+ len(pkg_data[channel]["version"]) >
+ pkg_data[channel]["count"] ):
+ count = len(pkg_data[channel]["bversion"]) + \
+ len(pkg_data[channel]["version"]) - \
+ pkg_data[channel]["count"]
+ pkg_data[channel]["dversion"] = \
+ pkg_data[channel]["version"][-count:]
+
+ for channel in pkg_data.keys():
+ pkg = pkg_data[channel]["pkg"]
+ output.einfo(f"www-client/{pkg} version information:")
+ vstr = ""
+ for ver in reversed(pkg_data[channel]["version"]):
+ if ver in pkg_data[channel]["dversion"]:
+ vstr += f"({getEbuildVersion(ver)})\t"
+ else:
+ vstr += f"{getEbuildVersion(ver)}\t"
+ for ver in pkg_data[channel]["bversion"]:
+ vstr += f"{getEbuildVersion(ver)}*\t"
+ output.einfo(f"\t{channel}\t{vstr}")
+
+ if len(pkg_data[channel]["bversion"]) > 0:
+ output.einfo(f"\t\t==> bump")
+ elif len(pkg_data[channel]["dversion"]) > 0:
+ output.einfo(f"\t\t==> cleanup")
+ else:
+ output.einfo(f"\t\t==> unchanged")
+
+ if not args.dry_run:
+ repo = Repo(repo_path)
+ if repo.is_dirty():
+ output.eerror("Git Repository is dirty, can't continue.")
+ sys.exit(1)
+
+ index = repo.index
+
+ for channel in pkg_data.keys():
+ pkg = pkg_data[channel]["pkg"]
+ tver = pkg_data[channel]["version"][0]
+ tversion = getEbuildVersion(tver)
+ for uver in pkg_data[channel]["bversion"]:
+ uversion = getEbuildVersion(uver)
+ major_bump = isMajorBump(channel=channel,
+ uversion=uver[0],
+ tversion=tver[0])
+ output.einfo(f"Bumping www-client/{pkg}-{uversion} ...")
+ if major_bump:
+ prev_channel = getPrevChannel(channel=channel)
+ prev_pkg = pkg_data[prev_channel]["pkg"]
+ prev_version = getEbuildVersion(
+ pkg_data[prev_channel]["version"][0])
+ from_ebuild = os.path.join("www-client",
+ prev_pkg,
+ prev_pkg + "-" +
+ prev_version +
+ ".ebuild")
+ from_meta = os.path.join("www-client",
+ prev_pkg,
+ "metadata.xml")
+ to_meta = os.path.join("www-client",
+ pkg,
+ "metadata.xml")
+ else:
+ from_ebuild = os.path.join("www-client",
+ pkg,
+ pkg + "-" +
+ tversion +
+ ".ebuild")
+ to_ebuild = os.path.join("www-client",
+ pkg,
+ pkg + "-" +
+ uversion +
+ ".ebuild")
+
+ if args.dry_run:
+ print(f"cp {from_ebuild} {to_ebuild}")
+ if pkg_data[channel]["stable"]:
+ print(f"ekeyword ~amd64 {to_ebuild}")
+ print(f"git add {to_ebuild}")
+ if major_bump:
+ print(f"cp {from_meta} {to_meta}")
+ print(f"git add {to_meta}")
+ else:
+ to_ebuild = os.path.join(repo_path, to_ebuild)
+ from_ebuild = os.path.join(repo_path, from_ebuild)
+ shutil.copyfile(from_ebuild, to_ebuild)
+ if pkg_data[channel]["stable"]:
+ subprocess.check_call(["ekeyword", "~amd64", to_ebuild])
+ index.add(to_ebuild)
+ if major_bump:
+ to_meta = os.path.join(repo_path, to_meta)
+ from_meta = os.path.join(repo_path, from_meta)
+
+ if args.dry_run:
+ print(f"git add {os.path.join('www-client', pkg, 'Manifest')}")
+ print("git commit -m",
+ f"\"www-client/{pkg}: automated bump",
+ f"({uversion})",
+ "-s -S\"")
+ else:
+ to_path = os.path.dirname(to_ebuild)
+ cfg = config.config()
+ cfg["O"] = to_path
+
+ digestgen.digestgen(None, cfg, db)
+ index.add(os.path.join(to_path, "Manifest"))
+
+ repo.git.commit("-m",
+ f"www-client/{pkg}: automated bump ({uversion})",
+ "-s", "-S")
+
+ if pkg_data[channel]["stable"]:
+ for bver in pkg_data[channel]["bversion"]:
+ bversion = getEbuildVersion(bver)
+ output.einfo(f"Stabilizing www-client/{pkg}-{bversion} ...")
+ ebuild = os.path.join("www-client",
+ pkg,
+ pkg + "-" +
+ bversion +
+ ".ebuild")
+ if args.dry_run:
+ print(f"ekeyword amd64 {ebuild}")
+ print(f"git add {os.path.join('www-client', pkg, 'Manifest')}")
+ print("git commit -m",
+ f"\"www-client/{pkg}: amd64 stable ({bversion})\" -s -S")
+ else:
+ ebuild = os.path.join(repo_path, ebuild)
+ subprocess.check_call(["ekeyword", "amd64", ebuild])
+ index.add(ebuild)
+
+ to_path = os.path.dirname(ebuild)
+ cfg = config.config()
+ cfg["O"] = to_path
+
+ digestgen.digestgen(None, cfg, db)
+ index.add(os.path.join(to_path, "Manifest"))
+
+ repo.git.commit("-m",
+ f"www-client/{pkg}: amd64 stable ({bversion})",
+ "-s", "-S")
+
+ for dver in pkg_data[channel]["dversion"]:
+ dversion = getEbuildVersion(dver)
+ output.einfo(f"Removing www-client/{pkg}-{dversion} ...")
+ rm_ebuild = os.path.join("www-client",
+ pkg,
+ pkg + "-" +
+ dversion +
+ ".ebuild")
+ if args.dry_run:
+ print(f"git rm {os.path.relpath(rm_ebuild, repo_path)}")
+ else:
+ rm_ebuild = os.path.join(repo_path, rm_ebuild)
+ index.remove(rm_ebuild, working_tree=True)
+
+ if len(pkg_data[channel]["dversion"]) > 0:
+ if args.dry_run:
+ print(f"git add {os.path.join('www-client', pkg, 'Manifest')}")
+ print("git commit -m",
+ f"\"www-client/{pkg}: remove old\" -s -S")
+ else:
+ to_path = os.path.dirname(rm_ebuild)
+ cfg = config.config()
+ cfg["O"] = to_path
+
+ digestgen.digestgen(None, cfg, db)
+ index.add(os.path.join(to_path, "Manifest"))
+
+ repo.git.commit("-m",
+ f"www-client/{pkg}: remove old",
+ "-s", "-S")
+
+if __name__ == "__main__":
+ main()
^ permalink raw reply related [flat|nested] 37+ messages in thread
* [gentoo-commits] proj/chromium-tools:master commit in: /
@ 2022-09-01 19:24 Mike Gilbert
0 siblings, 0 replies; 37+ messages in thread
From: Mike Gilbert @ 2022-09-01 19:24 UTC (permalink / raw
To: gentoo-commits
commit: 2075fce3f64bed3df495af5aad2295f336ddb49a
Author: Mike Gilbert <floppym <AT> gentoo <DOT> org>
AuthorDate: Thu Sep 1 19:24:03 2022 +0000
Commit: Mike Gilbert <floppym <AT> gentoo <DOT> org>
CommitDate: Thu Sep 1 19:24:22 2022 +0000
URL: https://gitweb.gentoo.org/proj/chromium-tools.git/commit/?id=2075fce3
Add package.sh
Signed-off-by: Mike Gilbert <floppym <AT> gentoo.org>
package.sh | 115 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
1 file changed, 115 insertions(+)
diff --git a/package.sh b/package.sh
new file mode 100755
index 0000000..41dbd92
--- /dev/null
+++ b/package.sh
@@ -0,0 +1,115 @@
+#!/bin/bash -e
+
+MYPKG="chromium"
+MYVERSION="99.0.4844.51"
+#MYTARGETS=( "gcc_official" "gcc" "clang" "ozone" )
+MYTARGETS=( "gcc" "clang" "ozone" )
+
+MYRE2_SLOT="0/9"
+MYICU_SLOT="0/70.1"
+
+MYKEYWORD_PKGS=()
+#MYKEYWORD_PKGS+=( "dev-util/gn" )
+#MYKEYWORD_PKGS+=( "~media-video/ffmpeg-4.3.1" )
+#MYKEYWORD_PKGS+=( "dev-libs/re2:${MYRE2_SLOT}" )
+#MYKEYWORD_PKGS+=( "dev-libs/icu:${MYICU_SLOT}" )
+#MYKEYWORD_PKGS+=( "=media-libs/libwebp-1.2.2" )
+
+MYCATEGORY="www-client"
+MYPKGDIR="$(portageq pkgdir)"
+MYEBUILD="=${MYPKG}-${MYVERSION}"
+MYEMERGE_OPTS="-vuDN --with-bdeps=y --complete-graph"
+MYCCACHE_BASE="/var/tmp/ccache"
+MYCCACHE_USE=true
+MYUSE_FLAGS_BASE="-component-build -headless -custom-cflags cups hangouts js-type-check -kerberos pic proprietary-codecs pulseaudio suid -system-ffmpeg system-icu tcmalloc widevine"
+
+MYTARGET_USE_gcc_official=( "${MYCATEGORY}/${MYPKG} -wayland -screencast vaapi official" )
+MYTARGET_USE_gcc=( "${MYCATEGORY}/${MYPKG} -wayland -screencast -vaapi -official" )
+MYTARGET_USE_clang=( "${MYCATEGORY}/${MYPKG} -wayland -screencast -vaapi -official" )
+MYTARGET_USE_ozone=( "${MYCATEGORY}/${MYPKG} wayland screencast vaapi -official" )
+MYTARGET_USE_ozone+=( "x11-libs/gtk+ wayland" )
+MYTARGET_USE_ozone+=( "media-libs/mesa wayland" )
+
+MYCOMPILERS_gcc_official=( "gcc-9.3.0" )
+MYCOMPILERS_gcc=( "gcc-10.3.0" "gcc-11.2.0" )
+MYCOMPILERS_clang=( "clang-13" )
+MYCOMPILERS_ozone=( "gcc-11.2.0" )
+
+# merge ccache
+emerge ${MYEMERGE_OPTS} ccache
+if [[ ! -d "${MYCCACHE_BASE}" ]]; then
+ mkdir -p "${MYCCACHE_BASE}"
+ chown root:portage "${MYCCACHE_BASE}"
+ chmod 775 "${MYCCACHE_BASE}"
+fi
+
+# setup keywords
+rm -f "/etc/portage/package.accept_keywords/chromium"
+echo "=${MYCATEGORY}/${MYPKG}-${MYVERSION}" >> "/etc/portage/package.accept_keywords/chromium"
+
+for mypkg in "${MYKEYWORD_PKGS[@]}"; do
+ echo "$mypkg" >> "/etc/portage/package.accept_keywords/chromium"
+done
+
+# unmask chromium (dev channels are usually masked)
+rm -f "/etc/portage/package.unmask/chromium"
+echo "=${MYCATEGORY}/${MYPKG}-${MYVERSION}" >> "/etc/portage/package.unmask/chromium"
+
+# setup base USE flags
+echo "${MYCATEGORY}/${MYPKG} ${MYUSE_FLAGS_BASE}" > "/etc/portage/package.use/chromium-base"
+
+for mytarget in "${MYTARGETS[@]}"; do
+
+ # setup build USE flags
+ mytarget_use="MYTARGET_USE_${mytarget}[@]"
+ rm -f "/etc/portage/package.use/chromium-build"
+ for myuse in "${!mytarget_use}"; do
+ echo "${myuse}" >> "/etc/portage/package.use/chromium-build"
+ done
+
+ mycompilers="MYCOMPILERS_${mytarget}[@]"
+ for mycompiler in "${!mycompilers}"; do
+ mycc="x86_64-pc-linux-gnu-${mycompiler}"
+ if [[ ${mycompiler} = gcc* ]]; then
+ mycxx="x86_64-pc-linux-gnu-${mycompiler/gcc/g++}"
+ else
+ mycxx="x86_64-pc-linux-gnu-${mycompiler/clang/clang++}"
+ fi
+ rm -f "/etc/portage/env/chromium-cc.conf"
+ echo "CC=\"${mycc}\"" >> "/etc/portage/env/chromium-cc.conf"
+ echo "CXX=\"${mycxx}\"" >> "/etc/portage/env/chromium-cc.conf"
+ myversion="${mycompiler#*-}"
+ # remove installed package
+ emerge --depclean -v "${MYCATEGORY}/${MYPKG}"
+
+ mytargetdir="${mytarget}_${mycompiler%%-*}${myversion%%.*}"
+
+ # setup ccache
+ if [[ ! -d "${MYCCACHE_BASE}/${mytargetdir}" ]]; then
+ mkdir "${MYCCACHE_BASE}/${mytargetdir}"
+ chown root:portage "${MYCCACHE_BASE}/${mytargetdir}"
+ chmod 775 "${MYCCACHE_BASE}/${mytargetdir}"
+ fi
+ if [[ ! -f "${MYCCACHE_BASE}/${mytargetdir}/ccache.conf" ]]; then
+ cat <<- EOF > "${MYCCACHE_BASE}/${mytargetdir}/ccache.conf"
+ max_size = 10.0G
+ umask = 002
+ compression = false
+ EOF
+ chown root:portage "${MYCCACHE_BASE}/${mytargetdir}/ccache.conf"
+ chmod 664 "${MYCCACHE_BASE}/${mytargetdir}/ccache.conf"
+ fi
+ echo "CCACHE_DIR=\"${MYCCACHE_BASE}/${mytargetdir}\"" >> "/etc/portage/env/chromium-cc.conf"
+ if [[ ${MYCCACHE_USE} = true ]]; then
+ echo "FEATURES=\"ccache\"" >> "/etc/portage/env/chromium-cc.conf"
+ fi
+
+ # build chromium
+ emerge ${MYEMERGE_OPTS} "${MYEBUILD}"
+ # create binary package
+# PKGDIR="${MYPKGDIR}/${mytargetdir}" quickpkg ${MYPKG} --include-config=y
+ # update access rights
+ find "${MYPKGDIR}" -type d -exec chmod 755 {} \;
+ find "${MYPKGDIR}" -type f -exec chmod 644 {} \;
+ done
+done
^ permalink raw reply related [flat|nested] 37+ messages in thread
* [gentoo-commits] proj/chromium-tools:master commit in: /
@ 2022-09-01 19:33 Mike Gilbert
0 siblings, 0 replies; 37+ messages in thread
From: Mike Gilbert @ 2022-09-01 19:33 UTC (permalink / raw
To: gentoo-commits
commit: 3c17da8e49841cf2eaa474d595e79e6d8bd11093
Author: Mike Gilbert <floppym <AT> gentoo <DOT> org>
AuthorDate: Thu Sep 1 19:33:45 2022 +0000
Commit: Mike Gilbert <floppym <AT> gentoo <DOT> org>
CommitDate: Thu Sep 1 19:33:45 2022 +0000
URL: https://gitweb.gentoo.org/proj/chromium-tools.git/commit/?id=3c17da8e
Add package-beta.sh
Signed-off-by: Mike Gilbert <floppym <AT> gentoo.org>
package.sh => package-beta.sh | 17 ++++++++---------
package.sh => package-stable.sh | 0
2 files changed, 8 insertions(+), 9 deletions(-)
diff --git a/package.sh b/package-beta.sh
similarity index 90%
copy from package.sh
copy to package-beta.sh
index 41dbd92..c2991c3 100755
--- a/package.sh
+++ b/package-beta.sh
@@ -1,9 +1,8 @@
#!/bin/bash -e
MYPKG="chromium"
-MYVERSION="99.0.4844.51"
-#MYTARGETS=( "gcc_official" "gcc" "clang" "ozone" )
-MYTARGETS=( "gcc" "clang" "ozone" )
+MYVERSION="105.0.5195.52"
+MYTARGETS=( "gcc_official" "gcc" "clang" "ozone" )
MYRE2_SLOT="0/9"
MYICU_SLOT="0/70.1"
@@ -11,9 +10,9 @@ MYICU_SLOT="0/70.1"
MYKEYWORD_PKGS=()
#MYKEYWORD_PKGS+=( "dev-util/gn" )
#MYKEYWORD_PKGS+=( "~media-video/ffmpeg-4.3.1" )
-#MYKEYWORD_PKGS+=( "dev-libs/re2:${MYRE2_SLOT}" )
+MYKEYWORD_PKGS+=( "dev-libs/re2:${MYRE2_SLOT}" )
#MYKEYWORD_PKGS+=( "dev-libs/icu:${MYICU_SLOT}" )
-#MYKEYWORD_PKGS+=( "=media-libs/libwebp-1.2.2" )
+MYKEYWORD_PKGS+=( "~media-libs/libwebp-1.2.4" )
MYCATEGORY="www-client"
MYPKGDIR="$(portageq pkgdir)"
@@ -31,9 +30,9 @@ MYTARGET_USE_ozone+=( "x11-libs/gtk+ wayland" )
MYTARGET_USE_ozone+=( "media-libs/mesa wayland" )
MYCOMPILERS_gcc_official=( "gcc-9.3.0" )
-MYCOMPILERS_gcc=( "gcc-10.3.0" "gcc-11.2.0" )
-MYCOMPILERS_clang=( "clang-13" )
-MYCOMPILERS_ozone=( "gcc-11.2.0" )
+MYCOMPILERS_gcc=( "gcc-11.3.0" "gcc-12.1.1" )
+MYCOMPILERS_clang=( "clang-14" )
+MYCOMPILERS_ozone=( "gcc-12.1.1" )
# merge ccache
emerge ${MYEMERGE_OPTS} ccache
@@ -107,7 +106,7 @@ for mytarget in "${MYTARGETS[@]}"; do
# build chromium
emerge ${MYEMERGE_OPTS} "${MYEBUILD}"
# create binary package
-# PKGDIR="${MYPKGDIR}/${mytargetdir}" quickpkg ${MYPKG} --include-config=y
+ PKGDIR="${MYPKGDIR}/${mytargetdir}" quickpkg ${MYPKG} --include-config=y
# update access rights
find "${MYPKGDIR}" -type d -exec chmod 755 {} \;
find "${MYPKGDIR}" -type f -exec chmod 644 {} \;
diff --git a/package.sh b/package-stable.sh
similarity index 100%
rename from package.sh
rename to package-stable.sh
^ permalink raw reply related [flat|nested] 37+ messages in thread
* [gentoo-commits] proj/chromium-tools:master commit in: /
@ 2023-02-05 15:09 Stephan Hartmann
0 siblings, 0 replies; 37+ messages in thread
From: Stephan Hartmann @ 2023-02-05 15:09 UTC (permalink / raw
To: gentoo-commits
commit: 952b6f7dbf1dd25590e0689751c2d30ef93d1664
Author: Stephan Hartmann <sultan <AT> gentoo <DOT> org>
AuthorDate: Sun Feb 5 15:08:38 2023 +0000
Commit: Stephan Hartmann <sultan <AT> gentoo <DOT> org>
CommitDate: Sun Feb 5 15:09:11 2023 +0000
URL: https://gitweb.gentoo.org/proj/chromium-tools.git/commit/?id=952b6f7d
chrome-bump: migrate away from omahaproxy
Will be shut down end of March 2023.
Signed-off-by: Stephan Hartmann <sultan <AT> gentoo.org>
chrome-bump | 22 +++++++---------------
1 file changed, 7 insertions(+), 15 deletions(-)
diff --git a/chrome-bump b/chrome-bump
index dadc059..7559a29 100755
--- a/chrome-bump
+++ b/chrome-bump
@@ -74,20 +74,13 @@ pkg_data = \
}
}
-def getChromeVersionData(base_url, os):
+def getChromeVersionData(base_url, os, channel):
if not base_url.endswith("/"):
url = base_url + "/"
- url += f"all.json?os={os}"
-
+ url += f"{os}/channels/{channel}/versions/all/releases?filter=endtime=1970-01-01T00:00:00Z"
response = urllib.request.urlopen(url)
data = json.loads(response.read())
- return data[0]["versions"]
-
-def getChromeChannelVersion(versions, channel):
- for item in versions:
- if item["channel"] == channel:
- return item["current_version"]
- return None
+ return data["releases"][0]["version"]
def isMajorBump(uversion, tversion):
uv_list = uversion.split('.')
@@ -117,16 +110,15 @@ def main():
output.einfo("Fetching upstream version information ...")
- versions = getChromeVersionData(base_url="https://omahaproxy.appspot.com",
- os="linux")
-
chrome_info = {}
for channel in channels:
chrome_info[channel] = None
for channel in channels:
- chrome_info[channel] = getChromeChannelVersion(versions=versions,
- channel=channel)
+ version = getChromeVersionData(base_url="https://versionhistory.googleapis.com/v1/chrome/platforms",
+ os="linux",
+ channel=channel)
+ chrome_info[channel] = version
output.einfo("Looking up Chrome version information in tree ...")
^ permalink raw reply related [flat|nested] 37+ messages in thread
* [gentoo-commits] proj/chromium-tools:master commit in: /
@ 2024-03-20 21:45 Matt Jolly
0 siblings, 0 replies; 37+ messages in thread
From: Matt Jolly @ 2024-03-20 21:45 UTC (permalink / raw
To: gentoo-commits
commit: ac5ba1d42b4b09b67ff88af53722a52531315c7f
Author: Matt Jolly <kangie <AT> gentoo <DOT> org>
AuthorDate: Wed Mar 20 21:44:44 2024 +0000
Commit: Matt Jolly <kangie <AT> gentoo <DOT> org>
CommitDate: Wed Mar 20 21:44:44 2024 +0000
URL: https://gitweb.gentoo.org/proj/chromium-tools.git/commit/?id=ac5ba1d4
chrome-bump: Add some hacky logic to update chromedriver-bin with chrome stable
Signed-off-by: Matt Jolly <kangie <AT> gentoo.org>
chrome-bump | 51 +++++++++++++++++++++++++++++++++++++++++++--------
1 file changed, 43 insertions(+), 8 deletions(-)
diff --git a/chrome-bump b/chrome-bump
index 7559a29..fa132e8 100755
--- a/chrome-bump
+++ b/chrome-bump
@@ -71,7 +71,19 @@ pkg_data = \
"bump" : False,
"stable" : False
}
- }
+ },
+ # This will be parsed last so we can take advantage of google chrome stable queries
+ "www-apps":
+ {
+ "stable":
+ {
+ "pkg": "chromedriver-bin",
+ "suffix": None,
+ "version": None,
+ "bump": False,
+ "stable": True
+ }
+ },
}
def getChromeVersionData(base_url, os, channel):
@@ -126,6 +138,9 @@ def main():
repo_path = db.getRepositoryPath(repository_id="gentoo")
for category in pkg_data.keys():
for channel in channels:
+ # We only care about chromedriver that matches the stable version of google-chrome
+ if category == "www-apps" and channel != "stable":
+ continue
pkg = pkg_data[category][channel]["pkg"]
cpvs = db.cp_list(mycp=f"{category}/{pkg}", mytree=repo_path)
pkg_data[category][channel]["version"] = None
@@ -143,16 +158,26 @@ def main():
output.ewarn("Couldn't determine tree version for "+
"{category}/{pkg}")
- output.einfo("Comparing Chrome version informations ...")
+ output.einfo("Comparing Chrome version information...")
for channel in channels:
if chrome_info[channel] is None:
output.ewarn(f"Upstream version unknown for channel \"{channel}\".")
else:
for category in pkg_data.keys():
- pkg_data[category][channel]["bump"] = False
+ # chromedriver-bin is basically a shim for google-chrome stable for version purposes
+ if category == "www-apps":
+ if channel == "stable":
+ pkg_data[category][channel]["bump"] = pkg_data["www-client"][channel]["bump"]
+ pkg_data[category][channel]["version"] = pkg_data["www-client"][channel]["version"]
+ else:
+ continue
+
+ else:
+ pkg_data[category][channel]["bump"] = False
+
ver_info = vercmp(chrome_info[channel],
- pkg_data[category][channel]["version"][0])
+ pkg_data[category][channel]["version"][0])
if ver_info is None:
output.ewarn("Cannot determine new version for " +
f"channel \"{channel}\" of " +
@@ -168,6 +193,8 @@ def main():
for category in pkg_data.keys():
for channel in channels:
+ if category == "www-apps" and channel != "stable":
+ continue
pkg = pkg_data[category][channel]["pkg"]
output.einfo(f"{category}/{pkg} version information:")
need_bump = pkg_data[category][channel]["bump"]
@@ -186,6 +213,8 @@ def main():
for channel in channels:
for category in pkg_data.keys():
+ if category == "www-apps" and channel != "stable":
+ continue
if not pkg_data[category][channel]["bump"]:
continue
uversion = chrome_info[channel]
@@ -200,10 +229,16 @@ def main():
suffix = ""
output.einfo(f"Bumping {category}/{pkg} ...")
if major_bump:
- prev_channel = getPrevChannel(channel=channel)
- prev_pkg = pkg_data[category][prev_channel]["pkg"]
- prev_version = getEbuildVersion(pkg_data[category][prev_channel]["version"])
- prev_suffix = pkg_data[category][prev_channel]["suffix"]
+ if category != "www-apps":
+ prev_channel = getPrevChannel(channel=channel)
+ prev_pkg = pkg_data[category][prev_channel]["pkg"]
+ prev_version = getEbuildVersion(pkg_data[category][prev_channel]["version"])
+ prev_suffix = pkg_data[category][prev_channel]["suffix"]
+ else:
+ # Grab the details for google-chrome; we never have a suffix
+ prev_pkg = pkg_data["www-apps"]["stable"]["pkg"]
+ prev_version = getEbuildVersion(pkg_data["www-client"]["stable"]["version"])
+ prev_suffix = None
if prev_suffix is not None:
prev_suffix = "_" + prev_suffix
else:
^ permalink raw reply related [flat|nested] 37+ messages in thread
* [gentoo-commits] proj/chromium-tools:master commit in: /
@ 2024-03-20 21:45 Matt Jolly
0 siblings, 0 replies; 37+ messages in thread
From: Matt Jolly @ 2024-03-20 21:45 UTC (permalink / raw
To: gentoo-commits
commit: 3b0f8cfc4a3d2e3344be2786a6ea9c255c43f8ee
Author: Matt Jolly <kangie <AT> gentoo <DOT> org>
AuthorDate: Wed Mar 20 21:45:00 2024 +0000
Commit: Matt Jolly <kangie <AT> gentoo <DOT> org>
CommitDate: Wed Mar 20 21:45:00 2024 +0000
URL: https://gitweb.gentoo.org/proj/chromium-tools.git/commit/?id=3b0f8cfc
New script: get_chromium_toolchain_strings.sh
Just does some awks and seds to enable the automated update
of google toolchain information within / from the specified
ebuild
Signed-off-by: Matt Jolly <kangie <AT> gentoo.org>
get_chromium_toolchain_strings.sh | 70 +++++++++++++++++++++++++++++++++++++++
1 file changed, 70 insertions(+)
diff --git a/get_chromium_toolchain_strings.sh b/get_chromium_toolchain_strings.sh
new file mode 100755
index 0000000..483d66f
--- /dev/null
+++ b/get_chromium_toolchain_strings.sh
@@ -0,0 +1,70 @@
+#!/bin/bash
+
+# This script extracts version information from Chromium sources by way of a Gentoo ebuild
+# then plugs the version information into the ebuild file. This is useful for updating the
+# toolchain versions in the ebuild file when a new (major) version of Chromium is released.
+
+# Usage: get_chromium_toolchain_strings.sh <ebuild_file>
+# <ebuild_file>: The path to the Chromium ebuild file
+
+# Extract the version string from an ebuild
+get_version() {
+ local filename="$1"
+ [[ -z "$filename" ]] && return 1 # Check for empty filename
+ local version_match="${filename##*-}"; # Extract everything after the last hyphen
+ version_match="${version_match%.*}" # Remove extension (.ebuild)
+ echo "$version_match"
+}
+
+# Display script usage
+usage() {
+ echo "Usage: get_chromium_toolchain_strings.sh <ebuild_file>"
+ echo " <ebuild_file>: The path to the Chromium ebuild file"
+}
+
+# Get the ebuild filename as the first argument
+ebuild_file="$1"
+
+# Check for missing argument
+if [[ -z "$ebuild_file" ]]; then
+ echo "Error: Please provide an ebuild filename as an argument."
+ usage
+ exit 1
+fi
+
+# Extract version from filename
+version="$(get_version "$ebuild_file")"
+
+# Check if version extraction failed (function return code)
+if [[ $? -ne 0 ]]; then
+ echo "Error: Could not extract version from filename."
+ exit 1
+fi
+
+# Construct S string based on version
+# Bad luck if you don't use /var/tmp/portage, I guess.
+S="/var/tmp/portage/www-client/chromium-${version}/work/chromium-${version}/"
+
+# Run ebuild with clean and unpack options
+ebuild "$ebuild_file" clean unpack
+
+# No secret sauce here - it's just simpler to set the field separator to a single quote
+# and then extract the final character from the sub-revision field.
+# This is a bit of a hack, but it works for now - I haven't see upstream go past the
+# 9th sub-revision yet!
+
+llvm_version=$(awk -F"'" '
+/CLANG_REVISION =/ { revision = $2 }
+/CLANG_SUB_REVISION =/ { printf("%s-%d\n", revision, substr($1, length($1), 1)) }
+' "${S}/tools/clang/scripts/update.py")
+
+rust_version=$(awk -F"'" '
+/RUST_REVISION =/ { revision = $2 }
+/RUST_SUB_REVISION =/ { printf("%s-%d\n", revision, substr($1, length($1), 1)) }
+' "${S}/tools/rust/update_rust.py")
+
+# Substitute versions into ebuild (assuming specific locations)
+sed -i "s/GOOGLE_CLANG_VER=.*/GOOGLE_CLANG_VER=${llvm_version}/" "$ebuild_file"
+sed -i "s/GOOGLE_RUST_VER=.*/GOOGLE_RUST_VER=${rust_version}/" "$ebuild_file"
+
+echo "Successfully substituted versions into $ebuild_file"
^ permalink raw reply related [flat|nested] 37+ messages in thread
* [gentoo-commits] proj/chromium-tools:master commit in: /
@ 2024-03-20 21:45 Matt Jolly
0 siblings, 0 replies; 37+ messages in thread
From: Matt Jolly @ 2024-03-20 21:45 UTC (permalink / raw
To: gentoo-commits
commit: b78a5ed24c78b4f55923164346b517eccf5e9390
Author: Matt Jolly <kangie <AT> gentoo <DOT> org>
AuthorDate: Wed Mar 20 21:44:52 2024 +0000
Commit: Matt Jolly <kangie <AT> gentoo <DOT> org>
CommitDate: Wed Mar 20 21:44:52 2024 +0000
URL: https://gitweb.gentoo.org/proj/chromium-tools.git/commit/?id=b78a5ed2
Add script to generate new gn version and tarball from git
Signed-off-by: Matt Jolly <kangie <AT> gentoo.org>
bump-gn.sh | 29 +++++++++++++++++++++++++++++
1 file changed, 29 insertions(+)
diff --git a/bump-gn.sh b/bump-gn.sh
new file mode 100755
index 0000000..1b49138
--- /dev/null
+++ b/bump-gn.sh
@@ -0,0 +1,29 @@
+#!/bin/bash
+
+# This script actually only creates an appropriately-versioned GN tarball to assist
+# in the process of bumping the GN version. It does not actually bump the GN version
+# in the gentoo tree as we need to upload the tarball to a devspace.
+
+# Users should set the following to make xz work:
+# git config --global tar.tar.xz.command "xz -T0 -9 -c"
+
+# check if /tmp/gn exists and if so delete it
+if [ -d /tmp/gn ]; then
+ rm -rf /tmp/gn
+fi
+
+# Clone the gn repo
+git clone https://gn.googlesource.com/gn /tmp/gn
+
+pushd /tmp/gn
+
+commit=$(git describe --tags)
+pattern="([^-]*)-([^-]*)-([^-]*)-(.*)"
+[[ $commit =~ $pattern ]]
+count="${BASH_REMATCH[3]}"
+
+git archive --format=tar.xz --prefix=gn-0.${count}/ -o /tmp/gn-0.${count}.tar.xz HEAD
+
+popd
+
+echo "Tarball created at /tmp/gn-0.${count}.tar.xz"
^ permalink raw reply related [flat|nested] 37+ messages in thread
* [gentoo-commits] proj/chromium-tools:master commit in: /
@ 2024-03-20 21:45 Matt Jolly
0 siblings, 0 replies; 37+ messages in thread
From: Matt Jolly @ 2024-03-20 21:45 UTC (permalink / raw
To: gentoo-commits
commit: 8e0913a8a053444ee7f68cabb2075c5efbd1e246
Author: Matt Jolly <kangie <AT> gentoo <DOT> org>
AuthorDate: Wed Mar 20 21:45:04 2024 +0000
Commit: Matt Jolly <kangie <AT> gentoo <DOT> org>
CommitDate: Wed Mar 20 21:45:04 2024 +0000
URL: https://gitweb.gentoo.org/proj/chromium-tools.git/commit/?id=8e0913a8
new script: get-opera-version-mapping
Signed-off-by: Matt Jolly <kangie <AT> gentoo.org>
get-opera-version-mapping.py | 115 +++++++++++++++++++++++++++++++++++++++++++
1 file changed, 115 insertions(+)
diff --git a/get-opera-version-mapping.py b/get-opera-version-mapping.py
new file mode 100755
index 0000000..43f8f32
--- /dev/null
+++ b/get-opera-version-mapping.py
@@ -0,0 +1,115 @@
+#!/usr/bin/env python
+import requests
+from bs4 import BeautifulSoup
+
+
+def get_opera_chromium_versions(base_url, start_version, end_version):
+ """
+ Extracts Opera and Chromium versions from the given base URL with version placeholders,
+ parsing content sections for versions from start_version to end_version (inclusive).
+
+ Args:
+ base_url: The base URL for Opera changelogs with a version placeholder (e.g., "https://blogs.opera.com/desktop/changelog-for-{version}/").
+ start_version: The starting version to extract information for (inclusive).
+ end_version: The ending version to extract information for (inclusive).
+
+ Returns:
+ A dictionary mapping Opera version to Chromium version.
+ If no update is mentioned, the previous Chromium version is used.
+ For missing data or errors, "unknown" is used.
+ """
+ versions = {}
+ chromium_version = None
+
+ for version in range(start_version, end_version + 1):
+ # Fix formatting issue:
+ # OR url = base_url.format(version)
+ url = base_url.format(version)
+ print(f"Processing version {version}")
+
+ try:
+ # Set a timeout to avoid hanging requests
+ response = requests.get(url, timeout=5)
+ response.raise_for_status() # Raise exception for non-200 status codes
+
+ soup = BeautifulSoup(response.content, 'html.parser')
+ content = soup.find('div', class_='content')
+
+ # Iterate through each section starting with an H4 element
+ for section in content.find_all('h4'):
+ version_str, date_str = section.text.strip().split(' – ')
+ versions[version_str] = chromium_version
+
+ # Process all content elements (including nested ones) until the next H4
+ next_sibling = section.find_next_sibling(
+ lambda tag: tag.name is not None) # Skip text nodes
+
+ # Process content elements
+ update_found = False
+ while next_sibling and next_sibling.name != 'h4':
+ if next_sibling.name == 'ul':
+ for el in next_sibling.find_all('li'):
+ if 'Update Chromium' in el.text.strip():
+ update_found = True
+ break # Stop iterating after finding update
+
+ # Assign Chromium version only if update is found
+ if update_found:
+ chromium_version = el.text.strip().split()[-1]
+
+ next_sibling = next_sibling.find_next_sibling(
+ lambda tag: tag.name is not None) # Skip text nodes
+
+ # Handle missing Chromium version
+ if not chromium_version:
+ chromium_version = "unknown"
+
+ except requests.exceptions.RequestException as e:
+ if e.args and e.args[0] == 404:
+ print(f"Version {version} not found (404)")
+ else:
+ print(f"Error fetching data for version {version}: {e}")
+ chromium_version = None # Reset chromium_version for next iteration
+
+ except Exception as e: # Catch other unexpected exceptions
+ print(f"Unexpected error: {e}")
+ chromium_version = None # Reset chromium_version for next iteration
+
+ return versions
+
+
+def remediate_unknown_versions(versions):
+ """
+ Remediates entries with "unknown" values in the versions dictionary by
+ assuming no change from the previous known version.
+
+ Args:
+ versions: A dictionary mapping Opera version to Chromium version.
+
+ Returns:
+ The modified versions dictionary with "unknown" values replaced based on previous entries.
+ """
+ previous_version = None
+ for version, chromium_version in versions.items():
+ if chromium_version == "unknown":
+ if previous_version is not None:
+ # Update with previous version
+ versions[version] = previous_version
+ else:
+ previous_version = chromium_version # Update known version for future references
+ return versions
+
+
+# Example usage
+# Base URL with version placeholder
+base_url = "https://blogs.opera.com/desktop/changelog-for-{}/"
+opera_chromium_versions = get_opera_chromium_versions(base_url, 100, 108)
+
+opera_chromium_versions = remediate_unknown_versions(opera_chromium_versions)
+
+if opera_chromium_versions:
+ for opera_version, chromium_version in opera_chromium_versions.items():
+ print(
+ f"Opera Version: {opera_version}, Chromium Version: {chromium_version}")
+else:
+ print("Failed to extract any versions.")
^ permalink raw reply related [flat|nested] 37+ messages in thread
* [gentoo-commits] proj/chromium-tools:master commit in: /
@ 2024-03-28 2:39 Matt Jolly
0 siblings, 0 replies; 37+ messages in thread
From: Matt Jolly @ 2024-03-28 2:39 UTC (permalink / raw
To: gentoo-commits
commit: 27d24e85030b0653630c93f123ccc68e310d7dc4
Author: Matt Jolly <kangie <AT> gentoo <DOT> org>
AuthorDate: Mon Mar 25 07:46:52 2024 +0000
Commit: Matt Jolly <kangie <AT> gentoo <DOT> org>
CommitDate: Mon Mar 25 10:27:02 2024 +0000
URL: https://gitweb.gentoo.org/proj/chromium-tools.git/commit/?id=27d24e85
automate chromium-ffmpeg packaging
Signed-off-by: Matt Jolly <kangie <AT> gentoo.org>
get-opera-version-mapping.py | 2 +-
package-chromium-ffmpeg.py | 175 +++++++++++++++++++++++++++++++++++++++++++
2 files changed, 176 insertions(+), 1 deletion(-)
diff --git a/get-opera-version-mapping.py b/get-opera-version-mapping.py
index 43f8f32..2b515b4 100755
--- a/get-opera-version-mapping.py
+++ b/get-opera-version-mapping.py
@@ -103,7 +103,7 @@ def remediate_unknown_versions(versions):
# Example usage
# Base URL with version placeholder
base_url = "https://blogs.opera.com/desktop/changelog-for-{}/"
-opera_chromium_versions = get_opera_chromium_versions(base_url, 100, 108)
+opera_chromium_versions = get_opera_chromium_versions(base_url, 100, 110)
opera_chromium_versions = remediate_unknown_versions(opera_chromium_versions)
diff --git a/package-chromium-ffmpeg.py b/package-chromium-ffmpeg.py
new file mode 100755
index 0000000..5db694e
--- /dev/null
+++ b/package-chromium-ffmpeg.py
@@ -0,0 +1,175 @@
+#!/usr/bin/env python3
+
+import re
+import os
+import logging
+import subprocess
+import requests
+
+# Configure logging
+logging.basicConfig(
+ format='%(asctime)s - %(levelname)s - %(message)s', level=logging.INFO,
+ datefmt='%Y-%m-%d %H:%M:%S')
+
+
+def get_commit(version_url):
+ """Fetches the git hash from the Chromium ffmpeg submodule URL using requests.
+
+ Args:
+ version_url: The URL of the Chromium ffmpeg submodule for a specific version.
+
+ Returns:
+ The git commit hash found in the submodule URL, or None if not found.
+ """
+ try:
+ # Use requests.get to fetch the URL content
+ response = requests.get(version_url)
+ response.raise_for_status() # Raise exception for non-200 status codes
+
+ # Search for commit hash within the 'gitlink-detail' class (adapt if needed)
+ match = re.search(
+ r'<div class="gitlink-detail">Submodule link to (.*?) of', response.text)
+ if match:
+ return match.group(1)
+ else:
+ return None
+ except requests.exceptions.RequestException as e:
+ logging.error(f"Error: Failed to fetch URL {version_url} - {e}")
+ return None
+
+
+def archive_ffmpeg(version, commit_hash):
+ """Archives the Chromium ffmpeg repository at the specified commit hash.
+
+ Args:
+ version: The Chromium major version (e.g. 123).
+ commit_hash: The git commit hash of the desired ffmpeg revision.
+ """
+ # Base directory for ffmpeg checkout (configurable)
+ ffmpeg_dir = os.getenv("FFMPEG_TEMP_DIR", "/tmp/ffmpeg")
+ # Archive filename with version substitution
+ archive_name = f"/tmp/ffmpeg-chromium-{version}.tar.xz"
+
+ repo_uri = "https://chromium.googlesource.com/chromium/third_party/ffmpeg"
+
+ # Check if ffmpeg directory already exists
+ if os.path.exists(ffmpeg_dir):
+ # Verify remote URL matches expected repository
+ try:
+ output = subprocess.run(
+ ["git", "remote", "-v"], cwd=ffmpeg_dir, capture_output=True, check=True).stdout.decode()
+ if not re.search(repo_uri, output, re.MULTILINE):
+ logging.error(
+ f"Existing ffmpeg directory {ffmpeg_dir} points to a different remote. Please remove and re-clone.")
+ exit(1)
+ except subprocess.CalledProcessError as e:
+ logging.error(f"Error verifying remote URL: {e}")
+ exit(1)
+
+ # Update existing repository
+ try:
+ subprocess.run(["git", "pull"], cwd=ffmpeg_dir, check=True)
+ except subprocess.CalledProcessError as e:
+ logging.error(f"Error updating ffmpeg repository: {e}")
+ exit(1)
+ else:
+ # Clone the Chromium ffmpeg repository
+ try:
+ subprocess.run(
+ ["git", "clone", repo_uri, ffmpeg_dir], check=True)
+ except subprocess.CalledProcessError as e:
+ logging.error(f"Error cloning ffmpeg repository: {e}")
+ exit(1)
+
+ # Archive the ffmpeg directory with prefix and specific commit hash
+ try:
+ logging.info(
+ f"Archiving ffmpeg-chromium@{commit_hash}, this may take a moment...")
+ subprocess.run(["git", "archive", "--format=tar.xz", "-o", archive_name,
+ f"--prefix=ffmpeg-chromium-{version}/", commit_hash], cwd=ffmpeg_dir, check=True)
+ logging.info(
+ f"ffmpeg-chromium@{commit_hash} archived to {archive_name}")
+ except subprocess.CalledProcessError as e:
+ logging.error(f"Error archiving ffmpeg: {e}")
+
+
+def copy_and_update_ebuild(version, commit_hash):
+ """Copies the latest ffmpeg-chromium.ebuild and updates the COMMIT variable.
+
+ Args:
+ version: The Chromium version (e.g., 124).
+ commit_hash: The git commit hash of the desired ffmpeg revision.
+ """
+ # Target directory for ffmpeg-chromium ebuilds (configurable)
+ ebuild_dir = os.getenv("FFMPEG_EBUILD_DIR",
+ "/var/db/repos/gentoo/media-video/ffmpeg-chromium")
+ # Destination ebuild filename with version substitution
+ dest_ebuild = f"ffmpeg-chromium-{version}.ebuild"
+
+ # Find the highest version ebuild file
+ highest_version = None
+ for filename in os.listdir(ebuild_dir):
+ match = re.match(r"ffmpeg-chromium-(\d+)\.ebuild", filename)
+ if match:
+ current_version = int(match.group(1))
+ if highest_version is None or current_version > highest_version:
+ highest_version = current_version
+ highest_ebuild = os.path.join(ebuild_dir, filename)
+ # Check if a higher version ebuild exists
+ if highest_version:
+ # Copy the highest version ebuild
+ try:
+ subprocess.run(["cp", highest_ebuild,
+ os.path.join(ebuild_dir, dest_ebuild)],
+ check=True,)
+ except subprocess.CalledProcessError as e:
+ logging.error(f"Error copying ebuild file: {e}")
+ exit(1)
+
+ logging.info(
+ f"Copied ffmpeg-chromium-{highest_version}.ebuild to {dest_ebuild}"
+ )
+
+ # Update the COMMIT variable in the copied ebuild
+ with open(os.path.join(ebuild_dir, dest_ebuild), "r+") as f:
+ lines = f.readlines()
+ for i, line in enumerate(lines):
+ if line.startswith("COMMIT="):
+ lines[i] = f"COMMIT={commit_hash}\n"
+ f.seek(0)
+ f.writelines(lines)
+ logging.info(
+ f"Updated COMMIT variable in {dest_ebuild} to {commit_hash}")
+ break
+ else:
+ logging.info(
+ f"No existing ffmpeg-chromium ebuilds found in {ebuild_dir}")
+
+
+def main():
+ """Main function to handle user input and script execution."""
+ version_regex = r"^\d+\.\d+(?:\.\d+(?:\.\d+)?)?$" # Validate version format
+
+ while True:
+ version = input("Enter Chromium version (e.g., 123.0.4567.890): ")
+ if re.match(version_regex, version):
+ break
+ else:
+ print(
+ "Invalid version format. Please enter a version like X.Y.Z.W (e.g., 123.0.4567.890)")
+
+ version_url = f"https://chromium.googlesource.com/chromium/src.git/+/refs/tags/{version}/third_party/ffmpeg"
+ commit_hash = get_commit(version_url)
+ if commit_hash:
+ logging.info(
+ f"Chromium version {version} uses ffmpeg commit {commit_hash}")
+ major_version = version.split(".")[0]
+ archive_ffmpeg(major_version, commit_hash)
+ copy_and_update_ebuild(major_version, commit_hash)
+ else:
+ logging.error(
+ f"Failed to retrieve commit hash for Chromium version {version}")
+
+
+if __name__ == "__main__":
+ main()
^ permalink raw reply related [flat|nested] 37+ messages in thread
* [gentoo-commits] proj/chromium-tools:master commit in: /
@ 2024-05-31 23:02 Matt Jolly
0 siblings, 0 replies; 37+ messages in thread
From: Matt Jolly @ 2024-05-31 23:02 UTC (permalink / raw
To: gentoo-commits
commit: 6b29e0b92cec9e0f930976bbd388be3fdf11d954
Author: Matt Jolly <kangie <AT> gentoo <DOT> org>
AuthorDate: Fri May 31 03:54:38 2024 +0000
Commit: Matt Jolly <kangie <AT> gentoo <DOT> org>
CommitDate: Fri May 31 23:02:10 2024 +0000
URL: https://gitweb.gentoo.org/proj/chromium-tools.git/commit/?id=6b29e0b9
add script to generate libaom test tarball
Signed-off-by: Matt Jolly <kangie <AT> gentoo.org>
generate-libaom-test-tarball.sh | 45 +++++++++++++++++++++++++++++++++++++++++
1 file changed, 45 insertions(+)
diff --git a/generate-libaom-test-tarball.sh b/generate-libaom-test-tarball.sh
new file mode 100755
index 0000000..9a0d837
--- /dev/null
+++ b/generate-libaom-test-tarball.sh
@@ -0,0 +1,45 @@
+#!/bin/bash
+# This script fetches the libaom sources, checks out the appropriate tag
+# and generates a tarball that can be placed in a devspace or other
+# web-accessible site and added to SRC_URI for a given libaom release.
+# Legacy manual instructions:
+# To update test data tarball, follow these steps:
+# 1. Clone the upstream repo and check out the relevant tag,
+# or download the release tarball
+# 2. Regular cmake configure (options don't matter here):
+# cd build && cmake ..
+# 3. Set LIBAOM_TEST_DATA_PATH to the directory you want and
+# run the "make testdata" target:
+# LIBAOM_TEST_DATA_PATH=../libaom-3.7.1-testdata make testdata
+# This will download the test data from the internet.
+# 4. Create a tarball out of that directory.
+# cd .. && tar cvaf libaom-3.7.1-testdata.tar.xz libaom-3.7.1-testdata
+
+set -e
+
+if [ -d /tmp/libaom ]; then
+ rm -rf /tmp/libaom
+fi
+
+git clone https://aomedia.googlesource.com/aom /tmp/libaom
+
+pushd /tmp/libaom
+ # Assume we're getting the latest tag if not in env;
+ # we're typically only packaging the latest version.
+ LATEST_TAG="$(git tag --sort=taggerdate | tail -1)"
+ TAG="${1:-$LATEST_TAG}"
+
+ if [ -d "/tmp/libaom-${TAG:1}-testdata" ]; then
+ rm -rf "/tmp/libaom-${TAG:1}-testdata"
+ fi
+
+ echo "Packaging libaom testdata for ${TAG}"
+ git checkout "tags/${TAG}"
+
+ cd build && cmake ..
+ LIBAOM_TEST_DATA_PATH="/tmp/libaom-${TAG:1}-testdata" make -j$(nproc) testdata
+popd
+pushd /tmp
+ XZ_OPT="-T0 -9" tar cvaf "libaom-${TAG:1}-testdata.tar.xz" "libaom-${TAG:1}-testdata"
+popd
+
^ permalink raw reply related [flat|nested] 37+ messages in thread
* [gentoo-commits] proj/chromium-tools:master commit in: /
@ 2024-06-01 7:22 Matt Jolly
0 siblings, 0 replies; 37+ messages in thread
From: Matt Jolly @ 2024-06-01 7:22 UTC (permalink / raw
To: gentoo-commits
commit: c3d1c029fab2ec382edeae05d0940e66406e6b0d
Author: Matt Jolly <kangie <AT> gentoo <DOT> org>
AuthorDate: Sat Jun 1 07:20:54 2024 +0000
Commit: Matt Jolly <kangie <AT> gentoo <DOT> org>
CommitDate: Sat Jun 1 07:21:53 2024 +0000
URL: https://gitweb.gentoo.org/proj/chromium-tools.git/commit/?id=c3d1c029
add script to generate libvpx test tarball
Signed-off-by: Matt Jolly <kangie <AT> gentoo.org>
generate-libvpx-test-tarball.sh | 42 +++++++++++++++++++++++++++++++++++++++++
1 file changed, 42 insertions(+)
diff --git a/generate-libvpx-test-tarball.sh b/generate-libvpx-test-tarball.sh
new file mode 100755
index 0000000..f8a3844
--- /dev/null
+++ b/generate-libvpx-test-tarball.sh
@@ -0,0 +1,42 @@
+#!/bin/bash
+# This script fetches the libvpx sources, checks out the appropriate tag
+# and generates a tarball that can be placed in a devspace or other
+# web-accessible site and added to SRC_URI for a given libvpx release.
+# Legacy manual instructions:
+# To create a new testdata tarball:
+# 1. Unpack source tarball or checkout git tag
+# 2. mkdir libvpx-testdata
+# 3. export LIBVPX_TEST_DATA_PATH=libvpx-testdata
+# 4. ./configure --enable-unit-tests --enable-vp9-highbitdepth
+# 5. make testdata
+# 6. tar -caf libvpx-testdata-${MY_PV}.tar.xz libvpx-testdata
+
+set -e
+
+if [ -d /tmp/libvpx ]; then
+ rm -rf /tmp/libvpx
+fi
+
+git clone https://github.com/webmproject/libvpx.git /tmp/libvpx
+
+pushd /tmp/libvpx
+ # Assume we're getting the latest tag if not in env;
+ # we're typically only packaging the latest version.
+ LATEST_TAG="$(git tag --sort=taggerdate | tail -1)"
+ TAG="${1:-$LATEST_TAG}"
+
+ if [ -d "/tmp/libvpx-${TAG:1}-testdata" ]; then
+ rm -rf "/tmp/libvpx-${TAG:1}-testdata"
+ fi
+
+ mkdir -p "/tmp/libvpx-${TAG:1}-testdata"
+
+ echo "Packaging libvpx testdata for ${TAG}"
+ git checkout "tags/${TAG}"
+
+ ./configure --enable-unit-tests --enable-vp9-highbitdepth
+ LIBVPX_TEST_DATA_PATH="/tmp/libvpx-${TAG:1}-testdata" make -j$(nproc) testdata
+popd
+pushd /tmp
+ XZ_OPT="-T0 -9" tar cvaf "libvpx-${TAG:1}-testdata.tar.xz" "libvpx-${TAG:1}-testdata"
+popd
^ permalink raw reply related [flat|nested] 37+ messages in thread
* [gentoo-commits] proj/chromium-tools:master commit in: /
@ 2024-08-30 3:39 Matt Jolly
0 siblings, 0 replies; 37+ messages in thread
From: Matt Jolly @ 2024-08-30 3:39 UTC (permalink / raw
To: gentoo-commits
commit: 9775b00690b10139b4e1055585b543d17d91d6bf
Author: Matt Jolly <kangie <AT> gentoo <DOT> org>
AuthorDate: Fri Aug 30 03:32:47 2024 +0000
Commit: Matt Jolly <kangie <AT> gentoo <DOT> org>
CommitDate: Fri Aug 30 03:39:38 2024 +0000
URL: https://gitweb.gentoo.org/proj/chromium-tools.git/commit/?id=9775b006
Replace chromium toolchain script with a faster one using web requests
Signed-off-by: Matt Jolly <kangie <AT> gentoo.org>
get-chromium-toolchain-strings.py | 63 +++++++++++++++++++++++++++++++++++
get-opera-version-mapping.py | 2 +-
get_chromium_toolchain_strings.sh | 70 ---------------------------------------
3 files changed, 64 insertions(+), 71 deletions(-)
diff --git a/get-chromium-toolchain-strings.py b/get-chromium-toolchain-strings.py
new file mode 100755
index 0000000..0582912
--- /dev/null
+++ b/get-chromium-toolchain-strings.py
@@ -0,0 +1,63 @@
+#!/usr/bin/env python3
+# SPDX-License-Identifier: GPL-2.0-or-later
+# This script extracts the revision and sub-revision from the update.py and update_rust.py files in the Chromium source code.
+# The revision and sub-revision are used to identify the version of Clang and Rust used in the Chromium toolchain.
+
+
+import requests
+import sys
+
+
+def get_revision_info(url):
+ """
+ Extracts revision and sub-revision from a Chromium source file URL.
+
+ Args:
+ url (str): The URL of the source file on GitHub's raw endpoint.
+
+ Returns:
+ tuple: A tuple containing the revision (str) and sub-revision (int),
+ or (None, None) if not found.
+ """
+ response = requests.get(url)
+ if response.status_code == 200:
+ text = response.content.decode('utf-8') # Decode to UTF-8
+ lines = text.splitlines()
+ revision = None
+ sub_revision = None
+ for line in lines:
+ if line.startswith("CLANG_REVISION") and not line.startswith("PACKAGE_VERSION"):
+ revision = line.split("=")[1].strip().strip("'")
+ elif line.startswith("CLANG_SUB_REVISION") and not line.startswith("PACKAGE_VERSION"):
+ sub_revision = int(line.split("=")[1].strip())
+ elif line.startswith("RUST_REVISION") and not line.startswith("specieid") and not line.startswith(" return"):
+ # I know that's spelt wrong, but apparently google cant't spell
+ revision = line.split("=")[1].strip().strip("'")
+ elif line.startswith("RUST_SUB_REVISION") and not line.startswith("specieid") and not line.startswith(" return"):
+ sub_revision = int(line.split("=")[1].strip()[-1])
+ if revision is None or sub_revision is None:
+ raise ValueError("Failed to extract revision and sub-revision")
+ return revision, sub_revision
+ else:
+ raise ValueError(f"Failed to get revision info. Status code: {response.status_code}")
+
+
+def main():
+ version = sys.argv[1] if len(sys.argv) > 1 else "128.0.6613.113"
+ # It's a lot easier to use GH raw URLs for this
+ base_url = "https://raw.githubusercontent.com/chromium/chromium/"
+ clang_url = f"{base_url}{version}/tools/clang/scripts/update.py"
+ rust_url = f"{base_url}{version}/tools/rust/update_rust.py"
+ clang_revision, clang_sub_revision = get_revision_info(clang_url)
+ rust_revision, rust_sub_revision = get_revision_info(rust_url)
+ if clang_revision and clang_sub_revision:
+ print(f"clang revision: {clang_revision}-{clang_sub_revision}")
+ else:
+ print("clang revision not found")
+ if rust_revision and rust_sub_revision:
+ print(f"rust revision: {rust_revision}-{rust_sub_revision}")
+ else:
+ print("rust revision not found")
+
+if __name__ == "__main__":
+ main()
diff --git a/get-opera-version-mapping.py b/get-opera-version-mapping.py
index 2b515b4..3e68ec9 100755
--- a/get-opera-version-mapping.py
+++ b/get-opera-version-mapping.py
@@ -103,7 +103,7 @@ def remediate_unknown_versions(versions):
# Example usage
# Base URL with version placeholder
base_url = "https://blogs.opera.com/desktop/changelog-for-{}/"
-opera_chromium_versions = get_opera_chromium_versions(base_url, 100, 110)
+opera_chromium_versions = get_opera_chromium_versions(base_url, 110, 115)
opera_chromium_versions = remediate_unknown_versions(opera_chromium_versions)
diff --git a/get_chromium_toolchain_strings.sh b/get_chromium_toolchain_strings.sh
deleted file mode 100755
index 483d66f..0000000
--- a/get_chromium_toolchain_strings.sh
+++ /dev/null
@@ -1,70 +0,0 @@
-#!/bin/bash
-
-# This script extracts version information from Chromium sources by way of a Gentoo ebuild
-# then plugs the version information into the ebuild file. This is useful for updating the
-# toolchain versions in the ebuild file when a new (major) version of Chromium is released.
-
-# Usage: get_chromium_toolchain_strings.sh <ebuild_file>
-# <ebuild_file>: The path to the Chromium ebuild file
-
-# Extract the version string from an ebuild
-get_version() {
- local filename="$1"
- [[ -z "$filename" ]] && return 1 # Check for empty filename
- local version_match="${filename##*-}"; # Extract everything after the last hyphen
- version_match="${version_match%.*}" # Remove extension (.ebuild)
- echo "$version_match"
-}
-
-# Display script usage
-usage() {
- echo "Usage: get_chromium_toolchain_strings.sh <ebuild_file>"
- echo " <ebuild_file>: The path to the Chromium ebuild file"
-}
-
-# Get the ebuild filename as the first argument
-ebuild_file="$1"
-
-# Check for missing argument
-if [[ -z "$ebuild_file" ]]; then
- echo "Error: Please provide an ebuild filename as an argument."
- usage
- exit 1
-fi
-
-# Extract version from filename
-version="$(get_version "$ebuild_file")"
-
-# Check if version extraction failed (function return code)
-if [[ $? -ne 0 ]]; then
- echo "Error: Could not extract version from filename."
- exit 1
-fi
-
-# Construct S string based on version
-# Bad luck if you don't use /var/tmp/portage, I guess.
-S="/var/tmp/portage/www-client/chromium-${version}/work/chromium-${version}/"
-
-# Run ebuild with clean and unpack options
-ebuild "$ebuild_file" clean unpack
-
-# No secret sauce here - it's just simpler to set the field separator to a single quote
-# and then extract the final character from the sub-revision field.
-# This is a bit of a hack, but it works for now - I haven't see upstream go past the
-# 9th sub-revision yet!
-
-llvm_version=$(awk -F"'" '
-/CLANG_REVISION =/ { revision = $2 }
-/CLANG_SUB_REVISION =/ { printf("%s-%d\n", revision, substr($1, length($1), 1)) }
-' "${S}/tools/clang/scripts/update.py")
-
-rust_version=$(awk -F"'" '
-/RUST_REVISION =/ { revision = $2 }
-/RUST_SUB_REVISION =/ { printf("%s-%d\n", revision, substr($1, length($1), 1)) }
-' "${S}/tools/rust/update_rust.py")
-
-# Substitute versions into ebuild (assuming specific locations)
-sed -i "s/GOOGLE_CLANG_VER=.*/GOOGLE_CLANG_VER=${llvm_version}/" "$ebuild_file"
-sed -i "s/GOOGLE_RUST_VER=.*/GOOGLE_RUST_VER=${rust_version}/" "$ebuild_file"
-
-echo "Successfully substituted versions into $ebuild_file"
^ permalink raw reply related [flat|nested] 37+ messages in thread
* [gentoo-commits] proj/chromium-tools:master commit in: /
@ 2024-09-26 2:36 Matt Jolly
0 siblings, 0 replies; 37+ messages in thread
From: Matt Jolly @ 2024-09-26 2:36 UTC (permalink / raw
To: gentoo-commits
commit: df1cdd52ddf34c0c0650169b34ea332b23aae90e
Author: Matt Jolly <kangie <AT> gentoo <DOT> org>
AuthorDate: Thu Sep 26 02:34:18 2024 +0000
Commit: Matt Jolly <kangie <AT> gentoo <DOT> org>
CommitDate: Thu Sep 26 02:36:24 2024 +0000
URL: https://gitweb.gentoo.org/proj/chromium-tools.git/commit/?id=df1cdd52
get-edge-cves.py: new script
This script currently grabs the current month's CVRF from MS
and filters for Edge (Chromium-based) CVEs, then does some
magick to identify the version that it was fixed in if the
API is for some reason deficient...
Signed-off-by: Matt Jolly <kangie <AT> gentoo.org>
get-edge-cves.py | 161 +++++++++++++++++++++++++++++++++++++++++++++++++++++++
1 file changed, 161 insertions(+)
diff --git a/get-edge-cves.py b/get-edge-cves.py
new file mode 100755
index 0000000..0761b4e
--- /dev/null
+++ b/get-edge-cves.py
@@ -0,0 +1,161 @@
+#!/usr/bin/env python
+
+# SPDX-License-Identifier: GPL-2.0-or-later
+# This script extracts the Chromium version mapping for Microsoft Edge based on a given CVE ID.
+# It uses the Microsoft Security Response Center (MSRC) API to get the Common Vulnerability Reporting Framework (CVRF)
+# for a given month and extracts the Chromium version mapping for Microsoft Edge (Chromium-based) from the CVRF.
+
+# API Docs https://api.msrc.microsoft.com/cvrf/v3.0/swagger/v3/swagger.json
+
+# We can use the CVRF API to get the Common Vulnerability Reporting Framework (CVRF) for a given month.
+# We can query the API via CVE ID to get the CVRF for a specific CVE, but that just leads us back to querying
+# the month. Stretch goal to ingest directly from bgo ticket aliases and confirm the month & version?
+# https://api.msrc.microsoft.com/cvrf/v3.0/updates/CVE-2024-7969
+
+# https://api.msrc.microsoft.com/cvrf/v3.0/cvrf/2024-Aug
+# is the URL for the CVRF for August 2024
+
+# The XML looks like this:
+# <cvrfdoc
+# . . .
+# <vuln:Vulnerability
+# Ordinal="261">
+# <vuln:Title>Chromium: CVE-2024-7969 Type Confusion in V8</vuln:Title>
+# . . .
+# <vuln:ProductStatuses>
+# <vuln:Status
+# Type="Known Affected">
+# <vuln:ProductID>11655</vuln:ProductID>
+# . . .
+# </vuln:ProductStatuses>
+# . . .
+# <vuln:CVE>CVE-2024-7969</vuln:CVE>
+# . . .
+# <vuln:Remediations>
+# <vuln:Remediation
+# Type="Vendor Fix">
+# <vuln:Description>Release Notes</vuln:Description>
+# <vuln:URL />
+# <vuln:ProductID>11655</vuln:ProductID>
+# <vuln:AffectedFiles />
+# <vuln:RestartRequired>No</vuln:RestartRequired>
+# <vuln:SubType>Security Update</vuln:SubType>
+# <vuln:FixedBuild>128.0.2739.42</vuln:FixedBuild>
+# . . .
+# </vuln:Remediations>
+# . . .
+# </vuln:Vulnerability>
+
+# Process: Pick a month, get the CVRF for that month, then iterate over vulnerabilities to find the ones
+# that are for Microsoft Edge (Chromium-based) `<vuln:ProductID>11655</vuln:ProductID>`.
+# Extract the <vuln:CVE>CVE-2024-7969</vuln:CVE> to extract a CVE ID and
+# map to Chromium versions using the <vuln:FixedBuild>128.0.2739.42</vuln:FixedBuild> tag
+
+# It would be possible to parse the </vuln:Note> tag which contains a table with the chromium and edge versions
+# but each row looks like this: <td>128.0.6613.84/.85</td> which is not very useful, and we already
+# know which version of Chromium a CVE got fixed in.
+
+import datetime
+import requests
+from portage import versions as portage_versions
+import sys
+import xml.etree.ElementTree as ET
+from bs4 import BeautifulSoup
+
+
+class EdgeCVE:
+ def __init__(self, cve, title, fixedbuild):
+ self.cve: str = cve
+ self.title: str = title
+ self.fixedbuild: str | None = fixedbuild
+
+ def __str__(self):
+ return f"{self.cve}: {self.title}: Fixed {self.fixedbuild if not None else 'unknown'}"
+
+
+def get_edge_cves(year, month):
+ msrcapi = f"https://api.msrc.microsoft.com/cvrf/v3.0/cvrf/{year}-{month}"
+
+ # Get the CVRF for the specified month
+ response = requests.get(msrcapi)
+
+ if response.status_code != 200:
+ print(f"Website returned {response.status_code}")
+ print(f"Failed to get CVRF for {year}-{month}")
+ sys.exit(1)
+
+ # Parse the XML
+ root = ET.fromstring(response.text)
+
+ # Find all the vulnerabilities
+ vulnerabilities = root.findall(".//{http://www.icasi.org/CVRF/schema/vuln/1.1}Vulnerability")
+
+ edge_cves = [] # Store the edge cves here
+ for vulnerability in vulnerabilities:
+ productstatuses = vulnerability.findall(".//{http://www.icasi.org/CVRF/schema/vuln/1.1}ProductStatuses")
+ for productstatus in productstatuses:
+ productid = productstatus.find(".//{http://www.icasi.org/CVRF/schema/vuln/1.1}ProductID")
+ if productid.text == "11655":
+ # This is a Microsoft Edge (Chromium-based) vulnerability
+ cve_id = vulnerability.find(".//{http://www.icasi.org/CVRF/schema/vuln/1.1}CVE").text
+ cve_title = vulnerability.find(".//{http://www.icasi.org/CVRF/schema/vuln/1.1}Title").text
+ remediations = vulnerability.findall(".//{http://www.icasi.org/CVRF/schema/vuln/1.1}Remediations")
+ for remediation in remediations:
+ fixedbuild = remediation.find(".//{http://www.icasi.org/CVRF/schema/vuln/1.1}FixedBuild")
+ if fixedbuild is not None:
+ edge_cves.append(
+ EdgeCVE(cve_id,
+ cve_title,
+ fixedbuild.text)
+ )
+ else:
+ # Fall back to parsing that horrible, horrible table in the notes
+ notes = vulnerability.find(".//{http://www.icasi.org/CVRF/schema/vuln/1.1}Notes")
+ # There appear to be multiple notes, but only one has content that we want:
+ # <vuln:Note Title="FAQ" Type="FAQ" Ordinal="10"><p><strong>What is the version information for this release?</strong></p>
+ found = False
+ for note in notes:
+ if note.attrib['Title'] == "FAQ" and note.attrib['Type'] == "FAQ":
+
+ # The note contains a table with the chromium and edge versions, written in "HTML"
+ # <td>8/22/2024</td>
+ content = note.text
+
+ soup = BeautifulSoup(content, 'html.parser')
+
+ # Now you can work with the parsed HTML
+
+ # Find all the table rows
+ rows = soup.find_all('tr')
+ # We want the second row, second cell
+ if len(rows) > 1:
+ cells = rows[1].find_all('td')
+ if len(cells) > 1:
+ # We want the second cell (The first is the channel, the third the chromium version it's based on)
+ edge_version = cells[1].text
+ if portage_versions.ververify(edge_version):
+ found = True
+ edge_cves.append(
+ EdgeCVE(cve_id,
+ cve_title,
+ edge_version)
+ )
+
+ if not found:
+ edge_cves.append(
+ EdgeCVE(cve_id,
+ cve_title,
+ None)
+ )
+
+ return edge_cves
+
+
+now = datetime.datetime.now()
+year = now.year
+month = now.strftime("%B")[0:3]
+
+# Call the function with current year and month
+edge_cves = get_edge_cves(year, month)
+for cve in edge_cves:
+ print(cve)
^ permalink raw reply related [flat|nested] 37+ messages in thread
* [gentoo-commits] proj/chromium-tools:master commit in: /
@ 2024-09-26 2:39 Matt Jolly
0 siblings, 0 replies; 37+ messages in thread
From: Matt Jolly @ 2024-09-26 2:39 UTC (permalink / raw
To: gentoo-commits
commit: e965e5c6d8692a7ec00d255c08f670111dee1c02
Author: Matt Jolly <kangie <AT> gentoo <DOT> org>
AuthorDate: Thu Sep 26 02:34:18 2024 +0000
Commit: Matt Jolly <kangie <AT> gentoo <DOT> org>
CommitDate: Thu Sep 26 02:39:01 2024 +0000
URL: https://gitweb.gentoo.org/proj/chromium-tools.git/commit/?id=e965e5c6
get-edge-cves.py: new script
This script currently grabs the current month's CVRF from MS
and filters for Edge (Chromium-based) CVEs, then does some
magick to identify the version that it was fixed in if the
API is for some reason deficient...
Signed-off-by: Matt Jolly <kangie <AT> gentoo.org>
get-edge-cves.py | 153 +++++++++++++++++++++++++++++++++++++++++++++++++++++++
1 file changed, 153 insertions(+)
diff --git a/get-edge-cves.py b/get-edge-cves.py
new file mode 100755
index 0000000..a41187e
--- /dev/null
+++ b/get-edge-cves.py
@@ -0,0 +1,153 @@
+#!/usr/bin/env python
+
+# SPDX-License-Identifier: GPL-2.0-or-later
+# This script extracts the Chromium version mapping for Microsoft Edge based on a given CVE ID.
+# It uses the Microsoft Security Response Center (MSRC) API to get the Common Vulnerability Reporting Framework (CVRF)
+# for a given month and extracts the Chromium version mapping for Microsoft Edge (Chromium-based) from the CVRF.
+
+# API Docs https://api.msrc.microsoft.com/cvrf/v3.0/swagger/v3/swagger.json
+
+# We can use the CVRF API to get the Common Vulnerability Reporting Framework (CVRF) for a given month.
+# We can query the API via CVE ID to get the CVRF for a specific CVE, but that just leads us back to querying
+# the month. Stretch goal to ingest directly from bgo ticket aliases and confirm the month & version?
+# https://api.msrc.microsoft.com/cvrf/v3.0/updates/CVE-2024-7969
+
+# https://api.msrc.microsoft.com/cvrf/v3.0/cvrf/2024-Aug
+# is the URL for the CVRF for August 2024
+
+# The XML looks like this:
+# <cvrfdoc
+# . . .
+# <vuln:Vulnerability
+# Ordinal="261">
+# <vuln:Title>Chromium: CVE-2024-7969 Type Confusion in V8</vuln:Title>
+# . . .
+# <vuln:ProductStatuses>
+# <vuln:Status
+# Type="Known Affected">
+# <vuln:ProductID>11655</vuln:ProductID>
+# . . .
+# </vuln:ProductStatuses>
+# . . .
+# <vuln:CVE>CVE-2024-7969</vuln:CVE>
+# . . .
+# <vuln:Remediations>
+# <vuln:Remediation
+# Type="Vendor Fix">
+# <vuln:Description>Release Notes</vuln:Description>
+# <vuln:URL />
+# <vuln:ProductID>11655</vuln:ProductID>
+# <vuln:AffectedFiles />
+# <vuln:RestartRequired>No</vuln:RestartRequired>
+# <vuln:SubType>Security Update</vuln:SubType>
+# <vuln:FixedBuild>128.0.2739.42</vuln:FixedBuild>
+# . . .
+# </vuln:Remediations>
+# . . .
+# </vuln:Vulnerability>
+
+# Process: Pick a month, get the CVRF for that month, then iterate over vulnerabilities to find the ones
+# that are for Microsoft Edge (Chromium-based) `<vuln:ProductID>11655</vuln:ProductID>`.
+# Extract the <vuln:CVE>CVE-2024-7969</vuln:CVE> to extract a CVE ID and
+# map to Chromium versions using the <vuln:FixedBuild>128.0.2739.42</vuln:FixedBuild> tag (or the notes if we _have_ to).
+
+import datetime
+import requests
+from portage import versions as portage_versions
+import sys
+import xml.etree.ElementTree as ET
+from bs4 import BeautifulSoup
+
+
+class EdgeCVE:
+ def __init__(self, cve, title, fixedbuild):
+ self.cve: str = cve
+ self.title: str = title
+ self.fixedbuild: str | None = fixedbuild
+
+ def __str__(self):
+ return f"{self.cve}: {self.title}: Fixed {self.fixedbuild if not None else 'unknown'}"
+
+
+def get_edge_cves(year, month) -> list[EdgeCVE]:
+ msrcapi = f"https://api.msrc.microsoft.com/cvrf/v3.0/cvrf/{year}-{month}"
+
+ # Get the CVRF for the specified month
+ response = requests.get(msrcapi)
+
+ if response.status_code != 200:
+ print(f"Website returned {response.status_code}")
+ print(f"Failed to get CVRF for {year}-{month}")
+ sys.exit(1)
+
+ # Parse the XML
+ root = ET.fromstring(response.text)
+
+ # Find all the vulnerabilities
+ vulnerabilities = root.findall(".//{http://www.icasi.org/CVRF/schema/vuln/1.1}Vulnerability")
+
+ edge_cves = [] # Store the edge cves here
+ for vulnerability in vulnerabilities:
+ productstatuses = vulnerability.findall(".//{http://www.icasi.org/CVRF/schema/vuln/1.1}ProductStatuses")
+ for productstatus in productstatuses:
+ productid = productstatus.find(".//{http://www.icasi.org/CVRF/schema/vuln/1.1}ProductID")
+ if productid.text == "11655":
+ # This is a Microsoft Edge (Chromium-based) vulnerability
+ cve_id = vulnerability.find(".//{http://www.icasi.org/CVRF/schema/vuln/1.1}CVE").text
+ cve_title = vulnerability.find(".//{http://www.icasi.org/CVRF/schema/vuln/1.1}Title").text
+ remediations = vulnerability.findall(".//{http://www.icasi.org/CVRF/schema/vuln/1.1}Remediations")
+ for remediation in remediations:
+ fixedbuild = remediation.find(".//{http://www.icasi.org/CVRF/schema/vuln/1.1}FixedBuild")
+ if fixedbuild is not None:
+ edge_cves.append(
+ EdgeCVE(cve_id,
+ cve_title,
+ fixedbuild.text)
+ )
+ else:
+ # Fall back to parsing that horrible, horrible table in the notes
+ notes = vulnerability.find(".//{http://www.icasi.org/CVRF/schema/vuln/1.1}Notes")
+ # There appear to be multiple notes, but only one has content that we want:
+ # <vuln:Note Title="FAQ" Type="FAQ" Ordinal="10"><p><strong>What is the version information for this release?</strong></p>
+ found = False
+ for note in notes:
+ if note.attrib['Title'] == "FAQ" and note.attrib['Type'] == "FAQ":
+
+ # The note contains a table with the chromium and edge versions, written in "HTML"
+ # <td>8/22/2024</td>
+ content = note.text
+
+ soup = BeautifulSoup(content, 'html.parser')
+ rows = soup.find_all('tr')
+ # We want the second row, second cell
+ if len(rows) > 1:
+ cells = rows[1].find_all('td')
+ if len(cells) > 1:
+ # We want the second cell (The first is the channel, the third the chromium version it's based on)
+ edge_version = cells[1].text
+ if portage_versions.ververify(edge_version):
+ found = True
+ edge_cves.append(
+ EdgeCVE(cve_id,
+ cve_title,
+ edge_version)
+ )
+
+ if not found:
+ edge_cves.append(
+ EdgeCVE(cve_id,
+ cve_title,
+ None)
+ )
+
+ return edge_cves
+
+
+now = datetime.datetime.now()
+year = now.year
+month = now.strftime("%B")[0:3]
+
+# Call the function with current year and month
+edge_cves = get_edge_cves(year, month)
+for cve in edge_cves:
+ print(cve)
^ permalink raw reply related [flat|nested] 37+ messages in thread
* [gentoo-commits] proj/chromium-tools:master commit in: /
@ 2024-09-26 3:03 Matt Jolly
0 siblings, 0 replies; 37+ messages in thread
From: Matt Jolly @ 2024-09-26 3:03 UTC (permalink / raw
To: gentoo-commits
commit: ef84e5951d8d040c9695bda1dc846b37ed3941d4
Author: Matt Jolly <kangie <AT> gentoo <DOT> org>
AuthorDate: Thu Sep 26 02:59:10 2024 +0000
Commit: Matt Jolly <kangie <AT> gentoo <DOT> org>
CommitDate: Thu Sep 26 02:59:10 2024 +0000
URL: https://gitweb.gentoo.org/proj/chromium-tools.git/commit/?id=ef84e595
get-edge-cves.py: Refactor to tidy up
Eli couldn't stand the terribleness and tidied up a few things.
Co-authored-by: Eli Schwartz <ztrawhsce <AT> gentoo.org>
Signed-off-by: Matt Jolly <Kangie <AT> gentoo.org>
get-edge-cves.py | 31 ++++++++++++-------------------
1 file changed, 12 insertions(+), 19 deletions(-)
diff --git a/get-edge-cves.py b/get-edge-cves.py
index a41187e..4911667 100755
--- a/get-edge-cves.py
+++ b/get-edge-cves.py
@@ -51,19 +51,19 @@
# Extract the <vuln:CVE>CVE-2024-7969</vuln:CVE> to extract a CVE ID and
# map to Chromium versions using the <vuln:FixedBuild>128.0.2739.42</vuln:FixedBuild> tag (or the notes if we _have_ to).
-import datetime
-import requests
-from portage import versions as portage_versions
-import sys
+import dataclasses, datetime, sys
import xml.etree.ElementTree as ET
+
from bs4 import BeautifulSoup
+from portage import versions as portage_versions
+import requests
+@dataclasses.dataclass
class EdgeCVE:
- def __init__(self, cve, title, fixedbuild):
- self.cve: str = cve
- self.title: str = title
- self.fixedbuild: str | None = fixedbuild
+ cve: str
+ title: str
+ fixedbuild: str | None
def __str__(self):
return f"{self.cve}: {self.title}: Fixed {self.fixedbuild if not None else 'unknown'}"
@@ -100,9 +100,7 @@ def get_edge_cves(year, month) -> list[EdgeCVE]:
fixedbuild = remediation.find(".//{http://www.icasi.org/CVRF/schema/vuln/1.1}FixedBuild")
if fixedbuild is not None:
edge_cves.append(
- EdgeCVE(cve_id,
- cve_title,
- fixedbuild.text)
+ EdgeCVE(cve_id, cve_title, fixedbuild.text)
)
else:
# Fall back to parsing that horrible, horrible table in the notes
@@ -128,17 +126,13 @@ def get_edge_cves(year, month) -> list[EdgeCVE]:
if portage_versions.ververify(edge_version):
found = True
edge_cves.append(
- EdgeCVE(cve_id,
- cve_title,
- edge_version)
+ EdgeCVE(cve_id, cve_title, edge_version)
)
if not found:
edge_cves.append(
- EdgeCVE(cve_id,
- cve_title,
- None)
- )
+ EdgeCVE(cve_id, cve_title, None)
+ )
return edge_cves
@@ -147,7 +141,6 @@ now = datetime.datetime.now()
year = now.year
month = now.strftime("%B")[0:3]
-# Call the function with current year and month
edge_cves = get_edge_cves(year, month)
for cve in edge_cves:
print(cve)
^ permalink raw reply related [flat|nested] 37+ messages in thread
* [gentoo-commits] proj/chromium-tools:master commit in: /
@ 2024-09-26 5:21 Matt Jolly
0 siblings, 0 replies; 37+ messages in thread
From: Matt Jolly @ 2024-09-26 5:21 UTC (permalink / raw
To: gentoo-commits
commit: 95970bcad40a5a7affb82b12b7706d3abb5e39c0
Author: Matt Jolly <kangie <AT> gentoo <DOT> org>
AuthorDate: Thu Sep 26 05:21:06 2024 +0000
Commit: Matt Jolly <kangie <AT> gentoo <DOT> org>
CommitDate: Thu Sep 26 05:21:06 2024 +0000
URL: https://gitweb.gentoo.org/proj/chromium-tools.git/commit/?id=95970bca
get-edge-cves.py
Add the ability to query by gentoo bug or by CVE ID.
Signed-off-by: Matt Jolly <kangie <AT> gentoo.org>
.gitignore | 1 +
get-edge-cves.py | 107 ++++++++++++++++++++++++++++++++++++++++++++++++++-----
2 files changed, 100 insertions(+), 8 deletions(-)
diff --git a/.gitignore b/.gitignore
index b057d7f..61be068 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,2 +1,3 @@
MANIFEST
*.pyc
+bugzilla_api_key
diff --git a/get-edge-cves.py b/get-edge-cves.py
index 4911667..8336e0f 100755
--- a/get-edge-cves.py
+++ b/get-edge-cves.py
@@ -51,12 +51,12 @@
# Extract the <vuln:CVE>CVE-2024-7969</vuln:CVE> to extract a CVE ID and
# map to Chromium versions using the <vuln:FixedBuild>128.0.2739.42</vuln:FixedBuild> tag (or the notes if we _have_ to).
-import dataclasses, datetime, sys
+import argparse, calendar, dataclasses, datetime, os, sys
import xml.etree.ElementTree as ET
from bs4 import BeautifulSoup
from portage import versions as portage_versions
-import requests
+import bugzilla, requests
@dataclasses.dataclass
@@ -136,11 +136,102 @@ def get_edge_cves(year, month) -> list[EdgeCVE]:
return edge_cves
+def get_cve_from_bug_alias(bugnumber: int) -> list[str]:
+ """
+ Queries the Gentoo bugzilla instance for the list of CVEs associated with a given bug.
-now = datetime.datetime.now()
-year = now.year
-month = now.strftime("%B")[0:3]
+ Since we, by convention, alias bugs to CVEs, we can just query the alias field.
-edge_cves = get_edge_cves(year, month)
-for cve in edge_cves:
- print(cve)
+ Args:
+ bugnumber (int): The bug number to query.
+
+ Returns:
+ list[str]: A list of CVEs associated with the bug.s
+
+ """
+ url = "bugs.gentoo.org"
+ keyfile = open(os.path.abspath('./bugzilla_api_key'))
+ api_key = keyfile.read().replace('\n','')
+ print('connecting to b.g.o')
+ bzapi = bugzilla.Bugzilla(url, api_key)
+ bug = bzapi.getbug(bugnumber)
+ cves = bug.alias
+ print(f'Bug: {bug} has {len(cves)} CVEs.')
+
+ return cves
+
+
+def get_msrc_for_cve(cve: str) -> str:
+ """
+ Do a simple webrquest to get the CVRF for a given CVE.
+
+ Args:
+ cve (str): The CVE to query.
+
+ Returns:
+ str: The CVRF for the CVE.
+ """
+
+ msrcapi = f"https://api.msrc.microsoft.com/cvrf/v3.0/updates/{cve}"
+ response = requests.get(msrcapi)
+
+ if response.status_code != 200:
+ print(f"Website returned {response.status_code}")
+ print(f"Failed to get CVRF for {cve}")
+ sys.exit(1)
+
+ # This is JSON, we want { "value": [ { "ID": "2024-Aug" }, ] }
+ return response.json().get('value')[0].get('ID')
+
+
+def parse_arguments():
+ parser = argparse.ArgumentParser(description="Script to get Edge CVEs.")
+ parser.add_argument('-m', '--month', type=int, help='Month as a number (1-12)', default=datetime.datetime.now().month)
+ parser.add_argument('-y', '--year', type=int, help='Year as a four-digit number', default=datetime.datetime.now().year)
+ parser.add_argument('-b', '--bug', nargs='*', help='List of bug identifiers')
+ parser.add_argument('-c', '--cve', nargs='*', help='List of CVE identifiers')
+ return parser.parse_args()
+
+
+def main():
+ args = parse_arguments()
+
+ if not args.bug and not args.cve:
+ month = calendar.month_name[args.month][0:3]
+ for cve in get_edge_cves(args.year, month):
+ print(cve)
+
+ elif args.bug:
+ for bug in args.bug:
+ cves = get_cve_from_bug_alias(bug)
+
+ msrcs = []
+ for cve in cves:
+ msrcs.append(get_msrc_for_cve(cve))
+
+ # Dedupe
+ msrcs = list(set(msrcs))
+
+ for msrc in msrcs:
+ for cve in get_edge_cves(msrc.split('-')[0], msrc.split('-')[1]):
+ if cve.cve in cves:
+ print(cve)
+
+ elif args.cve:
+ msrcs = []
+ cves = []
+ for cve_id in args.cve:
+ cves.append(cve_id)
+ msrcs.append(get_msrc_for_cve(cve_id))
+
+ # Dedupe
+ msrcs = list(set(msrcs))
+
+ for msrc in msrcs:
+ for cve in get_edge_cves(msrc.split('-')[0], msrc.split('-')[1]):
+ if cve.cve in cves:
+ print(cve)
+
+
+if __name__ == "__main__":
+ main()
^ permalink raw reply related [flat|nested] 37+ messages in thread
* [gentoo-commits] proj/chromium-tools:master commit in: /
@ 2024-09-26 5:29 Matt Jolly
0 siblings, 0 replies; 37+ messages in thread
From: Matt Jolly @ 2024-09-26 5:29 UTC (permalink / raw
To: gentoo-commits
commit: 0eaf9f5b47082574caaa96e4d9adb40cc1a3f26f
Author: Matt Jolly <kangie <AT> gentoo <DOT> org>
AuthorDate: Thu Sep 26 05:21:06 2024 +0000
Commit: Matt Jolly <kangie <AT> gentoo <DOT> org>
CommitDate: Thu Sep 26 05:29:26 2024 +0000
URL: https://gitweb.gentoo.org/proj/chromium-tools.git/commit/?id=0eaf9f5b
get-edge-cves.py: New functionality
Add the ability to query by gentoo bug or by CVE ID.
Or multiples thereof, or pick a specific month/year to query.
The possibilities are endless. Endless!
Signed-off-by: Matt Jolly <kangie <AT> gentoo.org>
.gitignore | 1 +
get-edge-cves.py | 108 ++++++++++++++++++++++++++++++++++++++++++++++++++-----
2 files changed, 101 insertions(+), 8 deletions(-)
diff --git a/.gitignore b/.gitignore
index b057d7f..61be068 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,2 +1,3 @@
MANIFEST
*.pyc
+bugzilla_api_key
diff --git a/get-edge-cves.py b/get-edge-cves.py
index 4911667..72e68f8 100755
--- a/get-edge-cves.py
+++ b/get-edge-cves.py
@@ -51,12 +51,12 @@
# Extract the <vuln:CVE>CVE-2024-7969</vuln:CVE> to extract a CVE ID and
# map to Chromium versions using the <vuln:FixedBuild>128.0.2739.42</vuln:FixedBuild> tag (or the notes if we _have_ to).
-import dataclasses, datetime, sys
+import argparse, calendar, dataclasses, datetime, os, sys
import xml.etree.ElementTree as ET
from bs4 import BeautifulSoup
from portage import versions as portage_versions
-import requests
+import bugzilla, requests
@dataclasses.dataclass
@@ -137,10 +137,102 @@ def get_edge_cves(year, month) -> list[EdgeCVE]:
return edge_cves
-now = datetime.datetime.now()
-year = now.year
-month = now.strftime("%B")[0:3]
+def get_cve_from_bug_alias(bugnumber: int) -> list[str]:
+ """
+ Queries the Gentoo bugzilla instance for the list of CVEs associated with a given bug.
-edge_cves = get_edge_cves(year, month)
-for cve in edge_cves:
- print(cve)
+ Since we, by convention, alias bugs to CVEs, we can just query the alias field.
+
+ Args:
+ bugnumber (int): The bug number to query.
+
+ Returns:
+ list[str]: A list of CVEs associated with the bug.s
+
+ """
+ url = "bugs.gentoo.org"
+ keyfile = open(os.path.abspath('./bugzilla_api_key'))
+ api_key = keyfile.read().replace('\n','')
+ print('connecting to b.g.o')
+ bzapi = bugzilla.Bugzilla(url, api_key)
+ bug = bzapi.getbug(bugnumber)
+ cves = bug.alias
+ print(f'Bug: {bug} has {len(cves)} CVEs.')
+
+ return cves
+
+
+def get_msrc_for_cve(cve: str) -> str:
+ """
+ Do a simple webrquest to get the CVRF for a given CVE.
+
+ Args:
+ cve (str): The CVE to query.
+
+ Returns:
+ str: The CVRF for the CVE.
+ """
+
+ msrcapi = f"https://api.msrc.microsoft.com/cvrf/v3.0/updates/{cve}"
+ response = requests.get(msrcapi)
+
+ if response.status_code != 200:
+ print(f"Website returned {response.status_code}")
+ print(f"Failed to get CVRF for {cve}")
+ sys.exit(1)
+
+ # This is JSON, we want { "value": [ { "ID": "2024-Aug" }, ] }
+ return response.json().get('value')[0].get('ID')
+
+
+def parse_arguments():
+ parser = argparse.ArgumentParser(description="Script to get Edge CVEs.")
+ parser.add_argument('-m', '--month', type=int, help='Month as a number (1-12)', default=datetime.datetime.now().month)
+ parser.add_argument('-y', '--year', type=int, help='Year as a four-digit number', default=datetime.datetime.now().year)
+ parser.add_argument('-b', '--bug', nargs='*', help='List of bug identifiers')
+ parser.add_argument('-c', '--cve', nargs='*', help='List of CVE identifiers')
+ return parser.parse_args()
+
+
+def main():
+ args = parse_arguments()
+
+ if not args.bug and not args.cve:
+ month = calendar.month_name[args.month][0:3]
+ for cve in get_edge_cves(args.year, month):
+ print(cve)
+
+ elif args.bug:
+ for bug in args.bug:
+ cves = get_cve_from_bug_alias(bug)
+
+ msrcs = []
+ for cve in cves:
+ msrcs.append(get_msrc_for_cve(cve))
+
+ # Dedupe
+ msrcs = list(set(msrcs))
+
+ for msrc in msrcs:
+ for cve in get_edge_cves(msrc.split('-')[0], msrc.split('-')[1]):
+ if cve.cve in cves:
+ print(cve)
+
+ elif args.cve:
+ msrcs = []
+ cves = []
+ for cve_id in args.cve:
+ cves.append(cve_id)
+ msrcs.append(get_msrc_for_cve(cve_id))
+
+ # Dedupe
+ msrcs = list(set(msrcs))
+
+ for msrc in msrcs:
+ for cve in get_edge_cves(msrc.split('-')[0], msrc.split('-')[1]):
+ if cve.cve in cves:
+ print(cve)
+
+
+if __name__ == "__main__":
+ main()
^ permalink raw reply related [flat|nested] 37+ messages in thread
* [gentoo-commits] proj/chromium-tools:master commit in: /
@ 2024-09-26 7:25 Matt Jolly
0 siblings, 0 replies; 37+ messages in thread
From: Matt Jolly @ 2024-09-26 7:25 UTC (permalink / raw
To: gentoo-commits
commit: 08570431fe03884631ed495d73027c53396ad024
Author: Matt Jolly <kangie <AT> gentoo <DOT> org>
AuthorDate: Thu Sep 26 07:24:35 2024 +0000
Commit: Matt Jolly <kangie <AT> gentoo <DOT> org>
CommitDate: Thu Sep 26 07:25:19 2024 +0000
URL: https://gitweb.gentoo.org/proj/chromium-tools.git/commit/?id=08570431
get-edge-cves.py: Update bgo output
Signed-off-by: Matt Jolly <kangie <AT> gentoo.org>
get-edge-cves.py | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/get-edge-cves.py b/get-edge-cves.py
index 72e68f8..515c986 100755
--- a/get-edge-cves.py
+++ b/get-edge-cves.py
@@ -157,7 +157,7 @@ def get_cve_from_bug_alias(bugnumber: int) -> list[str]:
bzapi = bugzilla.Bugzilla(url, api_key)
bug = bzapi.getbug(bugnumber)
cves = bug.alias
- print(f'Bug: {bug} has {len(cves)} CVEs.')
+ print(f'Bug: {bug} has {len(cves)} CVEs:\n\t{', '.join(cves)}')
return cves
^ permalink raw reply related [flat|nested] 37+ messages in thread
* [gentoo-commits] proj/chromium-tools:master commit in: /
@ 2024-09-27 0:52 Matt Jolly
0 siblings, 0 replies; 37+ messages in thread
From: Matt Jolly @ 2024-09-27 0:52 UTC (permalink / raw
To: gentoo-commits
commit: 333530ba3430c659c049d23a1b5b1a6ee23e2e41
Author: Matt Jolly <kangie <AT> gentoo <DOT> org>
AuthorDate: Thu Sep 26 23:14:30 2024 +0000
Commit: Matt Jolly <kangie <AT> gentoo <DOT> org>
CommitDate: Fri Sep 27 00:52:11 2024 +0000
URL: https://gitweb.gentoo.org/proj/chromium-tools.git/commit/?id=333530ba
Trim trailing whitespace
Signed-off-by: Matt Jolly <kangie <AT> gentoo.org>
get-opera-version-mapping.py | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/get-opera-version-mapping.py b/get-opera-version-mapping.py
index 3e68ec9..ef60683 100755
--- a/get-opera-version-mapping.py
+++ b/get-opera-version-mapping.py
@@ -5,7 +5,7 @@ from bs4 import BeautifulSoup
def get_opera_chromium_versions(base_url, start_version, end_version):
"""
- Extracts Opera and Chromium versions from the given base URL with version placeholders,
+ Extracts Opera and Chromium versions from the given base URL with version placeholders,
parsing content sections for versions from start_version to end_version (inclusive).
Args:
@@ -14,7 +14,7 @@ def get_opera_chromium_versions(base_url, start_version, end_version):
end_version: The ending version to extract information for (inclusive).
Returns:
- A dictionary mapping Opera version to Chromium version.
+ A dictionary mapping Opera version to Chromium version.
If no update is mentioned, the previous Chromium version is used.
For missing data or errors, "unknown" is used.
"""
^ permalink raw reply related [flat|nested] 37+ messages in thread
* [gentoo-commits] proj/chromium-tools:master commit in: /
@ 2024-09-27 0:52 Matt Jolly
0 siblings, 0 replies; 37+ messages in thread
From: Matt Jolly @ 2024-09-27 0:52 UTC (permalink / raw
To: gentoo-commits
commit: e0adc1721f392c89c8262c4f864f6b1edf796edc
Author: Matt Jolly <kangie <AT> gentoo <DOT> org>
AuthorDate: Fri Sep 27 00:46:24 2024 +0000
Commit: Matt Jolly <kangie <AT> gentoo <DOT> org>
CommitDate: Fri Sep 27 00:52:11 2024 +0000
URL: https://gitweb.gentoo.org/proj/chromium-tools.git/commit/?id=e0adc172
get-opera-version-mapping: major refactor
- Rework the logic to get a better result when remediating
- Also store the version mapping in a dataclass (why not).
- Use packaging.version.Version to make sorting versions trivial
- Accept positional arguments for the max and min versions.
Signed-off-by: Matt Jolly <kangie <AT> gentoo.org>
get-opera-version-mapping.py | 118 +++++++++++++++++++++++++++++++------------
1 file changed, 86 insertions(+), 32 deletions(-)
diff --git a/get-opera-version-mapping.py b/get-opera-version-mapping.py
index 6d6f3de..015fd21 100755
--- a/get-opera-version-mapping.py
+++ b/get-opera-version-mapping.py
@@ -1,6 +1,32 @@
#!/usr/bin/env python
+
+# SPDX-License-Identifier: GPL-2.0-or-later
+# This script is used to extract Opera and Chromium versions from the Opera changelog (blog)
+# This is incomplete data, so we need to fill in the gaps with the Chromium version from the previous known version
+# The intent here is to have _some_ sort of datasource to identify a potentially-fixed version of Opera based on
+# the Chromium version it includes.
+# High level logic:
+# We can fetch the opera blog posts that relate to a major version of Opera as long as they don't change their URIs.
+# We iterate over H4 elements to get the Opera version (and date, though we throw that away)
+# We then iterate over child elements until we find an "Update Chromium" entry, which we can use to get the
+# Chromium version (in which case we bail early) Or we exhaust the children and give up.
+# Lather, rinse, repeat.
+
+import argparse, dataclasses
+
import requests
from bs4 import BeautifulSoup
+from packaging.version import Version
+
+
+@dataclasses.dataclass
+class OperaChromiumVersion:
+ opera_version: Version
+ chromium_version: Version
+
+ def __str__(self):
+ chromium_version_str = 'unknown' if self.chromium_version == Version('0.0.0.0') else str(self.chromium_version)
+ return f"Opera Version: {self.opera_version}, Chromium Version: {chromium_version_str}"
def get_opera_chromium_versions(base_url, start_version, end_version):
@@ -15,16 +41,11 @@ def get_opera_chromium_versions(base_url, start_version, end_version):
end_version: The ending version to extract information for (inclusive).
Returns:
- A dictionary mapping Opera version to Chromium version.
- If no update is mentioned, the previous Chromium version is used.
- For missing data or errors, "unknown" is used.
+ A list of OperaChromiumVersion objects containing the extracted version information.
"""
- versions = {}
- chromium_version = None
+ versions: list[OperaChromiumVersion] = []
for version in range(start_version, end_version + 1):
- # Fix formatting issue:
- # OR url = base_url.format(version)
url = base_url.format(version)
print(f"Processing version {version}")
@@ -38,8 +59,8 @@ def get_opera_chromium_versions(base_url, start_version, end_version):
# Iterate through each section starting with an H4 element
for section in content.find_all('h4'):
+ chromium_version = None
version_str, date_str = section.text.strip().split(' – ')
- versions[version_str] = chromium_version
# Process all content elements (including nested ones) until the next H4
next_sibling = section.find_next_sibling(
@@ -63,7 +84,12 @@ def get_opera_chromium_versions(base_url, start_version, end_version):
# Handle missing Chromium version
if not chromium_version:
- chromium_version = "unknown"
+ chromium_version = '0.0.0.0'
+
+ versions.append(OperaChromiumVersion(
+ Version(version_str),
+ Version(chromium_version)
+ ))
except requests.exceptions.RequestException as e:
if e.args and e.args[0] == 404:
@@ -76,41 +102,69 @@ def get_opera_chromium_versions(base_url, start_version, end_version):
print(f"Unexpected error: {e}")
chromium_version = None # Reset chromium_version for next iteration
- return versions
+ # We're broadly sorted by major version, but within each major version we get newer entries first
+ # Sort by Opera version to get the correct order
+ sorted_versions = sorted(versions, key=lambda x: x.opera_version)
+ return sorted_versions
def remediate_unknown_versions(versions):
"""
- Remediates entries with "unknown" values in the versions dictionary by
+ Remediates entries with '0.0.0.0' values in the versions dictionary by
assuming no change from the previous known version.
Args:
- versions: A dictionary mapping Opera version to Chromium version.
+ versions: A list of OperaChromiumVersion objects containing the extracted version information.
Returns:
- The modified versions dictionary with "unknown" values replaced based on previous entries.
+ A list of OperaChromiumVersion objects with '0.0.0.0' values replaced
+ by the previous known version if available.
"""
- previous_version = None
- for version, chromium_version in versions.items():
- if chromium_version == "unknown":
- if previous_version is not None:
- # Update with previous version
- versions[version] = previous_version
+ previous_version: Version = Version('0.0.0.0')
+ fixed_versions: list[OperaChromiumVersion] = []
+
+ for mapping in versions:
+ if mapping.chromium_version == Version('0.0.0.0') and previous_version is not Version('0.0.0.0'):
+ # Update with previous version
+ fixed_versions.append(OperaChromiumVersion(mapping.opera_version, previous_version))
else:
- previous_version = chromium_version # Update known version for future references
- return versions
+ # This should be fine, we're always parsing from oldest to newest
+ if previous_version < mapping.chromium_version:
+ previous_version = mapping.chromium_version
+ fixed_versions.append(mapping)
+
+ return fixed_versions
+
+
+def parse_arguments():
+ """
+ Parses the command line arguments and returns the parsed values.
+
+ Returns:
+ The parsed command line arguments.
+ """
+ parser = argparse.ArgumentParser(description='Get Opera and Chromium versions.')
+ parser.add_argument('start_ver', type=int, help='starting version', default=110)
+ parser.add_argument('end_ver', type=int, help='ending version', default=115)
+ return parser.parse_args()
+
+
+def main():
+ args = parse_arguments()
+
+ # Base URL with version placeholder
+ base_url = "https://blogs.opera.com/desktop/changelog-for-{}/"
+ opera_chromium_versions = get_opera_chromium_versions(base_url, args.start_ver, args.end_ver)
+ fixed_versions = remediate_unknown_versions(opera_chromium_versions)
-# Example usage
-# Base URL with version placeholder
-base_url = "https://blogs.opera.com/desktop/changelog-for-{}/"
-opera_chromium_versions = get_opera_chromium_versions(base_url, 110, 115)
+ # Print the versions
+ if fixed_versions:
+ for mapping in fixed_versions:
+ print(mapping)
+ else:
+ print("Failed to extract any versions.")
-opera_chromium_versions = remediate_unknown_versions(opera_chromium_versions)
-if opera_chromium_versions:
- for opera_version, chromium_version in opera_chromium_versions.items():
- print(
- f"Opera Version: {opera_version}, Chromium Version: {chromium_version}")
-else:
- print("Failed to extract any versions.")
+if __name__ == "__main__":
+ main()
^ permalink raw reply related [flat|nested] 37+ messages in thread
* [gentoo-commits] proj/chromium-tools:master commit in: /
@ 2024-09-27 0:52 Matt Jolly
0 siblings, 0 replies; 37+ messages in thread
From: Matt Jolly @ 2024-09-27 0:52 UTC (permalink / raw
To: gentoo-commits
commit: 9e4fee2f5fa978bfd98367e78bfc0fb87e3548f9
Author: Matt Jolly <kangie <AT> gentoo <DOT> org>
AuthorDate: Thu Sep 26 23:19:37 2024 +0000
Commit: Matt Jolly <kangie <AT> gentoo <DOT> org>
CommitDate: Fri Sep 27 00:52:11 2024 +0000
URL: https://gitweb.gentoo.org/proj/chromium-tools.git/commit/?id=9e4fee2f
flake8: Add config and do some trivial style changes
Signed-off-by: Matt Jolly <kangie <AT> gentoo.org>
.flake8 | 4 ++++
get-edge-cves.py | 20 ++++++++++++++++++--
get-opera-version-mapping.py | 3 ++-
opera-bump | 1 +
4 files changed, 25 insertions(+), 3 deletions(-)
diff --git a/.flake8 b/.flake8
new file mode 100644
index 0000000..cb2f802
--- /dev/null
+++ b/.flake8
@@ -0,0 +1,4 @@
+[flake8]
+ignore = E401
+max-line-length = 120
+max-complexity = 15
diff --git a/get-edge-cves.py b/get-edge-cves.py
index 515c986..44b2eef 100755
--- a/get-edge-cves.py
+++ b/get-edge-cves.py
@@ -70,6 +70,18 @@ class EdgeCVE:
def get_edge_cves(year, month) -> list[EdgeCVE]:
+ """
+ Queries the Microsoft Security Response Center (MSRC) API for the Common Vulnerability Reporting Framework (CVRF)
+ for a given month and extracts the Chromium version mapping for Microsoft Edge (Chromium-based) from the CVRF.
+
+ Args:
+ year: The year to query.
+ month: The month to query.
+
+ Returns:
+ list[EdgeCVE]: A list of EdgeCVE objects.
+ """
+
msrcapi = f"https://api.msrc.microsoft.com/cvrf/v3.0/cvrf/{year}-{month}"
# Get the CVRF for the specified month
@@ -106,7 +118,7 @@ def get_edge_cves(year, month) -> list[EdgeCVE]:
# Fall back to parsing that horrible, horrible table in the notes
notes = vulnerability.find(".//{http://www.icasi.org/CVRF/schema/vuln/1.1}Notes")
# There appear to be multiple notes, but only one has content that we want:
- # <vuln:Note Title="FAQ" Type="FAQ" Ordinal="10"><p><strong>What is the version information for this release?</strong></p>
+ # <vuln:Note Title="FAQ" Type="FAQ" Ordinal="10"><p><strong>What is the version information for this release?</strong></p> # noqa: E501
found = False
for note in notes:
if note.attrib['Title'] == "FAQ" and note.attrib['Type'] == "FAQ":
@@ -121,7 +133,7 @@ def get_edge_cves(year, month) -> list[EdgeCVE]:
if len(rows) > 1:
cells = rows[1].find_all('td')
if len(cells) > 1:
- # We want the second cell (The first is the channel, the third the chromium version it's based on)
+ # We want the second cell (1st is channel, 3rd is chromium version)
edge_version = cells[1].text
if portage_versions.ververify(edge_version):
found = True
@@ -197,11 +209,14 @@ def parse_arguments():
def main():
args = parse_arguments()
+ # If we have a CVE to query (bugs contain them in the Alias field) we can query the API directly
+ # and work out which CVRF(s) to query.
if not args.bug and not args.cve:
month = calendar.month_name[args.month][0:3]
for cve in get_edge_cves(args.year, month):
print(cve)
+ # If we have a bug, we can query the bugzilla API to get the CVEs associated with it
elif args.bug:
for bug in args.bug:
cves = get_cve_from_bug_alias(bug)
@@ -218,6 +233,7 @@ def main():
if cve.cve in cves:
print(cve)
+ # If we have a CVE (or list of CVEs), we can query the API directly to identify the CVRFs to query
elif args.cve:
msrcs = []
cves = []
diff --git a/get-opera-version-mapping.py b/get-opera-version-mapping.py
index ef60683..6d6f3de 100755
--- a/get-opera-version-mapping.py
+++ b/get-opera-version-mapping.py
@@ -9,7 +9,8 @@ def get_opera_chromium_versions(base_url, start_version, end_version):
parsing content sections for versions from start_version to end_version (inclusive).
Args:
- base_url: The base URL for Opera changelogs with a version placeholder (e.g., "https://blogs.opera.com/desktop/changelog-for-{version}/").
+ base_url: The base URL for Opera changelogs with a version placeholder (e.g.,
+ "https://blogs.opera.com/desktop/changelog-for-{version}/").
start_version: The starting version to extract information for (inclusive).
end_version: The ending version to extract information for (inclusive).
diff --git a/opera-bump b/opera-bump
index c1e3c46..9f6a964 100755
--- a/opera-bump
+++ b/opera-bump
@@ -393,5 +393,6 @@ def main():
f"www-client/{pkg}: remove old",
"-s", "-S")
+
if __name__ == "__main__":
main()
^ permalink raw reply related [flat|nested] 37+ messages in thread
* [gentoo-commits] proj/chromium-tools:master commit in: /
@ 2024-10-10 10:03 Matt Jolly
0 siblings, 0 replies; 37+ messages in thread
From: Matt Jolly @ 2024-10-10 10:03 UTC (permalink / raw
To: gentoo-commits
commit: 97423cbcc271276d24899f528c879ab011f28d1b
Author: Matt Jolly <kangie <AT> gentoo <DOT> org>
AuthorDate: Thu Oct 10 10:01:54 2024 +0000
Commit: Matt Jolly <kangie <AT> gentoo <DOT> org>
CommitDate: Thu Oct 10 10:01:54 2024 +0000
URL: https://gitweb.gentoo.org/proj/chromium-tools.git/commit/?id=97423cbc
New script: iterate-over-ebuild.sh
Iterates over a chromium ebuild provided as an argument and
updates `keeplibs` when the build fails.
Signed-off-by: Matt Jolly <kangie <AT> gentoo.org>
iterate-over-ebuild.sh | 59 ++++++++++++++++++++++++++++++++++++++++++++++++++
1 file changed, 59 insertions(+)
diff --git a/iterate-over-ebuild.sh b/iterate-over-ebuild.sh
new file mode 100755
index 0000000..5013a45
--- /dev/null
+++ b/iterate-over-ebuild.sh
@@ -0,0 +1,59 @@
+#!/bin/bash
+# spdx-license-identifier: GPL-2.0-or-later
+# Script to iterate over `ebuild foo-1.2.3.ebuild clean merge` and automatically add values to keeplibs.
+# Usage: ./iterate-over-ebuild.sh foo-1.2.3.ebuild
+# This script will run until the ebuild is merged, or until you interrupt it with Ctrl+C.
+# It will add the libraries to keeplibs in the ebuild as it goes.
+
+package="${1%.ebuild}"
+tmpfile=$(mktemp)
+iter=0
+added=()
+
+# Trap for Ctrl+C
+trap 'cleanup' INT
+
+cleanup() {
+ echo "[$(date)]: Script interrupted."
+ echo "$tmpfile" for this iteration\'s logs.
+ exit 1
+}
+
+while true; do
+ libs=()
+ echo "[$(date)]: Processing $package; iteration $((++iter))"
+ echo "So far, we've added:"
+ if [ ${#added[@]} -eq 0 ]; then
+ echo " Nothing"
+ fi
+ for i in "${added[@]}"; do
+ echo " $i"
+ done
+ ebuild "${1}" clean merge 2>&1 | tee "$tmpfile"
+
+ # Should only ever be one but whatever
+ mapfile -t libs < <(grep 'ninja: error:' "$tmpfile" | awk '{print $3}' | cut -c 8- | awk -F/ '{OFS="/"; NF--; print}')
+
+ if [ ${#libs[@]} -eq 0 ]; then
+ echo "[$(date)]: No new libraries to whitelist."
+ else
+ for lib in "${libs[@]}"; do
+ echo "[$(date)]: Whitelisting $lib"
+ if grep -q "$lib" "${1}"; then
+ # Something went wrong if we're here but whatever.
+ echo "[$(date)]: $lib already exists in keeplibs"
+ else
+ echo "[$(date)]: Adding $lib to keeplibs"
+ sed -i "/^\s*local keeplibs=/a \t\t$lib" "${1}"
+ added+=("$lib")
+ fi
+ done
+ fi
+
+ if grep -q "www-client/$package merged" "$tmpfile"; then
+ rm "$tmpfile"
+ break
+ fi
+ # Start with a clean slate for the next iteration
+ rm "$tmpfile"
+done
^ permalink raw reply related [flat|nested] 37+ messages in thread
* [gentoo-commits] proj/chromium-tools:master commit in: /
@ 2024-10-10 21:52 Matt Jolly
0 siblings, 0 replies; 37+ messages in thread
From: Matt Jolly @ 2024-10-10 21:52 UTC (permalink / raw
To: gentoo-commits
commit: 563207f4a244e2ca02115224760a9db16eeacbcf
Author: Matt Jolly <kangie <AT> gentoo <DOT> org>
AuthorDate: Thu Oct 10 21:51:32 2024 +0000
Commit: Matt Jolly <kangie <AT> gentoo <DOT> org>
CommitDate: Thu Oct 10 21:52:05 2024 +0000
URL: https://gitweb.gentoo.org/proj/chromium-tools.git/commit/?id=563207f4
Make sure we don't match substrings and loop forever
Signed-off-by: Matt Jolly <kangie <AT> gentoo.org>
iterate-over-ebuild.sh | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/iterate-over-ebuild.sh b/iterate-over-ebuild.sh
index 5013a45..9d0d479 100755
--- a/iterate-over-ebuild.sh
+++ b/iterate-over-ebuild.sh
@@ -39,12 +39,12 @@ while true; do
else
for lib in "${libs[@]}"; do
echo "[$(date)]: Whitelisting $lib"
- if grep -q "$lib" "${1}"; then
+ if grep -q "$lib$" "${1}"; then
# Something went wrong if we're here but whatever.
echo "[$(date)]: $lib already exists in keeplibs"
else
echo "[$(date)]: Adding $lib to keeplibs"
- sed -i "/^\s*local keeplibs=/a \t\t$lib" "${1}"
+ sed -i "/^\s*local keeplibs=/a $lib" "${1}"
added+=("$lib")
fi
done
^ permalink raw reply related [flat|nested] 37+ messages in thread
end of thread, other threads:[~2024-10-10 21:52 UTC | newest]
Thread overview: 37+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2012-06-18 7:38 [gentoo-commits] proj/chromium-tools:master commit in: / Paweł Hajdan
-- strict thread matches above, loose matches on Subject: below --
2024-10-10 21:52 Matt Jolly
2024-10-10 10:03 Matt Jolly
2024-09-27 0:52 Matt Jolly
2024-09-27 0:52 Matt Jolly
2024-09-27 0:52 Matt Jolly
2024-09-26 7:25 Matt Jolly
2024-09-26 5:29 Matt Jolly
2024-09-26 5:21 Matt Jolly
2024-09-26 3:03 Matt Jolly
2024-09-26 2:39 Matt Jolly
2024-09-26 2:36 Matt Jolly
2024-08-30 3:39 Matt Jolly
2024-06-01 7:22 Matt Jolly
2024-05-31 23:02 Matt Jolly
2024-03-28 2:39 Matt Jolly
2024-03-20 21:45 Matt Jolly
2024-03-20 21:45 Matt Jolly
2024-03-20 21:45 Matt Jolly
2024-03-20 21:45 Matt Jolly
2023-02-05 15:09 Stephan Hartmann
2022-09-01 19:33 Mike Gilbert
2022-09-01 19:24 Mike Gilbert
2022-05-06 9:55 Stephan Hartmann
2022-05-03 16:54 Mike Gilbert
2022-05-03 16:54 Mike Gilbert
2022-02-11 17:16 Stephan Hartmann
2022-02-05 16:29 Stephan Hartmann
2022-01-31 20:20 Stephan Hartmann
2020-11-21 19:34 Stephan Hartmann
2020-10-26 17:48 Mike Gilbert
2016-09-15 16:15 Mike Gilbert
2016-09-15 16:11 Mike Gilbert
2015-08-13 20:53 Mike Gilbert
2012-07-31 23:27 Mike Gilbert
2012-07-31 20:39 Mike Gilbert
2011-10-25 16:36 Paweł Hajdan
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox