feat: finalize projectwork CI jobs, docs and test integration

This commit is contained in:
2026-04-23 11:39:08 +03:00
parent 737bddd631
commit 20bdacf5c5
39 changed files with 1819 additions and 70 deletions
@@ -22,6 +22,7 @@ pipeline {
steps {
sh '''
set -eux
git config --global --add safe.directory '*' || true
rm -rf ./project
git clone "${MOBILE_REPO_URL}" ./project
git -C ./project checkout "${MOBILE_REPO_REF}"
@@ -68,8 +69,8 @@ pipeline {
dir('project') {
sh '''
set -eux
HW8_ROOT_PATH="${HW8_ROOT:-/workspace/hw8}"
COMPOSE_FILE="${HW8_ROOT_PATH}/config/compose/mobile-ci.compose.yml"
PROJECT_ROOT_PATH="${OTUS_WORKSPACE_ROOT:-/workspace/projectwork}"
COMPOSE_FILE="${PROJECT_ROOT_PATH}/config/compose/mobile-ci.compose.yml"
if docker compose version >/dev/null 2>&1; then
compose_cmd() { PROJECT_DIR="$PWD" docker compose -f "${COMPOSE_FILE}" "$@"; }
elif docker-compose version >/dev/null 2>&1; then
@@ -96,6 +97,42 @@ pipeline {
compose_cmd down -v --remove-orphans || true
compose_cmd up -d ${SERVICES}
WIREMOCK_CID="$(compose_cmd ps -q wiremock)"
if [ -z "${WIREMOCK_CID}" ]; then
echo "Wiremock container is not found"
exit 1
fi
if [ ! -f "./wiremock/mappings/wishlist-apk.json" ] || [ ! -f "./wiremock/__files/wishlist.apk" ]; then
echo "Missing wiremock APK assets in repository checkout: ./wiremock/mappings/wishlist-apk.json or ./wiremock/__files/wishlist.apk"
exit 1
fi
docker exec "${WIREMOCK_CID}" sh -lc 'rm -rf /home/wiremock/mappings /home/wiremock/__files && mkdir -p /home/wiremock/mappings /home/wiremock/__files'
tar -C ./wiremock -cf - . | docker exec -i "${WIREMOCK_CID}" sh -lc 'tar -C /home/wiremock -xf -'
docker restart "${WIREMOCK_CID}"
for i in $(seq 1 30); do
status="$(docker inspect -f '{{if .State.Health}}{{.State.Health.Status}}{{else}}starting{{end}}' "${WIREMOCK_CID}" || true)"
if [ "${status}" = "healthy" ]; then
break
fi
if [ "${i}" -eq 30 ]; then
echo "Wiremock is not healthy after reload"
docker logs "${WIREMOCK_CID}" || true
exit 1
fi
sleep 2
done
if echo "${APP_URL}" | grep -Eq 'https?://wiremock:8080'; then
APK_PATH="$(echo "${APP_URL}" | sed -E 's#https?://[^/]+##')"
if [ -z "${APK_PATH}" ]; then
APK_PATH="/wishlist.apk"
fi
if ! docker exec "${WIREMOCK_CID}" sh -lc "wget -qO- \"http://127.0.0.1:8080${APK_PATH}\" >/dev/null"; then
echo "Wiremock can't serve APK path ${APK_PATH}"
docker exec "${WIREMOCK_CID}" sh -lc 'ls -la /home/wiremock /home/wiremock/mappings /home/wiremock/__files' || true
docker logs "${WIREMOCK_CID}" || true
exit 1
fi
fi
EMULATORS=""
SELECTED=0
for service in android-emulator-1 android-emulator-2; do
@@ -205,6 +242,39 @@ pipeline {
done
exit 1
fi
if echo "${APP_URL}" | grep -Eq 'https?://wiremock:8080'; then
APK_PATH="$(echo "${APP_URL}" | sed -E 's#https?://[^/]+##')"
if [ -z "${APK_PATH}" ]; then
APK_PATH="/wishlist.apk"
fi
OLD_IFS="${IFS}"
IFS=','
for target in ${MOBILE_EMULATORS_VALUE}; do
service_name="$(echo "${target}" | cut -d'|' -f1)"
if [ -z "${service_name}" ]; then
continue
fi
emu_cid="$(docker ps -q --filter "name=mobileci-${service_name}" | head -n1 || true)"
if [ -z "${emu_cid}" ]; then
echo "Emulator container not found for service ${service_name}"
exit 1
fi
ready="false"
for i in $(seq 1 30); do
if docker exec "${emu_cid}" sh -lc "wget -qO- \"http://wiremock:8080${APK_PATH}\" >/dev/null"; then
ready="true"
break
fi
sleep 2
done
if [ "${ready}" != "true" ]; then
echo "APK URL is not reachable from ${service_name}: ${APP_URL}"
docker logs --tail 200 "${emu_cid}" || true
exit 1
fi
done
IFS="${OLD_IFS}"
fi
run_single_class() {
class_name="$1"
@@ -410,8 +480,8 @@ EOF
dir('project') {
sh '''
set +e
HW8_ROOT_PATH="${HW8_ROOT:-/workspace/hw8}"
COMPOSE_FILE="${HW8_ROOT_PATH}/config/compose/mobile-ci.compose.yml"
PROJECT_ROOT_PATH="${OTUS_WORKSPACE_ROOT:-/workspace/projectwork}"
COMPOSE_FILE="${PROJECT_ROOT_PATH}/config/compose/mobile-ci.compose.yml"
if docker compose version >/dev/null 2>&1; then
compose_cmd() { PROJECT_DIR="$PWD" docker compose -f "${COMPOSE_FILE}" "$@"; }
elif docker-compose version >/dev/null 2>&1; then