From 39d70171fc43f77bb93d1c496961b06146f5c7a7 Mon Sep 17 00:00:00 2001 From: Juho Teperi Date: Mon, 2 May 2022 13:56:16 +0300 Subject: [PATCH 1/2] Add quick github stats import --- .gitignore | 2 ++ deps.edn | 2 ++ src/metosin/repos.clj | 53 +++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 57 insertions(+) create mode 100644 .gitignore create mode 100644 deps.edn create mode 100644 src/metosin/repos.clj diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..20671ec --- /dev/null +++ b/.gitignore @@ -0,0 +1,2 @@ +repos.edn +.nrepl-port diff --git a/deps.edn b/deps.edn new file mode 100644 index 0000000..0750e80 --- /dev/null +++ b/deps.edn @@ -0,0 +1,2 @@ +{:deps {metosin/jsonista {:mvn/version "0.3.5"}} + :aliases {:csv-export {:main-opts ["-m" "metosin.repos"]}}} diff --git a/src/metosin/repos.clj b/src/metosin/repos.clj new file mode 100644 index 0000000..b474612 --- /dev/null +++ b/src/metosin/repos.clj @@ -0,0 +1,53 @@ +(ns metosin.repos + (:require [jsonista.core :as json] + [clojure.java.io :as io] + [clojure.edn :as edn] + [clojure.pprint :refer [pprint]] + [clojure.string :as str])) + +(defn repos + ([] + (repos "https://api.github.com/orgs/Metosin/repos?type=public")) + ([url] + (let [u (java.net.URL. url) + c (.openConnection u) + links (-> (.getHeaderField c "Link") + (str/split #",") + (->> (map (fn [x] + (let [[_ url rel] (re-matches #"<(.*)>; rel=\"(.*)\"" (str/trim x))] + [rel url]))) + (into {}))) + data (with-open [is (.getInputStream c)] + (json/read-value is json/keyword-keys-object-mapper))] + (if-let [x (get links "next")] + (into data (repos x)) + data)))) + +(defn update-github-data [] + (let [data (repos)] + (spit (io/file "repos.edn") (with-out-str (pprint data))))) + +(def all-repos (edn/read-string (slurp (io/file "repos.edn")))) + +(comment + (update-github-data) + (first all-repos)) + +(def topic->stage + {"metosin-experimental" :experimental + "metosin-active-development" :active-development + "metosin-stable" :stable + "metosin-deprecated" :deprecated}) + +(defn csv-export [] + (doseq [{:keys [topics archived open_issues_count] :as repo} all-repos] + (let [stages (keep topic->stage topics)] + (println (str (:name repo) "," + archived "," + (if (seq stages) + (str/join " " (map name stages)) + "unknown") "," + open_issues_count))))) + +(defn -main [& _] + (csv-export)) From 17c98fa8bc1520c980428ea7eb1f9e528508d29c Mon Sep 17 00:00:00 2001 From: Juho Teperi Date: Mon, 2 May 2022 15:50:27 +0300 Subject: [PATCH 2/2] Categorize projects --- src/metosin/repos.clj | 37 +++++++++++++++++++++++++------------ 1 file changed, 25 insertions(+), 12 deletions(-) diff --git a/src/metosin/repos.clj b/src/metosin/repos.clj index b474612..bc03c32 100644 --- a/src/metosin/repos.clj +++ b/src/metosin/repos.clj @@ -34,20 +34,33 @@ (first all-repos)) (def topic->stage - {"metosin-experimental" :experimental - "metosin-active-development" :active-development - "metosin-stable" :stable - "metosin-deprecated" :deprecated}) + {"metosin-experimental" "experimental" + "metosin-active-development" "active-development" + "metosin-stable" "stable" + "metosin-deprecated" "deprecated" + "metosin-example" "example" + "training-materials" "training" + "example-project" "example"}) + +(defn process-data [repos] + (->> repos + (remove :archived) + (remove :fork) + (map (fn [repo] + (let [stages (set (keep topic->stage (:topics repo)))] + (assoc repo :category (or (first stages) "unknown"))))) + (sort-by (juxt :category :pushed_at)))) (defn csv-export [] - (doseq [{:keys [topics archived open_issues_count] :as repo} all-repos] - (let [stages (keep topic->stage topics)] - (println (str (:name repo) "," - archived "," - (if (seq stages) - (str/join " " (map name stages)) - "unknown") "," - open_issues_count))))) + (println "Name,Archived,Category,Open issues,Stars,Forks,Last push") + (doseq [{:keys [archived stargazers_count forks open_issues_count category pushed_at] :as repo} (process-data all-repos)] + (println (str (:name repo) "," + archived "," + category "," + open_issues_count "," + stargazers_count "," + forks "," + pushed_at)))) (defn -main [& _] (csv-export))