# Renovate Bot Workflow for Gitea # Sprint: CI/CD Enhancement - Dependency Management Automation # # Purpose: Run Renovate Bot to automatically update dependencies # Schedule: Twice daily (03:00 and 15:00 UTC) # # Requirements: # - RENOVATE_TOKEN secret with repo write access # - renovate.json configuration in repo root name: Renovate on: schedule: # Run at 03:00 and 15:00 UTC - cron: '0 3,15 * * *' workflow_dispatch: inputs: dry_run: description: 'Dry run (no PRs created)' required: false type: boolean default: false log_level: description: 'Log level' required: false type: choice options: - debug - info - warn default: 'info' env: RENOVATE_VERSION: '37.100.0' LOG_LEVEL: ${{ github.event.inputs.log_level || 'info' }} jobs: renovate: name: Run Renovate runs-on: ubuntu-latest timeout-minutes: 30 steps: - name: Checkout repository uses: actions/checkout@v4 - name: Validate configuration run: | if [[ ! -f "renovate.json" ]]; then echo "::error::renovate.json not found in repository root" exit 1 fi echo "Renovate configuration found" cat renovate.json | head -20 - name: Run Renovate env: RENOVATE_TOKEN: ${{ secrets.RENOVATE_TOKEN }} RENOVATE_PLATFORM: gitea RENOVATE_ENDPOINT: ${{ github.server_url }}/api/v1 RENOVATE_REPOSITORIES: ${{ github.repository }} RENOVATE_DRY_RUN: ${{ github.event.inputs.dry_run == 'true' && 'full' || 'null' }} LOG_LEVEL: ${{ env.LOG_LEVEL }} run: | # Install Renovate npm install -g renovate@${{ env.RENOVATE_VERSION }} # Configure Renovate export RENOVATE_CONFIG_FILE="${GITHUB_WORKSPACE}/renovate.json" # Set dry run mode if [[ "$RENOVATE_DRY_RUN" == "full" ]]; then echo "Running in DRY RUN mode - no PRs will be created" export RENOVATE_DRY_RUN="full" fi # Run Renovate renovate \ --platform="$RENOVATE_PLATFORM" \ --endpoint="$RENOVATE_ENDPOINT" \ --token="$RENOVATE_TOKEN" \ "$RENOVATE_REPOSITORIES" \ 2>&1 | tee renovate.log - name: Upload Renovate log uses: actions/upload-artifact@v4 if: always() with: name: renovate-log-${{ github.run_id }} path: renovate.log retention-days: 7 - name: Summary if: always() run: | echo "## Renovate Run Summary" >> $GITHUB_STEP_SUMMARY echo "" >> $GITHUB_STEP_SUMMARY echo "| Property | Value |" >> $GITHUB_STEP_SUMMARY echo "|----------|-------|" >> $GITHUB_STEP_SUMMARY echo "| Version | ${{ env.RENOVATE_VERSION }} |" >> $GITHUB_STEP_SUMMARY echo "| Log Level | ${{ env.LOG_LEVEL }} |" >> $GITHUB_STEP_SUMMARY echo "| Dry Run | ${{ github.event.inputs.dry_run || 'false' }} |" >> $GITHUB_STEP_SUMMARY echo "| Trigger | ${{ github.event_name }} |" >> $GITHUB_STEP_SUMMARY echo "" >> $GITHUB_STEP_SUMMARY if [[ -f renovate.log ]]; then # Count PRs created/updated CREATED=$(grep -c "PR created" renovate.log 2>/dev/null || echo "0") UPDATED=$(grep -c "PR updated" renovate.log 2>/dev/null || echo "0") echo "### Results" >> $GITHUB_STEP_SUMMARY echo "- PRs Created: $CREATED" >> $GITHUB_STEP_SUMMARY echo "- PRs Updated: $UPDATED" >> $GITHUB_STEP_SUMMARY fi