Add renovate tests #35

Merged
kovagoadi merged 21 commits from add-renovate-tests into main 2025-11-22 17:13:01 +01:00
3 changed files with 129 additions and 84 deletions
Showing only changes of commit 425a6fa692 - Show all commits

View File

@@ -6,24 +6,24 @@ on:
pull_request: pull_request:
jobs: jobs:
test-renovate: # test-renovate:
runs-on: ubuntu-latest # runs-on: ubuntu-latest
container: ghcr.io/renovatebot/renovate:42.8.1 # container: ghcr.io/renovatebot/renovate:42.8.1
steps: # steps:
- name: Checkout # - name: Checkout
uses: actions/checkout@v5.0.0 # uses: actions/checkout@v5.0.0
- name: Run Renovate Test Script # - name: Run Renovate Test Script
run: bash scripts/test-renovate.sh # run: bash scripts/test-renovate.sh
env: # env:
RENOVATE_CONFIG_FILE: "/workspace/kovagoadi.hu/Renovate/renovate-config.js" # RENOVATE_CONFIG_FILE: "/workspace/kovagoadi.hu/Renovate/renovate-config.js"
LOG_LEVEL: "debug" # LOG_LEVEL: "debug"
RENOVATE_TOKEN: ${{ secrets.RENOVATE_TEST_TOKEN }} # RENOVATE_TOKEN: ${{ secrets.RENOVATE_TEST_TOKEN }}
GITHUB_COM_TOKEN: ${{ secrets.RENOVATE_GITHUB_TOKEN }} # GITHUB_COM_TOKEN: ${{ secrets.RENOVATE_GITHUB_TOKEN }}
e2e-renovate: e2e-renovate:
runs-on: ubuntu-latest runs-on: ubuntu-latest
needs: test-renovate # needs: test-renovate
container: ghcr.io/renovatebot/renovate:42.8.1 container: ghcr.io/renovatebot/renovate:42.8.1
steps: steps:
- name: Checkout - name: Checkout

View File

@@ -39,44 +39,89 @@ GITEA_API_URL="https://gitea.kovagoadi.hu/api/v1"
REPO_OWNER="renovate-test" REPO_OWNER="renovate-test"
REPO_NAME="test" REPO_NAME="test"
# Function to clean up PRs # Function to clean up PRs and reset repo
cleanup() { cleanup() {
echo "Cleaning up PRs..." echo "Cleaning up..."
# Get all open PRs/issues created by the bot (or just all open ones in this test repo)
# Note: In a real scenario, we might want to filter by author, but for this honeypot repo, all open PRs are fair game. # 1. Delete all Open PRs
PRS=$(curl -s -H "Authorization: token $RENOVATE_TOKEN" "$GITEA_API_URL/repos/$REPO_OWNER/$REPO_NAME/pulls?state=open") PRS=$(curl -s -H "Authorization: token $RENOVATE_TOKEN" "$GITEA_API_URL/repos/$REPO_OWNER/$REPO_NAME/pulls?state=open")
# Check if jq is installed, if not, try to install or use python
if ! command -v jq &> /dev/null; then
echo "jq not found, attempting to install..."
# Attempt to install jq (assuming debian/ubuntu based container)
if [ -w /var/lib/apt/lists ]; then
apt-get update && apt-get install -y jq
else
# Download static binary if no root
curl -L -o jq https://github.com/stedolan/jq/releases/download/jq-1.6/jq-linux64
chmod +x jq
export PATH=$PATH:$PWD
fi
fi
# Extract PR indexes
PR_INDEXES=$(echo "$PRS" | jq -r '.[].number') PR_INDEXES=$(echo "$PRS" | jq -r '.[].number')
for INDEX in $PR_INDEXES; do for INDEX in $PR_INDEXES; do
if [ "$INDEX" != "null" ]; then if [ "$INDEX" != "null" ]; then
echo "Deleting PR #$INDEX..." echo "Deleting PR #$INDEX..."
curl -s -X DELETE -H "Authorization: token $RENOVATE_TOKEN" "$GITEA_API_URL/repos/$REPO_OWNER/$REPO_NAME/issues/$INDEX" curl -s -X DELETE -H "Authorization: token $RENOVATE_TOKEN" "$GITEA_API_URL/repos/$REPO_OWNER/$REPO_NAME/issues/$INDEX"
fi fi
done done
# 2. Delete renovate.json from main branch to reset state (if exists)
FILE_INFO=$(curl -s -H "Authorization: token $RENOVATE_TOKEN" "$GITEA_API_URL/repos/$REPO_OWNER/$REPO_NAME/contents/renovate.json?ref=main")
FILE_SHA=$(echo "$FILE_INFO" | jq -r '.sha')
if [ "$FILE_SHA" != "null" ] && [ -n "$FILE_SHA" ]; then
echo "Deleting renovate.json to reset repository state..."
curl -s -X DELETE -H "Authorization: token $RENOVATE_TOKEN" \
-H "Content-Type: application/json" \
-d "{\"message\": \"Cleanup: Delete renovate.json\", \"sha\": \"$FILE_SHA\", \"branch\": \"main\"}" \
"$GITEA_API_URL/repos/$REPO_OWNER/$REPO_NAME/contents/renovate.json"
fi
} }
# Register cleanup to run on exit # Register cleanup to run on exit
trap cleanup EXIT trap cleanup EXIT
echo "Verifying PR creation and content via API..." # --- Step 1: Initial Run (Onboarding) ---
# We expect PRs for nginx and actions/checkout echo "Running Renovate E2E (Run 1: Onboarding)..."
# Fetch PRs again to verify set +e
renovate > renovate-e2e-output.log 2>&1
RENOVATE_EXIT_CODE=$?
set -e
cat renovate-e2e-output.log
if [ $RENOVATE_EXIT_CODE -ne 0 ]; then
echo "Error: Renovate command failed."
exit 1
fi
# Check for Onboarding PR
PRS=$(curl -s -H "Authorization: token $RENOVATE_TOKEN" "$GITEA_API_URL/repos/$REPO_OWNER/$REPO_NAME/pulls?state=open")
ONBOARDING_PR_NUM=$(echo "$PRS" | jq -r '.[] | select(.title | contains("Configure Renovate")) | .number')
if [ -n "$ONBOARDING_PR_NUM" ] && [ "$ONBOARDING_PR_NUM" != "null" ]; then
echo "Onboarding PR found (#$ONBOARDING_PR_NUM). Merging it to enable updates..."
# Merge Onboarding PR
MERGE_RESP=$(curl -s -X POST -H "Authorization: token $RENOVATE_TOKEN" \
-H "Content-Type: application/json" \
-d "{\"Do\": \"merge\"}" \
"$GITEA_API_URL/repos/$REPO_OWNER/$REPO_NAME/pulls/$ONBOARDING_PR_NUM/merge")
# Check if merge was successful (simple check)
if echo "$MERGE_RESP" | grep -q "Pull request has been merged"; then
echo "Onboarding PR merged successfully."
else
# Fallback: check status code or response
echo "Merge response: $MERGE_RESP"
fi
# --- Step 2: Second Run (Updates) ---
echo "Running Renovate E2E (Run 2: Updates)..."
set +e
renovate > renovate-e2e-output-2.log 2>&1
RENOVATE_EXIT_CODE=$?
set -e
cat renovate-e2e-output-2.log
if [ $RENOVATE_EXIT_CODE -ne 0 ]; then
echo "Error: Renovate command (Run 2) failed."
exit 1
fi
else
echo "No Onboarding PR found. Assuming repo is already onboarded or config exists."
fi
echo "Verifying Update PRs and Content..."
# Fetch PRs again
PRS=$(curl -s -H "Authorization: token $RENOVATE_TOKEN" "$GITEA_API_URL/repos/$REPO_OWNER/$REPO_NAME/pulls?state=open") PRS=$(curl -s -H "Authorization: token $RENOVATE_TOKEN" "$GITEA_API_URL/repos/$REPO_OWNER/$REPO_NAME/pulls?state=open")
# Verify Nginx PR # Verify Nginx PR

