diff --git a/build/build_release.sh b/build/build_release.sh index ef2a131..aeed80b 100755 --- a/build/build_release.sh +++ b/build/build_release.sh @@ -7,6 +7,7 @@ git_repo_arr[cvttpy]=git@cloud21.cvtt.vpn:/opt/store/git/cvttpy.git git_repo_arr[ops]=git@cloud21.cvtt.vpn:/opt/store/git/ops.git git_repo_arr[research]=git@cloud21.cvtt.vpn:/opt/store/git/research.git git_repo_arr[cvtt-rust]=git@cloud21.cvtt.vpn:/opt/store/git/cvtt2/cvtt-rust.git +git_repo_arr[docker_dev]=git@cloud21.cvtt.vpn:/opt/store/git/docker_dev.git dist_root=/home/cvttdist/software/cvtt2 dist_user=cvttdist @@ -171,17 +172,19 @@ if [ "${project}" == "cvtt-rust" ]; then cmd_arr+=("cd ${prj_dir}") - cmd_arr+=("mkdir -p ${prj_dir}/dist/release") - cmd_arr+=("cp release_version.txt ./dist/release") + release_dir=${prj_dir}/dist/${project} + + cmd_arr+=("mkdir -p ${release_dir}") + cmd_arr+=("cp release_version.txt ${release_dir}") jq_cmd="jq '.packages[] | select(.targets[].kind[] == \"bin\") | .name'" apps=$(cargo metadata --no-deps --format-version 1 --manifest-path=${prj_dir}/Cargo.toml | eval $jq_cmd | uniq) for app in ${apps[@]}; do app=${app//\"/} # remove quotes - cmd_arr+=("cargo install --root ${prj_dir}/dist/release --path ${prj_dir}/apps/${app}") + cmd_arr+=("cargo install --root ${release_dir} --path ${prj_dir}/apps/${app}") done - SourceLoc=${prj_dir}/dist/release + SourceLoc=${release_dir} fi dist_path="${dist_root}/${project}/${release_version}" diff --git a/build/docker_images_builder.sh b/build/docker_images_builder.sh new file mode 100755 index 0000000..6f26ea9 --- /dev/null +++ b/build/docker_images_builder.sh @@ -0,0 +1,136 @@ +#!/bin/bash + +usage() { + echo -n "Usage: ${0} " + echo + exit 1 +} +# --- Settings +RootDir=${1} +if [ -z "${RootDir}" ] ; then + usage +fi + +RegistryService=cloud21.cvtt.vpn:5500 +RegistryProtocol=http + +ConfigUrl=http://cloud23.cvtt.vpn:6789/admin/docker_images + + +ReleaseHost="cloud21.cvtt.vpn" +ReleasePort="22" +ReleaseUser="cvttdist" +ReleaseDir="/home/cvttdist/software/cvtt2" + +DIMAGES_CONFIG=$(curl -s ${ConfigUrl} | ${HOME}/bin/hjson -j) + +# RootDir=/home/oleg/prod +SetVersionScript=/home/oleg/prod/ops/scripts/set_version.sh + + +# --------------- D E B U G + +mkdir -p ${RootDir} + +build_docker_image() { + title=${1} + image_name=${2} + docker_dev=${3} + project=${4} + + echo "Building ${title}..." + echo "ImageName=${image_name}" + echo "DockerDev=${docker_dev}" + echo "BasedOnDist=${project}" + + # Get Latest DIST version + echo "Checking for latest version of ${project} on ${ReleaseUser}@${ReleaseHost}:${ReleaseDir}" + image_version=$(get_latest_dist_version ${project}) + if [ -z "${image_version}" ]; then + echo "No latest version found for ${project}" + exit 1 + fi + echo "Latest version is ${image_version}" + + if image_exists "${image_name}" "${image_version}"; then + echo "Image $image_name:$image_version exists in the registry. Building is not required." + return + fi + echo "Image $image_name:$image_version does not exist in the registry." + echo "getting lastest version of ${project} on ${ReleaseUser}@${ReleaseHost}:${ReleaseDir}" + ${SetVersionScript} ${project} ${image_version} + +} + +image_exists() { + image_name=${1} + version=${2} + response=$(curl -s -o /dev/null -w "%{http_code}" "${RegistryProtocol}://${RegistryService}/v2/${image_name}/manifests/${version}" -H "Accept: application/vnd.docker.distribution.manifest.v2+json") + if [ "$response" -eq 200 ]; then + return 0 + else + return 1 + fi +} + +get_latest_dist_version() { + project=${1} + + Version=$(ssh -q -p ${ReleasePort} ${ReleaseUser}@${ReleaseHost} "ls -tr ${ReleaseDir}/${project} | tail -1" ) + echo "${Version}" +} + +echo RootDir=${RootDir} + +cd ${RootDir} +echo "Getting latest version of docker_dev" +Cmd="${SetVersionScript} docker_dev latest" +echo ${Cmd} +eval ${Cmd} + +echo "${DIMAGES_CONFIG}" | jq -c 'to_entries[]' | while IFS= read -r item; do + # Extract key (name) and values + title=$(echo "$item" | jq -r '.key') + image_name=$(echo "$item" | jq -r '.value.image_name') + docker_dev=$(echo "$item" | jq -r '.value.docker_dev') + project=$(echo "$item" | jq -r '.value.based_on_dist') + build_docker_image "$title" "$image_name" "$docker_dev" "$project" +done + +exit +#=============================================================================== +#=============================================================================== + +DockerDir=$(realpath $(dirname ${0})/${AppPath}) + +AppName=$(basename ${AppPath}) + +ImageName=${AppName} +ImageDir=${HOME}/docker_images +mkdir -p ${ImageDir} + +Version=$(cat ${RootDir}/cvttpy/release_version.txt | awk -F, '{print $1}') + +cd ${RootDir} + +Cmd="docker build -t ${ImageName} -t ${ImageName}:latest -t ${ImageName}:${Version} -f ${DockerDir}/Dockerfile ." +echo ${Cmd} +eval ${Cmd} || exit + +Cmd="docker tag ${ImageName}:latest ${RegistryService}/${ImageName}:latest" +echo ${Cmd} +eval ${Cmd} || exit + +Cmd="docker tag ${ImageName}:${Version} ${RegistryService}/${ImageName}:${Version}" +echo ${Cmd} +eval ${Cmd} || exit + +Cmd="docker push ${RegistryService}/${ImageName}:latest" +echo ${Cmd} +eval ${Cmd} || exit + +Cmd="docker push ${RegistryService}/${ImageName}:${Version}" +echo ${Cmd} +eval ${Cmd} || exit + + diff --git a/release_version.txt b/release_version.txt index 881fe43..1802e9b 100644 --- a/release_version.txt +++ b/release_version.txt @@ -1 +1 @@ -1.8.2,md eqty checklist to use new structure +1.8.3,changes to build scripts diff --git a/scripts/set_version.sh b/scripts/set_version.sh index 2f72940..c6ed873 100755 --- a/scripts/set_version.sh +++ b/scripts/set_version.sh @@ -4,7 +4,7 @@ # ----- Settings LocalSoftwareDir=${HOME}/software/cvtt2 -ProdDir=${HOME}/prod +ProdDir=$(pwd) ReleaseHosts=("cloud21.cvtt.vpn") ReleasePorts=("22") @@ -74,7 +74,7 @@ mkdir -p ${ProdDir} # exists and not empty rsync_load_version -Location="${LocalSoftwareDir}/${Project}/${Version}/${Project}" +Location="${LocalSoftwareDir}/${Project}/${Version}"/${Project}" Cmd="cd ${ProdDir}" Cmd="${Cmd} && rm -rf ${Project}"