setup-renovate-for-tuist
Compare original and translation side by side
🇺🇸
Original
English🇨🇳
Translation
ChineseSetup Renovate for Tuist
为Tuist配置Renovate
Renovate automates dependency update PRs for your Tuist iOS project. This skill creates the correct based on your project's integration style and package format.
renovate.jsonRenovate可自动为你的Tuist iOS项目创建依赖更新PR。本技能会根据项目的集成方式和包格式生成正确的文件。
renovate.jsonPreflight Checklist
前置检查清单
Before starting:
- Confirm the project uses Tuist (look for or
Tuist.swiftdirectory)Tuist/ - Identify the integration style (see below)
- Check whether Tuist registry is enabled
- Confirm the project is hosted on GitHub (Renovate GitHub App or self-hosted)
开始之前:
- 确认项目使用Tuist(查找文件或
Tuist.swift目录)Tuist/ - 确定项目的集成方式(见下文)
- 检查Tuist注册表是否已启用
- 确认项目托管在GitHub上(使用Renovate GitHub App或自托管部署)
Step 1 — Detect Integration Style
步骤1 — 检测集成方式
Check where packages are declared:
Tuist/Package.swift-based — look for non-empty array:
dependenciesswift
// Tuist/Package.swift
let package = Package(
dependencies: [
.package(url: "https://github.com/firebase/firebase-ios-sdk", from: "11.8.1")
]
)Project.swift-based — search for files anywhere in the project that contain a non-empty array:
Project.swiftpackages:bash
grep -rl "packages:" --include="Project.swift" .swift
// (location varies per project)
let project = Project(
packages: [
.remote(url: "https://github.com/firebase/firebase-ios-sdk", requirement: .upToNextMajor(from: "11.8.1"))
]
)A project uses one style only. Ifhas non-empty dependencies → Tuist/Package.swift-based. If anyTuist/Package.swiftfile has a non-emptyProject.swiftarray → Project.swift-based.packages:
检查包的声明位置:
基于Tuist/Package.swift — 查找非空的数组:
dependenciesswift
// Tuist/Package.swift
let package = Package(
dependencies: [
.package(url: "https://github.com/firebase/firebase-ios-sdk", from: "11.8.1")
]
)基于Project.swift — 在项目中搜索包含非空数组的文件:
packages:Project.swiftbash
grep -rl "packages:" --include="Project.swift" .swift
// (位置因项目而异)
let project = Project(
packages: [
.remote(url: "https://github.com/firebase/firebase-ios-sdk", requirement: .upToNextMajor(from: "11.8.1"))
]
)一个项目只会使用一种集成方式。如果包含非空的dependencies数组,则为基于Tuist/Package.swift的方式;如果任意Tuist/Package.swift文件包含非空的Project.swift数组,则为基于Project.swift的方式。packages:
Step 2 — Detect Package Format
步骤2 — 检测包格式
Within the detected files, check whether packages use URL format or registry format:
| Format | Example |
|---|---|
| URL-based | |
| Registry-based | |
| URL-based (Project.swift) | |
Also note any packages using — these cannot be tracked by Renovate and should be left out (see Branch Dependencies below).
requirement: .branch("...")在检测到的文件中,检查包使用的是URL格式还是注册表格式:
| 格式 | 示例 |
|---|---|
| URL型 | |
| 注册表型 | |
| URL型(Project.swift) | |
同时注意使用的包——Renovate无法追踪这类包,应将其排除(见下文的分支依赖部分)。
requirement: .branch("...")Step 3 — Check for mise.toml
步骤3 — 检查mise.toml文件
Check if exists in the project root. If yes, Renovate can also update tool versions (tuist, swiftlint, etc.) automatically.
mise.toml检查项目根目录是否存在文件。如果存在,Renovate还可以自动更新工具版本(如tuist、swiftlint等)。
mise.tomlStep 4 — Ask for Schedule Preference
步骤4 — 询问调度偏好
Ask the user: "When would you like Renovate to check for updates? (e.g. 'every Monday morning', 'weekly on Friday', 'daily')"
Use the answer to set the field in . Renovate uses natural language scheduling:
schedulerenovate.json| User preference | Renovate schedule value |
|---|---|
| Monday morning | |
| Friday afternoon | |
| Weekly (any) | |
| Daily | |
Full syntax reference: https://docs.renovatebot.com/configuration-options/#schedule
If using a self-hosted GitHub Actions workflow, also convert the chosen schedule to a matching cron expression.
询问用户:"你希望Renovate在何时检查更新?(例如:'每周一早上'、'每周五'、'每天')"
根据回答设置中的字段。Renovate支持自然语言调度:
renovate.jsonschedule| 用户偏好 | Renovate调度值 |
|---|---|
| 周一早上 | |
| 周五下午 | |
| 每周(任意时间) | |
| 每天 | |
如果使用自托管的GitHub Actions工作流,还需将选定的调度转换为匹配的cron表达式。
Step 5 — Create renovate.json
步骤5 — 生成renovate.json
Create in the project root based on the detected configuration.
renovate.json根据检测到的配置,在项目根目录创建文件。
renovate.jsonCase A: Tuist/Package.swift + URL-based packages (most common)
情况A:基于Tuist/Package.swift + URL型包(最常见)
The Renovate Swift manager natively handles files. The default pattern already matches .
Package.swift/(^|/)Package\.swift/Tuist/Package.swiftjson
{
"$schema": "https://docs.renovatebot.com/renovate-schema.json",
"extends": ["config:recommended"],
"packageRules": [
{
"matchManagers": ["swift"],
"groupName": "Swift dependencies",
"schedule": ["<schedule>"]
}
]
}Renovate的Swift管理器原生支持文件。默认匹配模式已包含。
Package.swift/(^|/)Package\.swift/Tuist/Package.swiftjson
{
"$schema": "https://docs.renovatebot.com/renovate-schema.json",
"extends": ["config:recommended"],
"packageRules": [
{
"matchManagers": ["swift"],
"groupName": "Swift dependencies",
"schedule": ["<schedule>"]
}
]
}Case B: Tuist/Package.swift + Registry-based packages (id: format)
情况B:基于Tuist/Package.swift + 注册表型包(id:格式)
Renovate's Swift manager only understands -based packages. For -based registry packages, use with a regex that:
url:id:customManagers- Handles both and
from:requirementsexact: - Matches multiline declarations (packages formatted across multiple lines will be silently missed otherwise)
- Transforms dot notation to slash notation for GitHub lookups (→
firebase.firebase-ios-sdk)firebase/firebase-ios-sdk - Uses triple braces in
{{{ }}}to prevent HTML-escaping thepackageNameTemplate/
Use two managers (releases + tags) as fallback since some packages only publish tags, not releases:
json
{
"$schema": "https://docs.renovatebot.com/renovate-schema.json",
"extends": ["config:recommended"],
"enabledManagers": ["custom.regex"],
"customManagers": [
{
"customType": "regex",
"managerFilePatterns": ["/Tuist/Package\\.swift/"],
"matchStrings": [
"\\.package\\(id:\\s*\"(?<depName>[\\w\\-.]+?)\"[\\s\\S]*?(?:from|exact):\\s*\"(?<currentValue>[^\"]+)\"\\)"
],
"datasourceTemplate": "github-releases",
"packageNameTemplate": "{{{replace '\\.' '/' depName}}}"
},
{
"customType": "regex",
"managerFilePatterns": ["/Tuist/Package\\.swift/"],
"matchStrings": [
"\\.package\\(id:\\s*\"(?<depName>[\\w\\-.]+?)\"[\\s\\S]*?(?:from|exact):\\s*\"(?<currentValue>[^\"]+)\"\\)"
],
"datasourceTemplate": "github-tags",
"packageNameTemplate": "{{{replace '\\.' '/' depName}}}"
}
],
"packageRules": [
{
"matchManagers": ["custom.regex"],
"groupName": "Swift dependencies",
"schedule": ["<schedule>"]
}
]
}Note on dotted repo names: If a repo name had dots replaced with underscores (e.g.,), thegroue.GRDB_swiftreplacementpackageNameTemplatewon't match the real GitHub repogroue/GRDB_swift. For these packages, add an explicitgroue/GRDB.swiftoverride:packageRulesjson{ "matchPackageNames": ["groue.GRDB_swift"], "packageName": "groue/GRDB.swift" }
Renovate的Swift管理器仅支持型包。对于型的注册表包,需使用配合正则表达式,实现:
url:id:customManagers- 处理和
from:两种依赖声明exact: - 匹配多行声明(否则跨多行的包声明会被遗漏)
- 将点符号转换为斜杠符号以适配GitHub查找(→
firebase.firebase-ios-sdk)firebase/firebase-ios-sdk - 在中使用三重括号
packageNameTemplate避免{{{ }}}被HTML转义/
使用两个管理器(发布版+标签版)作为备选,因为部分包仅发布标签而不发布正式版本:
json
{
"$schema": "https://docs.renovatebot.com/renovate-schema.json",
"extends": ["config:recommended"],
"enabledManagers": ["custom.regex"],
"customManagers": [
{
"customType": "regex",
"managerFilePatterns": ["/Tuist/Package\\.swift/"],
"matchStrings": [
"\\.package\\(id:\\s*\"(?<depName>[\\w\\-.]+?)\"[\\s\\S]*?(?:from|exact):\\s*\"(?<currentValue>[^\"]+)\"\\)"
],
"datasourceTemplate": "github-releases",
"packageNameTemplate": "{{{replace '\\.' '/' depName}}}"
},
{
"customType": "regex",
"managerFilePatterns": ["/Tuist/Package\\.swift/"],
"matchStrings": [
"\\.package\\(id:\\s*\"(?<depName>[\\w\\-.]+?)\"[\\s\\S]*?(?:from|exact):\\s*\"(?<currentValue>[^\"]+)\"\\)"
],
"datasourceTemplate": "github-tags",
"packageNameTemplate": "{{{replace '\\.' '/' depName}}}"
}
],
"packageRules": [
{
"matchManagers": ["custom.regex"],
"groupName": "Swift dependencies",
"schedule": ["<schedule>"]
}
]
}关于带点的仓库名称说明:如果仓库名称中的点被替换为下划线(例如),groue.GRDB_swift的替换规则会生成packageNameTemplate,但实际GitHub仓库是groue/GRDB_swift。对于这类包,需添加显式的groue/GRDB.swift覆盖:packageRulesjson{ "matchPackageNames": ["groue.GRDB_swift"], "packageName": "groue/GRDB.swift" }
Case C: Project.swift-based + URL-based packages
情况C:基于Project.swift + URL型包
Project.swift uses which is a Tuist-specific syntax, not standard SPM. Renovate's Swift manager won't parse this. The regex must:
.remote(url:)- Handle multiline declarations
- Handle optional prefix and
https://suffix.git - Cover all requirement types: ,
.upToNextMajor,.upToNextMinor.exact
Use two managers (releases + tags) as fallback:
json
{
"$schema": "https://docs.renovatebot.com/renovate-schema.json",
"extends": ["config:recommended"],
"enabledManagers": ["custom.regex"],
"customManagers": [
{
"customType": "regex",
"managerFilePatterns": ["/(^|/)Project\\.swift$/"],
"matchStrings": [
"\\.remote\\(url:\\s*\"(?:https?:\\/\\/)?github\\.com\\/(?<depName>[\\w\\-_]+\\/[\\w\\-_.]+?)(?:\\.git)?\"[\\s\\S]*?requirement:\\s*\\.(?:upToNextMajor|upToNextMinor)\\(from:\\s*\"(?<currentValue>[^\"]+)\"\\)"
],
"datasourceTemplate": "github-releases"
},
{
"customType": "regex",
"managerFilePatterns": ["/(^|/)Project\\.swift$/"],
"matchStrings": [
"\\.remote\\(url:\\s*\"(?:https?:\\/\\/)?github\\.com\\/(?<depName>[\\w\\-_]+\\/[\\w\\-_.]+?)(?:\\.git)?\"[\\s\\S]*?requirement:\\s*\\.(?:upToNextMajor|upToNextMinor)\\(from:\\s*\"(?<currentValue>[^\"]+)\"\\)"
],
"datasourceTemplate": "github-tags"
},
{
"customType": "regex",
"managerFilePatterns": ["/(^|/)Project\\.swift$/"],
"matchStrings": [
"\\.remote\\(url:\\s*\"(?:https?:\\/\\/)?github\\.com\\/(?<depName>[\\w\\-_]+\\/[\\w\\-_.]+?)(?:\\.git)?\"[\\s\\S]*?requirement:\\s*\\.exact\\(\"(?<currentValue>[^\"]+)\"\\)"
],
"datasourceTemplate": "github-releases"
},
{
"customType": "regex",
"managerFilePatterns": ["/(^|/)Project\\.swift$/"],
"matchStrings": [
"\\.remote\\(url:\\s*\"(?:https?:\\/\\/)?github\\.com\\/(?<depName>[\\w\\-_]+\\/[\\w\\-_.]+?)(?:\\.git)?\"[\\s\\S]*?requirement:\\s*\\.exact\\(\"(?<currentValue>[^\"]+)\"\\)"
],
"datasourceTemplate": "github-tags"
}
],
"packageRules": [
{
"matchManagers": ["custom.regex"],
"groupName": "Swift dependencies",
"schedule": ["<schedule>"]
}
]
}Project.swift使用语法,这是Tuist特有的,而非标准SPM语法。Renovate的Swift管理器无法解析该语法。正则表达式需满足:
.remote(url:)- 处理多行声明
- 处理可选的前缀和
https://后缀.git - 支持所有依赖类型:、
.upToNextMajor、.upToNextMinor.exact
使用两个管理器(发布版+标签版)作为备选:
json
{
"$schema": "https://docs.renovatebot.com/renovate-schema.json",
"extends": ["config:recommended"],
"enabledManagers": ["custom.regex"],
"customManagers": [
{
"customType": "regex",
"managerFilePatterns": ["/(^|/)Project\\.swift$/"],
"matchStrings": [
"\\.remote\\(url:\\s*\"(?:https?:\\/\\/)?github\\.com\\/(?<depName>[\\w\\-_]+\\/[\\w\\-_.]+?)(?:\\.git)?\"[\\s\\S]*?requirement:\\s*\\.(?:upToNextMajor|upToNextMinor)\\(from:\\s*\"(?<currentValue>[^\"]+)\"\\)"
],
"datasourceTemplate": "github-releases"
},
{
"customType": "regex",
"managerFilePatterns": ["/(^|/)Project\\.swift$/"],
"matchStrings": [
"\\.remote\\(url:\\s*\"(?:https?:\\/\\/)?github\\.com\\/(?<depName>[\\w\\-_]+\\/[\\w\\-_.]+?)(?:\\.git)?\"[\\s\\S]*?requirement:\\s*\\.(?:upToNextMajor|upToNextMinor)\\(from:\\s*\"(?<currentValue>[^\"]+)\"\\)"
],
"datasourceTemplate": "github-tags"
},
{
"customType": "regex",
"managerFilePatterns": ["/(^|/)Project\\.swift$/"],
"matchStrings": [
"\\.remote\\(url:\\s*\"(?:https?:\\/\\/)?github\\.com\\/(?<depName>[\\w\\-_]+\\/[\\w\\-_.]+?)(?:\\.git)?\"[\\s\\S]*?requirement:\\s*\\.exact\\(\"(?<currentValue>[^\"]+)\"\\)"
],
"datasourceTemplate": "github-releases"
},
{
"customType": "regex",
"managerFilePatterns": ["/(^|/)Project\\.swift$/"],
"matchStrings": [
"\\.remote\\(url:\\s*\"(?:https?:\\/\\/)?github\\.com\\/(?<depName>[\\w\\-_]+\\/[\\w\\-_.]+?)(?:\\.git)?\"[\\s\\S]*?requirement:\\s*\\.exact\\(\"(?<currentValue>[^\"]+)\"\\)"
],
"datasourceTemplate": "github-tags"
}
],
"packageRules": [
{
"matchManagers": ["custom.regex"],
"groupName": "Swift dependencies",
"schedule": ["<schedule>"]
}
]
}Case D: Mixed (URL + registry packages)
情况D:混合模式(URL型 + 注册表型包)
Combine the entries from Case B and Case C. Set to include only the managers you use:
customManagersenabledManagersjson
{
"enabledManagers": ["custom.regex"]
}合并情况B和情况C中的配置。将设置为仅包含你使用的管理器:
customManagersenabledManagersjson
{
"enabledManagers": ["custom.regex"]
}Branch Dependencies
分支依赖
Packages declared with use mutable Git refs — there is no semantic version for Renovate to track. Do not add regex patterns for these. If Renovate picks them up accidentally, disable them explicitly:
requirement: .branch("...")json
{
"matchDatasources": ["git-refs"],
"enabled": false
}使用声明的包使用可变的Git引用——Renovate无法追踪这类包的语义版本。不要为这类包添加正则匹配规则。如果Renovate意外识别了它们,可显式禁用:
requirement: .branch("...")json
{
"matchDatasources": ["git-refs"],
"enabled": false
}Adding mise.toml support (optional)
可选:添加mise.toml支持
If exists, add to :
mise.tomlmiseenabledManagersjson
{
"$schema": "https://docs.renovatebot.com/renovate-schema.json",
"extends": ["config:recommended"],
"enabledManagers": ["mise", "custom.regex"],
"packageRules": [
{
"matchManagers": ["mise"],
"groupName": "Dev tools",
"schedule": ["<schedule>"]
}
]
}Themanager readsmiseand updates tool versions likemise.toml,tuist, etc.swiftlint
如果文件存在,在中添加:
mise.tomlenabledManagersmisejson
{
"$schema": "https://docs.renovatebot.com/renovate-schema.json",
"extends": ["config:recommended"],
"enabledManagers": ["mise", "custom.regex"],
"packageRules": [
{
"matchManagers": ["mise"],
"groupName": "Dev tools",
"schedule": ["<schedule>"]
}
]
}管理器会读取mise文件并更新工具版本,如mise.toml、tuist等。swiftlint
Recommended packageRules additions (optional)
可选:推荐添加的packageRules配置
Consider adding these to control merge behaviour:
json
{
"packageRules": [
{
"matchUpdateTypes": ["patch"],
"automerge": true,
"automergeType": "branch"
},
{
"matchUpdateTypes": ["minor"],
"automerge": false
},
{
"matchUpdateTypes": ["major"],
"automerge": false
}
]
}And these top-level options to prevent PR floods:
json
{
"prConcurrentLimit": 3,
"prHourlyLimit": 2
}可考虑添加以下配置来控制合并行为:
json
{
"packageRules": [
{
"matchUpdateTypes": ["patch"],
"automerge": true,
"automergeType": "branch"
},
{
"matchUpdateTypes": ["minor"],
"automerge": false
},
{
"matchUpdateTypes": ["major"],
"automerge": false
}
]
}还可添加以下顶级配置项来避免PR泛滥:
json
{
"prConcurrentLimit": 3,
"prHourlyLimit": 2
}Step 6 — Dry-run Verification
步骤6 — 预运行验证
Run a local dry-run to confirm the detects the expected packages before merging.
renovate.jsonCheck if Renovate is installed:
bash
renovate --version- If installed → proceed to run the dry-run below.
- If not installed → ask the user: "Renovate is not installed. Can I install it with ?" Only install if the user confirms.
npm install -g renovate
Run the dry-run:
bash
RENOVATE_TOKEN=<github-pat> renovate --dry-run=full <org>/<repo>A GitHub PAT with scope is required. Ask the user to provide it if not already available in the environment.
repoWhat to check in the output:
- Each expected package appears as a detected dependency with its current version
- No warnings for your
matched 0 filesmanagerFilePatterns - Registry packages show the correct transformed (e.g.
depName, notfirebase/firebase-ios-sdk)firebase.firebase-ios-sdk
If a package is missing:
- Paste the actual Swift declaration (including surrounding lines) into regex101.com using the JavaScript flavor
- Test the failing pattern directly
matchStrings - Common culprits: multiline declaration not matched by , unhandled requirement type (e.g.
[\s\S]*?,.upToNextMinor).exact
在合并之前,运行本地预运行来确认能检测到预期的包。
renovate.json检查Renovate是否已安装:
bash
renovate --version- 如果已安装 → 继续运行下方的预运行命令。
- 如果未安装 → 询问用户:"Renovate未安装。是否使用进行安装?" 仅在用户确认后进行安装。
npm install -g renovate
运行预运行:
bash
RENOVATE_TOKEN=<github-pat> renovate --dry-run=full <org>/<repo>需要一个带有权限的GitHub PAT。如果环境中没有,可请求用户提供。
repo输出检查要点:
- 每个预期的包都作为已检测到的依赖项显示,并包含当前版本
- 没有针对的
managerFilePatterns警告matched 0 files - 注册表型包显示正确转换后的(例如
depName,而非firebase/firebase-ios-sdk)firebase.firebase-ios-sdk
如果某个包未被检测到:
- 将实际的Swift声明(包括周围代码行)粘贴到regex101.com,选择JavaScript正则风格
- 直接测试对应的模式
matchStrings - 常见问题:多行声明未被匹配、未处理的依赖类型(例如
[\s\S]*?、.upToNextMinor).exact
Step 7 — Enable Renovate
步骤7 — 启用Renovate
Choose one of the two approaches:
选择以下两种方式之一:
Option A: Renovate GitHub App (recommended)
方式A:Renovate GitHub App(推荐)
- Install the Renovate GitHub App on the repository.
- Merge the — Renovate will auto-create an onboarding PR, then begin raising dependency update PRs.
renovate.json
No additional files needed.
- 在仓库上安装Renovate GitHub App。
- 合并文件——Renovate会自动创建一个初始化PR,之后开始生成依赖更新PR。
renovate.json
无需额外文件。
Option B: Self-hosted via GitHub Actions
方式B:通过GitHub Actions自托管
1. Check for an existing Renovate workflow:
bash
ls .github/workflows/Search for any workflow file that already references Renovate:
bash
grep -rl "renovate" .github/workflows/- If a Renovate workflow already exists — show its contents to the user and ask whether to update the schedule/token or leave it as-is. Do not create a new file.
- If no Renovate workflow exists — create :
.github/workflows/renovate.yml
yaml
name: Renovate
on:
schedule:
- cron: '<cron expression matching chosen schedule>'
workflow_dispatch:
permissions:
contents: write
pull-requests: write
jobs:
renovate:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: renovatebot/github-action@v40
with:
configurationFile: renovate.json
token: ${{ secrets.RENOVATE_TOKEN }}2. Set in GitHub repository secrets (a PAT with scope) if not already set.
RENOVATE_TOKENrepo1. 检查是否存在现有的Renovate工作流:
bash
ls .github/workflows/搜索任何已包含Renovate的工作流文件:
bash
grep -rl "renovate" .github/workflows/- 如果已存在Renovate工作流 — 向用户展示其内容,并询问是否更新调度/令牌或保持原样。不要创建新文件。
- 如果不存在Renovate工作流 — 创建:
.github/workflows/renovate.yml
yaml
name: Renovate
on:
schedule:
- cron: '<cron expression matching chosen schedule>'
workflow_dispatch:
permissions:
contents: write
pull-requests: write
jobs:
renovate:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: renovatebot/github-action@v40
with:
configurationFile: renovate.json
token: ${{ secrets.RENOVATE_TOKEN }}2. 如果尚未设置,在GitHub仓库密钥中配置(带有权限的PAT)。
RENOVATE_TOKENrepoStep 8 — Verify
步骤8 — 验证
After merging:
- Renovate creates a Configure Renovate PR (if using GitHub App) — merge it
- Renovate opens PRs for outdated packages on the configured schedule
- Check for run logs
https://app.renovatebot.com/dashboard
合并后:
- Renovate会创建一个配置Renovate的PR(如果使用GitHub App)——合并该PR
- Renovate会按照配置的调度为过时的包创建PR
- 访问查看运行日志
https://app.renovatebot.com/dashboard
Common Issues
常见问题
| Issue | Fix |
|---|---|
| No PRs created | Confirm |
| Test the regex against your actual Swift file at regex101.com (use JavaScript flavor) |
| Multiline declarations not detected | Ensure |
| Registry package PRs have wrong version | Override |
| Renovate opens too many PRs at once | Add |
| Package updates break build | Add |
| Renovate scan is very slow | Add |
| 问题 | 解决方法 |
|---|---|
| 未创建任何PR | 确认 |
| 在regex101.com(使用JavaScript风格)中,用实际的Swift文件测试正则表达式 |
| 多行声明未被检测到 | 确保 |
| 注册表型包的PR版本错误 | 在 |
| Renovate同时创建过多PR | 在 |
| 包更新导致构建失败 | 添加 |
| Renovate扫描速度极慢 | 添加 |
Done Checklist
完成检查清单
- created in project root with correct config for detected style
renovate.json - JSON is valid (no syntax errors)
- regex tested against actual Swift file content (including multiline examples)
customManagers - Branch dependencies excluded or disabled
- confirms all expected packages are detected
renovate --dry-run - Renovate GitHub App installed OR created
.github/workflows/renovate.yml - secret set (self-hosted only)
RENOVATE_TOKEN
- 已在项目根目录创建符合检测到的配置的文件
renovate.json - JSON文件语法有效(无语法错误)
- 已针对实际Swift文件内容(包括多行示例)测试的正则表达式
customManagers - 已排除或禁用分支依赖
- 确认所有预期的包都被检测到
renovate --dry-run - 已安装Renovate GitHub App 或 创建了文件
.github/workflows/renovate.yml - 已设置密钥(仅自托管方式需要)
RENOVATE_TOKEN