|
7 | 7 | [clojars.maven :as maven] |
8 | 8 | [clojars.s3 :as s3] |
9 | 9 | [clojars.util :as util] |
10 | | - [clojure.data.xml :as xml] |
11 | 10 | [clojure.java.io :as io] |
12 | 11 | [clojure.set :as set]) |
13 | 12 | (:import |
|
30 | 29 | :scm-tag (:tag scm))) |
31 | 30 | distinct-jars)})) |
32 | 31 |
|
33 | | -(defn- all-grouped-jars [db] |
34 | | - (->> (db/all-jars db) |
35 | | - (maven/sort-by-version) |
36 | | - (reverse) ;; We want the most recent version first |
37 | | - (group-by (juxt :group_name :jar_name)))) |
38 | | - |
39 | 32 | (defn full-feed [db] |
40 | | - (let [grouped-jars (all-grouped-jars db)] |
| 33 | + (let [grouped-jars (->> (db/all-jars db) |
| 34 | + (maven/sort-by-version) |
| 35 | + (reverse) ;; We want the most recent version first |
| 36 | + (group-by (juxt :group_name :jar_name)))] |
41 | 37 | (->> (for [[[group-id artifact-id] jars] grouped-jars] |
42 | 38 | (try |
43 | 39 | (let [base-jar (first jars)] |
|
88 | 84 | [(fu/create-checksum-file f :md5) |
89 | 85 | (fu/create-checksum-file f :sha1)]) |
90 | 86 |
|
91 | | -(def sitemap-ns "http://www.sitemaps.org/schemas/sitemap/0.9") |
92 | | -(xml/alias-uri 'sitemap sitemap-ns) |
93 | | - |
94 | | -(defn links-list [base-url db] |
95 | | - (let [ ;; get current domain |
96 | | - |
97 | | - base-links [ ;; index, projects, security, dmca |
98 | | - "" |
99 | | - "/projects" |
100 | | - "/security" |
101 | | - "/dmca"] |
102 | | - group-links (into [] |
103 | | - (comp |
104 | | - (map :group_name) |
105 | | - (map #(str "/groups/" %))) |
106 | | - (db/all-groups db)) |
107 | | - |
108 | | - artifact-links (into [] |
109 | | - (mapcat |
110 | | - (fn [[[group-id artifact-id] jars]] |
111 | | - (let [artifact-links |
112 | | - (concat |
113 | | - [(str "/" artifact-id) |
114 | | - (str "/" artifact-id "/dependents") |
115 | | - (str "/" artifact-id "/versions")] |
116 | | - (into [] |
117 | | - (map |
118 | | - #(str "/" artifact-id "/versions/" (:version %))) |
119 | | - jars))] |
120 | | - (if (= group-id artifact-id) |
121 | | - artifact-links |
122 | | - (map #(str "/" group-id %) artifact-links))))) |
123 | | - (all-grouped-jars db)) |
124 | | - |
125 | | - user-links (into [] |
126 | | - (map :user) |
127 | | - (db/all-users db)) |
128 | | - |
129 | | - all-links (concat base-links |
130 | | - group-links |
131 | | - artifact-links |
132 | | - user-links)] |
133 | | - (map #(str base-url %) all-links))) |
134 | | - |
135 | | -(defn write-sitemap |
136 | | - "returns sitemap filename" |
137 | | - [dest index links] |
138 | | - (let [sitemap-file (str dest "/sitemap-" index ".xml") |
139 | | - sitemap-file-gz (str sitemap-file ".gz") |
140 | | - sitemap [::sitemap/urlset {:xmlns sitemap-ns} |
141 | | - (for [link links] |
142 | | - [::sitemap/url |
143 | | - [::sitemap/loc link]])] |
144 | | - data [(xml/sexp-as-element sitemap)]] |
145 | | - [(write-to-file data |
146 | | - sitemap-file |
147 | | - nil |
148 | | - #(xml/emit % *out*)) |
149 | | - (write-to-file data |
150 | | - sitemap-file-gz |
151 | | - :gzip |
152 | | - #(xml/emit % *out*))])) |
153 | | - |
154 | | -(defn write-sitemap-index |
155 | | - "returns sitemap index filename" |
156 | | - [base-url dest sitemap-files] |
157 | | - (let [sitemap-index-file (str dest "/sitemap.xml") |
158 | | - sitemap-index-file-gz (str sitemap-index-file ".gz") |
159 | | - sitemap-index [::sitemap/sitemapindex {:xmlns sitemap-ns} |
160 | | - (for [[sitemap-file _] sitemap-files] |
161 | | - [::sitemap/sitemap |
162 | | - [::sitemap/loc (str base-url "/" sitemap-file)]])] |
163 | | - data [(xml/sexp-as-element sitemap-index)]] |
164 | | - [(write-to-file data |
165 | | - sitemap-index-file |
166 | | - nil |
167 | | - #(xml/emit % *out*)) |
168 | | - (write-to-file data |
169 | | - sitemap-index-file-gz |
170 | | - :gzip |
171 | | - #(xml/emit % *out*))])) |
172 | | - |
173 | | -(defn generate-sitemaps |
174 | | - "base-url - without the trailing slash" |
175 | | - [base-url dest db] |
176 | | - (let [sitemap-files (->> (links-list base-url db) |
177 | | - (partition-all 50000) |
178 | | - (map-indexed #(write-sitemap dest %1 %2)) |
179 | | - ((juxt #(write-sitemap-index base-url dest %) identity)) |
180 | | - (apply concat) |
181 | | - (apply list*)) |
182 | | - checksum-files (mapcat write-sums sitemap-files)] |
183 | | - (concat sitemap-files checksum-files))) |
184 | | - |
185 | 87 | (defn put-files [s3-bucket & files] |
186 | 88 | (run! #(let [f (io/file %)] |
187 | 89 | (s3/put-file s3-bucket (.getName f) f {:ACL "public-read"})) |
188 | 90 | files)) |
189 | 91 |
|
190 | | -(defn generate-feeds [dest base-url db s3-bucket] |
| 92 | +(defn generate-feeds [dest db s3-bucket] |
191 | 93 | (let [feed-file (str dest "/feed.clj.gz")] |
192 | 94 | (apply put-files |
193 | 95 | s3-bucket |
|
214 | 116 | (write-to-file jars gz-file :gzip) |
215 | 117 | (concat |
216 | 118 | (write-sums jar-file) |
217 | | - (write-sums gz-file)))) |
218 | | - |
219 | | - (apply put-files |
220 | | - s3-bucket |
221 | | - (generate-sitemaps base-url dest db))) |
| 119 | + (write-sums gz-file))))) |
222 | 120 |
|
223 | 121 | (defn -main [feed-dir env] |
224 | | - (let [{:keys [db s3 base-url]} (config (keyword env))] |
| 122 | + (let [{:keys [db s3]} (config (keyword env))] |
225 | 123 | (generate-feeds feed-dir |
226 | | - base-url |
227 | 124 | db |
228 | 125 | (s3/s3-client (:repo-bucket s3))))) |
0 commit comments