#!/bin/sh ################################################################################ # 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. # ################################################################################ set -e cd "$(dirname "$0")" . "$(pwd -P)/config.sh" ################################################################################ # Move script to background if DSCIP_DAEMON_FORK is set to true # if [ "$DSCIP_DAEMON" = "true" ]; then if [ "$DSCIP_DAEMON_FORK" = "true" ] && [ ! "$FORKED" = "true" ]; then FORKED=true nohup "$0" "$@" > /dev/null 2>&1 exit 0 fi fi # If chroot is on, check if the user running this script is root. # # Root is needed for chroot to work. # if [ "$DSCIP_CHROOT" = "true" ]; then if [ ! "$(whoami)" = "root" ]; then echo "You need to run this script as root to use chroot." exit 1 fi if [ ! "$DSCIP_GITMODE" = "clone" ]; then echo "DSCIP_GITMODE needs to be in clone mode to use chroot." exit 1 fi CHROOT_DIRECTORY="jail/" else CHROOT_DIRECTORY="" fi # Check if script is currently running, and if not, reset LOCK # if [ -f "$WORKING_DIRECTORY/LOCK" ]; then LOCKED_PID=$(cat "$WORKING_DIRECTORY/LOCK") if ps -p "$LOCKED_PID" > /dev/null; then echo "Script still running. Exiting..." exit 0 else echo "Script not running, resetting lock..." rm "$WORKING_DIRECTORY/LOCK" fi fi echo "$$" > "$WORKING_DIRECTORY/LOCK" build () { # Print variables # { echo "################################################################################"; date; echo "################################################################################"; echo "DSCIP_GITREPO=$DSCIP_GITREPO"; echo "DSCIP_GITMODE=$DSCIP_GITMODE"; echo "DSCIP_BRANCH=$DSCIP_BRANCH"; echo "WORKING_DIRECTORY=$WORKING_DIRECTORY"; echo "DSCIP_PRE_CMD=$DSCIP_PRE_CMD"; echo "DSCIP_BUILD_CMD=$DSCIP_BUILD_CMD"; echo "DSCIP_POST_CMD=$DSCIP_POST_CMD"; echo "DSCIP_DAEMON=$DSCIP_DAEMON"; echo "DSCIP_DAEMON_FORK=$DSCIP_DAEMON_FORK"; echo "DSCIP_SLEEP=$DSCIP_SLEEP"; echo "DSCIP_DISREGARD_COMMIT_CHECK=$DSCIP_DISREGARD_COMMIT_CHECK"; echo "DSCIP_OUTPUT_TO=$DSCIP_OUTPUT_TO" } >> "$DSCIP_OUTPUT_TO" # Grab remote sources # if [ "$DSCIP_GITMODE" = "clone" ]; then if [ "$DSCIP_CHROOT" = "true" ]; then . "$WORKING_DIRECTORY"/chroot_file_list.sh >> "$DSCIP_OUTPUT_TO" git clone --depth 1 -b "$DSCIP_BRANCH" "$DSCIP_GITREPO" "$WORKING_DIRECTORY/$CHROOT_DIRECTORY/wrkdir" >> "$DSCIP_OUTPUT_TO" 2>&1 else rm -rf "$WORKING_DIRECTORY/$CHROOT_DIRECTORY/wrkdir" # Clean Up # git clone --depth 1 -b "$DSCIP_BRANCH" "$DSCIP_GITREPO" "$WORKING_DIRECTORY"/wrkdir >> "$DSCIP_OUTPUT_TO" 2>&1 # Clone git # fi elif [ "$DSCIP_GITMODE" = "pull" ]; then if [ ! -d "$WORKING_DIRECTORY/$CHROOT_DIRECTORY/wrkdir" ]; then git clone --depth 1 -b "$DSCIP_BRANCH" "$DSCIP_GITREPO" "$WORKING_DIRECTORY"/wrkdir >> "$DSCIP_OUTPUT_TO" 2>&1 fi cd wrkdir git pull >> "$DSCIP_OUTPUT_TO" 2>&1 else echo "Invalid GITMODE, choose either 'clone' or 'pull'" 2>> "$DSCIP_OUTPUT_TO" exit 1 fi if [ "$DSCIP_CHROOT" = "true" ]; then chroot () { cp "$DSCIP_BUILD_CMD" "$WORKING_DIRECTORY/$CHROOT_DIRECTORY/build.sh" "$(which chroot)" "$WORKING_DIRECTORY/$CHROOT_DIRECTORY" sh -xc "cd wrkdir && . /build.sh" } else chroot () { . "$1" } fi { cd "$WORKING_DIRECTORY/$CHROOT_DIRECTORY/wrkdir"; echo "Running pre-build commands..."; "$DSCIP_PRE_CMD"; echo "Running build commands..."; cd "$WORKING_DIRECTORY/$CHROOT_DIRECTORY/wrkdir"; chroot "$DSCIP_BUILD_CMD"; echo "Running post-build commands..."; cd "$WORKING_DIRECTORY/$CHROOT_DIRECTORY/wrkdir"; "$DSCIP_POST_CMD"; } >> "$DSCIP_OUTPUT_TO" 2>&1 echo "$CURRENT_COMMIT" > "$WORKING_DIRECTORY/LAST_COMMIT" # Save commit # } run () { mkdir -p "$WORKING_DIRECTORY" cd "$WORKING_DIRECTORY" # Loads last commit ha