.github/workflows/create-docker-image.yml
... ...
@@ -17,6 +17,15 @@ jobs:
17 17
if: ${{ github.event_name == 'workflow_dispatch' || github.event.workflow_run.conclusion == 'success' }}
18 18
runs-on: ubuntu-latest
19 19
steps:
20
+ - name: Convert repo name to lowercase GHCR package
21
+ id: ghcr
22
+ run: |
23
+ # $GITHUB_REPOSITORY is in format owner/repo
24
+ OWNER=${GITHUB_REPOSITORY%%/*} # extract owner
25
+ REPO=${GITHUB_REPOSITORY##*/} # extract repo
26
+ REPO_LOWER=$(echo "$REPO" | tr '[:upper:]' '[:lower:]') # lowercase repo
27
+ PACKAGE="ghcr.io/$OWNER/$REPO_LOWER"
28
+ echo "PACKAGE=$OWNER/$REPO_LOWER" >> $GITHUB_OUTPUT
20 29
- name: Checkout
21 30
uses: actions/checkout@v4
22 31
with:
... ...
@@ -50,7 +59,7 @@ jobs:
50 59
- name: Download release
51 60
shell: bash
52 61
run: |
53
- RELEASE_TAR_GZ_FILENAME=$( configuration/github-download-release-assets.sh ${{ secrets.GITHUB_TOKEN }} ${{ env.RELEASE_PREFIX }} )
62
+ RELEASE_TAR_GZ_FILENAME=$( configuration/github-download-release-assets.sh ${{ secrets.GITHUB_TOKEN }} ${{ env.RELEASE_PREFIX }} ${{ env.GITHUB_REPOSITORY }} )
54 63
RELEASE=$( echo ${RELEASE_TAR_GZ_FILENAME} | sed -e 's/\.tar\.gz$//' )
55 64
if [ -n ${RELEASE_TAR_GZ_FILENAME} ]; then
56 65
mv ${RELEASE_TAR_GZ_FILENAME} docker/
... ...
@@ -60,7 +69,7 @@ jobs:
60 69
uses: docker/build-push-action@ca877d9245402d1537745e0e356eab47c3520991 # v6.13.0
61 70
with:
62 71
build-args: RELEASE=${{ env.RELEASE }}
63
- tags: ghcr.io/sap/sailing-analytics:${{ env.RELEASE }}${{ env.BRANCH == 'main' && github.event.inputs.release == '' && ',ghcr.io/sap/sailing-analytics:latest' || env.BRANCH == 'docker-17' && github.event.inputs.release == '' && ',ghcr.io/sap/sailing-analytics:latest-17' || env.BRANCH == 'docker-21' && github.event.inputs.release == '' && ',ghcr.io/sap/sailing-analytics:latest-21' || env.BRANCH == 'docker-24' && github.event.inputs.release == '' && ',ghcr.io/sap/sailing-analytics:latest-24' || '' }}
72
+ tags: ghcr.io/${{steps.ghcr.outputs.PACKAGE}}:${{ env.RELEASE }}${{ env.BRANCH == 'main' && github.event.inputs.release == '' && ",ghcr.io/${{steps.ghcr.outputs.PACKAGE}}:latest" || env.BRANCH == 'docker-17' && github.event.inputs.release == '' && ",ghcr.io/${{steps.ghcr.outputs.PACKAGE}}:latest-17" || env.BRANCH == 'docker-21' && github.event.inputs.release == '' && ",ghcr.io/${{steps.ghcr.outputs.PACKAGE}}:latest-21" || env.BRANCH == 'docker-24' && github.event.inputs.release == '' && ",ghcr.io/${{steps.ghcr.outputs.PACKAGE}}:latest-24" || '' }}
64 73
annotations: |
65 74
maintainer=axel.uhl@sap.com
66 75
index:org.opencontainers.image.title=Sailing Analytics
configuration/github-copy-release-to-sapsailing-com.sh
... ...
@@ -17,7 +17,7 @@
17 17
# produce false matches for the "main-" prefix.
18 18
BEARER_TOKEN="${1}"
19 19
RELEASE_NAME_PREFIX="${2}"
20
-RELEASE_TAR_GZ_FILE_NAME=$( `dirname "${0}"`/github-download-release-assets.sh "${BEARER_TOKEN}" "${RELEASE_NAME_PREFIX}" )
20
+RELEASE_TAR_GZ_FILE_NAME=$( `dirname "${0}"`/github-download-release-assets.sh "${BEARER_TOKEN}" "${RELEASE_NAME_PREFIX}" SAP/sailing-analytics )
21 21
if [ "${RELEASE_TAR_GZ_FILE_NAME}" != "" ]; then
22 22
RELEASE_NAME=$( echo ${RELEASE_TAR_GZ_FILE_NAME} | sed -e 's/^\(.*\)-\([0-9]*\).tar.gz$/\1/' )
23 23
RELEASE_TIMESTAMP=$( echo ${RELEASE_TAR_GZ_FILE_NAME} | sed -e 's/^\(.*\)-\([0-9]*\).tar.gz$/\2/' )
configuration/github-download-release-assets.sh
... ...
@@ -5,9 +5,9 @@
5 5
# always be 0.
6 6
#
7 7
# Usage:
8
-# ./github-download-release-assets.sh {BEARER_TOKEN} {release-name-prefix}
8
+# ./github-download-release-assets.sh {BEARER_TOKEN} {release-name-prefix} {repository-name}
9 9
# For example:
10
-# ./github-download-release-assets.sh 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 main-
10
+# ./github-download-release-assets.sh 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 main- SAP/sailing-analytics
11 11
# which will download the latest release tar.gz and release-notes.txt of the main branch (main-xxxxxxxxxxx).
12 12
# Note the "-" at the end of the "main-" prefix specifier; this way we're making name
13 13
# clashes with releases whose name happens to start with "main" unlikely. This
... ...
@@ -15,7 +15,8 @@
15 15
# produce false matches for the "main-" prefix.
16 16
BEARER_TOKEN="${1}"
17 17
RELEASE_NAME_PREFIX="${2}"
18
-RELEASES=$( curl -L -H 'Authorization: Bearer '${BEARER_TOKEN} https://api.github.com/repos/SAP/sailing-analytics/releases 2>/dev/null )
18
+GITHUB_REPOSITORY="${3}"
19
+RELEASES=$( curl -L -H 'Authorization: Bearer '${BEARER_TOKEN} https://api.github.com/repos/${GITHUB_REPOSITORY}/releases 2>/dev/null )
19 20
RELEASE_NOTES_TXT_ASSET_ID=$( echo "${RELEASES}" | jq -r 'sort_by(.published_at) | reverse | map(select(.name | startswith("'${RELEASE_NAME_PREFIX}'")))[0].assets[] | select(.content_type=="text/plain").id' 2>/dev/null)
20 21
if [ "$?" -ne "0" ]; then
21 22
echo "No release with prefix ${RELEASE_NAME_PREFIX} found. Not trying to download/upload anything." >&2
... ...
@@ -26,7 +27,7 @@ else
26 27
RELEASE_TIMESTAMP=$( echo ${RELEASE_FULL_NAME} | sed -e 's/^\(.*\)-\([0-9]*\)$/\2/' )
27 28
echo "Found release ${RELEASE_FULL_NAME} with name ${RELEASE_NAME} and time stamp ${RELEASE_TIMESTAMP}, notes ID is ${RELEASE_NOTES_TXT_ASSET_ID}, tarball ID is ${RELEASE_TAR_GZ_ASSET_ID}" >&2
28 29
RELEASE_TAR_GZ_FILE_NAME="${RELEASE_FULL_NAME}.tar.gz"
29
- curl -o "${RELEASE_TAR_GZ_FILE_NAME}" -L -H 'Accept: application/octet-stream' -H 'Authorization: Bearer '${BEARER_TOKEN} 'https://api.github.com/repos/SAP/sailing-analytics/releases/assets/'${RELEASE_TAR_GZ_ASSET_ID}
30
- curl -o release-notes.txt -L -H 'Accept: application/octet-stream' -H 'Authorization: Bearer '${BEARER_TOKEN} 'https://api.github.com/repos/SAP/sailing-analytics/releases/assets/'${RELEASE_NOTES_TXT_ASSET_ID}
30
+ curl -o "${RELEASE_TAR_GZ_FILE_NAME}" -L -H 'Accept: application/octet-stream' -H 'Authorization: Bearer '${BEARER_TOKEN} 'https://api.github.com/repos/${GITHUB_REPOSITORY}/releases/assets/'${RELEASE_TAR_GZ_ASSET_ID}
31
+ curl -o release-notes.txt -L -H 'Accept: application/octet-stream' -H 'Authorization: Bearer '${BEARER_TOKEN} 'https://api.github.com/repos/${GITHUB_REPOSITORY}/releases/assets/'${RELEASE_NOTES_TXT_ASSET_ID}
31 32
echo "${RELEASE_TAR_GZ_FILE_NAME}"
32 33
fi
configuration/github-download-workflow-artifacts.sh
... ...
@@ -12,12 +12,13 @@
12 12
# an exit status of 2 is returned.
13 13
BRANCH="${1}"
14 14
BEARER_TOKEN="${2}"
15
+GITHUB_REPOSITORY="${3}"
15 16
UNIX_TIME=$( date +%s )
16 17
UNIX_DATE=$( date --iso-8601=second )
17 18
UNIX_TIME_YESTERDAY=$(( UNIX_TIME - 10*24*3600 )) # look back ten days in time, trying to catch even re-runs of older jobs
18 19
DATE_YESTERDAY=$( date --iso-8601=second -d @${UNIX_TIME_YESTERDAY} )
19 20
HEADERS_FILE=$( mktemp headersXXXXX )
20
-NEXT_PAGE="https://api.github.com/repos/SAP/sailing-analytics/actions/runs?created=${DATE_YESTERDAY/+/%2B}..${UNIX_DATE/+/%2B}&per_page=100"
21
+NEXT_PAGE="https://api.github.com/repos/${GITHUB_REPOSITORY}/actions/runs?created=${DATE_YESTERDAY/+/%2B}..${UNIX_DATE/+/%2B}&per_page=100"
21 22
ARTIFACTS_JSON=""
22 23
LATEST_RUN_STARTED_AT="0000-00-00T00:00:00Z"
23 24
# Now go through the pages as long as we have a non-empty NEXT_PAGE URL and find the completed "release" workflow that was started last
docker/makeImageForLatestRelease
... ...
@@ -1,5 +1,10 @@
1 1
#!/bin/bash
2
-release_prefix=$1
2
+release_prefix="$1"
3
+GITHUB_REPOSITORY="$2"
4
+OWNER=${GITHUB_REPOSITORY%%/*}
5
+REPO=${GITHUB_REPOSITORY##*/}
6
+REPO_LOWER=$(echo "$REPO" | tr '[:upper:]' '[:lower:]')
7
+PACKAGE="$OWNER/$REPO_LOWER"
3 8
GITROOT="`dirname $0`/.."
4 9
DOCKERDIR="${GITROOT}/docker"
5 10
DOCKERFILE="$DOCKERDIR/Dockerfile"
... ...
@@ -8,7 +13,7 @@ if [ "${release_prefix}" = "" ]; then
8 13
release_prefix="main-"
9 14
fi
10 15
pushd "${DOCKERDIR}"
11
-RELEASE_TAR_GZ_FILENAME=$( ${GITROOT}/configuration/github-download-release-assets.sh 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 "${release_prefix}" )
16
+RELEASE_TAR_GZ_FILENAME=$( ${GITROOT}/configuration/github-download-release-assets.sh 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 "${release_prefix}" "${GITHUB_REPOSITORY}" )
12 17
if [ "${RELEASE_TAR_GZ_FILENAME}" = "" ]; then
13 18
echo "No release with prefix ${release_prefix} found" >&2
14 19
else
... ...
@@ -20,7 +25,7 @@ else
20 25
cp "$GITROOT/java/target/configuration/JavaSE-11.profile" "$DOCKERDIR"
21 26
cd "$DOCKERDIR"
22 27
docker buildx create --name=container --driver=docker-container --use --bootstrap
23
- docker buildx build --builder=container --platform=linux/amd64,linux/arm64 --build-arg RELEASE=${release} -t ghcr.io/sap/sailing-analytics:${release} --push .
28
+ docker buildx build --builder=container --platform=linux/amd64,linux/arm64 --build-arg RELEASE=${release} -t ghcr.io/${PACKAGE}:${release} --push .
24 29
echo "Cleaning up..."
25 30
rm start env.sh JavaSE-11.profile ${RELEASE_TAR_GZ_FILENAME} release-notes.txt
26 31
fi
docker/makeImageForLatestRelease-arm
... ...
@@ -1,5 +1,10 @@
1 1
#!/bin/bash
2
-release_prefix=$1
2
+release_prefix="$1"
3
+GITHUB_REPOSITORY="$2"
4
+OWNER=${GITHUB_REPOSITORY%%/*}
5
+REPO=${GITHUB_REPOSITORY##*/}
6
+REPO_LOWER=$(echo "$REPO" | tr '[:upper:]' '[:lower:]')
7
+PACKAGE="$OWNER/$REPO_LOWER"
3 8
GITROOT="`dirname $0`/.."
4 9
DOCKERDIR="${GITROOT}/docker"
5 10
DOCKERFILE="$DOCKERDIR/Dockerfile"
... ...
@@ -8,7 +13,7 @@ if [ "${release_prefix}" = "" ]; then
8 13
release_prefix="main-"
9 14
fi
10 15
pushd "${DOCKERDIR}"
11
-RELEASE_TAR_GZ_FILENAME=$( ${GITROOT}/configuration/github-download-release-assets.sh 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 "${release_prefix}" )
16
+RELEASE_TAR_GZ_FILENAME=$( ${GITROOT}/configuration/github-download-release-assets.sh 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 "${release_prefix}" "${GITHUB_REPOSITORY}" )
12 17
if [ "${RELEASE_TAR_GZ_FILENAME}" = "" ]; then
13 18
echo "No release with prefix ${release_prefix} found" >&2
14 19
else
... ...
@@ -19,13 +24,13 @@ else
19 24
cp "$GITROOT/java/target/start" "$DOCKERDIR"
20 25
cp "$GITROOT/java/target/configuration/JavaSE-11.profile" "$DOCKERDIR"
21 26
cd "$DOCKERDIR"
22
- docker build --build-arg RELEASE=${release} -t ghcr.io/sap/sailing-analytics:${release}-arm .
27
+ docker build --build-arg RELEASE=${release} -t ghcr.io/${PACKAGE}:${release}-arm .
23 28
echo "Cleaning up..."
24 29
rm start env.sh JavaSE-11.profile ${RELEASE_TAR_GZ_FILENAME} release-notes.txt
25
- docker push ghcr.io/sap/sailing-analytics:${release}-arm
30
+ docker push ghcr.io/${PACKAGE}:${release}-arm
26 31
if [ "$SET_LATEST" = "1" ]; then
27
- docker tag ghcr.io/sap/sailing-analytics:${release}-arm ghcr.io/sap/sailing-analytics:latest-arm
28
- docker push ghcr.io/sap/sailing-analytics:latest-arm
32
+ docker tag ghcr.io/${PACKAGE}:${release}-arm ghcr.io/${PACKAGE}:latest-arm
33
+ docker push ghcr.io/${PACKAGE}:latest-arm
29 34
fi
30 35
fi
31 36
popd
docker/makeImageForLatestRelease-on-sapmachine11
... ...
@@ -1,5 +1,10 @@
1 1
#!/bin/bash
2
-release_prefix=$1
2
+release_prefix="$1"
3
+GITHUB_REPOSITORY="$2"
4
+OWNER=${GITHUB_REPOSITORY%%/*}
5
+REPO=${GITHUB_REPOSITORY##*/}
6
+REPO_LOWER=$(echo "$REPO" | tr '[:upper:]' '[:lower:]')
7
+PACKAGE="$OWNER/$REPO_LOWER"
3 8
GITROOT="`dirname $0`/.."
4 9
DOCKERDIR="${GITROOT}/docker"
5 10
DOCKERFILE="$DOCKERDIR/Dockerfile"
... ...
@@ -8,7 +13,7 @@ if [ "${release_prefix}" = "" ]; then
8 13
release_prefix="docker-11-"
9 14
fi
10 15
pushd "${DOCKERDIR}"
11
-RELEASE_TAR_GZ_FILENAME=$( ${GITROOT}/configuration/github-download-release-assets.sh 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 "${release_prefix}" )
16
+RELEASE_TAR_GZ_FILENAME=$( ${GITROOT}/configuration/github-download-release-assets.sh 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 "${release_prefix}" "${GITHUB_REPOSITORY}" )
12 17
if [ "${RELEASE_TAR_GZ_FILENAME}" = "" ]; then
13 18
echo "No release with prefix ${release_prefix} found" >&2
14 19
else
... ...
@@ -19,13 +24,13 @@ else
19 24
cp "$GITROOT/java/target/start" "$DOCKERDIR"
20 25
cp "$GITROOT/java/target/configuration/JavaSE-11.profile" "$DOCKERDIR"
21 26
cd "$DOCKERDIR"
22
- docker build --build-arg RELEASE=${release} -t ghcr.io/sap/sailing-analytics:${release} -f Dockerfile_sapsailing_on_sapmachine11 .
27
+ docker build --build-arg RELEASE=${release} -t ghcr.io/${PACKAGE}:${release} -f Dockerfile_sapsailing_on_sapmachine11 .
23 28
echo "Cleaning up..."
24 29
rm start env.sh JavaSE-11.profile ${RELEASE_TAR_GZ_FILENAME} release-notes.txt
25
- docker push ghcr.io/sap/sailing-analytics:${release}
30
+ docker push ghcr.io/${PACKAGE}:${release}
26 31
if [ "$SET_LATEST" = "1" ]; then
27
- docker tag ghcr.io/sap/sailing-analytics:${release} ghcr.io/sap/sailing-analytics:latest-11
28
- docker push ghcr.io/sap/sailing-analytics:latest-11
32
+ docker tag ghcr.io/${PACKAGE}:${release} ghcr.io/${PACKAGE}:latest-11
33
+ docker push ghcr.io/${PACKAGE}:latest-11
29 34
fi
30 35
fi
31 36
popd
docker/makeImageForLatestRelease-on-sapmachine17
... ...
@@ -1,5 +1,10 @@
1 1
#!/bin/bash
2
-release_prefix=$1
2
+release_prefix="$1"
3
+GITHUB_REPOSITORY="$2"
4
+OWNER=${GITHUB_REPOSITORY%%/*}
5
+REPO=${GITHUB_REPOSITORY##*/}
6
+REPO_LOWER=$(echo "$REPO" | tr '[:upper:]' '[:lower:]')
7
+PACKAGE="$OWNER/$REPO_LOWER"
3 8
GITROOT="`dirname $0`/.."
4 9
DOCKERDIR="${GITROOT}/docker"
5 10
DOCKERFILE="$DOCKERDIR/Dockerfile"
... ...
@@ -8,7 +13,7 @@ if [ "${release_prefix}" = "" ]; then
8 13
release_prefix="docker-17-"
9 14
fi
10 15
pushd "${DOCKERDIR}"
11
-RELEASE_TAR_GZ_FILENAME=$( ${GITROOT}/configuration/github-download-release-assets.sh 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 "${release_prefix}" )
16
+RELEASE_TAR_GZ_FILENAME=$( ${GITROOT}/configuration/github-download-release-assets.sh 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 "${release_prefix}" "${GITHUB_REPOSITORY}" )
12 17
if [ "${RELEASE_TAR_GZ_FILENAME}" = "" ]; then
13 18
echo "No release with prefix ${release_prefix} found" >&2
14 19
else
... ...
@@ -19,13 +24,13 @@ else
19 24
cp "$GITROOT/java/target/start" "$DOCKERDIR"
20 25
cp "$GITROOT/java/target/configuration/JavaSE-11.profile" "$DOCKERDIR"
21 26
cd "$DOCKERDIR"
22
- docker build --build-arg RELEASE=${release} -t ghcr.io/sap/sailing-analytics:${release} -f Dockerfile_sapsailing_on_sapmachine17 .
27
+ docker build --build-arg RELEASE=${release} -t ghcr.io/${PACKAGE}:${release} -f Dockerfile_sapsailing_on_sapmachine17 .
23 28
echo "Cleaning up..."
24 29
rm start env.sh JavaSE-11.profile ${RELEASE_TAR_GZ_FILENAME} release-notes.txt
25
- docker push ghcr.io/sap/sailing-analytics:${release}
30
+ docker push ghcr.io/${PACKAGE}:${release}
26 31
if [ "$SET_LATEST" = "1" ]; then
27
- docker tag ghcr.io/sap/sailing-analytics:${release} ghcr.io/sap/sailing-analytics:latest-17
28
- docker push ghcr.io/sap/sailing-analytics:latest-17
32
+ docker tag ghcr.io/${PACKAGE}:${release} ghcr.io/${PACKAGE}:latest-17
33
+ docker push ghcr.io/${PACKAGE}:latest-17
29 34
fi
30 35
fi
31 36
popd