diff --git a/scripts/build_and_push.sh b/scripts/build_and_push.sh index 061f254..39d9bd2 100644 --- a/scripts/build_and_push.sh +++ b/scripts/build_and_push.sh @@ -52,32 +52,48 @@ for name in "${submodules[@]}"; do continue fi - if [ ! -f "${path}/Dockerfile" ]; then + mapfile -t dockerfiles < <(find "${path}" -type f -name Dockerfile | sort) + if [ ${#dockerfiles[@]} -eq 0 ]; then echo "[docker] aucun Dockerfile dans ${path}, ignoré" + echo "skip $(basename \"${path}\")" >> "${SUMMARY_FILE}" continue fi - log_file="${LOG_DIR}/$(basename "${path}").log" - echo "[docker] build ${full_ref} depuis ${path} (branche ${branch}) | log: ${log_file}" - { - echo "== BUILD ${full_ref} ==" - date -Is - docker buildx build \ - --pull \ - --ssh default \ - --progress=plain \ - --tag "${full_ref}" \ - "${path}" - } 2>&1 | tee -a "${log_file}" + for df in "${dockerfiles[@]}"; do + df_dir=$(dirname "${df}") + rel_dir=${df_dir#${path}/} + if [ "${rel_dir}" = "${df_dir}" ]; then rel_dir=""; fi + suffix="" + if [ -n "${rel_dir}" ]; then + suffix="-$(echo "${rel_dir}" | tr '/' '-')" + fi + image_name_variant="${image_name}${suffix}" + full_ref_variant="${REGISTRY}/${NAMESPACE}/${image_name_variant}:${DOCKER_TAG}" - echo "[docker] push ${full_ref} | log: ${log_file}" - { - echo "== PUSH ${full_ref} ==" - date -Is - docker push "${full_ref}" - } 2>&1 | tee -a "${log_file}" + log_file="${LOG_DIR}/${image_name_variant}.log" + echo "[docker] build ${full_ref_variant} depuis ${df_dir} (branche ${branch}) | log: ${log_file}" + { + echo "== BUILD ${full_ref_variant} ==" + echo "context=${df_dir} dockerfile=${df}" + date -Is + docker buildx build \ + --pull \ + --ssh default \ + --progress=plain \ + --file "${df}" \ + --tag "${full_ref_variant}" \ + "${df_dir}" + } 2>&1 | tee -a "${log_file}" - echo "${full_ref} ${log_file}" >> "${SUMMARY_FILE}" + echo "[docker] push ${full_ref_variant} | log: ${log_file}" + { + echo "== PUSH ${full_ref_variant} ==" + date -Is + docker push "${full_ref_variant}" + } 2>&1 | tee -a "${log_file}" + + echo "${full_ref_variant} ${log_file}" >> "${SUMMARY_FILE}" + done done echo "[docker] terminé"