diff options
-rwxr-xr-x | setup.sh | 233 |
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 |