|
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