View File

@@ -1,56 +1,56 @@
#!/bin/bash # #!/bin/bash
set -e # set -e
echo "Validating Renovate configuration..." # echo "Validating Renovate configuration..."
renovate-config-validator # renovate-config-validator
echo "Running Renovate dry-run..." # echo "Running Renovate dry-run..."
renovate --dry-run=full > renovate-output.log 2>&1 # renovate --dry-run=full > renovate-output.log 2>&1
cat renovate-output.log # cat renovate-output.log
# Assertions # # Assertions
echo "Checking for successful run..." # echo "Checking for successful run..."
if ! grep -q "Repository finished" renovate-output.log; then # if ! grep -q "Repository finished" renovate-output.log; then
echo "Error: Renovate run did not finish successfully." # echo "Error: Renovate run did not finish successfully."
exit 1 # exit 1
fi # fi
echo "Checking for errors..." # echo "Checking for errors..."
if grep -q "ERROR" renovate-output.log; then # if grep -q "ERROR" renovate-output.log; then
echo "Error: Renovate log contains errors." # echo "Error: Renovate log contains errors."
exit 1 # exit 1
fi # fi
# Specific assertions based on the test repo state # # Specific assertions based on the test repo state
echo "Checking for expected nginx update..." # echo "Checking for expected nginx update..."
if ! grep -q "renovate/nginx-" renovate-output.log; then # if ! grep -q "renovate/nginx-" renovate-output.log; then
echo "Error: Expected 'renovate/nginx-' branch not found in output." # echo "Error: Expected 'renovate/nginx-' branch not found in output."
exit 1 # exit 1
fi # fi
echo "Checking for nginx PR title..." # echo "Checking for nginx PR title..."
if ! grep -q "Update nginx Docker tag to" renovate-output.log; then # if ! grep -q "Update nginx Docker tag to" renovate-output.log; then
echo "Error: Expected PR title 'Update nginx Docker tag to...' not found." # echo "Error: Expected PR title 'Update nginx Docker tag to...' not found."
exit 1 # exit 1
fi # fi
echo "Checking for expected actions/checkout update..." # echo "Checking for expected actions/checkout update..."
if ! grep -q "renovate/actions-checkout-" renovate-output.log; then # if ! grep -q "renovate/actions-checkout-" renovate-output.log; then
echo "Error: Expected 'renovate/actions-checkout-' branch not found in output." # echo "Error: Expected 'renovate/actions-checkout-' branch not found in output."
exit 1 # exit 1
fi # fi
echo "Checking for actions/checkout PR title..." # echo "Checking for actions/checkout PR title..."
if ! grep -q "Update actions/checkout action to" renovate-output.log; then # if ! grep -q "Update actions/checkout action to" renovate-output.log; then
echo "Error: Expected PR title 'Update actions/checkout action to...' not found." # echo "Error: Expected PR title 'Update actions/checkout action to...' not found."
exit 1 # exit 1
fi # fi
echo "Checking for onboarding PR..." # echo "Checking for onboarding PR..."
if ! grep -q "Would create onboarding PR" renovate-output.log; then # if ! grep -q "Would create onboarding PR" renovate-output.log; then
echo "Error: Expected onboarding PR creation not found." # echo "Error: Expected onboarding PR creation not found."
exit 1 # exit 1
fi # fi
echo "Test passed!" # echo "Test passed!"
rm renovate-output.log # rm renovate-output.log