From b5991ac1aebc8375a5b8ab91077fcdc78cb3d612 Mon Sep 17 00:00:00 2001 From: copilotcoder Date: Tue, 14 Jul 2026 07:55:01 -0400 Subject: [PATCH] perf: stabilize batched renovate runs --- .gitea/workflows/renovate.yml | 26 +++++++++++++++++++++----- renovate.json | 23 +---------------------- 2 files changed, 22 insertions(+), 27 deletions(-) diff --git a/.gitea/workflows/renovate.yml b/.gitea/workflows/renovate.yml index 35d6cd1..8dec261 100644 --- a/.gitea/workflows/renovate.yml +++ b/.gitea/workflows/renovate.yml @@ -290,7 +290,7 @@ jobs: SELECTED_TOKEN_SOURCE="${SELECTED_TOKEN_RESULT%%:*}" SELECTED_TOKEN="${SELECTED_TOKEN_RESULT#*:}" export RENOVATE_TOKEN="${SELECTED_TOKEN}" - RENOVATE_HOST_RULES_PAYLOAD="[{\"matchHost\":\"${ENDPOINT_AUTHORITY}\",\"token\":\"${SELECTED_TOKEN}\",\"authType\":\"Token-Only\"},{\"matchHost\":\"registry.npmjs.org\",\"timeout\":90000,\"concurrentRequestLimit\":2},{\"matchHost\":\"pypi.org\",\"timeout\":90000,\"concurrentRequestLimit\":2},{\"matchHost\":\"files.pythonhosted.org\",\"timeout\":90000,\"concurrentRequestLimit\":2},{\"matchHost\":\"mcr.microsoft.com\",\"timeout\":90000,\"concurrentRequestLimit\":2}]" + RENOVATE_HOST_RULES_PAYLOAD="[{\"matchHost\":\"${ENDPOINT_AUTHORITY}\",\"token\":\"${SELECTED_TOKEN}\",\"authType\":\"Token-Only\"},{\"matchHost\":\"registry.npmjs.org\",\"timeout\":90000,\"concurrentRequestLimit\":1},{\"matchHost\":\"pypi.org\",\"timeout\":90000,\"concurrentRequestLimit\":2},{\"matchHost\":\"files.pythonhosted.org\",\"timeout\":90000,\"concurrentRequestLimit\":2},{\"matchHost\":\"mcr.microsoft.com\",\"timeout\":90000,\"concurrentRequestLimit\":2}]" # Authenticate GitHub datasource calls to avoid anonymous GraphQL rate limiting. if [ -n "${RENOVATE_GITHUB_COM_TOKEN:-}" ]; then @@ -348,13 +348,28 @@ jobs: unset RENOVATE_IGNORE_SCHEDULE fi + # Multi-batch runs must not prune branches created by earlier batches. + export RENOVATE_PRUNE_STALE_BRANCHES="false" + run_renovate_with_endpoint() { endpoint="$1" enabled_managers="$2" batch_label="$3" + batch_node_args="${RENOVATE_NODE_ARGS}" + batch_pr_limit="${RENOVATE_PR_CONCURRENT_LIMIT}" + batch_branch_limit="${RENOVATE_BRANCH_CONCURRENT_LIMIT}" + + if [ "${batch_label}" = "npm" ]; then + batch_node_args="--max-old-space-size=384" + batch_pr_limit="1" + batch_branch_limit="1" + fi + export RENOVATE_ENDPOINT="${endpoint}" echo "Running Renovate batch '${batch_label}' with endpoint: ${RENOVATE_ENDPOINT}" echo "Enabled managers for '${batch_label}': ${enabled_managers}" + echo "Node args for '${batch_label}': ${batch_node_args}" + echo "PR/branch limits for '${batch_label}': ${batch_pr_limit}/${batch_branch_limit}" # shellcheck disable=SC2086 docker run --rm ${DOCKER_ADD_HOST_ARG} \ @@ -375,12 +390,13 @@ jobs: -e RENOVATE_GIT_AUTHOR \ -e RENOVATE_ONBOARDING \ -e RENOVATE_REQUIRE_CONFIG \ - -e RENOVATE_PR_CONCURRENT_LIMIT \ - -e RENOVATE_BRANCH_CONCURRENT_LIMIT \ - -e RENOVATE_NODE_ARGS \ + -e RENOVATE_PR_CONCURRENT_LIMIT="${batch_pr_limit}" \ + -e RENOVATE_BRANCH_CONCURRENT_LIMIT="${batch_branch_limit}" \ + -e RENOVATE_NODE_ARGS="${batch_node_args}" \ -e RENOVATE_OSV_VULNERABILITY_ALERTS \ -e RENOVATE_FETCH_CHANGELOGS \ -e RENOVATE_IGNORE_SCHEDULE \ + -e RENOVATE_PRUNE_STALE_BRANCHES \ -e RENOVATE_ENABLED_MANAGERS="${enabled_managers}" \ --entrypoint /bin/sh \ "${RENOVATE_IMAGE}" \ @@ -416,7 +432,7 @@ jobs: : > /tmp/renovate.log # Run low-memory batches sequentially to keep peak usage below constrained runner limits. - run_batch_with_fallback "docker-compose,dockerfile,custom.regex" "containers" + run_batch_with_fallback "docker-compose,dockerfile" "containers" run_batch_with_fallback "github-actions,pep621" "python-and-actions" run_batch_with_fallback "npm" "npm" diff --git a/renovate.json b/renovate.json index 10c7ac0..15ba034 100644 --- a/renovate.json +++ b/renovate.json @@ -16,8 +16,7 @@ "dockerfile", "github-actions", "npm", - "pep621", - "regex" + "pep621" ], "packageRules": [ { @@ -104,26 +103,6 @@ "enabled": false } ], - "customManagers": [ - { - "description": "Update Python version in Dockerfiles", - "customType": "regex", - "fileMatch": ["^Dockerfile.*$"], - "matchStrings": ["FROM python:(?\\d+\\.\\d+)"], - "datasourceTemplate": "docker", - "depNameTemplate": "python", - "versioningTemplate": "loose" - }, - { - "description": "Update Node.js version in Dockerfiles", - "customType": "regex", - "fileMatch": ["^Dockerfile.*$"], - "matchStrings": ["FROM node:(?\\d+)"], - "datasourceTemplate": "docker", - "depNameTemplate": "node", - "versioningTemplate": "node" - } - ], "osvVulnerabilityAlerts": false, "vulnerabilityAlerts": { "enabled": true,