2023-07-10 19:31:10 +02:00
#! /bin/bash
# Globals
FAILED = "false"
# Ingest cli variables
## Parse input ##
2023-09-25 11:41:12 +02:00
NAME1 = $1
NAME2 = $2
TYPE = $3
REVERT_PIPELINE_ID = $4
IS_ROLLING = $5
2023-07-10 19:31:10 +02:00
PULL_BRANCH = ${ SANITIZED_BRANCH }
# Determine if this is a private or public build
if [ [ " ${ CI_COMMIT_REF_NAME } " = = release/* ] ] || [ [ " ${ CI_COMMIT_REF_NAME } " = = "develop" ] ] ; then
2024-04-28 23:49:00 +02:00
if [ [ " ${ NAME1 } " = = " ${ NAME2 } " ] ] ; then
ENDPOINT = " core- ${ NAME1 } "
else
ENDPOINT = " core- ${ NAME1 } - ${ NAME2 } "
fi
2023-07-10 19:31:10 +02:00
else
2024-04-28 23:49:00 +02:00
if [ [ " ${ NAME1 } " = = " ${ NAME2 } " ] ] ; then
ENDPOINT = " core- ${ NAME1 } -private "
else
ENDPOINT = " core- ${ NAME1 } - ${ NAME2 } -private "
fi
2023-07-10 19:31:10 +02:00
fi
# Determine if this is a rolling build
2024-02-06 16:30:25 +01:00
if [ [ " ${ SCHEDULED } " != "NO" ] ] ; then
2024-02-06 19:15:07 +01:00
if [ [ " ${ SCHEDULE_NAME } " = = "NO" ] ] ; then
2024-01-23 17:57:12 +01:00
SANITIZED_BRANCH = ${ SANITIZED_BRANCH } -rolling
else
SANITIZED_BRANCH = ${ SANITIZED_BRANCH } -rolling-${ SCHEDULE_NAME }
fi
2023-07-10 19:31:10 +02:00
fi
# Determine if we are doing a reversion
2024-02-06 16:30:25 +01:00
if [ [ ! -z " ${ REVERT_PIPELINE_ID } " ] ] ; then
2023-07-10 19:31:10 +02:00
# If we are reverting modify the pipeline ID to the one passed
CI_PIPELINE_ID = ${ REVERT_PIPELINE_ID }
2024-02-06 16:30:25 +01:00
if [ [ " ${ IS_ROLLING } " = = "true" ] ] ; then
if [ [ " ${ SCHEDULE_NAME } " = = "NO" ] ] ; then
2024-01-23 17:57:12 +01:00
SANITIZED_BRANCH = ${ SANITIZED_BRANCH } -rolling
else
SANITIZED_BRANCH = ${ SANITIZED_BRANCH } -rolling-${ SCHEDULE_NAME }
fi
2023-07-10 19:31:10 +02:00
fi
fi
# Check test output
2024-02-06 16:30:25 +01:00
if [ [ -z " ${ REVERT_PIPELINE_ID } " ] ] ; then
2023-07-10 19:31:10 +02:00
apk add curl
2024-02-06 16:30:25 +01:00
if [ [ " ${ TYPE } " = = "multi" ] ] ; then
2023-07-10 19:31:10 +02:00
ARCHES = ( "x86_64" "aarch64" )
else
ARCHES = ( "x86_64" )
fi
for ARCH in " ${ ARCHES [@] } " ; do
# Determine test status
STATUS = $( curl -sL https://kasm-ci.s3.amazonaws.com/${ CI_COMMIT_SHA } /${ ARCH } /kasmweb/image-cache-private/${ ARCH } -core-${ NAME1 } -${ NAME2 } -${ PULL_BRANCH } -${ CI_PIPELINE_ID } /ci-status.yml | awk -F'"' '{print $2}' )
if [ " ${ STATUS } " = = "PASS" ] ; then
STATE = success
else
STATE = failed
FAILED = "true"
fi
# Ping gitlab api with link output
curl --request POST --header " PRIVATE-TOKEN: ${ GITLAB_API_TOKEN } " " ${ CI_API_V4_URL } /projects/ ${ CI_PROJECT_ID } /statuses/ ${ CI_COMMIT_SHA } ?state= ${ STATE } &name=core- ${ NAME1 } - ${ NAME2 } _ ${ ARCH } &target_url=https://kasm-ci.s3.amazonaws.com/ ${ CI_COMMIT_SHA } / ${ ARCH } /kasmweb/image-cache-private/ ${ ARCH } -core- ${ NAME1 } - ${ NAME2 } - ${ PULL_BRANCH } - ${ CI_PIPELINE_ID } /index.html "
done
fi
# Fail job and go no further if tests did not pass
2024-02-06 16:30:25 +01:00
if [ [ " ${ FAILED } " = = "true" ] ] ; then
2023-07-10 19:31:10 +02:00
exit 1
fi
# Manifest for multi pull and push for single arch
2024-02-06 16:30:25 +01:00
if [ [ " ${ TYPE } " = = "multi" ] ] ; then
2023-07-10 19:31:10 +02:00
# Pull images from cache repo
docker pull ${ ORG_NAME } /image-cache-private:x86_64-core-${ NAME1 } -${ NAME2 } -${ PULL_BRANCH } -${ CI_PIPELINE_ID }
docker pull ${ ORG_NAME } /image-cache-private:aarch64-core-${ NAME1 } -${ NAME2 } -${ PULL_BRANCH } -${ CI_PIPELINE_ID }
# Tag images to live repo
docker tag \
${ ORG_NAME } /image-cache-private:x86_64-core-${ NAME1 } -${ NAME2 } -${ PULL_BRANCH } -${ CI_PIPELINE_ID } \
${ ORG_NAME } /${ ENDPOINT } :x86_64-${ SANITIZED_BRANCH }
docker tag \
${ ORG_NAME } /image-cache-private:aarch64-core-${ NAME1 } -${ NAME2 } -${ PULL_BRANCH } -${ CI_PIPELINE_ID } \
${ ORG_NAME } /${ ENDPOINT } :aarch64-${ SANITIZED_BRANCH }
# Push arches to live repo
docker push ${ ORG_NAME } /${ ENDPOINT } :x86_64-${ SANITIZED_BRANCH }
docker push ${ ORG_NAME } /${ ENDPOINT } :aarch64-${ SANITIZED_BRANCH }
# Manifest to meta tag
docker manifest push --purge ${ ORG_NAME } /${ ENDPOINT } :${ SANITIZED_BRANCH } || :
docker manifest create ${ ORG_NAME } /${ ENDPOINT } :${ SANITIZED_BRANCH } ${ ORG_NAME } /${ ENDPOINT } :x86_64-${ SANITIZED_BRANCH } ${ ORG_NAME } /${ ENDPOINT } :aarch64-${ SANITIZED_BRANCH }
docker manifest annotate ${ ORG_NAME } /${ ENDPOINT } :${ SANITIZED_BRANCH } ${ ORG_NAME } /${ ENDPOINT } :aarch64-${ SANITIZED_BRANCH } --os linux --arch arm64 --variant v8
docker manifest push --purge ${ ORG_NAME } /${ ENDPOINT } :${ SANITIZED_BRANCH }
# Single arch image just pull and push
else
# Pull image
docker pull ${ ORG_NAME } /image-cache-private:x86_64-core-${ NAME1 } -${ NAME2 } -${ PULL_BRANCH } -${ CI_PIPELINE_ID }
# Tage image
docker tag \
${ ORG_NAME } /image-cache-private:x86_64-core-${ NAME1 } -${ NAME2 } -${ PULL_BRANCH } -${ CI_PIPELINE_ID } \
${ ORG_NAME } /${ ENDPOINT } :${ SANITIZED_BRANCH }
# Push image
docker push ${ ORG_NAME } /${ ENDPOINT } :${ SANITIZED_BRANCH }
fi