Skip to content

Commit

Permalink
ci: refactor to make semantic versioning work
Browse files Browse the repository at this point in the history
Major versions like "imagename:2" were not set.
The code required refactoring to make the code cleaner to find the problem
  • Loading branch information
rimelek committed Jul 17, 2022
1 parent 9783b1e commit 286235e
Show file tree
Hide file tree
Showing 2 changed files with 83 additions and 19 deletions.
20 changes: 16 additions & 4 deletions ci/deploy.sh
Original file line number Diff line number Diff line change
Expand Up @@ -48,26 +48,38 @@ done
shift $((OPTIND - 1))

if [[ -n "$CI_TAG" ]]; then
write_info "CI_TAG is set. Set CI_BRANCH to the value of CI_TAG"
CI_BRANCH="$CI_TAG" # for easier local test
fi

write_info "CI_BRANCH=$CI_BRANCH"
write_info "CI_TAG=$CI_TAG"

reqVarNonEmpty CI_IMAGE_NAME
reqVarNonEmpty CI_BRANCH
reqVarNonEmpty CI_EVENT_TYPE

write_info "Remove leading version flag (v) from $CI_BRANCH"
# remove first character if that is "v"
# remember CI_BRANCH is CI_TAG if tag was set
VERSION=$(echo "$CI_BRANCH" | trimVersionFlag)

write_info "VERSION=$VERSION"

write_info "Generate docker tag and push commands"
DCD_COMMAND="$(dcdCommandGen)"

# debugging missing tags
echo "Images:"
docker image ls
write_info "Images:"
write_info "$(docker image ls)"

echo "DCD COMMAND:"
echo "$DCD_COMMAND"
write_info "DCD COMMAND:"
write_info "$DCD_COMMAND"

write_info "Check if there are generated tag and push commands to execute"
if [[ -n "$DCD_COMMAND" ]]; then
write_info "Execute generated tag and push commands"
eval "$DCD_COMMAND"
else
write_info "There are no tag and push commands to execute"
fi
82 changes: 67 additions & 15 deletions ci/resources.sh
Original file line number Diff line number Diff line change
Expand Up @@ -49,7 +49,7 @@ isMinorBranch() {
}

