-
-
Notifications
You must be signed in to change notification settings - Fork 209
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Add buildargs. Refactor to use functions for better readability
- Loading branch information
Lars Gohr
committed
Oct 7, 2019
1 parent
d9e2d30
commit a0a2102
Showing
3 changed files
with
147 additions
and
47 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,76 +1,126 @@ | ||
#!/bin/sh | ||
set -e | ||
|
||
echo "" # see https://github.com/actions/toolkit/issues/168 | ||
|
||
if [ -z "${INPUT_NAME}" ]; then | ||
echo "Unable to find the repository name. Did you set with.name?" | ||
exit 1 | ||
fi | ||
|
||
if [ -z "${INPUT_USERNAME}" ]; then | ||
echo "Unable to find the username. Did you set with.username?" | ||
exit 1 | ||
fi | ||
|
||
if [ -z "${INPUT_PASSWORD}" ]; then | ||
echo "Unable to find the password. Did you set with.password?" | ||
exit 1 | ||
fi | ||
|
||
function translateTag() { | ||
BRANCH=$(echo ${GITHUB_REF} | sed -e "s/refs\/heads\///g" | sed -e "s/\//-/g") | ||
# if there is a tag inside the name already | ||
if [ $(echo ${INPUT_NAME} | sed -e "s/://g") != ${INPUT_NAME} ]; then | ||
function main() { | ||
echo "" # see https://github.com/actions/toolkit/issues/168 | ||
|
||
sanitize "${INPUT_NAME}" "name" | ||
sanitize "${INPUT_USERNAME}" "username" | ||
sanitize "${INPUT_PASSWORD}" "password" | ||
|
||
translateDockerTag | ||
DOCKERNAME="${INPUT_NAME}:${TAG}" | ||
|
||
if uses "${INPUT_WORKDIR}"; then | ||
changeWorkingDirectory | ||
fi | ||
|
||
echo ${INPUT_PASSWORD} | docker login -u ${INPUT_USERNAME} --password-stdin ${INPUT_REGISTRY} | ||
|
||
BUILDPARAMS="" | ||
|
||
if uses "${INPUT_DOCKERFILE}"; then | ||
useCustomDockerfile | ||
fi | ||
if uses "${INPUT_BUILDARGS}"; then | ||
addBuildArgs | ||
fi | ||
if uses "${INPUT_CACHE}"; then | ||
useBuildCache | ||
fi | ||
|
||
if uses "${INPUT_SNAPSHOT}"; then | ||
pushWithSnapshot | ||
else | ||
pushWithoutSnapshot | ||
fi | ||
echo ::set-output name=tag::"${TAG}" | ||
|
||
docker logout | ||
} | ||
|
||
function sanitize() { | ||
if [ -z "${1}" ]; then | ||
>&2 echo "Unable to find the ${2}. Did you set with.${2}?" | ||
exit 1 | ||
fi | ||
} | ||
|
||
function translateDockerTag() { | ||
local BRANCH=$(echo ${GITHUB_REF} | sed -e "s/refs\/heads\///g" | sed -e "s/\//-/g") | ||
if hasCustomTag; then | ||
TAG=$(echo ${INPUT_NAME} | cut -d':' -f2) | ||
INPUT_NAME=$(echo ${INPUT_NAME} | cut -d':' -f1) | ||
elif [ "${BRANCH}" = "master" ]; then | ||
elif isOnMaster; then | ||
TAG="latest" | ||
# if it's a tag | ||
elif [ $(echo ${GITHUB_REF} | sed -e "s/refs\/tags\///g") != ${GITHUB_REF} ]; then | ||
elif isGitTag; then | ||
TAG="latest" | ||
# if it's a pull request | ||
elif [ $(echo ${GITHUB_REF} | sed -e "s/refs\/pull\///g") != ${GITHUB_REF} ]; then | ||
elif isPullRequest; then | ||
TAG="${GITHUB_SHA}" | ||
else | ||
TAG="${BRANCH}" | ||
fi; | ||
} | ||
|
||
translateTag | ||
DOCKERNAME="${INPUT_NAME}:${TAG}" | ||
function hasCustomTag() { | ||
[ $(echo ${INPUT_NAME} | sed -e "s/://g") != ${INPUT_NAME} ] | ||
} | ||
|
||
if [ ! -z "${INPUT_WORKDIR}" ]; then | ||
cd "${INPUT_WORKDIR}" | ||
fi | ||
function isOnMaster() { | ||
[ "${BRANCH}" = "master" ] | ||
} | ||
|
||
function isGitTag() { | ||
[ $(echo ${GITHUB_REF} | sed -e "s/refs\/tags\///g") != ${GITHUB_REF} ] | ||
} | ||
|
||
echo ${INPUT_PASSWORD} | docker login -u ${INPUT_USERNAME} --password-stdin ${INPUT_REGISTRY} | ||
function isPullRequest() { | ||
[ $(echo ${GITHUB_REF} | sed -e "s/refs\/pull\///g") != ${GITHUB_REF} ] | ||
} | ||
|
||
BUILDPARAMS="" | ||
function changeWorkingDirectory() { | ||
cd "${INPUT_WORKDIR}" | ||
} | ||
|
||
if [ ! -z "${INPUT_DOCKERFILE}" ]; then | ||
function useCustomDockerfile() { | ||
BUILDPARAMS="$BUILDPARAMS -f ${INPUT_DOCKERFILE}" | ||
fi | ||
} | ||
|
||
if [ ! -z "${INPUT_CACHE}" ]; then | ||
function addBuildArgs() { | ||
for arg in $(echo "${INPUT_BUILDARGS}" | tr ',' '\n'); do | ||
BUILDPARAMS="$BUILDPARAMS --build-arg ${arg}" | ||
echo "::add-mask::${arg}" | ||
done | ||
} | ||
|
||
function useBuildCache() { | ||
if docker pull ${DOCKERNAME} 2>/dev/null; then | ||
BUILDPARAMS="$BUILDPARAMS --cache-from ${DOCKERNAME}" | ||
fi | ||
fi | ||
} | ||
|
||
if [ "${INPUT_SNAPSHOT}" = "true" ]; then | ||
TIMESTAMP=`date +%Y%m%d%H%M%S` | ||
SHORT_SHA=$(echo "${GITHUB_SHA}" | cut -c1-6) | ||
SNAPSHOT_TAG="${TIMESTAMP}${SHORT_SHA}" | ||
SHA_DOCKER_NAME="${INPUT_NAME}:${SNAPSHOT_TAG}" | ||
function uses() { | ||
if [ ! -z "${1}" ]; then | ||
return 0 | ||
else | ||
return 1 | ||
fi | ||
} | ||
|
||
function pushWithSnapshot() { | ||
local TIMESTAMP=`date +%Y%m%d%H%M%S` | ||
local SHORT_SHA=$(echo "${GITHUB_SHA}" | cut -c1-6) | ||
local SNAPSHOT_TAG="${TIMESTAMP}${SHORT_SHA}" | ||
local SHA_DOCKER_NAME="${INPUT_NAME}:${SNAPSHOT_TAG}" | ||
docker build $BUILDPARAMS -t ${DOCKERNAME} -t ${SHA_DOCKER_NAME} . | ||
docker push ${DOCKERNAME} | ||
docker push ${SHA_DOCKER_NAME} | ||
echo ::set-output name=snapshot-tag::"${SNAPSHOT_TAG}" | ||
else | ||
} | ||
|
||
function pushWithoutSnapshot() { | ||
docker build $BUILDPARAMS -t ${DOCKERNAME} . | ||
docker push ${DOCKERNAME} | ||
fi | ||
echo ::set-output name=tag::"${TAG}" | ||
} | ||
|
||
docker logout | ||
main |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters