about summary refs log tree commit diff stats
diff options
context:
space:
mode:
authorCharadon <dev@iotib.net>2022-09-28 15:59:44 -0400
committerCharadon <dev@iotib.net>2022-09-28 15:59:44 -0400
commit8bed3c1180a5840b4d4d7d2b74717550409feaf2 (patch)
tree362e97ca1293513b626defcfdfc7b88d0b17654b
parent6bf6ff6957413aa08fc62baf6646f2e96ea1aa82 (diff)
downloaddscip-8bed3c1180a5840b4d4d7d2b74717550409feaf2.tar.gz
setup.sh: Added setup.sh, which makes installing dscip much easier
-rwxr-xr-xsetup.sh233
1 files changed, 233 insertions, 0 deletions
diff --git a/setup.sh b/setup.sh
new file mode 100755
index 0000000..673919d
--- /dev/null
+++ b/setup.sh
@@ -0,0 +1,233 @@
+#!/bin/sh -eu
+# Simple script to quickly set up a DSCIP install.
+
+# Get directory where script is running from. As we'll need to come back here
+# when the setup script is done.
+CWD="$(dirname "$0")"
+
+PROJECT_NAME=""
+PROJECT_LOCATION=""
+PROJECT_URL=""
+PROJECT_BRANCH="master"
+TEMPLATE_DIR=""
+
+show_license() {
+	echo 'Copyright 2022 Charadon
+
+Licensed under the Apache License, Version 2.0 (the "License"); 
+you may not use this file except in compliance with the License. 
+You may obtain a copy of the License at
+
+http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software 
+distributed under the License is distributed on an "AS IS" BASIS, 
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 
+See the License for the specific language governing permissions and 
+limitations under the License.'
+}
+
+help_screen() {
+	echo "USAGE: $0: -n [name] -d [/path/to/dscip] -u [https://example.com/example.git] -b [branch_name] -t [/path/to/templates] (-h|-l)"
+	echo "========================================================================"
+	echo "-n | Name of Project. (Required)"
+	echo "-d | Path where you want dscip to install. (Required)"
+	echo "-u | URL to Git Repo. (Required)"
+	echo "-b | Branch to build. (Default: master)"
+	echo "-t | Path to Templates. (Optional)"
+	echo "-h | Shows this screen."
+	echo "-l | Shows license."
+	echo "If no argument is supplied. Program goes into interactive mode."
+	return 0
+}
+
+check_config() {
+	if [ "$PROJECT_NAME" = "" ];
+	then
+		echo "-n not set. Aborting..." && exit 1
+	elif [ "$PROJECT_LOCATION" = "" ];
+	then
+		echo "-d not set. Aborting..." && exit 1
+	elif [ "$PROJECT_URL" = "" ];
+	then
+		echo "-u not set. Aborting..." && exit 1
+	fi
+	return 0
+}
+
+install_dscip() {
+	echo "Installing dscip..."
+	set -x
+	git clone "https://opencode.net/charadon/dscip" "$PROJECT_LOCATION"
+	cd "$PROJECT_LOCATION"
+	# Modifying config.sh with variables obtained from setup.sh
+	sed -i "s}DSCIP_GITREPO=.*}DSCIP_GITREPO=\"$PROJECT_URL\"}g" config.sh
+	sed -i "s/DSCIP_NAME=.*/DSCIP_NAME=\"$PROJECT_NAME\"/g" config.sh
+	sed -i "s/DSCIP_BRANCH=.*/DSCIP_BRANCH=\"$PROJECT_BRANCH\"/g" config.sh
+	# Copy templates.
+	if [ ! "$TEMPLATE_DIR" = "" ];
+	then
+		cp "$TEMPLATE_DIR"/* .
+	fi
+	# Done. Go back to CWD.
+	set +x
+	printf "\n"
+	printf "\e[32mAll done. Be sure to add:\e[0m\n" 
+	echo "* * * * * $(dirname "$(readlink -f "$PROJECT_LOCATION")")/dscip"
+	printf "\e[32mTo your crontab! Usually by using \`crontab -e\`\e[0m\n\n"
+	printf "\e[32mAlternatively, you can run dscip as a daemon by modifying DSCIP_DAEMON in config.sh\n"
+	printf "and creating a daemon for your system's init system.\e[0m\n\n"
+	cd "$CWD"
+}
+
+
+# Non-interactive Mode
+set +u
+if [ ! "$1" = "" ];
+then
+	set -u
+	while getopts ':n:d:u:b:t:lh' options;
+	do
+		case "${options}" in
+			n) # Name
+				PROJECT_NAME="$OPTARG"
+				;;
+			d) # Directory to install to.
+				PROJECT_LOCATION="$OPTARG"
+				;;
+			u) # Git Repo URL
+				PROJECT_URL="$OPTARG"
+				;;
+			b) # Git Branch (Optional)
+				PROJECT_BRANCH="$OPTARG"
+				;;
+			t) # Template Directory (Optional)
+				TEMPLATE_DIR="$OPTARG"
+				;;
+			h) # Show Help Screen
+				help_screen
+				exit 0
+				;;
+			l) # Show License
+				show_license
+				exit 0
+				;;
+			*)
+				;;
+		esac
+	done
+	check_config
+	install_dscip
+	exit 0
+fi
+set -u
+
+# Interactive Mode
+echo "Welcome to DSCIP setup. This script will ask you a few questions."
+echo "Notes:"
+echo "    1. This script should be running as the user that will be building the software."
+echo "    2. Must have a cron daemon with the command: crontab -e, available."
+echo "By default, the script runs in interactive mode. But you can use command-line switches"
+echo "to use the set up script non-interactively. Use -h for more info."
+printf "\n"
+echo "If you feel you are ready. Press enter, otherwise press Ctrl-C to cancel."
+read -r
+
+
+ALL_CORRECT="false"
+
+question_name() {
+	PROJECT_NAME=""
+	while [ "$PROJECT_NAME" = "" ];
+	do
+		printf "What is the name of the project?: "
+		read -r PROJECT_NAME
+	done
+}
+
+question_location() {
+	PROJECT_LOCATION="/home/$USER/$PROJECT_NAME"
+	NEW_PROJECT_LOCATION=""
+	printf 'Where do you want to install DSCIP? (Default: %s): ' "$PROJECT_LOCATION"
+	read -r NEW_PROJECT_LOCATION
+	if [ "$NEW_PROJECT_LOCATION" = "" ];
+	then
+		return 0
+	else
+		PROJECT_LOCATION="$NEW_PROJECT_LOCATION"
+	fi
+}
+
+question_giturl() {
+	PROJECT_URL=""
+	while [ "$PROJECT_URL" = "" ];
+	do
+		printf "What is the URL of your Git Repo?: "
+		read -r PROJECT_URL
+	done
+}
+
+question_gitbranch() {
+	PROJECT_BRANCH="master"
+	printf 'What branch from the Git Repo do you want to use? (Default: %s): ' "$PROJECT_BRANCH"
+	read -r PROJECT_BRANCH
+}
+
+question_templates() {
+	TEMPLATE_DIR=""
+	printf "If you have a template directory of the pre,post,build,failed.sh scripts.\nEnter it's location here, otherwise press Enter: "
+	read -r TEMPLATE_DIR
+}
+
+question_allcorrect() {
+	echo "Is all this information correct? Press the number to edit specific variables:"
+	echo "1. Project Name: $PROJECT_NAME"
+	echo "2. DSCIP Location: $PROJECT_LOCATION"
+	echo "3. Git URL: $PROJECT_URL"
+	echo "4. Git Branch: $PROJECT_BRANCH"
+	echo "5. Template Directory: $TEMPLATE_DIR"
+	printf "\nIf all information is correct. Press Enter.\nOtherwise, use a number and then press enter to edit: "
+}
+
+question_name
+printf "\n"
+question_location
+printf "\n"
+question_giturl
+printf "\n"
+question_gitbranch
+printf "\n"
+question_templates
+printf "\n"
+
+CHOICE=""
+
+while [ "$ALL_CORRECT" = "false" ];
+do
+	question_allcorrect
+	read -r CHOICE
+	printf "\n"
+	case "$CHOICE" in
+		1)
+			question_name
+			;;
+		2)
+			question_location
+			;;
+		3)
+			question_giturl
+			;;
+		4)
+			question_gitbranch
+			;;
+		5)
+			question_templates
+			;;
+		*)
+			ALL_CORRECT="true"
+			;;
+	esac
+	printf "\n"
+done
+check_config
+install_dscip