From ecd3b935b2c9ff9a05cb97c9fbc21227a67753e8 Mon Sep 17 00:00:00 2001
From: zowoq <59103226+zowoq@users.noreply.github.com>
Date: Sun, 12 Mar 2023 15:02:37 +1000
Subject: [PATCH] tasks.py: merge update-hound.py script

---
 services/hound/update-hound.py | 69 ----------------------------------
 shell.nix                      |  1 +
 tasks.py                       | 65 +++++++++++++++++++++++++++++++-
 3 files changed, 64 insertions(+), 71 deletions(-)
 delete mode 100755 services/hound/update-hound.py

diff --git a/services/hound/update-hound.py b/services/hound/update-hound.py
deleted file mode 100755
index 6bcb567..0000000
--- a/services/hound/update-hound.py
+++ /dev/null
@@ -1,69 +0,0 @@
-#!/usr/bin/env nix-shell
-#!nix-shell -i python3 -p python3Packages.python -p python3Packages.requests
-
-import json
-import os
-
-import requests
-
-github_token = os.environ.get("GITHUB_TOKEN")
-
-disallowed_repos = [
-    "nix-community/dream2nix-auto-test",
-    "nix-community/image-spec",
-    "nix-community/nix",
-    "nix-community/nixpkgs",
-    "nix-community/nsncd",
-    "nix-community/rkwifibt",
-    "NixOS/nixops-dashboard",  # empty repo causes an error
-]
-
-
-def all_for_org(org):
-
-    resp = {}
-
-    next_url = "https://api.github.com/orgs/{}/repos".format(org)
-    while next_url is not None:
-
-        if github_token is not None:
-            headers = {"Authorization": f"token {github_token}"}
-            repo_resp = requests.get(next_url, headers=headers)
-        else:
-            repo_resp = requests.get(next_url)
-
-        if "next" in repo_resp.links:
-            next_url = repo_resp.links["next"]["url"]
-        else:
-            next_url = None
-
-        repos = repo_resp.json()
-
-        resp.update(
-            {
-                "{}-{}".format(org, repo["name"]): {
-                    "url": repo["clone_url"],
-                }
-                for repo in repos
-                if repo["full_name"] not in disallowed_repos
-                if repo["archived"] is False
-            }
-        )
-
-    return resp
-
-
-repos = {**all_for_org("NixOS"), **all_for_org("nix-community")}
-
-print(
-    json.dumps(
-        {
-            "max-concurrent-indexers": 1,
-            "dbpath": "/var/lib/hound/data",
-            "repos": repos,
-            "vcs-config": {"git": {"detect-ref": True}},
-        },
-        indent=2,
-        sort_keys=True,
-    )
-)
diff --git a/shell.nix b/shell.nix
index 2a41db0..6b0e1af 100644
--- a/shell.nix
+++ b/shell.nix
@@ -12,6 +12,7 @@ mkShellNoCC {
       p: [
         p.deploykit
         p.invoke
+        p.requests
       ]
     ))
     rsync
diff --git a/tasks.py b/tasks.py
index dbea384..568b8ec 100644
--- a/tasks.py
+++ b/tasks.py
@@ -101,8 +101,69 @@ def update_hound_repos(c):
     """
     Update list of repos for hound search
     """
-    os.chdir("services/hound")
-    c.run("./update-hound.py > hound.json")
+
+    def all_for_org(org):
+        import requests
+
+        github_token = os.environ.get("GITHUB_TOKEN")
+
+        disallowed_repos = [
+            "nix-community/dream2nix-auto-test",
+            "nix-community/image-spec",
+            "nix-community/nix",
+            "nix-community/nixpkgs",
+            "nix-community/nsncd",
+            "nix-community/rkwifibt",
+            "NixOS/nixops-dashboard",  # empty repo causes an error
+        ]
+
+        resp = {}
+
+        next_url = "https://api.github.com/orgs/{}/repos".format(org)
+        while next_url is not None:
+
+            if github_token is not None:
+                headers = {"Authorization": f"token {github_token}"}
+                repo_resp = requests.get(next_url, headers=headers)
+            else:
+                repo_resp = requests.get(next_url)
+
+            if "next" in repo_resp.links:
+                next_url = repo_resp.links["next"]["url"]
+            else:
+                next_url = None
+
+            repos = repo_resp.json()
+
+            resp.update(
+                {
+                    "{}-{}".format(org, repo["name"]): {
+                        "url": repo["clone_url"],
+                    }
+                    for repo in repos
+                    if repo["full_name"] not in disallowed_repos
+                    if repo["archived"] is False
+                }
+            )
+
+        return resp
+
+    repos = {**all_for_org("NixOS"), **all_for_org("nix-community")}
+
+    with open("services/hound/hound.json", "w") as f:
+        f.write(
+            json.dumps(
+                {
+                    "max-concurrent-indexers": 1,
+                    "dbpath": "/var/lib/hound/data",
+                    "repos": repos,
+                    "vcs-config": {"git": {"detect-ref": True}},
+                },
+                indent=2,
+                sort_keys=True,
+            )
+        )
+        f.write("\n")
 
 
 @task