diff options
Diffstat (limited to 'maintainers')
-rw-r--r-- | maintainers/maintainer-list.nix | 205 | ||||
-rw-r--r-- | maintainers/scripts/pluginupdate.py | 188 | ||||
-rw-r--r-- | maintainers/team-list.nix | 12 |
3 files changed, 328 insertions, 77 deletions
diff --git a/maintainers/maintainer-list.nix b/maintainers/maintainer-list.nix index 519293471af32..6ae60956ae974 100644 --- a/maintainers/maintainer-list.nix +++ b/maintainers/maintainer-list.nix @@ -515,6 +515,8 @@ }; algorith = { email = "dries_van_daele@telenet.be"; + github = "DriesVanDaele"; + githubId = 1141488; name = "Dries Van Daele"; }; alibabzo = { @@ -1918,12 +1920,10 @@ github = "cburstedde"; githubId = 109908; name = "Carsten Burstedde"; - keys = [ - { - longkeyid = "rsa2048/0x0704CD9E550A6BCD"; - fingerprint = "1127 A432 6524 BF02 737B 544E 0704 CD9E 550A 6BCD"; - } - ]; + keys = [{ + longkeyid = "rsa2048/0x0704CD9E550A6BCD"; + fingerprint = "1127 A432 6524 BF02 737B 544E 0704 CD9E 550A 6BCD"; + }]; }; cdepillabout = { email = "cdep.illabout@gmail.com"; @@ -1950,6 +1950,12 @@ githubId = 543423; name = "Alex Wied"; }; + cfhammill = { + email = "cfhammill@gmail.com"; + github = "cfhammill"; + githubId = 7467038; + name = "Chris Hammill"; + }; cfouche = { email = "chaddai.fouche@gmail.com"; github = "Chaddai"; @@ -2285,6 +2291,12 @@ githubId = 34317; name = "Corey O'Connor"; }; + CodeLongAndProsper90 = { + github = "CodeLongAndProsper90"; + githubId = 50145141; + email = "jupiter@m.rdis.dev"; + name = "Scott Little"; + }; codsl = { email = "codsl@riseup.net"; github = "codsl"; @@ -2854,6 +2866,12 @@ githubId = 706758; name = "Christian Gerbrandt"; }; + derekcollison = { + email = "derek@nats.io"; + github = "derekcollison"; + githubId = 90097; + name = "Derek Collison"; + }; DerGuteMoritz = { email = "moritz@twoticketsplease.de"; github = "DerGuteMoritz"; @@ -3527,7 +3545,7 @@ name = "Leo Maroni"; }; emmanuelrosa = { - email = "emmanuel_rosa@aol.com"; + email = "emmanuelrosa@protonmail.com"; matrix = "@emmanuelrosa:matrix.org"; github = "emmanuelrosa"; githubId = 13485450; @@ -4244,6 +4262,16 @@ githubId = 1313787; name = "Gabriel Gonzalez"; }; + gador = { + email = "florian.brandes@posteo.de"; + github = "gador"; + githubId = 1883533; + name = "Florian Brandes"; + keys = [{ + longkeyid = "rsa4096/0xBBB3E40E53797FD9"; + fingerprint = "0200 3EF8 8D2B CF2D 8F00 FFDC BBB3 E40E 5379 7FD9"; + }]; + }; gal_bolle = { email = "florent.becker@ens-lyon.org"; github = "FlorentBecker"; @@ -4443,6 +4471,16 @@ githubId = 1621335; name = "Andrew Trachenko"; }; + gordias = { + name = "Gordias"; + email = "gordias@disroot.org"; + github = "NotGordias"; + githubId = 94724133; + keys = [{ + longkeyid = "ed25519/0x5D47284830FAA4FA"; + fingerprint = "C006 B8A0 0618 F3B6 E0E4 2ECD 5D47 2848 30FA A4FA"; + }]; + }; govanify = { name = "Gauvain 'GovanifY' Roussel-Tarbouriech"; email = "gauvain@govanify.com"; @@ -4533,6 +4571,12 @@ githubId = 343415; name = "Greg Roodt"; }; + gruve-p = { + email = "groestlcoin@gmail.com"; + github = "gruve-p"; + githubId = 11212268; + name = "gruve-p"; + }; gschwartz = { email = "gsch@pennmedicine.upenn.edu"; github = "GregorySchwartz"; @@ -5671,6 +5715,24 @@ githubId = 8900; name = "Johan Magnus Jonsson"; }; + jmc-figueira = { + email = "business+nixos@jmc-figueira.dev"; + github = "jmc-figueira"; + githubId = 6634716; + name = "João Figueira"; + keys = [ + # GitHub signing key + { + longkeyid = "rsa4096/0xDC7AE56AE98E02D7"; + fingerprint = "EC08 7AA3 DEAD A972 F015 6371 DC7A E56A E98E 02D7"; + } + # Email encryption + { + longkeyid = "ed25519/0x197F9A632D139E30"; + fingerprint = "816D 23F5 E672 EC58 7674 4A73 197F 9A63 2D13 9E30"; + } + ]; + }; jmettes = { email = "jonathan@jmettes.com"; github = "jmettes"; @@ -5922,6 +5984,13 @@ githubId = 107689; name = "Josh Holland"; }; + jsierles = { + email = "joshua@hey.com"; + matrix = "@jsierles:matrix.org"; + name = "Joshua Sierles"; + github = "jsierles"; + githubId = 82; + }; jtcoolen = { email = "jtcoolen@pm.me"; name = "Julien Coolen"; @@ -6319,7 +6388,7 @@ keys = [{ longkeyid = "rsa4096/0x7248991EFA8EFBEE"; fingerprint = "01F5 0A29 D4AA 9117 5A11 BDB1 7248 991E FA8E FBEE"; - }]; + }]; }; kiwi = { email = "envy1988@gmail.com"; @@ -6582,7 +6651,7 @@ }; kylesferrazza = { name = "Kyle Sferrazza"; - email = "kyle.sferrazza@gmail.com"; + email = "nixpkgs@kylesferrazza.com"; github = "kylesferrazza"; githubId = 6677292; @@ -6772,6 +6841,17 @@ fingerprint = "CC50 F82C 985D 2679 0703 AF15 19B0 82B3 DEFE 5451"; }]; }; + leixb = { + email = "abone9999+nixpkgs@gmail.com"; + matrix = "@leix_b:matrix.org"; + github = "LeixB"; + githubId = 17183803; + name = "Aleix Boné"; + keys = [{ + longkeyid = "rsa4096/0xFC035BB2BB28E15D"; + fingerprint = "63D3 F436 EDE8 7E1F 1292 24AF FC03 5BB2 BB28 E15D"; + }]; + }; lejonet = { email = "daniel@kuehn.se"; github = "lejonet"; @@ -6959,6 +7039,12 @@ githubId = 22085373; name = "Luis Hebendanz"; }; + lunarequest = { + email = "nullarequest@vivlaid.net"; + github = "Lunarequest"; + githubId = 30698906; + name = "Luna D Dragon"; + }; lionello = { email = "lio@lunesu.com"; github = "lionello"; @@ -7148,6 +7234,12 @@ githubId = 13791; name = "Luke Gorrie"; }; + luker = { + email = "luker@fenrirproject.org"; + github = "LucaFulchir"; + githubId = 2486026; + name = "Luca Fulchir"; + }; lumi = { email = "lumi@pew.im"; github = "lumi-me-not"; @@ -7199,6 +7291,12 @@ email = "wheatdoge@gmail.com"; name = "Tim Liou"; }; + m00wl = { + name = "Moritz Lumme"; + email = "moritz.lumme@gmail.com"; + github = "m00wl"; + githubId = 46034439; + }; m1cr0man = { email = "lucas+nix@m1cr0man.com"; github = "m1cr0man"; @@ -8502,10 +8600,16 @@ name = "Xinhao Luo"; }; newam = { - email = "alexmgit@protonmail.com"; + email = "alex@thinglab.org"; github = "newAM"; githubId = 7845120; - name = "Alex M."; + name = "Alex Martens"; + }; + nialov = { + email = "nikolasovaskainen@gmail.com"; + github = "nialov"; + githubId = 47318483; + name = "Nikolas Ovaskainen"; }; nikitavoloboev = { email = "nikita.voloboev@gmail.com"; @@ -9818,6 +9922,13 @@ githubId = 1016742; name = "Rafael García"; }; + raitobezarius = { + email = "ryan@lahfa.xyz"; + matrix = "@raitobezarius:matrix.org"; + github = "RaitoBezarius"; + githubId = 314564; + name = "Ryan Lahfa"; + }; raquelgb = { email = "raquel.garcia.bautista@gmail.com"; github = "raquelgb"; @@ -10536,14 +10647,20 @@ name = "Samuel Dionne-Riel"; }; samuelgrf = { - email = "git@samuelgrf.com"; + email = "s@muel.gr"; github = "samuelgrf"; githubId = 67663538; name = "Samuel Gräfenstein"; - keys = [{ - longkeyid = "rsa4096/0xEF76A063F15C63C8"; - fingerprint = "FF24 5832 8FAF 4660 18C6 186E EF76 A063 F15C 63C8"; - }]; + keys = [ + { + longkeyid = "rsa4096/0xDE75F92E318123F0"; + fingerprint = "6F2E 2A90 423C 8111 BFF2 895E DE75 F92E 3181 23F0"; + } + { + longkeyid = "rsa4096/0xEF76A063F15C63C8"; + fingerprint = "FF24 5832 8FAF 4660 18C6 186E EF76 A063 F15C 63C8"; + } + ]; }; samuelrivas = { email = "samuelrivas@gmail.com"; @@ -10829,6 +10946,16 @@ githubId = 6720672; name = "Shane Pearlman"; }; + shanesveller = { + email = "shane@sveller.dev"; + github = "shanesveller"; + githubId = 831; + keys = [{ + longkeyid = "rsa4096/0x9210C218023C15CD"; + fingerprint = "F83C 407C ADC4 5A0F 1F2F 44E8 9210 C218 023C 15CD"; + }]; + name = "Shane Sveller"; + }; shawndellysse = { email = "sdellysse@gmail.com"; github = "shawndellysse"; @@ -10942,7 +11069,7 @@ name = "Yann Hodique"; }; sikmir = { - email = "sikmir@gmail.com"; + email = "sikmir@disroot.org"; github = "sikmir"; githubId = 688044; name = "Nikolay Korotkiy"; @@ -11087,6 +11214,12 @@ fingerprint = "4242 834C D401 86EF 8281 4093 86E3 0E5A 0F5F C59C"; }]; }; + smasher164 = { + email = "aindurti@gmail.com"; + github = "smasher164"; + githubId = 12636891; + name = "Akhil Indurti"; + }; smironov = { email = "grrwlf@gmail.com"; github = "grwlf"; @@ -11408,10 +11541,10 @@ name = "Justus K"; }; SubhrajyotiSen = { - email = "subhrajyoti12@gmail.com"; - github = "SubhrajyotiSen"; - githubId = 12984845; - name = "Subhrajyoti Sen"; + email = "subhrajyoti12@gmail.com"; + github = "SubhrajyotiSen"; + githubId = 12984845; + name = "Subhrajyoti Sen"; }; suhr = { email = "suhr@i2pmail.org"; @@ -11768,6 +11901,12 @@ githubId = 378734; name = "TG ⊗ Θ"; }; + tgunnoe = { + email = "t@gvno.net"; + github = "tgunnoe"; + githubId = 7254833; + name = "Taylor Gunnoe"; + }; th0rgal = { email = "thomas.marchand@tuta.io"; github = "Th0rgal"; @@ -11927,7 +12066,7 @@ name = "Tiago Castro"; }; tilcreator = { - name = "Tilman Jackel"; + name = "TilCreator"; email = "contact.nixos@tc-j.de"; matrix = "@tilcreator:matrix.org"; github = "TilCreator"; @@ -12166,6 +12305,12 @@ githubId = 1183303; name = "Jakob Klepp"; }; + trundle = { + name = "Andreas Stührk"; + email = "andy@hammerhartes.de"; + github = "Trundle"; + githubId = 332418; + }; tscholak = { email = "torsten.scholak@googlemail.com"; github = "tscholak"; @@ -12651,6 +12796,16 @@ githubId = 3889405; name = "vyp"; }; + wackbyte = { + name = "wackbyte"; + email = "wackbyte@pm.me"; + github = "wackbyte"; + githubId = 29505620; + keys = [{ + longkeyid = "rsa4096/0x937F2AE5CCEFBF59"; + fingerprint = "E595 7FE4 FEF6 714B 1AD3 1483 937F 2AE5 CCEF BF59"; + }]; + }; wakira = { name = "Sheng Wang"; email = "sheng@a64.work"; @@ -12683,6 +12838,12 @@ email = "kirill.wedens@gmail.com"; name = "wedens"; }; + wegank = { + name = "Weijia Wang"; + email = "contact@weijia.wang"; + github = "wegank"; + githubId = 9713184; + }; weihua = { email = "luwh364@gmail.com"; github = "weihua-lu"; diff --git a/maintainers/scripts/pluginupdate.py b/maintainers/scripts/pluginupdate.py index af0376213a395..de85b88da3fd1 100644 --- a/maintainers/scripts/pluginupdate.py +++ b/maintainers/scripts/pluginupdate.py @@ -81,29 +81,71 @@ def make_request(url: str) -> urllib.request.Request: headers["Authorization"] = f"token {token}" return urllib.request.Request(url, headers=headers) -@dataclass -class PluginDesc: - owner: str - repo: str - branch: str - alias: Optional[str] - - class Repo: def __init__( - self, owner: str, name: str, branch: str, alias: Optional[str] + self, uri: str, branch: str, alias: Optional[str] ) -> None: - self.owner = owner - self.name = name + self.uri = uri + '''Url to the repo''' self.branch = branch self.alias = alias self.redirect: Dict[str, str] = {} - def url(self, path: str) -> str: - return urljoin(f"https://github.com/{self.owner}/{self.name}/", path) + @property + def name(self): + return self.uri.split('/')[-1] def __repr__(self) -> str: - return f"Repo({self.owner}, {self.name})" + return f"Repo({self.name}, {self.uri})" + + @retry(urllib.error.URLError, tries=4, delay=3, backoff=2) + def has_submodules(self) -> bool: + return True + + @retry(urllib.error.URLError, tries=4, delay=3, backoff=2) + def latest_commit(self) -> Tuple[str, datetime]: + loaded = self._prefetch(None) + updated = datetime.strptime(loaded['date'], "%Y-%m-%dT%H:%M:%S%z") + + return loaded['rev'], updated + + def _prefetch(self, ref: Optional[str]): + cmd = ["nix-prefetch-git", "--quiet", "--fetch-submodules", self.uri] + if ref is not None: + cmd.append(ref) + log.debug(cmd) + data = subprocess.check_output(cmd) + loaded = json.loads(data) + return loaded + + def prefetch(self, ref: Optional[str]) -> str: + loaded = self._prefetch(ref) + return loaded["sha256"] + + def as_nix(self, plugin: "Plugin") -> str: + return f'''fetchgit {{ + url = "{self.uri}"; + rev = "{plugin.commit}"; + sha256 = "{plugin.sha256}"; + }}''' + + +class RepoGitHub(Repo): + def __init__( + self, owner: str, repo: str, branch: str, alias: Optional[str] + ) -> None: + self.owner = owner + self.repo = repo + '''Url to the repo''' + super().__init__(self.url(""), branch, alias) + log.debug("Instantiating github repo %s/%s", self.owner, self.repo) + + @property + def name(self): + return self.repo + + def url(self, path: str) -> str: + return urljoin(f"https://github.com/{self.owner}/{self.name}/", path) @retry(urllib.error.URLError, tries=4, delay=3, backoff=2) def has_submodules(self) -> bool: @@ -122,7 +164,7 @@ class Repo: commit_url = self.url(f"commits/{self.branch}.atom") commit_req = make_request(commit_url) with urllib.request.urlopen(commit_req, timeout=10) as req: - self.check_for_redirect(commit_url, req) + self._check_for_redirect(commit_url, req) xml = req.read() root = ET.fromstring(xml) latest_entry = root.find(ATOM_ENTRY) @@ -137,7 +179,7 @@ class Repo: updated = datetime.strptime(updated_tag.text, "%Y-%m-%dT%H:%M:%SZ") return Path(str(url.path)).name, updated - def check_for_redirect(self, url: str, req: http.client.HTTPResponse): + def _check_for_redirect(self, url: str, req: http.client.HTTPResponse): response_url = req.geturl() if url != response_url: new_owner, new_name = ( @@ -150,11 +192,13 @@ class Repo: new_plugin = plugin_line.format(owner=new_owner, name=new_name) self.redirect[old_plugin] = new_plugin - def prefetch_git(self, ref: str) -> str: - data = subprocess.check_output( - ["nix-prefetch-git", "--fetch-submodules", self.url(""), ref] - ) - return json.loads(data)["sha256"] + + def prefetch(self, commit: str) -> str: + if self.has_submodules(): + sha256 = super().prefetch(commit) + else: + sha256 = self.prefetch_github(commit) + return sha256 def prefetch_github(self, ref: str) -> str: data = subprocess.check_output( @@ -162,6 +206,33 @@ class Repo: ) return data.strip().decode("utf-8") + def as_nix(self, plugin: "Plugin") -> str: + if plugin.has_submodules: + submodule_attr = "\n fetchSubmodules = true;" + else: + submodule_attr = "" + + return f'''fetchFromGitHub {{ + owner = "{self.owner}"; + repo = "{self.repo}"; + rev = "{plugin.commit}"; + sha256 = "{plugin.sha256}";{submodule_attr} + }}''' + + +@dataclass +class PluginDesc: + repo: Repo + branch: str + alias: Optional[str] + + @property + def name(self): + if self.alias is None: + return self.repo.name + else: + return self.alias + class Plugin: def __init__( @@ -193,6 +264,7 @@ class Plugin: return copy + class Editor: """The configuration of the update script.""" @@ -241,9 +313,9 @@ class Editor: def create_parser(self): parser = argparse.ArgumentParser( - description=( - f"Updates nix derivations for {self.name} plugins" - f"By default from {self.default_in} to {self.default_out}" + description=(f""" + Updates nix derivations for {self.name} plugins.\n + By default from {self.default_in} to {self.default_out}""" ) ) parser.add_argument( @@ -273,7 +345,7 @@ class Editor: dest="proc", type=int, default=30, - help="Number of concurrent processes to spawn.", + help="Number of concurrent processes to spawn. Export GITHUB_API_TOKEN allows higher values.", ) parser.add_argument( "--no-commit", "-n", action="store_true", default=False, @@ -320,26 +392,24 @@ def prefetch_plugin( p: PluginDesc, cache: "Optional[Cache]" = None, ) -> Tuple[Plugin, Dict[str, str]]: - user, repo_name, branch, alias = p.owner, p.repo, p.branch, p.alias - log.info(f"Fetching last commit for plugin {user}/{repo_name}@{branch}") - repo = Repo(user, repo_name, branch, alias) + repo, branch, alias = p.repo, p.branch, p.alias + name = alias or p.repo.name + commit = None + log.info(f"Fetching last commit for plugin {name} from {repo.uri}@{branch}") commit, date = repo.latest_commit() - has_submodules = repo.has_submodules() cached_plugin = cache[commit] if cache else None if cached_plugin is not None: log.debug("Cache hit !") - cached_plugin.name = alias or repo_name + cached_plugin.name = name cached_plugin.date = date return cached_plugin, repo.redirect - print(f"prefetch {user}/{repo_name}") - if has_submodules: - sha256 = repo.prefetch_git(commit) - else: - sha256 = repo.prefetch_github(commit) + has_submodules = repo.has_submodules() + print(f"prefetch {name}") + sha256 = repo.prefetch(commit) return ( - Plugin(alias or repo_name, commit, has_submodules, sha256, date=date), + Plugin(name, commit, has_submodules, sha256, date=date), repo.redirect, ) @@ -360,16 +430,17 @@ def print_download_error(plugin: str, ex: Exception): def check_results( - results: List[Tuple[str, str, Union[Exception, Plugin], Dict[str, str]]] -) -> Tuple[List[Tuple[str, str, Plugin]], Dict[str, str]]: + results: List[Tuple[PluginDesc, Union[Exception, Plugin], Dict[str, str]]] +) -> Tuple[List[Tuple[PluginDesc, Plugin]], Dict[str, str]]: + ''' ''' failures: List[Tuple[str, Exception]] = [] plugins = [] redirects: Dict[str, str] = {} - for (owner, name, result, redirect) in results: + for (pdesc, result, redirect) in results: if isinstance(result, Exception): - failures.append((name, result)) + failures.append((pdesc.name, result)) else: - plugins.append((owner, name, result)) + plugins.append((pdesc, result)) redirects.update(redirect) print(f"{len(results) - len(failures)} plugins were checked", end="") @@ -384,17 +455,29 @@ def check_results( sys.exit(1) +def make_repo(uri, branch, alias) -> Repo: + '''Instantiate a Repo with the correct specialization depending on server (gitub spec)''' + # dumb check to see if it's of the form owner/repo (=> github) or https://... + res = uri.split('/') + if len(res) <= 2: + repo = RepoGitHub(res[0], res[1], branch, alias) + else: + repo = Repo(uri.strip(), branch, alias) + return repo + def parse_plugin_line(line: str) -> PluginDesc: branch = "HEAD" alias = None - name, repo = line.split("/") - if " as " in repo: - repo, alias = repo.split(" as ") + uri = line + if " as " in uri: + uri, alias = uri.split(" as ") alias = alias.strip() - if "@" in repo: - repo, branch = repo.split("@") + if "@" in uri: + uri, branch = uri.split("@") + + repo = make_repo(uri.strip(), branch.strip(), alias) - return PluginDesc(name.strip(), repo.strip(), branch.strip(), alias) + return PluginDesc(repo, branch.strip(), alias) def load_plugin_spec(plugin_file: str) -> List[PluginDesc]: @@ -404,10 +487,6 @@ def load_plugin_spec(plugin_file: str) -> List[PluginDesc]: if line.startswith("#"): continue plugin = parse_plugin_line(line) - if not plugin.owner: - msg = f"Invalid repository {line}, must be in the format owner/repo[ as alias]" - print(msg, file=sys.stderr) - sys.exit(1) plugins.append(plugin) return plugins @@ -467,14 +546,13 @@ class Cache: def prefetch( pluginDesc: PluginDesc, cache: Cache -) -> Tuple[str, str, Union[Exception, Plugin], dict]: - owner, repo = pluginDesc.owner, pluginDesc.repo +) -> Tuple[PluginDesc, Union[Exception, Plugin], dict]: try: plugin, redirect = prefetch_plugin(pluginDesc, cache) cache[plugin.commit] = plugin - return (owner, repo, plugin, redirect) + return (pluginDesc, plugin, redirect) except Exception as e: - return (owner, repo, e, {}) + return (pluginDesc, e, {}) def rewrite_input( diff --git a/maintainers/team-list.nix b/maintainers/team-list.nix index 0743c80ec4f62..361be88045f18 100644 --- a/maintainers/team-list.nix +++ b/maintainers/team-list.nix @@ -166,6 +166,17 @@ with lib.maintainers; { scope = "Maintain Jitsi."; }; + kubernetes = { + members = [ + johanot + offline + saschagrunert + srhb + zowoq + ]; + scope = "Maintain the Kubernetes package and module"; + }; + kodi = { members = [ aanderse @@ -229,6 +240,7 @@ with lib.maintainers; { php = { members = [ aanderse + drupol etu globin ma27 |