File: entrypoint.sh

package info (click to toggle)
golang-github-crc-org-crc 2.34.0%2Bds1-2
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid, trixie
  • size: 2,548 kB
  • sloc: sh: 398; makefile: 326; javascript: 40
file content (139 lines) | stat: -rwxr-xr-x 4,703 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
#!/bin/sh

ARCH="${ARCH:-"amd64"}"
# Vars
BINARY=e2e.test
if [[ ${PLATFORM} == 'windows' ]]; then
    BINARY=e2e.test.exe
fi
BINARY_PATH="/opt/crc/bin/${PLATFORM}-${ARCH}/${BINARY}"

# Running options
CLEANUP_HOME="${CLEANUP_HOME:-"true"}"
# e2e tag picking
E2E_TAG_EXPRESSION="${E2E_TAG_EXPRESSION:-""}"
# Review this when go 1.16 with embed support
FEATURES_PATH=/opt/crc/features
TESTDATA_PATH=/opt/crc/testdata

# Results
RESULTS_PATH="${RESULTS_PATH:-/output}"
# results file name
RESULTS_FILE="${RESULTS_FILE:-"e2e"}"

if [ "${DEBUG:-}" = "true" ]; then
    set -xuo 
fi

# Validate conf
validate=true
[[ -z "${TARGET_HOST+x}" ]] \
    && echo "TARGET_HOST required" \
    && validate=false

[[ -z "${TARGET_HOST_USERNAME+x}" ]] \
    && echo "TARGET_HOST_USERNAME required" \
    && validate=false

[[ -z "${TARGET_HOST_KEY_PATH+x}" && -z "${TARGET_HOST_PASSWORD+x}" ]] \
    && echo "TARGET_HOST_KEY_PATH or TARGET_HOST_PASSWORD required" \
    && validate=false

[[ -z "${PULL_SECRET_FILE_PATH+x}" ]] \
    && echo "PULL_SECRET_FILE_PATH required" \
    && validate=false

[[ $validate == false ]] && exit 1

# Define remote connection
REMOTE="${TARGET_HOST_USERNAME}@${TARGET_HOST}"
if [[ ! -z "${TARGET_HOST_DOMAIN+x}" ]]; then
    REMOTE="${TARGET_HOST_USERNAME}@${TARGET_HOST_DOMAIN}@${TARGET_HOST}"
fi

# Increase ssh connectivity reliability 
RELIABLE_CONNECTION='-o ServerAliveInterval=30 -o ServerAliveCountMax=1200'
# Set SCP / SSH command with pass or key
NO_STRICT='-o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null'
if [[ ! -z "${TARGET_HOST_KEY_PATH+x}" ]]; then
    SCP="scp -r ${RELIABLE_CONNECTION} ${NO_STRICT} -i ${TARGET_HOST_KEY_PATH}"
    SSH="ssh ${RELIABLE_CONNECTION} ${NO_STRICT} -i ${TARGET_HOST_KEY_PATH}"
else
    SCP="sshpass -p ${TARGET_HOST_PASSWORD} scp -r ${RELIABLE_CONNECTION} ${NO_STRICT}" \
    SSH="sshpass -p ${TARGET_HOST_PASSWORD} ssh ${RELIABLE_CONNECTION} ${NO_STRICT}"
fi

echo "Copy resources to target"
# Create execution folder 
EXECUTION_FOLDER="/Users/${TARGET_HOST_USERNAME}/crc-e2e"
if [[ ${PLATFORM} == 'linux' ]]; then
    EXECUTION_FOLDER="/home/${TARGET_HOST_USERNAME}/crc-e2e"
fi
DATA_FOLDER="${EXECUTION_FOLDER}/out"
if [[ ${PLATFORM} == 'windows' ]]; then
    # Todo change for powershell cmdlet
    $SSH "${REMOTE}" "powershell.exe -c New-Item -ItemType directory -Path ${EXECUTION_FOLDER}/bin"
else
    $SSH "${REMOTE}" "mkdir -p ${EXECUTION_FOLDER}/bin"
fi

# Copy crc-e2e binary and pull-secret
# Review this when go 1.16 with embed support
$SCP "${BINARY_PATH}" "${REMOTE}:${EXECUTION_FOLDER}/bin"
$SCP "${PULL_SECRET_FILE_PATH}" "${REMOTE}:${EXECUTION_FOLDER}/pull-secret"
$SCP "${FEATURES_PATH}" "${REMOTE}:${EXECUTION_FOLDER}/bin"
# Testdata files
$SCP "${TESTDATA_PATH}" "${REMOTE}:${EXECUTION_FOLDER}"

echo "Running e2e tests"
# e2e envs
if [[ ${PLATFORM} == 'windows' ]]; then
    # BINARY_EXEC="(New-Object -ComObject "Shell.Application").minimizeall(); \$env:SHELL=\"powershell\"; "
    BINARY_EXEC="\$env:SHELL=\"powershell\"; "
fi
# e2e running options
if [[ ! -z "${BUNDLE_LOCATION+x}" ]]; then
    OPTIONS="--bundle-location=${BUNDLE_LOCATION} "
else
    OPTIONS="--bundle-location=\"\" "
fi
if [[ ${PLATFORM} == 'windows' ]]; then
    OPTIONS+="--pull-secret-file=C:\\Users\\${TARGET_HOST_USERNAME}\\crc-e2e\\pull-secret "
else
    OPTIONS+="--pull-secret-file=${EXECUTION_FOLDER}/pull-secret "
fi
if [[ ${PLATFORM} == 'macos' ]]; then
    PLATFORM="darwin"
fi
if [ "${CLEANUP_HOME}" = "false" ]; then
    OPTIONS+="--cleanup-home=false "
fi

TAGS="@${PLATFORM}"
if [ -n "${E2E_TAG_EXPRESSION}" ]; then
    TAGS+=" && ${E2E_TAG_EXPRESSION}"
fi
if [[ ${PLATFORM} == 'darwin' ]]; then
    OPTIONS+="--godog.tags=\\\"${TAGS}\\\" --godog.format=junit "
    BINARY_EXEC+="sudo su - ${TARGET_HOST_USERNAME} -c \"PATH=\$PATH:/usr/local/bin && cd ${EXECUTION_FOLDER}/bin && ./${BINARY} ${OPTIONS} > ${RESULTS_FILE}.results\""
else
    OPTIONS+="--godog.tags=\"${TAGS}\" --godog.format=junit "
    BINARY_EXEC+="cd ${EXECUTION_FOLDER}/bin && ./${BINARY} ${OPTIONS} > ${RESULTS_FILE}.results"
fi
# Execute command remote
$SSH ${REMOTE} ${BINARY_EXEC}

echo "Getting e2e tests results and logs"
# Get results
mkdir -p "${RESULTS_PATH}"
$SCP "${REMOTE}:${EXECUTION_FOLDER}/bin/${RESULTS_FILE}.results" "${RESULTS_PATH}"
$SCP "${REMOTE}:${EXECUTION_FOLDER}/bin/out/test-results" "${RESULTS_PATH}"
# xunit cleanup on results
pushd "${RESULTS_PATH}"
init_line=$(grep -n '<?xml version="1.0" encoding="UTF-8"?>' ${RESULTS_FILE}.results | awk '{split($0,n,":"); print n[1]}')
tail -n +$init_line ${RESULTS_FILE}.results > ${RESULTS_FILE}.xml
popd

echo "Cleanup target"
# Cleanup
$SSH "${REMOTE}" "rm -r ${EXECUTION_FOLDER}"