Commit 511a3d11 authored by Ivan Mazhukin's avatar Ivan Mazhukin Committed by Vitaly Lipatov

epm ci: get version now collecting ipfs db and app's list

parent a4a27b25
Pipeline #17088 passed with stage
in 15 seconds
......@@ -31,8 +31,8 @@
- `FULL_TEST`: полный прогон по IPFS на `alt:sisyphus` и `debian:bookworm`,
включает `CI_DOWNLOAD`, `CI_USE_IPFS` и `CI_IPFS_UPDATE`, тестирует все
приложения.
- `GET_VERSION`: сбор версий на `alt:p11`, без IPFS-стадий, тестирует все
приложения.
- `GET_VERSION`: сбор версий на `alt:p11`, включает `CI_USE_IPFS` и
`CI_IPFS_UPDATE`, тестирует все приложения.
- `CI_APPS`: список приложений для теста, разделенный пробелами.
- Пример: `CI_APPS=firefox chrome`
- Если пусто или не задано, берутся все приложения из `epm play --short`.
......@@ -64,10 +64,16 @@
- `CI_DOWNLOAD`: включает стадии загрузки и публикации IPFS базы.
- `CI_USE_IPFS`: включает флаг `--ipfs` для `epm play`.
- `CI_IPFS_UPDATE`: включает обновление IPFS базы во время теста.
- При включенном `CI_IPFS_UPDATE` и отсутствии `ipfs` устанавливается `kubo`.
- Для обновления базы используется внешний IPFS API:
`/ip4/91.232.225.49/tcp/5001`.
Куда попадают результаты
- `FULL_TEST`: `epm-play-ci-results/epm-results`.
- `GET_VERSION`: `epm-play-ci-results/version`.
- Версия EPM: `version/ALTLinux-p11/epm-play-versions/eepm`.
- IPFS база: `version/ALTLinux-p11/eget-ipfs-db.txt`.
- Список приложений: `version/ALTLinux-p11/epm-play-list.txt`.
- Любые пользовательские тесты: `epm-play-ci-results/experiments`.
Метки коммитов результатов
......
......@@ -34,8 +34,8 @@ if [ -n "$FULL_TEST" ]; then
elif [ -n "$GET_VERSION" ]; then
systems="alt:p11"
USE_DOWNLOAD=0
USE_IPFS=0
USE_IPFS_UPDATE=0
USE_IPFS=1
USE_IPFS_UPDATE=1
CI_APPS=""
RESULTS_DIR="version"
RESULTS_LABEL="get-version"
......
......@@ -12,6 +12,52 @@ WORKDIR="results"
RESULTS_DIR="${CI_RESULTS_DIR:-epm-results}"
RESULTS_LABEL="${CI_RESULTS_LABEL:-custom}"
merge_ipfs_db() {
local os_dir="$1"
local ipfs_dir target_db merged_db dedup_db part
ipfs_dir="$os_dir/ipfs"
target_db="$os_dir/eget-ipfs-db.txt"
if [ ! -d "$ipfs_dir" ]; then
if [ -s "$target_db" ]; then
echo "WARNING: $ipfs_dir is missing, keeping existing $target_db"
return 0
fi
echo "WARNING: $ipfs_dir is missing and $target_db is empty or absent, skipping IPFS DB update"
return 0
fi
merged_db="$(mktemp)"
dedup_db="$(mktemp)"
if [ -f "$ipfs_dir/eget-ipfs-db.txt" ]; then
cat "$ipfs_dir/eget-ipfs-db.txt" >> "$merged_db"
fi
if [ -d "$ipfs_dir/db-parts" ]; then
for part in "$ipfs_dir"/db-parts/*.txt; do
[ -f "$part" ] || continue
cat "$part" >> "$merged_db"
done
fi
if [ -s "$merged_db" ]; then
awk 'NF && !seen[$0]++' "$merged_db" > "$dedup_db"
fi
if [ -s "$dedup_db" ]; then
mv -f "$dedup_db" "$target_db"
elif [ -s "$target_db" ]; then
echo "WARNING: merged IPFS DB is empty, keeping existing $target_db"
else
echo "WARNING: merged IPFS DB is empty and $target_db is empty or absent, skipping IPFS DB update"
fi
rm -f "$merged_db" "$dedup_db"
rm -rf "$ipfs_dir" || true
}
META_DIR="meta"
if [ "$RESULTS_DIR" != "epm-results" ]; then
META_DIR="${RESULTS_DIR}/meta"
......@@ -37,6 +83,18 @@ rm -rf "${RESULTS_DIR}"/*/epm-logs "${RESULTS_DIR}"/*/epm-errors "$META_DIR" ||
mkdir -p "$RESULTS_DIR"
rsync -a "$CI_PROJECT_DIR/epm-results/" "${RESULTS_DIR}/" || true
# collect full play list
if [ "$RESULTS_DIR" = "version" ]; then
mkdir -p "$RESULTS_DIR/ALTLinux-p11/epm-play-versions"
"$CI_PROJECT_DIR/bin/epm" --short --version > "$RESULTS_DIR/ALTLinux-p11/epm-play-versions/eepm"
"$CI_PROJECT_DIR/bin/epm" play --full-list-all > "$RESULTS_DIR/ALTLinux-p11/epm-play-list.txt"
fi
# merge IPFS DB with old lines and per-app updates
if [ "$RESULTS_DIR" = "version" ]; then
merge_ipfs_db "$RESULTS_DIR/ALTLinux-p11"
fi
# ci info
mkdir -p "$META_DIR"
echo "$CI_PIPELINE_ID" > "${META_DIR}/pipeline-id"
......
......@@ -8,6 +8,7 @@ CI_SYSTEM_ID="$ID-$VERSION_ID"
# args
APP="$1"
SAFE_APP="${APP//[^a-zA-Z0-9_]/_}"
# vars
SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)"
......@@ -21,6 +22,8 @@ ERR_DIR="$RESULTS_ROOT/epm-errors"
LOG_DIR="$RESULTS_ROOT/epm-logs"
REQ_DIR="$RESULTS_ROOT/epm-requires"
FILES_DIR="$RESULTS_ROOT/epm-files"
IPFS_DIR="$RESULTS_ROOT/ipfs"
IPFS_PARTS_DIR="$IPFS_DIR/db-parts"
mkdir -p "$PLAY_DIR" "$ERR_DIR" "$LOG_DIR" "$REQ_DIR" "$FILES_DIR"
......@@ -30,10 +33,31 @@ cd "$REPO_ROOT/bin"
PLAY_OPTS="--latest"
if [ -n "${CI_USE_IPFS:-}" ]; then
PLAY_OPTS="$PLAY_OPTS --ipfs"
export EGET_IPFS_API=/ip4/91.232.225.49/tcp/5001
if [ -n "${CI_IPFS_UPDATE:-}" ]; then
export EGET_IPFS_FORCE_LOAD=1
export EGET_IPFS_API=/ip4/91.232.225.49/tcp/5001
./epm -y install kubo
ipfs --api "$EGET_IPFS_API" diag sys >/dev/null 2>&1 || {
echo "ERROR: can't access external ipfs API ($EGET_IPFS_API)"
}
fi
fi
if [ -z "${CI_IPFS_UPDATE:-}" ]; then
export EPM_IPFS_DB_UPDATE_SKIPPING=1
IPFS_DB_CAPTURE=0
EGET_DB_PATH="/var/lib/eepm/eget-ipfs-db.txt"
PRE_DB_SNAPSHOT=""
if [ -n "${CI_USE_IPFS:-}" ] && [ -n "${CI_IPFS_UPDATE:-}" ]; then
IPFS_DB_CAPTURE=1
mkdir -p "$IPFS_PARTS_DIR"
if [ -f "$EGET_DB_PATH" ]; then
PRE_DB_SNAPSHOT="$(mktemp)"
cp -f "$EGET_DB_PATH" "$PRE_DB_SNAPSHOT"
fi
fi
echo "Installing $APP"
......@@ -60,6 +84,20 @@ else
mv -vf "$LOG_DIR/$APP.log" "$ERR_DIR/$APP.log"
fi
# Save updated IPFS DB and per-app delta for summary merge.
if [ "$IPFS_DB_CAPTURE" -eq 1 ] && [ -f "$EGET_DB_PATH" ]; then
cp -f "$EGET_DB_PATH" "$IPFS_DIR/eget-ipfs-db.txt"
if [ -n "$PRE_DB_SNAPSHOT" ] && [ -f "$PRE_DB_SNAPSHOT" ]; then
grep -Fvx -f "$PRE_DB_SNAPSHOT" "$EGET_DB_PATH" > "$IPFS_PARTS_DIR/$SAFE_APP.txt" || true
else
cp -f "$EGET_DB_PATH" "$IPFS_PARTS_DIR/$SAFE_APP.txt"
fi
fi
if [ -n "$PRE_DB_SNAPSHOT" ] && [ -f "$PRE_DB_SNAPSHOT" ]; then
rm -f "$PRE_DB_SNAPSHOT"
fi
# cleanup empty error files and dir
if [ -d "$ERR_DIR" ]; then
find "$ERR_DIR" -type f -size 0 -delete
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment