Skip to content

Commit

Permalink
Add script to easily run CI jobs locally
Browse files Browse the repository at this point in the history
  • Loading branch information
Manu343726 committed Aug 28, 2018
1 parent 6248846 commit b4afd3f
Show file tree
Hide file tree
Showing 4 changed files with 118 additions and 3 deletions.
2 changes: 1 addition & 1 deletion .gitignore
Original file line number Diff line number Diff line change
@@ -1,3 +1,3 @@
build/
build*/
.ycm_extra_conf.py
*.tinyrefl
14 changes: 12 additions & 2 deletions ci/ci.sh
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
set -e

if [[ -z "$SOURCE_DIR" ]]; then
SOURCE_DIR=".."
SOURCE_DIR=`pwd`
fi

if [[ -z "$LLVM_VERSION" ]]; then
Expand All @@ -13,12 +13,22 @@ if [[ -z "$GENERATOR" ]]; then
GENERATOR=Ninja
fi

mkdir build && cd build
if [[ -z "$BUILD_DIR" ]]; then
BUILD_DIR=$SOURCE_DIR/build_${CI_JOB_NAME}_${HOSTNAME}
fi

echo Cross building: $CROSS_BUILDING
echo Source dir: $SOURCE_DIR
echo LLVM version: $LLVM_VERSION
echo Generator: $GENERATOR
echo Build directory: $BUILD_DIR

if [[ "$CLEAN_BUILD" == "YES" ]]; then
echo Cleaning up old build tree...
rm -rf $BUILD_DIR
fi

mkdir -p $BUILD_DIR && cd $BUILD_DIR

if [ "$CROSS_BUILDING" == "YES" ]; then
toolchain="-DCMAKE_TOOLCHAIN_FILE=/usr/share/toolchain.cmake"
Expand Down
55 changes: 55 additions & 0 deletions ci/run_job.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,55 @@
#!/bin/bash

# Full path to the ci/ directory, where this script is located
CI_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" >/dev/null && pwd )"
SRC_DIR=$CI_DIR/..
cd $CI_DIR

JOB_NAME=$1
OPTION=$2
IMAGE_VARIABLE=${JOB_NAME//-/_}__image
LLVM_VERSION_VARIABLE=${JOB_NAME//-/_}__variables__LLVM_VERSION
CROSS_BUILDING_VARIABLE=${JOB_NAME//-/_}__variables__CROSS_BUILDING


# Parse Giltab-ci config file
source yaml.sh
create_variables $SRC_DIR/.gitlab-ci.yml

IMAGE=${!IMAGE_VARIABLE}
LLVM_VERSION=${!LLVM_VERSION_VARIABLE}
LLVM_VERSION=${LLVM_VERSION//\"/}
CROSS_BUILDING=${!CROSS_BUILDING_VARIABLE}
CROSS_BUILDING=${CROSS_BUILDING//\"/}

if [[ -z "$IMAGE" ]]; then
>&2 echo No valid ci job named \"$JOB_NAME\" found
exit 1
fi

if [[ ! -z "$CROSS_BUILDING" ]]; then
CROSS_BUILDING_FLAG="-e CROSS_BUILDING=$CROSS_BUILDING"
fi

if [[ "$OPTION" == "--clean-build" ]]; then
CLEAN_BUILD_FLAG="-e CLEAN_BUILD=YES"
elif [[ "$OPTION" == "--help" ]]; then
echo run_job <job-name> [option]
echo " "
echo option:
echo --clean-build : Clean buildtree before build
echo --help : Show this help
exit
fi

if [[ -z "$LLVM_VERSION" ]]; then
>&2 echo LLVM_VERSION variable not set in job $JOB_NAME
exit 2
fi

echo Running job $JOB_NAME
echo Using docker image $IMAGE
echo CROSS_BUILDING=$CROSS_BUILDING
echo LLVM_VERSION=$LLVM_VERSION

docker run -ti --rm --hostname $JOB_NAME -v $SRC_DIR:/repo -w /repo -e CI_JOB_NAME=$JOB_NAME -e LLVM_VERSION=$LLVM_VERSION $CROSS_BUILDING_FLAG $CLEAN_BUILD_FLAG $IMAGE bash -c "./ci/ci.sh"
50 changes: 50 additions & 0 deletions ci/yaml.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,50 @@
#!/bin/bash

# Based on https://gist.github.com/pkuczynski/8665367

function parse_yaml() {
local yaml_file=$1
local prefix=$2
local s
local w
local fs

s='[[:space:]]*'
w='[a-zA-Z0-9_.-]*'
fs="$(echo @|tr @ '\034')"

(
sed -ne '/^--/s|--||g; s|\"|\\\"|g; s/\s*$//g;' \
-e "/#.*[\"\']/!s| #.*||g; /^#/s|#.*||g;" \
-e "s|^\($s\)\($w\)$s:$s\"\(.*\)\"$s\$|\1$fs\2$fs\3|p" \
-e "s|^\($s\)\($w\)$s[:-]$s\(.*\)$s\$|\1$fs\2$fs\3|p" |

awk -F"$fs" '{
indent = length($1)/2;
if (length($2) == 0) { conj[indent]="+";} else {conj[indent]="";}
vname[indent] = $2;
for (i in vname) {if (i > indent) {delete vname[i]}}
if (length($3) > 0) {
vn=""; for (i=0; i<indent; i++) {vn=(vn)(vname[i])("_")}
printf("%s%s%s%s=(\"%s\")\n", "'"$prefix"'",vn, $2, conj[indent-1],$3);
}
}' |

sed -e 's/_=/+=/g' |
awk 'BEGIN {
FS="=";
OFS="="
}
/(-|\.).*=/ {
gsub("-|\\.", "_", $1)
}
{ print }'

) < "$yaml_file"
}

function create_variables() {
local yaml_file="$1"
eval "$(parse_yaml "$yaml_file")"
}

0 comments on commit b4afd3f

Please sign in to comment.