什么是装修

检测项目依赖项更新并创建 PR 的工具。
既然介绍了iOS开发环境,我就主要介绍iOS,但是它支持很多语言和环境。

除了调度之外,还可以详细设置设置,并提供详细的文档,使其成为一个易于使用的工具。
官方文件

还有一个类似的rootDependabot已经集成到GitHub了,但是Dependabot最近没有更新,不支持SwiftPM,所以个人暂时推荐Renovate。。

这一次,我基本总结了官方文档中写的内容和讨论中听到的内容。

装修规格

支持的平台

  • GitHub(.com 和企业服务器)
  • GitLab(.com 和 CE/EE)
  • 比特桶云
  • Bitbucket 服务器
  • Azure 开发运维
  • 吉蒂亚

iOS 环境中的可用性

工具 ○ 或 × 备忘录
可可豆荚 默认支持,但使用 XcodeGen 时会出现问题
迦太基 × 兼容使用正则表达式匹配
斯威夫特下午 × 兼容使用正则表达式匹配
XcodeGen × 兼容使用正则表达式匹配

像这样看的时候,我觉得我根本无法使用它,但事实并非如此,所以我希望你阅读续篇。

翻新的特点

更新设置在renovate.json 进行了描述。
我们将查看renovate.json 设置,重点关注常用功能,看看 Renovate 可以做什么。

基本设定

日程

示例.json
{
  "schedule": [
    "after 10am before 1pm every weekday"
  ]
}

日常设置

"before 2am"

每周设置

"schedule:earlyMondays"

每月设置

"before 3am on the first day of the month"

季度设置

"before 3am on the first day of the month"

年度设置

"every 12 months on the first day of the month"

周末设置

"every weekend"

工作日设置

"every weekday"

设置非工作日

[
  "after 10pm every weekday",
  "before 5am every weekday",
  "every weekend"
]

公关标签

添加renovate 标签的示例。

示例.json
{
  "labels": [
    "renovate"
  ]
}

自动合并

设置是否自动进行 PR。

示例.json
{
  "automerge": false
}

您也可以根据升级的版本来划分设置。

{
  "major": {
    "automerge": false
  },
  "patch": {
    "automerge": true
  },
{

公关草案

设置是否在草稿中创建 PR。

示例.json
{
  "draftPR": true
}

配置支持的包 (packageRules)

您可以使用packageRules 指定多个规则,所有规范都可以使用正则表达式。
包规则

指定包

使用matchManagers 指定包名称。
这里可以指定的包是支持的包将会

当指定CocoaPods

{
  "packageRules": [
    {
      "matchManagers": [ "cocoapods"]
    }
  ]
}

从更新中排除特定包

enable 很好。

排除 Ruby 版本升级时

{
  "packageRules": [
    {
      "matchManagers": [ "ruby-version"],
      "enabled": false
    }
  ]
}

组合多个包

您可以通过指定matchPackageNames 进行分组。设置groupName 很容易理解。

立即升级Firebase

{
  "packageRules": [
    {
      "matchManagers": [
        "cocoapods"
      ],
      "groupName": "Firebase",
      "matchPackageNames": [
        "Firebase",
        "Firebase/Core",
        "Firebase/Auth",
        "Firebase/Analytics"
      ]
    }
  ]
}

一个小应用

我只想更改特定包的合并规则

如果您在基本设置中打开了自动合并,但想在合并前检查特定包的更新内容,您可以在packageRules 内仅更改该组的合并规则。

{
  "automerge": true,
  "packageRules": [
    {
      "matchManagers": [
        "cocoapods"
      ],
      "groupName": "Firebase",
      "matchPackageNames": [
        "Firebase",
        "Firebase/Core",
        "Firebase/Auth",
        "Firebase/Analytics"
      ],
      "automerge": false,
    }
  ]
}

配置不支持的包 (regexManagers)

支持的包中未列出的项目或独特的文件格式和约定可以在regexManagers 使用正则表达式进行处理。
正则表达式管理器

映射名称

regexManagers 必须映射到以下项目(例如(?<depName>.*))或设置为depNameTemplate
两者都设置会造成混乱,所以让我们选择其中一个。

  • 数据源
  • 部门名称
  • 当前值

使用 matchStrings 进行映射

我将参考在project.yml中处理SwiftPM来介绍它。

项目.yml
packages:
  Kingfisher:
    url: https://github.com/onevcat/Kingfisher
    version: 7.0.0

在这种情况下,regexManagers 的描述如下。

{
  "regexManagers": [
    {
      "fileMatch": [
        "^project.yml$"
      ],
      "matchStrings": [
        "url: https:\/\/github\.com\/(?<depName>.*?)(\.git)?\s*version: (?<currentValue>.*)\s"
      ],
      "datasourceTemplate": "github-releases"
    }
  ]
}

此示例映射depNamecurrentValue 而不使用depNameTemplate
您可以看到onevcat/Kingfisherurl: https://github.com/onevcat/Kingfisher 映射到depName
同样,7.0.0version: 7.0.0 映射到currentValue

使用这种方法,所有写在包中的东西都将成为目标。
但是,正如我之前介绍的,在某些情况下您要排除enable: false。这种情况下,可以结合packageRules进行设置。

使用 regexManagers 从更新中排除特定依赖项

例如,假设您有这样的project.yml

项目.yml
packages:
  Kingfisher:
    url: https://github.com/onevcat/Kingfisher
    version: 7.0.0
  APIKit:
    url: https://github.com/ishkawa/APIKit
    version: 5.2.0

出于某种原因,我想在一段时间内忽略 APIKit 更新。
在这种情况下,您可以指定使用与matchStrings 映射的depName

{
  "packageRules": [
    {
      "matchManagers": [ "ishkawa/APIKit"],
      "enabled": false
    }
  ]
  "regexManagers": [
    {
      "fileMatch": [
        "^project.yml$"
      ],
      "matchStrings": [
        "url: https:\/\/github\.com\/(?<depName>.*?)(\.git)?\s*version: (?<currentValue>.*)\s"
      ],
      "datasourceTemplate": "github-releases"
    }
  ]
}

在本地检查 Renovate.json

您可以轻松地在本地测试您的 json 测试。
在与json 相同的级别上执行以下命令。如果通过,Renovate 将起作用。

$ npx --package renovate -c 'renovate-config-validator'

安装翻新

这取决于您使用的平台,但在 GitHub 上,这可能是最常见的GitHub 应用程序已提供,因此只需将其放入目标存储库即可工作。

剩余的挑战

使用 Package.swift 时未更新 Package.resolved

公关已启动,但没有合并的迹象。

使用 XcodeGen 时 Podfile.lock 未更新

Ikedaya 先生在他的博客上写了一个解决方法。
将 Realm 与 CocoaPods 一起使用时,无法更新 Podfile.lock

综上所述

使用 Renovate,您可以以最少的手动工作使图书馆保持最新状态,因此非常舒适。
我打算在公司介绍之后写一个故事。


原创声明:本文系作者授权爱码网发表,未经许可,不得转载;

原文地址:https://www.likecs.com/show-308632011.html

相关文章:

  • 2022-12-23
  • 2021-11-23
  • 2021-05-17
  • 2021-11-23
  • 2022-12-23
  • 2022-12-23
  • 2021-07-08
猜你喜欢
  • 2021-09-21
  • 2022-12-23
  • 2022-12-23
  • 2021-12-31
  • 2021-05-23
  • 2022-12-23
相关资源
相似解决方案