|
| 1 | +#!/bin/bash |
| 2 | +set -euo pipefail |
| 3 | + |
| 4 | +SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)" |
| 5 | +VERSION=$(head -1 < "${SCRIPT_DIR}/../VERSION") |
| 6 | +REGISTRY="${REGISTRY:-harbor.volte.io/cnaas}" |
| 7 | +IMAGE="opensips" |
| 8 | +BUILDER_TAG="${REGISTRY}/${IMAGE}:builder" |
| 9 | + |
| 10 | +VARIANTS=(pcscf icscf scscf sbc ipsecgw) |
| 11 | + |
| 12 | +usage() { |
| 13 | + echo "Usage: $(basename "$0") [--no-push] [--builder-only] [VARIANT ...]" |
| 14 | + echo "" |
| 15 | + echo "Builds tiny (FROM scratch) OpenSIPS images for the specified chart variants." |
| 16 | + echo "If no VARIANT is given, all variants are built: ${VARIANTS[*]}" |
| 17 | + echo "" |
| 18 | + echo "Options:" |
| 19 | + echo " --no-push Build images but do not push to the registry" |
| 20 | + echo " --builder-only Only build the builder image (deb packages), skip tiny images" |
| 21 | + echo "" |
| 22 | + echo "Environment:" |
| 23 | + echo " REGISTRY Override the container registry (default: harbor.volte.io/cnaas)" |
| 24 | + echo "" |
| 25 | + echo "Examples:" |
| 26 | + echo " ./build # build + push all variants" |
| 27 | + echo " ./build pcscf sbc # build + push only P-CSCF and SBC" |
| 28 | + echo " ./build --no-push scscf # build S-CSCF without pushing" |
| 29 | + exit 1 |
| 30 | +} |
| 31 | + |
| 32 | +PUSH=1 |
| 33 | +BUILDER_ONLY=0 |
| 34 | +SELECTED=() |
| 35 | + |
| 36 | +while [[ $# -gt 0 ]]; do |
| 37 | + case "$1" in |
| 38 | + --no-push) PUSH=0; shift ;; |
| 39 | + --builder-only) BUILDER_ONLY=1; shift ;; |
| 40 | + --help|-h) usage ;; |
| 41 | + -*) echo "Unknown option: $1"; usage ;; |
| 42 | + *) SELECTED+=("$1"); shift ;; |
| 43 | + esac |
| 44 | +done |
| 45 | + |
| 46 | +if [[ ${#SELECTED[@]} -eq 0 ]]; then |
| 47 | + SELECTED=("${VARIANTS[@]}") |
| 48 | +fi |
| 49 | + |
| 50 | +for v in "${SELECTED[@]}"; do |
| 51 | + if [[ ! -f "${SCRIPT_DIR}/modules/modules.lst.${v}" ]]; then |
| 52 | + echo "Error: unknown variant '${v}' (no modules/modules.lst.${v} found)" |
| 53 | + exit 1 |
| 54 | + fi |
| 55 | +done |
| 56 | + |
| 57 | +echo "==> Building OpenSIPS builder image (deb packages)" |
| 58 | +docker build \ |
| 59 | + --target builder \ |
| 60 | + -t "${BUILDER_TAG}" \ |
| 61 | + -f "${SCRIPT_DIR}/../Dockerfile" \ |
| 62 | + "${SCRIPT_DIR}/.." |
| 63 | + |
| 64 | +if [[ ${BUILDER_ONLY} -eq 1 ]]; then |
| 65 | + echo "==> Builder image ready: ${BUILDER_TAG}" |
| 66 | + exit 0 |
| 67 | +fi |
| 68 | + |
| 69 | +for variant in "${SELECTED[@]}"; do |
| 70 | + TAG="${VERSION}-${variant}" |
| 71 | + FULL="${REGISTRY}/${IMAGE}:${TAG}" |
| 72 | + LATEST="${REGISTRY}/${IMAGE}:latest-${variant}" |
| 73 | + |
| 74 | + echo "" |
| 75 | + echo "==> Building tiny image: ${variant} (${FULL})" |
| 76 | + docker build \ |
| 77 | + --build-arg "BUILDER_IMAGE=${BUILDER_TAG}" \ |
| 78 | + --build-arg "MODULES_LIST=modules.lst.${variant}" \ |
| 79 | + -t "${FULL}" \ |
| 80 | + -f "${SCRIPT_DIR}/Dockerfile" \ |
| 81 | + "${SCRIPT_DIR}" |
| 82 | + |
| 83 | + docker tag "${FULL}" "${LATEST}" |
| 84 | + |
| 85 | + if [[ ${PUSH} -eq 1 ]]; then |
| 86 | + echo " Pushing ${FULL}" |
| 87 | + docker push "${FULL}" |
| 88 | + echo " Pushing ${LATEST}" |
| 89 | + docker push "${LATEST}" |
| 90 | + fi |
| 91 | +done |
| 92 | + |
| 93 | +echo "" |
| 94 | +echo "==> Done. Built variants: ${SELECTED[*]}" |
0 commit comments