1#!/usr/bin/env bash
2
3# ------------------------------------------------------- #
4#
5# Skeleton for common build entry script for all elastic
6# clients. Needs to be adapted to individual client usage.
7#
8# Must be called: ./.ci/make.sh <target> <params>
9#
10# Version: 1.1.0
11#
12# Targets:
13# ---------------------------
14# assemble <VERSION> : build client artefacts with version
15# bump     <VERSION> : bump client internals to version
16# codegen  <VERSION> : generate endpoints
17# docsgen  <VERSION> : generate documentation
18# examplegen         : generate the doc examples
19# clean              : clean workspace
20#
21# ------------------------------------------------------- #
22
23# ------------------------------------------------------- #
24# Bootstrap
25# ------------------------------------------------------- #
26
27script_path=$(dirname "$(realpath -s "$0")")
28repo=$(realpath "$script_path/../")
29
30# shellcheck disable=SC1090
31CMD=$1
32TASK=$1
33TASK_ARGS=()
34VERSION=$2
35STACK_VERSION=$VERSION
36set -euo pipefail
37
38product="elastic/elasticsearch-php"
39output_folder=".ci/output"
40codegen_folder=".ci/output"
41OUTPUT_DIR="$repo/${output_folder}"
42REPO_BINDING="${OUTPUT_DIR}:/sln/${output_folder}"
43mkdir -p "$OUTPUT_DIR"
44
45echo -e "\033[34;1mINFO:\033[0m PRODUCT ${product}\033[0m"
46echo -e "\033[34;1mINFO:\033[0m VERSION ${STACK_VERSION}\033[0m"
47echo -e "\033[34;1mINFO:\033[0m OUTPUT_DIR ${OUTPUT_DIR}\033[0m"
48
49# ------------------------------------------------------- #
50# Parse Command
51# ------------------------------------------------------- #
52
53case $CMD in
54    clean)
55        echo -e "\033[36;1mTARGET: clean workspace $output_folder\033[0m"
56        rm -rfv "$output_folder"
57        echo -e "\033[32;1mTARGET: clean - done.\033[0m"
58        exit 0
59        ;;
60    assemble)
61        if [ -v $VERSION ]; then
62            echo -e "\033[31;1mTARGET: assemble -> missing version parameter\033[0m"
63            exit 1
64        fi
65        echo -e "\033[36;1mTARGET: assemble artefact $VERSION\033[0m"
66        TASK=release
67        TASK_ARGS=("$VERSION" "$output_folder")
68        ;;
69    codegen)
70        if [ -v $VERSION ]; then
71            echo -e "\033[31;1mTARGET: codegen -> missing version parameter\033[0m"
72            exit 1
73        fi
74        echo -e "\033[36;1mTARGET: codegen API v$VERSION\033[0m"
75        TASK=codegen
76        # VERSION is BRANCH here for now
77        TASK_ARGS=("$VERSION" "$codegen_folder")
78        ;;
79    docsgen)
80        if [ -v $VERSION ]; then
81            echo -e "\033[31;1mTARGET: docsgen -> missing version parameter\033[0m"
82            exit 1
83        fi
84        echo -e "\033[36;1mTARGET: generate docs for $VERSION\033[0m"
85        TASK=codegen
86        # VERSION is BRANCH here for now
87        TASK_ARGS=("$VERSION" "$codegen_folder")
88        ;;
89    examplesgen)
90        echo -e "\033[36;1mTARGET: generate examples\033[0m"
91        TASK=codegen
92        # VERSION is BRANCH here for now
93        TASK_ARGS=("$VERSION" "$codegen_folder")
94        ;;
95    bump)
96        if [ -v $VERSION ]; then
97            echo -e "\033[31;1mTARGET: bump -> missing version parameter\033[0m"
98            exit 1
99        fi
100        echo -e "\033[36;1mTARGET: bump to version $VERSION\033[0m"
101        TASK=bump
102        # VERSION is BRANCH here for now
103        TASK_ARGS=("$VERSION")
104        ;;
105    *)
106        echo -e "\nUsage:\n\t $CMD is not supported right now\n"
107        exit 1
108esac
109
110
111# ------------------------------------------------------- #
112# Build Container
113# ------------------------------------------------------- #
114
115#echo -e "\033[34;1mINFO: building $product container\033[0m"
116
117#docker build --file .ci/Dockerfile --tag ${product} \
118#  --build-arg USER_ID="$(id -u)" \
119#  --build-arg GROUP_ID="$(id -g)" .
120
121
122# ------------------------------------------------------- #
123# Run the Container
124# ------------------------------------------------------- #
125
126#echo -e "\033[34;1mINFO: running $product container\033[0m"
127
128#docker run \
129# --env "DOTNET_VERSION" \
130# --name test-runner \
131# --volume $REPO_BINDING \
132# --rm \
133# $product \
134# /bin/bash -c "./build.sh $TASK ${TASK_ARGS[*]} && chown -R $(id -u):$(id -g) ."
135
136# ------------------------------------------------------- #
137# Post Command tasks & checks
138# ------------------------------------------------------- #
139
140if [[ "$CMD" == "assemble" ]]; then
141    artefact_name="elasticsearch-php-${VERSION}"
142    echo -e "\033[34;1mINFO: copy artefacts\033[0m"
143    rsync -arv --exclude=.ci --exclude=.git --filter=':- .gitignore' "$PWD" "${output_folder}/."
144
145    echo -e "\033[34;1mINFO: rename artefacts\033[0m"
146    mv -v "${output_folder}/elasticsearch-php" "${output_folder}/${artefact_name}"
147
148    echo -e "\033[34;1mINFO: build artefacts\033[0m"
149    cd ./.ci/output && tar -czvf ${artefact_name}.tar.gz "${artefact_name}/." && cd -
150
151    echo -e "\033[34;1mINFO: cleanup\033[0m"
152    rm -Rf "${output_folder}/${artefact_name}"
153
154    echo -e "\033[34;1mINFO: validate artefact\033[0m"
155    proof=`ls ${output_folder}`
156
157	if [ $proof == "${artefact_name}.tar.gz" ]; then
158		echo -e "\033[32;1mTARGET: assemble - success: $artefact_name.tar.gz\033[0m"
159	else
160		echo -e "\033[31;1mTARGET: assemble failed, empty workspace!\033[0m"
161		exit 1
162	fi
163fi
164
165if [[ "$CMD" == "bump" ]]; then
166    echo "TODO"
167fi
168
169if [[ "$CMD" == "codegen" ]]; then
170    echo "TODO"
171fi
172
173if [[ "$CMD" == "docsgen" ]]; then
174    echo "TODO"
175fi
176
177if [[ "$CMD" == "examplesgen" ]]; then
178    echo "TODO"
179fi