getVersions() {
local BRANCH="$1"
local BRANCH="${1:-}"
if [[ -z "$BRANCH" ]]; then
git tag --list 'v[0-9]*' --sort '-v:refname' | trimVersionFlag | grep -i '^'"$PATTERN_STABLE_VERSION"'\(-[^ ]\+\)\?$'
else
Expand All @@ -60,7 +60,7 @@ getVersions() {
}

getStableVersions() {
getVersions "$1" | grep -i '^'"$PATTERN_STABLE_VERSION"'$'
getVersions "${1:-}" | grep -i '^'"$PATTERN_STABLE_VERSION"'$'
}

trimVersionFlag() {
Expand All @@ -72,7 +72,7 @@ getLatestVersion() {
}

getLatestStableVersion() {
getStableVersions "$1" | head -n 1
getStableVersions "${1:-}" | head -n 1
}

getLatestStableOrPreVersion() {
Expand All @@ -85,6 +85,27 @@ getLatestStableOrPreVersion() {
echo "$LATEST_VERSION"
}

getStableMajorVersions() {
getStableVersions | cut -d "." -f1 | trimVersionFlag | uniq
}

getStableMinorVersionsOfMajor() {
getStableVersions | grep '^'"$1"'.[0-9]\+\.[0-9]\+$' | cut -d "." -f1-2 | trimVersionFlag | uniq
}

getStablePatchVersionsOfMinor() {
getStableVersions | grep '^'"$1"'.[0-9]\+$' | trimVersionFlag | uniq
}

getLatestStableVersionOfMajor() {
getStableVersions | grep '^'"$1"'.[0-9]\+\.[0-9]\+$' | trimVersionFlag | uniq | head -n1
}

getLatestStableVersionOfMinor() {
getStableVersions | grep '^'"$1"'.[0-9]\+$' | trimVersionFlag | uniq | head -n1
}


isValidSemanticVersion() {
local VERSION="$1"
local RESULT
Expand Down Expand Up @@ -167,7 +188,9 @@ deployCommandGen() (
tag() { echo "docker tag \"$IMAGE_NAME:$IMAGE_TAG\" \"$IMAGE_NAME:$1\""; }
push() { echo "docker push \"$IMAGE_NAME:$1\""; }
pushAs() {
[[ "$IMAGE_TAG" != "$1" ]] && tag "$1"
if [[ "$IMAGE_TAG" != "$1" ]]; then
tag "$1"
fi
push "$1"
}

Expand All @@ -176,23 +199,52 @@ deployCommandGen() (

CURRENT_VALID="$(isValidSemanticVersion "$CURRENT_VERSION")"
LATEST_VALID="$(isValidSemanticVersion "$LATEST_VERSION")"
[[ -z "$IMAGE_NAME" ]] && echo >&2 "IMAGE_NAME is empty" && exit 1

if [[ -z "$IMAGE_NAME" ]]; then
echo >&2 "IMAGE_NAME is empty"
exit 1
fi
if [[ -n "$CURRENT_VERSION" ]]; then
[[ "$CURRENT_VALID" != "true" ]] && [[ -n "$CURRENT_VERSION" ]] && echo >&2 "Invalid CURRENT_VERSION: $CURRENT_VERSION" && return 1
[[ "$LATEST_VALID" != "true" ]] && [[ -n "$LATEST_VERSION" ]] && echo >&2 "Invalid LATEST_VERSION: $LATEST_VERSION" && return 1
if [[ "$CURRENT_VALID" != "true" ]] && [[ -n "$CURRENT_VERSION" ]]; then
echo >&2 "Invalid CURRENT_VERSION: $CURRENT_VERSION"
return 1
fi
if [[ "$LATEST_VALID" != "true" ]] && [[ -n "$LATEST_VERSION" ]]; then
echo >&2 "Invalid LATEST_VERSION: $LATEST_VERSION"
return 1
fi

pushAs "$CURRENT_VERSION"

local IS_PRE_RELEASE
IS_PRE_RELEASE="$(isPreRelease "$CURRENT_VERSION")"
if [[ "$SEMANTIC_VERSION" == "true" ]] || [[ "$IS_PRE_RELEASE" == "true" ]]; then
[[ -z "$LATEST_MINOR" ]] && LATEST_MINOR="$(getLatestStableVersion "$(echo "$CURRENT_VERSION" | cut -d . -f1-2)")"
[[ -z "$LATEST_MAJOR" ]] && LATEST_MAJOR="$(git tag -l "v$(echo "$CURRENT_VERSION" | cut -d . -f1).*")"
[[ -z "$LATEST_VERSION" ]] && LATEST_VERSION="$(getLatestStableVersion)"
[[ "$LATEST_MINOR" == "$CURRENT_VERSION" ]] && pushAs "$(echo "$CURRENT_VERSION" | cut -d . -f1-2)"
[[ "$LATEST_MAJOR" == "$CURRENT_VERSION" ]] && pushAs "$(echo "$CURRENT_VERSION" | cut -d . -f1)"
[[ "$LATEST_VERSION" == "$CURRENT_VERSION" ]] && [[ -n "$LATEST_VERSION" ]] && pushAs latest
if [[ "$SEMANTIC_VERSION" == "true" ]]; then
if [[ -z "$LATEST_MINOR" ]]; then
# LATEST_MINOR="$(getLatestStableVersion "$(echo "$CURRENT_VERSION" | cut -d . -f1-2)")"
LATEST_MINOR="$(getLatestStableVersionOfMinor "$(echo "$CURRENT_VERSION" | cut -d . -f1-2)")"
fi

if [[ -z "$LATEST_MAJOR" ]]; then
# LATEST_MAJOR="$(git tag -l "v$(echo "$CURRENT_VERSION" | cut -d . -f1).*")"
LATEST_MAJOR="$(getLatestStableVersionOfMajor "$(echo "$CURRENT_VERSION" | cut -d . -f1)")"
fi

if [[ -z "$LATEST_VERSION" ]]; then
LATEST_VERSION="$(getLatestStableVersion)"
fi

# push commands

if [[ "$LATEST_MINOR" == "$CURRENT_VERSION" ]]; then
pushAs "$(echo "$CURRENT_VERSION" | cut -d . -f1-2)"
fi

if [[ "$LATEST_MAJOR" == "$CURRENT_VERSION" ]]; then
pushAs "$(echo "$CURRENT_VERSION" | cut -d . -f1)"
fi

if [[ -n "$LATEST_VERSION" ]] && [[ "$LATEST_VERSION" == "$CURRENT_VERSION" ]]; then
pushAs latest
fi
fi
fi

Expand Down

0 comments on commit 286235e

Please sign in to comment.