diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 45e499231..b11445ad2 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -43,8 +43,26 @@ jobs: distribution: 'temurin' cache: 'maven' - - name: Build with Maven - run: export NO_AT_BRIDGE=1 && mvn clean verify -Djarsigner.skip=true -DskipTests=false -DtestWorkspace=/opt/actions-runner/_work/workspace + # - name: Build with Maven + # run: export NO_AT_BRIDGE=1 && mvn clean verify -Djarsigner.skip=true -DskipTests=false -DtestWorkspace=/opt/actions-runner/_work/workspace + + - name: Run Eclipse Update Site Test + run: | + chmod +x releng/update-site-tests/detect-latest-eclipse.sh + chmod +x releng/update-site-tests/test-update.sh + releng/update-site-tests/detect-latest-eclipse.sh + env: + LOGDIR: ${{ github.workspace }}/releng/update-site-tests/logs + REPORT_FILE: ${{ github.workspace }}/releng/update-site-tests/report.txt + + - name: Upload Eclipse Upgrade Logs and Report + if: ${{ always() }} + uses: actions/upload-artifact@v4 + with: + name: eclipse-update-site-test-logs + path: | + releng/update-site-tests/logs + releng/update-site-tests/report.txt - name: Publish Test Reports if: ${{ always() }} diff --git a/releng/update-site-tests/detect-latest-eclipse.sh b/releng/update-site-tests/detect-latest-eclipse.sh new file mode 100644 index 000000000..94504abf4 --- /dev/null +++ b/releng/update-site-tests/detect-latest-eclipse.sh @@ -0,0 +1,39 @@ +#!/bin/bash +set -e +set -o pipefail + +RELEASE_XML="https://ftp2.osuosl.org/pub/eclipse/technology/epp/downloads/release/release.xml" +EPP_BASE="https://ftp2.osuosl.org/pub/eclipse/technology/epp/downloads/release" + +echo "Fetching Eclipse release list..." + +LATEST_ECLIPSE_RELEASE=$(curl -s "$RELEASE_XML" \ + | grep -oE '[0-9]{4}-[0-9]{2}/R' \ + | sed 's|/R||' \ + | sort -r \ + | head -n1) + +if [ -z "$LATEST_ECLIPSE_RELEASE" ]; then + echo "❌ Could not detect latest Eclipse release" + exit 1 +fi + +echo "Latest Eclipse release detected: $LATEST_ECLIPSE_RELEASE" + +ECLIPSE_URL="$EPP_BASE/$LATEST_ECLIPSE_RELEASE/R/eclipse-cpp-$LATEST_ECLIPSE_RELEASE-R-linux-gtk-x86_64.tar.gz" + +echo "Resolved Eclipse URL:" +echo "$ECLIPSE_URL" + +if ! curl -sfI "$ECLIPSE_URL" > /dev/null; then + echo "❌ Eclipse archive not found at resolved URL" + exit 1 +fi + +echo "✅ Eclipse archive verified" +# Export for test script +export ECLIPSE_URL +export LATEST_ECLIPSE_RELEASE + +# Run your test +bash releng/update-site-tests/test-update.sh diff --git a/releng/update-site-tests/test-update.sh b/releng/update-site-tests/test-update.sh new file mode 100644 index 000000000..e8da42184 --- /dev/null +++ b/releng/update-site-tests/test-update.sh @@ -0,0 +1,169 @@ +#!/bin/bash +set -x +set -e +set -o pipefail + +# CONFIGURATION +ECLIPSE_URL="${ECLIPSE_URL:?ECLIPSE_URL not set}" +LATEST_ECLIPSE_RELEASE="${LATEST_ECLIPSE_RELEASE:?LATEST_ECLIPSE_RELEASE not set}" + +ECLIPSE_RELEASE_REPO="https://download.eclipse.org/releases/$LATEST_ECLIPSE_RELEASE" +STABLE_ZIP_URL="https://dl.espressif.com/dl/idf-eclipse-plugin/updates/com.espressif.idf.update-v4.0.0.zip" +RC_REPO="https://dl.espressif.com/dl/idf-eclipse-plugin/updates/latest/" +FEATURE_ID="com.espressif.idf.feature.feature.group" + +WORKDIR="${WORKDIR:-$PWD/releng/update-site-tests/workdir}" +LOGDIR="${LOGDIR:-$PWD/releng/update-site-tests/logs}" +REPORT="${REPORT_FILE:-$PWD/releng/update-site-tests/report.txt}" + +echo "Cleaning previous workdir and logs..." +rm -rf "${WORKDIR:?}" +rm -rf "${LOGDIR:?}" + +mkdir -p "$WORKDIR" "$LOGDIR" + +STEP_SUMMARY=() + +# STEP 1: DOWNLOAD AND EXTRACT ECLIPSE +echo "Downloading Eclipse..." +wget -q "$ECLIPSE_URL" -O "$WORKDIR/eclipse.tar.gz" +tar -xzf "$WORKDIR/eclipse.tar.gz" -C "$WORKDIR" +ECLIPSE_HOME=$(find "$WORKDIR" -maxdepth 1 -type d -name "eclipse*" | head -n1) +echo "Eclipse installed at: $ECLIPSE_HOME" +STEP_SUMMARY+=("Step 1: Eclipse downloaded and extracted - ✅") + +# STEP 2: DOWNLOAD AND UNZIP STABLE PLUGIN +echo "Downloading stable plugin zip..." +wget -q "$STABLE_ZIP_URL" -O "$WORKDIR/stable.zip" + +echo "Extracting stable plugin..." +mkdir -p "$WORKDIR/stable-repo" +unzip -q "$WORKDIR/stable.zip" -d "$WORKDIR/stable-repo" + +STABLE_REPO="file://$WORKDIR/stable-repo/artifacts/update" +STEP_SUMMARY+=("Step 2: Stable plugin downloaded and unzipped - ✅") + +# STEP 3: INSTALL STABLE PLUGIN +echo "Installing stable plugin..." +if ! "$ECLIPSE_HOME/eclipse" \ + -nosplash \ + -application org.eclipse.equinox.p2.director \ + -repository "$STABLE_REPO,$ECLIPSE_RELEASE_REPO" \ + -installIU "$FEATURE_ID" \ + -destination "$ECLIPSE_HOME" \ + -profile SDKProfile \ + -bundlepool "$WORKDIR/p2" \ + -roaming \ + -consoleLog \ + | tee "$LOGDIR/stable-install.log" +then + STEP_SUMMARY+=("Step 3: Stable plugin installation - ❌ FAILED") + echo "❌ Stable plugin installation failed" + exit 1 +fi + +echo "✅ Stable plugin installed successfully" +STEP_SUMMARY+=("Step 3: Stable plugin installed successfully - ✅") + +# STEP 4: INSTALL RC UPDATE +echo "Installing Release Candidate update..." +if ! "$ECLIPSE_HOME/eclipse" \ + -nosplash \ + -application org.eclipse.equinox.p2.director \ + -repository "$RC_REPO,$ECLIPSE_RELEASE_REPO" \ + -uninstallIU "$FEATURE_ID" \ + -installIU "$FEATURE_ID" \ + -destination "$ECLIPSE_HOME" \ + -profile SDKProfile \ + -bundlepool "$WORKDIR/p2" \ + -roaming \ + -consoleLog \ + | tee "$LOGDIR/rc-installation-verify.log" +then + STEP_SUMMARY+=("Step 4: Release Candidate update installation - ❌ FAILED") + echo "❌ Release Candidate update failed" + exit 1 +fi + +echo "✅ Release Candidate update installed successfully" +STEP_SUMMARY+=("Step 4: Release Candidate update installed successfully - ✅") + +# STEP 5: EXTRACT INSTALLED VERSIONS +STABLE_VERSION=$(grep -Eo "Installing $FEATURE_ID [0-9\.]+" "$LOGDIR/stable-install.log" | awk '{print $3}') +RC_VERSION=$(grep -Eo "Installing $FEATURE_ID [0-9\.]+" "$LOGDIR/rc-installation-verify.log" | awk '{print $3}') +UNINSTALL_VERSION=$(grep -Eo "Installing $FEATURE_ID [0-9\.]+" "$LOGDIR/rc-installation-verify.log" | awk '{print $3}') + +echo "✅ Versions summary:" +echo " Stable installed: $STABLE_VERSION" +echo " RC update applied: $RC_VERSION" +echo " RC update replaced: $UNINSTALL_VERSION" + +# STEP 6: CHECK FOR CONFLICTS +echo "Checking logs for conflicts..." +ERROR_PATTERNS="conflict|cannot complete|missing requirement" +CONFLICT_FILE="$LOGDIR/conflicts-detected.txt" + +if grep -Ei "$ERROR_PATTERNS" "$LOGDIR"/*.log > "$CONFLICT_FILE"; then + echo "❌ Conflicts detected" + STEP_SUMMARY+=("Step 5: Conflict check - ❌ conflicts found") + CONFLICT_STATUS="FAILED" +else + echo "✅ No conflicts detected" + echo "No conflicts found." > "$CONFLICT_FILE" + STEP_SUMMARY+=("Step 5: Conflict check - ✅") + CONFLICT_STATUS="PASSED" +fi + +# STEP 7: CAPTURE INSTALLED ROOTS +echo "Capturing installed roots..." +if !"$ECLIPSE_HOME/eclipse" \ + -nosplash \ + -application org.eclipse.equinox.p2.director \ + -listInstalledRoots \ + -destination "$ECLIPSE_HOME" \ + -profile SDKProfile \ + -consoleLog \ + | tee "$LOGDIR/installed-roots.txt" +then + STEP_SUMMARY+=("Step 6: Installed roots captured - ❌ FAILED") + echo "❌ Installed roots captured failed" + exit 1 +fi +echo "✅ Installed roots captured" +STEP_SUMMARY+=("Step 6: Installed roots captured - ✅") + +# STEP 8: GENERATE REPORT +{ + echo "ESP Eclipse Plug-in 'Update Site Test' Report" + echo "==============================================" + echo "" + + echo "Summary:" + for step in "${STEP_SUMMARY[@]}"; do + echo " - $step" + done + + echo "" + echo "Environment:" + echo " - Eclipse Version: $LATEST_ECLIPSE_RELEASE" + echo " - Eclipse URL: $ECLIPSE_URL" + echo " - Release Repo: $ECLIPSE_RELEASE_REPO" + + echo "" + echo "Versions Summary:" + echo " - Stable installed: $STABLE_VERSION" + echo " - RC update applied: $RC_VERSION" + echo " - RC update replaced: $UNINSTALL_VERSION" + + echo "" + echo "Conflict Status: $CONFLICT_STATUS" + echo "Conflict Details:" + cat "$CONFLICT_FILE" + + echo "" + echo "Installed Roots:" + cat "$LOGDIR/installed-roots.txt" + + echo "" + echo "Logs directory: $LOGDIR" +} > "$REPORT" \ No newline at end of file