Release — F-Droid repo + Gitea/Codeberg release + Play / detect (push) Successful in 10s
Release — F-Droid repo + Gitea/Codeberg release + Play / release (push) Skipped
Release — F-Droid repo + Gitea/Codeberg release + Play / play (push) Skipped
Renovate / renovate (push) Successful in 53s
Renovate only rebases while it runs, and it ran once a week, so merging one dependency PR left the others conflicted until the next Monday. - `renovate.yml`: also run on push to `main` (mirror syncs fire push events, like `release.yaml`). - `renovate.json5`: new PRs only in a Monday window (`* 4-6 * * 1`) around the weekly cron; on-merge runs only rebase conflicted PRs (`rebaseWhen: "conflicted"`). Co-authored-by: Jean-Luc Makiola <business@jeanlucmakiola.de> Reviewed-on: https://codeberg.org/jlmakiola/agendula/pulls/36
71 lines
3.5 KiB
YAML
71 lines
3.5 KiB
YAML
name: Renovate
|
|
|
|
on:
|
|
# Every merge to main. Mirror syncs from Codeberg fire push events here (the
|
|
# same trigger release.yaml relies on), so a merged Renovate PR is followed
|
|
# within minutes by a run that rebases the sibling PRs it just conflicted —
|
|
# most bumps touch gradle/libs.versions.toml. Outside renovate.json5's
|
|
# `schedule` window such a run only maintains existing branches
|
|
# (updateNotScheduled), it never opens new PRs. Renovate's own rebases push
|
|
# to renovate/* branches, not main, so this cannot loop.
|
|
push:
|
|
branches: [main]
|
|
# Weekly sweep for new updates. Mondays 05:00 UTC, inside the schedule window
|
|
# in renovate.json5 — keep the two in step.
|
|
schedule:
|
|
- cron: '0 5 * * 1'
|
|
# Manual run for an on-demand sweep from the Actions tab.
|
|
workflow_dispatch:
|
|
|
|
# Never let two Renovate runs touch the repo at once.
|
|
concurrency:
|
|
group: renovate
|
|
cancel-in-progress: false
|
|
|
|
jobs:
|
|
renovate:
|
|
# Gitea only — same guard, and the same reason, as release.yaml's `detect`:
|
|
# this file is invisible to Codeberg only while .forgejo/ is non-empty, and
|
|
# a repo-write token must never run on the contributor-facing runner.
|
|
if: github.repository_owner == 'makiolaj'
|
|
runs-on: docker
|
|
# Run the Renovate image *as* the job container and invoke the `renovate`
|
|
# binary directly. The renovatebot/github-action wrapper is a thin Node
|
|
# action that shells out to `docker run …` — it needs a Docker CLI + socket
|
|
# inside the job, which the Gitea runner's plain node container has not, so
|
|
# it died on "Unable to locate executable file: docker". Running the image
|
|
# directly drops the docker-in-docker requirement entirely.
|
|
# Full tag pinned; Renovate's github-actions manager keeps it bumped.
|
|
container:
|
|
image: ghcr.io/renovatebot/renovate:43.232.0
|
|
steps:
|
|
- name: Run Renovate
|
|
run: renovate
|
|
env:
|
|
# Renovate targets Codeberg (canonical) while still RUNNING on the
|
|
# Gitea runner. Moving the job to Codeberg would put a repo-write
|
|
# token on the contributor-facing runner, which is exactly what the
|
|
# .forgejo/ vs .gitea/ split exists to prevent — so the token stays
|
|
# where the other secrets live and only the API calls cross over.
|
|
#
|
|
# Platform is `forgejo`, not `gitea`: Codeberg runs Forgejo, and the
|
|
# pinned image ships a distinct forgejo platform module.
|
|
RENOVATE_PLATFORM: forgejo
|
|
RENOVATE_ENDPOINT: https://codeberg.org/api/v1
|
|
# Codeberg bot-account token (Gitea secret). Needs repo read/write +
|
|
# PR scope on jlmakiola/agendula.
|
|
RENOVATE_TOKEN: ${{ secrets.RENOVATE_TOKEN }}
|
|
# Scope to this repo only — no org-wide autodiscovery.
|
|
RENOVATE_AUTODISCOVER: 'false'
|
|
RENOVATE_REPOSITORIES: '["jlmakiola/agendula"]'
|
|
# Commits/PRs authored as the bot, not a real maintainer. This address
|
|
# must be a verified email on the Codeberg bot account, otherwise the
|
|
# commits show up unattributed there.
|
|
RENOVATE_GIT_AUTHOR: 'Renovate Bot <renovate@jeanlucmakiola.de>'
|
|
# Read-only github.com PAT (no scopes needed). Nearly every dependency
|
|
# is *released* on GitHub, and without this, changelog/release-note
|
|
# lookups hit the 60/h anonymous rate limit and PRs arrive with an
|
|
# empty "Release Notes" section.
|
|
RENOVATE_GITHUB_COM_TOKEN: ${{ secrets.GITHUB_COM_TOKEN }}
|
|
LOG_LEVEL: info
|