Skip to content

Commit

Permalink
Merge pull request #73 from 47deg/fix-everything
Browse files Browse the repository at this point in the history
Fix contributor counting and automatic deployment
  • Loading branch information
purrgrammer authored Dec 13, 2018
2 parents 6249bfc + f0abed9 commit 12ea6ca
Show file tree
Hide file tree
Showing 8 changed files with 93 additions and 95 deletions.
4 changes: 2 additions & 2 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -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

Expand Down
8 changes: 1 addition & 7 deletions scripts/deploy.sh
Original file line number Diff line number Diff line change
Expand Up @@ -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
2 changes: 1 addition & 1 deletion src/org/app.cljs
Original file line number Diff line number Diff line change
Expand Up @@ -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")
Expand Down
13 changes: 9 additions & 4 deletions src/org/build.clj
Original file line number Diff line number Diff line change
Expand Up @@ -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!
Expand Down Expand Up @@ -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)))

137 changes: 63 additions & 74 deletions src/org/client.cljc
Original file line number Diff line number Diff line change
Expand Up @@ -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]
Expand All @@ -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]
Expand All @@ -186,59 +176,58 @@
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)))
(p/rejected (ex-info "Unsuccessful request" {:response resp}))))
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

(deftype Repo [user repo]
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]
Expand Down Expand Up @@ -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))))
7 changes: 5 additions & 2 deletions src/org/config.cljc
Original file line number Diff line number Diff line change
@@ -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

Expand Down Expand Up @@ -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
Expand Down
11 changes: 8 additions & 3 deletions src/org/core.cljc
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down Expand Up @@ -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)]
Expand Down Expand Up @@ -203,7 +208,7 @@
[:li
{:key "contributors"}
[:span.octicon.octicon-person]
[:span contributors]]]]))
[:span (count contributors)]]]]))

(rum/defc search < rum/reactive
[state]
Expand Down
6 changes: 4 additions & 2 deletions src/org/server.clj
Original file line number Diff line number Diff line change
Expand Up @@ -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)})))

0 comments on commit 12ea6ca

Please sign in to comment.