Skip to content

Instantly share code, notes, and snippets.

@casjay
Created April 14, 2023 21:42
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save casjay/32935412a5d8d4c0c62aaed8478e2940 to your computer and use it in GitHub Desktop.
Save casjay/32935412a5d8d4c0c62aaed8478e2940 to your computer and use it in GitHub Desktop.
dockerfile script
#!/usr/bin/env bash
#shellcheck shell=bash
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
##@Version : 202211211129-git
# @@Author : Jason Hempstead
# @@Contact : git-admin@casjaysdev.com
# @@License : LICENSE.md
# @@ReadME : dockerfile.sh --help
# @@Copyright : Copyright: (c) 2022 Jason Hempstead, Casjays Developments
# @@Created : Monday, Nov 21, 2022 11:29 EST
# @@File : dockerfile.sh
# @@Description : Update docker scripts
# @@Changelog : newScript
# @@TODO : Refactor code
# @@Other :
# @@Resource :
# @@Terminal App : no
# @@sudo/root : no
# @@Template : bash/system
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
APPNAME="$(basename "$0" 2>/dev/null)"
VERSION="202211211129-git"
HOME="${USER_HOME:-$HOME}"
USER="${SUDO_USER:-$USER}"
RUN_USER="${SUDO_USER:-$USER}"
SRC_DIR="${BASH_SOURCE%/*}"
export PATH="$HOME/Projects/github/casjay-dotfiles/scripts/bin:$PATH"
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
# Set bash options
trap 'exitCode=${exitCode:-$?};[ -n "$DOCKERFILE_SH_TEMP_FILE" ] && [ -f "$DOCKERFILE_SH_TEMP_FILE" ] && rm -Rf "$DOCKERFILE_SH_TEMP_FILE" &>/dev/null' EXIT
[ "$1" = "--debug" ] && set -xo pipefail && export SCRIPT_OPTS="--debug" && export _DEBUG="on"
[ "$1" = "--raw" ] && export SHOW_RAW="true"
set -o pipefail
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
__rm() { [ -e "$1" ] && rm -Rf "$1" 2>/dev/null || return 1; }
__mv() { [ -e "$1" ] && mv -f "$1" "$2" 2>/dev/null || return 1; }
__cp() { [ -e "$1" ] && cp -Rf "$1" "$2" 2>/dev/null || return 1; }
__rmw() { [ -d "$1" ] && rm -Rf "${1:?}"/* 2>/dev/null || return 1; }
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
while :; do
case "$1" in
--no-copy) RECREATE="no" && shift 1 ;;
--image) image="--image $2" && shift 2 ;;
--template) template="--template $2" && shift 2 ;;
--editor) OPEN_EDITOR="$2" && shift 2 ;;
--dirs) REPO_DIRS="${2//,/ }" && shift 2 ;;
--command) CREATE_CMD="gen-docker$2" && shift 2 ;;
--debug) export _DEBUG="on" && set -x && shift 1 ;;
--help) shift 1 && echo 'Options: --help --debug --dry-run --no-copy --editor=[yes/no] --template=[alpine/arch/debian/rhel/ubuntu/web/x11] --dirs=[dir1/dir2] --command=[file/mgr/both]' && exit ;;
--dry-run) echo "Enabling test" && SET_DOCKER_DEV_DIR="$HOME/.local/tmp/testing" && SET_DOCKER_GIT_DIR="/tmp" && shift 1 ;;
*) break ;;
esac
done
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
export IMAGE="${image:-}"
export TEMPLATE="${template:-}"
export OPEN_EDITOR="${OPEN_EDITOR:-yes}"
CREATE_CMD="${CREATE_CMD:-gen-dockerfile}"
DATE="$(date +'%Y%m%d%H%M')"
SET_DIR="$PWD"
exitCode=0
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
if [ $# -eq 0 ]; then
REPO_DIRS="$(ls -A "$DOCKER_GIT_DIR")"
else
REPO_DIRS="${*:-$REPO_DIRS}"
echo "Setting REPO_DIRS to $REPO_DIRS"
fi
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
echo "Setting generator to $CREATE_CMD"
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
if [ "$CREATE_CMD" = "gen-dockerfile" ] || [ "$CREATE_CMD" = "file" ]; then
DOCKER_GIT_DIR="${SET_DOCKER_GIT_DIR:-$HOME/Projects/github/casjaysdevdocker}"
DOCKER_DEV_DIR="${SET_DOCKER_DEV_DIR:-$HOME/.local/share/cdd/projects/buildx}"
printf '%s\n%s\n' "Setting BaseDir to $DOCKER_GIT_DIR" "Setting temp dir to $DOCKER_DEV_DIR"
mkdir -p "$DOCKER_GIT_DIR"
mkdir -p "$DOCKER_DEV_DIR"
for d in $REPO_DIRS; do
d=$(basename "$d")
builtin cd "$DOCKER_GIT_DIR" || exit 1
DIR_NEW="$(realpath "$DOCKER_DEV_DIR/$d" 2>/dev/null)"
DIR_OLD="$(realpath "$DOCKER_GIT_DIR/$d" 2>/dev/null)"
if [ ! -d "$DIR_NEW" ]; then
if [ -d "$DIR_OLD" ]; then
echo "Backing up $DIR_OLD to $DIR_OLD.$$"
backupapp --once "$d" "$DIR_OLD" &>/dev/null
__cp "$DIR_OLD" "$DIR_OLD.$$"
fi
mkdir -p "$DIR_NEW" "$DIR_OLD"
mkdir -p "$DIR_NEW/rootfs/usr/local/share/template-files/data"
mkdir -p "$DIR_NEW/rootfs/usr/local/share/template-files/config"
eval $CREATE_CMD --nogit --dir "$DIR_NEW" $TEMPLATE $IMAGE
sCode=$?
if [ $sCode -eq 0 ]; then
if [ -f "$DIR_OLD/Dockerfile" ] && [ -f "$DIR_NEW/Dockerfile.bak" ]; then
echo "Moving Dockerfile to Docker.bak"
__mv "$DIR_OLD/Dockerfile.bak" "$DIR_NEW/Dockerfile.$DATE.bak"
__mv "$DIR_OLD/Dockerfile" "$DIR_NEW/Dockerfile.bak"
elif [ -f "$DIR_OLD/Dockerfile" ]; then
echo "Moving Dockerfile to Docker.bak"
__mv "$DIR_OLD/Dockerfile" "$DIR_NEW/Dockerfile.bak"
fi
if [ -d "$DIR_OLD/rootfs.bak" ]; then
__mv "$DIR_OLD/rootfs.bak" "$DIR_NEW/rootfs.$DATE.bak"
fi
if [ -d "$DIR_OLD/rootfs" ] && [ ! -d "$DIR_OLD/rootfs.bak" ]; then
echo "Moving rootfs to rootfs.bak"
__mv "$DIR_OLD/rootfs" "$DIR_NEW/rootfs.bak"
fi
for otherDockerfile in "$DIR_OLD/Dockerfile"*; do
if [ -f "$otherDockerfile" ]; then
dockerFile_name="$(basename "$otherDockerfile")"
echo "Moving $dockerFile_name to $dockerFile_name.bak"
__cp "$otherDockerfile" "$DIR_NEW/$dockerFile_name.bak"
fi
done
if [ -d "$DIR_OLD/data" ]; then
echo "Moving data too rootfs/[share]/template-files/data"
__cp "$DIR_OLD/data/." "$DIR_NEW/rootfs/usr/local/share/template-files/data/"
__rm "$DIR_OLD/data"
fi
if [ -d "$DIR_OLD/config" ]; then
echo "Moving config too rootfs/[share]/template-files/config"
__cp "$DIR_OLD/config/." "$DIR_NEW/rootfs/usr/local/share/template-files/config/"
__rm "$DIR_OLD/config"
fi
if [ -d "$DIR_OLD/bin" ]; then
echo "Moving bin too rootfs/[local]/bin"
mkdir -p "$DIR_NEW/rootfs/usr/local/bin.bak"
__cp "$DIR_OLD/bin/." "$DIR_NEW/rootfs/usr/local/bin.bak"
__rm "$DIR_OLD/bin"
fi
if [ -d "$DIR_NEW/rootfs.bak/usr/local/share/template-files" ]; then
echo "Moving template files"
__cp "$DIR_NEW/rootfs.bak/usr/local/share/template-files/." "$DIR_NEW/rootfs/usr/local/share/template-files/"
fi
if [ ! -f "$DIR_NEW/Dockerfile" ] && builtin cd "$DIR_NEW"; then
echo "Failed to init $DIR_NEW"
exit 2
fi
if [ -d "$DIR_OLD/.git" ]; then
echo "Moving the git directory"
__mv "$DIR_OLD/.git" "$DIR_NEW/.git"
fi
if [ "$OPEN_EDITOR" = "yes" ]; then
echo "Opening code in $DIR_NEW"
code -nw "$DIR_NEW" && true && sleep 3 || false
sCode="$?"
fi
if [ -d "$DIR_NEW" ] && [ -d "$DIR_OLD" ]; then
echo "Deleting the old directory"
__rm "$DIR_OLD"
fi
if [ $sCode -eq 0 ] && [ "$RECREATE" != "no" ]; then
mkdir -p "$DIR_OLD" && __cp "$DIR_NEW/." "$DIR_OLD/" && __rm "$DIR_NEW"
if [ "$OPEN_EDITOR" = "yes" ] && cd "$DIR_OLD" && [ -d "$DIR_OLD/.git" ]; then
gitcommit "$DIR_OLD" all || exit 1
gitcommit "$DIR_OLD" all || exit 1
fi
fi
else
__rm "$DIR_NEW"
echo 'Something went wrong'
exitCode=$((1 + exitCode))
fi
sleep 3
else
echo "The dir exists: $DIR_NEW"
fi
printf '%s\n\n' "# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -"
done
exit $exitCode
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
elif [ "$CREATE_CMD" = "gen-dockermgr" ] || [ "$CREATE_CMD" = "mgr" ]; then
DOCKER_GIT_DIR="${DOCKER_GIT_DIR:-$HOME/Projects/github/dockermgr}"
DOCKER_DEV_DIR="${DOCKER_DEV_DIR:-$HOME/.local/share/cdd/projects/dockermgr}"
mkdir -p "$DOCKER_DEV_DIR"
for d in $REPO_DIRS; do
d=$(basename "$d")
builtin cd "$DOCKER_GIT_DIR" || exit 1
DIR_NEW="$(realpath "$DOCKER_DEV_DIR/$d" 2>/dev/null)"
DIR_OLD="$(realpath "$DOCKER_GIT_DIR/$d" 2>/dev/null)"
if [ ! -d "$DIR_NEW" ]; then
if [ -d "$DIR_OLD" ]; then
backupapp --once "$d" "$DIR_OLD" &>/dev/null
__cp "$DIR_OLD" "$DIR_OLD.$$"
fi
mkdir -p "$DIR_NEW" "$DIR_OLD" "$DIR_NEW/rootfs/data" "$DIR_NEW/rootfs/config"
if [ -f "$DIR_OLD/install.sh" ] && [ -f "$DIR_OLD/install.sh.bak" ]; then
echo "Moving install.sh to install.sh.bak"
__mv "$DIR_OLD/install.sh.bak" "$DIR_NEW/install.$DATE.bak"
__mv "$DIR_OLD/install.sh" "$DIR_NEW/install.sh.bak"
elif [ -f "$DIR_OLD/install.sh" ]; then
echo "Moving install.sh to install.sh.bak"
__cp "$DIR_OLD/install.sh" "$DIR_NEW/install.sh.bak"
fi
if [ -d "$DIR_OLD/rootfs.bak" ]; then
echo "Moving rootfs.bak to rootfs.$DATE.bak"
__mv "$DIR_OLD/rootfs.bak" "$DIR_NEW/rootfs.$DATE.bak"
fi
if [ -d "$DIR_OLD/rootfs" ] && [ ! -d "$DIR_OLD/rootfs.bak" ]; then
echo "Moving rootfs to rootfs.bak"
__mv "$DIR_OLD/rootfs" "$DIR_NEW/rootfs.bak"
fi
gitignore "$DIR_NEW" dirignore,default --automated
eval $CREATE_CMD --nogit --dir "$DIR_NEW"
sCode=$?
if [ -d "$DIR_NEW/rootfs.bak" ]; then
echo "Moving rootfs to rootfs.bak"
__cp "$DIR_NEW/rootfs.bak/." "$DIR_NEW/rootfs/"
fi
if [ -d "$DIR_OLD/dataDir" ]; then
echo "Moving dataDir to rootfs"
__cp "$DIR_OLD/dataDir/." "$DIR_NEW/rootfs/"
[ $sCode -eq 0 ] && __rm "$DIR_OLD/dataDir"
fi
[ -f "$DIR_NEW/install.sh" ] || { echo "Failed to init $DIR_NEW" && exit 2; }
[ -d "$DIR_OLD/.git" ] && echo "Moving the git directory" && __cp "$DIR_OLD/.git" "$DIR_NEW/.git"
builtin cd "$DIR_NEW" || exit 1
if [ "$OPEN_EDITOR" = "yes" ] && [ $sCode -eq 0 ]; then
echo "Opening code in $DIR_NEW"
code -nw "$DIR_NEW" && true && sleep 3 || false
sCode="$?"
fi
[ -d "$DIR_OLD" ] && __rmw "$DIR_OLD/"
if [ $sCode -eq 0 ] && [ "$RECREATE" != "no" ]; then
__cp "$DIR_NEW/." "$DIR_OLD/" && __rm "$DIR_NEW"
if [ "$OPEN_EDITOR" = "yes" ] && cd "$DIR_OLD" && [ -d "$DIR_OLD/.git" ]; then
gitcommit "$DIR_OLD" all || exit 1
gitcommit "$DIR_OLD" all || exit 1
fi
else
echo 'Something went wrong'
exitCode=$((1 + exitCode))
fi
sleep 3
else
echo "The dir exists: $DIR_NEW"
fi
printf '%s\n\n' "# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -"
done
elif [ "$CREATE_CMD" = "gen-dockerboth" ] || [ "$CREATE_CMD" = "gen-dockerall" ]; then
[ "$DOCKERFILE_RUN_BOTH" = "true" ] && exit 1
export DOCKERFILE_RUN_BOTH="true"
CREATE_CMD="" $0 --dirs "$REPO_DIRS" --command mgr $SET_DIR
CREATE_CMD="" $0 --dirs "$REPO_DIRS" --command file $SET_DIR
else
echo "Please choose an option: [mgr/file/both]"
exit 1
fi
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
# end
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment