From 744b55450c3236c3f893c188f79522fdf92c6087 Mon Sep 17 00:00:00 2001 From: Alejandro Gomez Date: Thu, 13 Dec 2018 16:49:35 +0100 Subject: [PATCH 1/3] Fix Sass compilation line --- README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index a02ca45..e8947b7 100644 --- a/README.md +++ b/README.md @@ -136,11 +136,11 @@ Congratulations, you just built your organization's open source project site! For compiling the SASS styles into CSS, run the following command at the root of the directory: - sass sass/style.scss:resources/public/style.css + sass sass/style.scss:resources/public/css/style.css If you want sass to be automatically recompiled when modifying .scss files add the `--watch` flag: - sass --watch sass/style.scss:resources/public/style.css + sass --watch sass/style.scss:resources/public/css/style.css ## License From 00050ab0559b0985a6aca3ae9af401f12900b8cd Mon Sep 17 00:00:00 2001 From: Alejandro Gomez Date: Thu, 13 Dec 2018 16:54:58 +0100 Subject: [PATCH 2/3] Count contributors by their ID so they are not counted more than once --- src/org/app.cljs | 2 +- src/org/build.clj | 13 +++-- src/org/client.cljc | 137 ++++++++++++++++++++------------------------ src/org/config.cljc | 7 ++- src/org/core.cljc | 11 +++- src/org/server.clj | 6 +- 6 files changed, 90 insertions(+), 86 deletions(-) diff --git a/src/org/app.cljs b/src/org/app.cljs index 2412ea0..2aad217 100644 --- a/src/org/app.cljs +++ b/src/org/app.cljs @@ -17,7 +17,7 @@ (defn init! [] (let [state (atom (read-state!)) - {:keys [organization token-name extra-repos analytics] :as config} (:config @state)] + {:keys [organization token extra-repos analytics] :as config} (:config @state)] ;; turn on analytics (when analytics (js/ga "create" analytics "auto") diff --git a/src/org/build.clj b/src/org/build.clj index 3b8289b..f46131f 100644 --- a/src/org/build.clj +++ b/src/org/build.clj @@ -109,8 +109,8 @@ (clojure.edn/read-string (slurp (clojure.java.io/resource path)))) (defn fetch-data! - [{:keys [organization token-name extra-repos]}] - @(c/fetch-org-and-extra-repos! organization {:token-name token-name + [{:keys [organization token extra-repos]}] + @(c/fetch-org-and-extra-repos! organization {:token token :extra-repos extra-repos})) (defn make-dirs! @@ -144,9 +144,14 @@ (defn -main [& args] - (let [config (read-config! "config.edn")] + (let [config (read-config! "config.edn") + token (get (System/getenv) (str (:token-name config))) + cfg-with-token (assoc config :token token)] (when-not (s/valid? :org/config config) (println "Invalid configuration: " (s/explain-str :org/config config)) (System/exit 1)) - (generate-site! config))) + (when-not (s/valid? :org/token token) + (println "Invalid token, you may have missed setting the environment variable " (str \` (:token-name config) \`)) + (System/exit 1)) + (generate-site! cfg-with-token))) diff --git a/src/org/client.cljc b/src/org/client.cljc index fe1c1d3..2a443c0 100644 --- a/src/org/client.cljc +++ b/src/org/client.cljc @@ -111,42 +111,33 @@ result)) (p/rejected (ex-info "Unsuccessful request" {:response resp}))))))) -(defn get-token - [token-name] - (let [token (get (System/getenv) (str token-name))] - token)) - -(def get-token-memo (memoize get-token)) - (defn get-repo! - [user repo token-name] - (let [token (get-token-memo token-name)] - (let [req {:method :get - :url (repo-url user repo) - :headers (headers token)} - prom (http/send! client req)] - (p/then prom - (fn [resp] - (if (status/success? resp) - (parse-repo-response resp) - (p/rejected (ex-info "Unsuccessful request" {:response resp})))))))) + [user repo token] + (let [req {:method :get + :url (repo-url user repo) + :headers (headers token)} + prom (http/send! client req)] + (p/then prom + (fn [resp] + (if (status/success? resp) + (parse-repo-response resp) + (p/rejected (ex-info "Unsuccessful request" {:response resp}))))))) (defn get-org-repos! - [org token-name] - (let [token (get-token-memo token-name)] - (let [req {:method :get - :url (org-repos-url org) - :query-string "type=public&per_page=100" - :headers (headers token)} - prom (http/send! client req)] - (p/then prom - (fn [resp] - (if (status/success? resp) - (let [result (parse-repos-response resp)] - (if (has-next? resp) - (get-org-repos-next! token result resp) - result)) - (p/rejected (ex-info "Unsuccessful request" {:response resp})))))))) + [org token] + (let [req {:method :get + :url (org-repos-url org) + :query-string "type=public&per_page=100" + :headers (headers token)} + prom (http/send! client req)] + (p/then prom + (fn [resp] + (if (status/success? resp) + (let [result (parse-repos-response resp)] + (if (has-next? resp) + (get-org-repos-next! token result resp) + result)) + (p/rejected (ex-info "Unsuccessful request" {:response resp}))))))) (defn parse-languages-response [resp] @@ -157,26 +148,25 @@ (set (keys $)))) (defn get-repo-languages! - [repo token-name] - (let [token (get-token-memo token-name)] - (let [req {:method :get - :url (get repo :languages-url) - :query-string "type=public" - :headers (headers token)} - prom (http/send! client req)] - (p/then prom - (fn [resp] - (if (status/success? resp) - (parse-languages-response resp) - (p/rejected (ex-info "Unsuccessful request" {:response resp})))))))) + [repo token] + (let [req {:method :get + :url (get repo :languages-url) + :query-string "type=public" + :headers (headers token)} + prom (http/send! client req)] + (p/then prom + (fn [resp] + (if (status/success? resp) + (parse-languages-response resp) + (p/rejected (ex-info "Unsuccessful request" {:response resp}))))))) (defn parse-contributors-response [resp] (as-> (:body resp) $ #?(:clj (slurp $)) - (j/json->clj $ {:keywordize? false :default []}) - (count $))) + (j/json->clj $ {:keywordize? true :default []}) + (map :id $))) (defn get-repo-contributors-next! [token contribs links] @@ -186,7 +176,7 @@ prom (http/send! client req)] (p/mapcat (fn [resp] (if (status/success? resp) - (let [result (+ contribs (parse-contributors-response resp))] + (let [result (into contribs (parse-contributors-response resp))] (if (has-next? resp) (get-repo-contributors-next! token result (parse-links resp)) (p/resolved result))) @@ -194,21 +184,20 @@ prom))) (defn get-repo-contributors! - [repo token-name] - (let [token (get-token-memo token-name)] - (let [req {:method :get - :url (get repo :contributors-url) - :query-string "type=public&per_page=100" - :headers (headers token)} - prom (http/send! client req)] - (p/mapcat (fn [resp] - (if (status/success? resp) - (let [result (parse-contributors-response resp)] - (if (has-next? resp) - (get-repo-contributors-next! token result (parse-links resp)) - (p/resolved result))) - (p/rejected (ex-info "Unsuccessful request" {:response resp})))) - prom)))) + [repo token] + (let [req {:method :get + :url (get repo :contributors-url) + :query-string "type=public&per_page=100" + :headers (headers token)} + prom (http/send! client req)] + (p/mapcat (fn [resp] + (if (status/success? resp) + (let [result (parse-contributors-response resp)] + (if (has-next? resp) + (get-repo-contributors-next! token result (parse-links resp)) + (p/resolved result))) + (p/rejected (ex-info "Unsuccessful request" {:response resp})))) + prom))) ;; Data sources @@ -216,29 +205,29 @@ u/DataSource (-identity [_] [:repo [user repo]]) - (-fetch [_ {:keys [token-name]}] - (get-repo! user repo token-name))) + (-fetch [_ {:keys [token]}] + (get-repo! user repo token))) (deftype Repos [org] u/DataSource (-identity [_] [:repos org]) - (-fetch [_ {:keys [token-name]}] - (get-org-repos! org token-name))) + (-fetch [_ {:keys [token]}] + (get-org-repos! org token))) (deftype Languages [repo] u/DataSource (-identity [_] [:languages (:name repo)]) - (-fetch [_ {:keys [token-name]}] - (get-repo-languages! repo token-name))) + (-fetch [_ {:keys [token]}] + (get-repo-languages! repo token))) (deftype Contributors [repo] u/DataSource (-identity [_] [:contributors (:name repo)]) - (-fetch [_ {:keys [token-name]}] - (get-repo-contributors! repo token-name))) + (-fetch [_ {:keys [token]}] + (get-repo-contributors! repo token))) (defn- fetch-languages [repo] @@ -272,12 +261,12 @@ repos)))) (defn fetch-org-and-extra-repos - [org {:keys [token-name extra-repos]}] + [org {:keys [token extra-repos]}] (u/collect [(fetch-org-repos org) (fetch-repos extra-repos)])) (defn fetch-org-and-extra-repos! - [org {:keys [token-name] :as config}] - (p/then (u/run! (fetch-org-and-extra-repos org config) {:env {:token-name token-name}}) + [org {:keys [token] :as config}] + (p/then (u/run! (fetch-org-and-extra-repos org config) {:env {:token token}}) (fn [[org-repos extra-repos]] (concat org-repos extra-repos)))) diff --git a/src/org/config.cljc b/src/org/config.cljc index 0ef41d9..85ee567 100644 --- a/src/org/config.cljc +++ b/src/org/config.cljc @@ -1,8 +1,10 @@ (ns org.config #?(:clj - (:require [clojure.spec :as s]) + (:require [cuerdas.core :as str] + [clojure.spec :as s]) :cljs - (:require [cljs.spec :as s]))) + (:require [cuerdas.core :as str] + [cljs.spec :as s]))) ;; Organization @@ -48,6 +50,7 @@ ;; Tokens (s/def :org/token-name string?) +(s/def :org/token (s/and string? (complement str/blank?))) (s/def :org/analytics string?) ;; Style diff --git a/src/org/core.cljc b/src/org/core.cljc index 901d760..b188991 100644 --- a/src/org/core.cljc +++ b/src/org/core.cljc @@ -34,6 +34,11 @@ (let [langs (into [] (all-languages repos))] (reverse (sort-by #(count (filter-by-language % repos)) langs)))) +(defn sum-contributors + [repos] + (count + (into #{} (mapcat :contributors) repos))) + (rum/defc link-list [links] [:ul @@ -70,10 +75,10 @@ [:div.github-stats [:ul [:li.contributors - [:span (sum-by :contributors repos)] + [:span (sum-contributors repos)] [:span [:span.octicon.octicon-person] "contributors"]] [:li.stars - [:span (sum-by :stars repos)] + [:span (transduce (map :stars) + repos)] [:span [:span.octicon.octicon-star] "stars"]] [:li.repositories [:span (count repos)] @@ -203,7 +208,7 @@ [:li {:key "contributors"} [:span.octicon.octicon-person] - [:span contributors]]]])) + [:span (count contributors)]]]])) (rum/defc search < rum/reactive [state] diff --git a/src/org/server.clj b/src/org/server.clj index 3ce8c6c..8647248 100644 --- a/src/org/server.clj +++ b/src/org/server.clj @@ -8,7 +8,9 @@ (when (or (= uri "/") (= uri "/index.html")) (let [config (b/read-config! "config.edn") - repos (b/fetch-data! config)] + token (get (System/getenv) (str (:token-name config))) + cfg (assoc config :token token) + repos (b/fetch-data! cfg)] {:status 200 :headers {"content-type" "text/html"} - :body (b/render-index-page repos config)}))) + :body (b/render-index-page repos cfg)}))) From c2daa02c408c4c2669006b2cf1cabe905ea6d070 Mon Sep 17 00:00:00 2001 From: Alejandro Gomez Date: Thu, 13 Dec 2018 17:20:48 +0100 Subject: [PATCH 3/3] Simplify deploy script by not using git-subtree --- scripts/deploy.sh | 8 +------- 1 file changed, 1 insertion(+), 7 deletions(-) diff --git a/scripts/deploy.sh b/scripts/deploy.sh index ccd83f9..65a674a 100755 --- a/scripts/deploy.sh +++ b/scripts/deploy.sh @@ -5,15 +5,9 @@ git config --global user.name $USER_NAME git config --global user.email $USER_EMAIL -# Pull latest version of published subtree -git checkout master -git subtree pull --prefix=docs --message="[skip ci] Update subtree" https://47deg:$GITHUB_API_KEY@github.com/47deg/47deg.github.io.git master - # Build & Commit built site +git checkout master lein run git add docs git commit -m "[skip ci] Generate site" git push https://47deg:$GITHUB_API_KEY@github.com/47deg/org master - -# Push built subtree to official website -git subtree push --prefix=docs https://47deg:$GITHUB_API_KEY@github.com/47deg/47deg.github.io.git master