|
56 | 56 | m)) |
57 | 57 |
|
58 | 58 | (defn variant-map [[base-image jdk-version distro |
59 | | - [build-tool build-tool-version]]] |
| 59 | + [build-tool build-tool-info]]] |
60 | 60 | (let [variant-arch (get cfg/distro-architectures |
61 | 61 | (-> distro namespace keyword)) |
62 | 62 | base {:jdk-version jdk-version |
|
65 | 65 | jdk-version distro) |
66 | 66 | :distro distro |
67 | 67 | :build-tool build-tool |
68 | | - :build-tool-version build-tool-version |
| 68 | + :build-tool-version (:version build-tool-info) |
69 | 69 | :maintainer (str/join " & " cfg/maintainers)}] |
70 | | - (-> base |
71 | | - (assoc :docker-tag (default-docker-tag base)) |
72 | | - (assoc-if #(nil? (:build-tool-version base)) :build-tool-versions |
73 | | - cfg/build-tools) |
74 | | - (assoc-if #(seq variant-arch) :architectures variant-arch)))) |
| 70 | + (cond-> base |
| 71 | + true (assoc :docker-tag (default-docker-tag base)) |
| 72 | + variant-arch (assoc :architectures variant-arch)))) |
75 | 73 |
|
76 | 74 | (defn pull-image [image] |
77 | 75 | (sh "docker" "pull" image)) |
78 | 76 |
|
79 | | -(defn generate-dockerfile! [installer-hashes variant] |
| 77 | +(defn generate-dockerfile! [variant] |
80 | 78 | (let [build-dir (df/build-dir variant) |
81 | 79 | filename "Dockerfile"] |
82 | 80 | (log "Generating" (str build-dir "/" filename)) |
83 | | - (df/write-file build-dir filename installer-hashes variant) |
| 81 | + (df/write-file build-dir filename variant) |
84 | 82 | (assoc variant |
85 | | - :build-dir build-dir |
86 | | - :dockerfile filename))) |
| 83 | + :build-dir build-dir |
| 84 | + :dockerfile filename))) |
87 | 85 |
|
88 | | -(defn build-image |
89 | | - [installer-hashes {:keys [docker-tag base-image architectures] :as variant}] |
| 86 | +(defn build-image [{:keys [docker-tag base-image architectures] :as variant}] |
90 | 87 | (let [image-tag (str "clojure:" docker-tag) |
91 | 88 | _ (log "Pulling base image" base-image) |
92 | 89 | _ (pull-image base-image) |
93 | 90 |
|
94 | 91 | {:keys [dockerfile build-dir]} |
95 | | - (generate-dockerfile! installer-hashes variant) |
| 92 | + (generate-dockerfile! variant) |
96 | 93 |
|
97 | 94 | host-arch (let [jvm-arch (System/getProperty "os.arch")] |
98 | 95 | (if (= "aarch64" jvm-arch) |
|
126 | 123 |
|
127 | 124 | (defn image-variant-combinations |
128 | 125 | [base-images jdk-versions distros build-tools] |
129 | | - (reduce |
130 | | - (fn [variants jdk-version] |
131 | | - (concat |
132 | | - variants |
133 | | - (let [jdk-base-images (get-or-default base-images jdk-version)] |
134 | | - (loop [[bi & r] jdk-base-images |
135 | | - acc #{}] |
136 | | - (let [vs (combo/cartesian-product #{bi} |
137 | | - #{jdk-version} |
138 | | - (get-or-default distros bi) |
139 | | - build-tools) |
140 | | - acc' (concat acc vs)] |
141 | | - (if (seq r) |
142 | | - (recur r acc') |
143 | | - acc')))))) |
144 | | - #{} jdk-versions)) |
| 126 | + (mapcat |
| 127 | + (fn [jdk-version] |
| 128 | + (let [jdk-base-images (get-or-default base-images jdk-version)] |
| 129 | + (mapcat #(combo/cartesian-product #{%} |
| 130 | + #{jdk-version} |
| 131 | + (get-or-default distros %) |
| 132 | + build-tools) |
| 133 | + jdk-base-images))) |
| 134 | + jdk-versions)) |
145 | 135 |
|
146 | 136 | (defn image-variants |
147 | 137 | [base-images jdk-versions distros build-tools] |
148 | | - (into #{} |
| 138 | + (into [] |
149 | 139 | (comp |
150 | 140 | (map variant-map) |
151 | 141 | (remove #(= ::s/invalid (s/conform ::variant %)))) |
152 | | - (conj |
153 | | - (image-variant-combinations base-images jdk-versions distros |
154 | | - build-tools) |
155 | | - latest-variant))) |
| 142 | + (image-variant-combinations base-images jdk-versions distros |
| 143 | + build-tools))) |
156 | 144 |
|
157 | 145 | (defn rand-delay |
158 | 146 | "Runs argument f w/ any supplied args after a random delay of 100-1000 ms" |
|
162 | 150 | (apply f args))) |
163 | 151 |
|
164 | 152 | (defn build-images |
165 | | - [parallelization installer-hashes variants] |
| 153 | + [parallelization variants] |
166 | 154 | (log "Building images" parallelization "at a time") |
167 | 155 | (let [variants-ch (to-chan! variants) |
168 | 156 | builds-ch (chan parallelization)] |
169 | 157 | ;; Kick off builds with a random delay so we don't have Docker race |
170 | 158 | ;; conditions (e.g. build container name collisions) |
171 | 159 | (async/thread (pipeline-blocking parallelization builds-ch |
172 | | - (map (partial rand-delay build-image |
173 | | - installer-hashes)) |
| 160 | + (map (partial rand-delay build-image)) |
174 | 161 | variants-ch)) |
175 | 162 | (while (<!! builds-ch)))) |
176 | 163 |
|
177 | | -(defn generate-dockerfiles! [installer-hashes variants] |
| 164 | +(defn generate-dockerfiles! [variants] |
178 | 165 | (log "Generated" (count variants) "variants") |
179 | 166 | (doseq [variant variants] |
180 | | - (generate-dockerfile! installer-hashes variant))) |
| 167 | + (generate-dockerfile! variant))) |
181 | 168 |
|
182 | 169 | (defn valid-variants [] |
183 | 170 | (remove (partial exclude? cfg/exclusions) |
184 | 171 | (image-variants cfg/base-images cfg/jdk-versions cfg/distros |
185 | | - cfg/build-tools))) |
| 172 | + cfg/*build-tools*))) |
186 | 173 |
|
187 | 174 | (defn generate-manifest! [variants args] |
188 | 175 | (let [git-head (->> ["git" "rev-parse" "HEAD"] (apply sh) :out) |
|
238 | 225 | (let [variants (generate-variants args)] |
239 | 226 | (case cmd |
240 | 227 | :clean (df/clean-all) |
241 | | - :dockerfiles (generate-dockerfiles! cfg/installer-hashes variants) |
| 228 | + :dockerfiles (generate-dockerfiles! variants) |
242 | 229 | :manifest (-> variants sort-variants (generate-manifest! args)) |
243 | | - :build-images (build-images parallelization cfg/installer-hashes variants))) |
| 230 | + :build-images (build-images parallelization variants))) |
244 | 231 | (logger/stop)) |
245 | 232 |
|
246 | 233 | (defn -main |
|
0 commit comments