about summary refs log tree commit diff stats
path: root/setup.sh
diff options
context:
space:
mode:
Diffstat (limited to 'setup.sh')
-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
='n424' href='#n424'>424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467 468 469 470 471 472 473 474 475 476 477 478 479 480 481 482 483 484 485 486 487 488 489 490 491 492 493 494 495 496 497 498 499 500 501 502 503 504 505 506 507 508 509 510 511 512 513 514 515 516 517 518 519 520 521 522 523 524 525 526 527 528 529 530 531 532 533 534 535