Skip to content
Snippets Groups Projects
Verified Commit 078e38b4 authored by Sheogorath's avatar Sheogorath :european_castle:
Browse files

WIP: First simplifications for shell tools

parent 6eaad8f3
No related branches found
No related tags found
No related merge requests found
Pipeline #11745 failed
......@@ -4,7 +4,7 @@ set -o pipefail
set -u
set -e
VERSION=0.1.0
VERSION=0.2.0
printVersion() {
echo "$VERSION"
......@@ -13,7 +13,7 @@ printVersion() {
printUsage() {
printVersion
echo "
Shivering-Isles tagging tool
Shivering-Isles manifest tool
Usage of $0:
$0 <IMAGE REFERENCE> <PREFIX> <VERSION> <SUFFIX>
......@@ -24,38 +24,12 @@ printUsage() {
exit 1
}
createTagOrManifest() {
TARGET_IMAGE_REFERENCE=$1
if [ "$MULTIARCH_IMAGES_COUNT" -gt "0" ]; then
$CONTAINER_CMD manifest create "$TARGET_IMAGE_REFERENCE"
for IMAGE_REFERENCE in "${MULTIARCH_IMAGES[@]}"
do
MANIFEST_OPTIONS=()
if [[ "$IMAGE_REFERENCE" =~ "aarch64"|"arm64" ]]; then
MANIFEST_OPTIONS+=(--variant v8)
fi
if [ "$LOCAL" = "1" ]; then
$CONTAINER_CMD manifest add "${MANIFEST_OPTIONS[@]}" "$TARGET_IMAGE_REFERENCE" containers-storage:"$IMAGE_REFERENCE"
else
$CONTAINER_CMD manifest add "${MANIFEST_OPTIONS[@]}" "$TARGET_IMAGE_REFERENCE" "$IMAGE_REFERENCE"
fi
done
else
$CONTAINER_CMD tag "$CURRENT_IMAGE_REFERENCE" "$TARGET_IMAGE_REFERENCE"
fi
}
CONTAINER_CMD="podman"
PREFIX=""
SUFFIX=""
LATEST=0
LOCAL=0
MULTIARCH_SUPPORTED="amd64|arm64|aarch64"
if ! command -v "$CONTAINER_CMD" >/dev/null 2>&1; then
CONTAINER_CMD=docker
fi
if [ "$1" = "--help" ]; then
printUsage
fi
......@@ -71,18 +45,6 @@ case $i in
SUFFIX="${i#*=}"
shift # past argument=value
;;
-l|--latest)
LATEST=1
shift # past argument=value
;;
--local)
LOCAL=1
shift # past argument=value
;;
--container-cmd=*)
CONTAINER_CMD="${i#*=}"
shift # past argument with no value
;;
-v|--version)
printVersion
exit 0
......@@ -107,19 +69,15 @@ if [ "$CURRENT_IMAGE_REFERENCE" = "invalid" ] || [ "$TARGET_IMAGE_NAME" = "inval
printUsage
fi
mapfile -t MULTIARCH_IMAGES < <($CONTAINER_CMD images | awk '{print $1 ":" $2}' | grep -Pe "$CURRENT_IMAGE_REFERENCE-($MULTIARCH_SUPPORTED)$")
mapfile -t MULTIARCH_IMAGES < <(podman images | awk '{print $1 ":" $2}' | grep -Pe "$CURRENT_IMAGE_REFERENCE-($MULTIARCH_SUPPORTED)$")
MULTIARCH_IMAGES_COUNT=${#MULTIARCH_IMAGES[@]}
counter=1
new_version="$(echo "$TARGET_IMAGE_VERSION" | cut -d. -f$counter)"
last_version=""
while [ "$last_version" != "$new_version" ]; do
createTagOrManifest "${TARGET_IMAGE_NAME}:${PREFIX}${new_version}${SUFFIX}"
last_version="$new_version"
((counter++))
new_version="$(echo "$TARGET_IMAGE_VERSION" | cut -d. -f-"$counter")"
done
if [ "$LATEST" = "1" ]; then
createTagOrManifest "${TARGET_IMAGE_NAME}:latest"
TARGET_IMAGE_REFERENCE="${TARGET_IMAGE_NAME}:${PREFIX}${TARGET_IMAGE_VERSION}${SUFFIX}"
for IMAGE_REFERENCE in $(podman images --format="{{.Repository}}:{{.Tag}}" "$CURRENT_IMAGE_REFERENCE"); do
MANIFEST_CMD_PARAMETERES=""
if [[ "$IMAGE_REFERENCE" =~ "aarch64"|"arm64" ]]; then
podman manifest add --variant v8 "$TARGET_IMAGE_REFERENCE" containers-storage:"$IMAGE_REFERENCE"
else
podman manifest add "$TARGET_IMAGE_REFERENCE" containers-storage:"$IMAGE_REFERENCE"
fi
done
......@@ -4,7 +4,7 @@ set -o pipefail
set -u
set -e
VERSION=0.1.0
VERSION=0.2.0
printVersion() {
echo "$VERSION"
......@@ -26,12 +26,6 @@ printUsage() {
exit 1
}
CONTAINER_CMD=podman
if ! command -v "$CONTAINER_CMD" >/dev/null 2>&1; then
CONTAINER_CMD=docker
fi
if [ "$1" = "--help" ]; then
printUsage
fi
......@@ -39,10 +33,6 @@ fi
for i in "$@"
do
case $i in
--container-cmd=*)
CONTAINER_CMD="${i#*=}"
shift # past argument with no value
;;
-v|--version)
printVersion
exit 0
......@@ -65,25 +55,13 @@ if [ "$CONTAINER_IMAGE_NAME" = "invalid" ]; then
printUsage
fi
IMAGE_PULL_SUCCESS=0
# shellcheck disable=SC2015
podman pull "$CONTAINER_IMAGE_NAME" && \
IMAGE_PULL_SUCCESS=1 || \
true
NUMBER_IMAGES="$(podman images "$CONTAINER_IMAGE_NAME" | wc -l)"
# shellcheck disable=SC2015
podman pull "$CONTAINER_IMAGE_NAME-amd64" && \
IMAGE_PULL_SUCCESS=1 || \
true
# shellcheck disable=SC2015
podman pull "$CONTAINER_IMAGE_NAME-arm64" || \
podman pull "$CONTAINER_IMAGE_NAME-aarch64" && \
IMAGE_PULL_SUCCESS=1 || \
true
for i in "$CONTAINER_IMAGE_NAME"{,-amd64,-arm64,-aarch64}; do
podman pull "$i" || true
done
if [ "$IMAGE_PULL_SUCCESS" == "0" ]; then
echo "Error: No images pulled" >&2
if ! [ "$NUMBER_IMAGES" -lt "$(podman images "$CONTAINER_IMAGE_NAME" | wc -l)" ]; then
echo "Number of pulled images unchanged. Failed to pull images." >&2
exit 1
fi
......@@ -4,7 +4,7 @@ set -o pipefail
set -u
set -e
VERSION=0.1.0
VERSION=0.2.0
printVersion() {
echo "$VERSION"
......@@ -18,19 +18,15 @@ printUsage() {
This tool will push all tagged versions of a container image upstream
Usage of $0:
$0 <IMAGE REFERENCE>
$0 <MANIFEST REFERENCE>
Example:
$0 registry.example.com/example/app
$0 registry.example.com/example/app:1.2.3
"
exit 1
}
CONTAINER_CMD=podman
if ! command -v "$CONTAINER_CMD" >/dev/null 2>&1; then
CONTAINER_CMD=docker
fi
LATEST=0
if [ "$1" = "--help" ]; then
printUsage
......@@ -39,9 +35,9 @@ fi
for i in "$@"
do
case $i in
--container-cmd=*)
CONTAINER_CMD="${i#*=}"
shift # past argument with no value
-l|--latest)
LATEST=1
shift
;;
-v|--version)
printVersion
......@@ -59,11 +55,19 @@ esac
done
CONTAINER_IMAGE_NAME=${1:-invalid}
CONTAINER_IMAGE_VERSION=${2:-invalid}
if [ "$CONTAINER_IMAGE_NAME" = "invalid" ]; then
echo "Error: Invalid image name" >&2
printUsage
fi
# shellcheck disable=SC2086
$CONTAINER_CMD images --format "{{.Repository}}:{{.Tag}}" "$CONTAINER_IMAGE_NAME" | grep "$CONTAINER_IMAGE_NAME" | xargs -L 1 "$(dirname "$0")/../libexec/pushImageOrManifest.sh"
for i in $(seq 1 "${#CONTAINER_IMAGE_VERSION}"); do
REMOTE_VERSION=$(echo "$CONTAINER_IMAGE_VERSION" | cut -d. -f1-$i)
podman manifest push "$CONTAINER_IMAGE_NAME" "docker://${CONTAINER_IMAGE_NAME}:${REMOTE_VERSION}"
done
if [ "$LATEST" = 0 ]; then
podman manifest push "$CONTAINER_IMAGE_NAME" "docker://${CONTAINER_IMAGE_NAME}:latest"
fi
......@@ -2,17 +2,17 @@
BASENAME="$(dirname "$0")"
cp "$BASENAME"/./bin/tagging.sh /usr/local/bin/si-tagging
cp "$BASENAME"/./bin/tagging.sh /usr/local/bin/si-manifest
cp "$BASENAME"/./bin/push.sh /usr/local/bin/si-push
cp "$BASENAME"/./bin/pull.sh /usr/local/bin/si-pull
cp "$BASENAME"/./bin/fix-dockerfile.sh /usr/local/bin/si-fix
cp "$BASENAME"/./libexec/pushImageOrManifest.sh /usr/local/libexec/pushImageOrManifest.sh
chown root:root /usr/local/bin/si-tagging
chown root:root /usr/local/bin/si-manifest
chown root:root /usr/local/bin/si-push
chown root:root /usr/local/bin/si-pull
chown root:root /usr/local/bin/si-fix
chown root:root /usr/local/libexec/pushImageOrManifest.sh
chmod 0755 /usr/local/bin/si-tagging
chmod 0755 /usr/local/bin/si-manifest
chmod 0755 /usr/local/bin/si-push
chmod 0755 /usr/local/bin/si-pull
chmod 0755 /usr/local/bin/si-fix
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment