23 个版本

新增 0.5.36 2024年8月20日
0.5.35 2024年8月9日
0.5.27 2024年7月16日
0.5.26 2024年6月27日
0.5.7 2023年5月23日

#547开发工具

Download history 2/week @ 2024-05-28 313/week @ 2024-06-11 304/week @ 2024-06-18 168/week @ 2024-06-25 6/week @ 2024-07-02 145/week @ 2024-07-16 133/week @ 2024-07-23 556/week @ 2024-07-30 1406/week @ 2024-08-06 286/week @ 2024-08-13

2,387 每月下载量
disperse 中使用

GPL-2.0+

460KB
9K SLoC

Silver-Platter

Silver-Platter logo

Silver-Platter 允许向版本控制系统(codemods)中的源代码贡献可自动化的更改。

它自动创建远程仓库的本地检出,进行用户指定的更改,在远程托管网站上发布这些更改,然后创建拉取请求。

除此之外,它还可以对已提出合并的分支进行基本维护 - 例如,如果由于上游更改而产生冲突,则重新启动它们。

Silver-Platter 为 Debian Janitor (https://janitor.debian.org/) 和 Kali Janitor (https://kali.janitor.org/) 提供动力。然而,它是一个独立的项目,也可以作为一个独立的工具使用。界面仍然有点粗糙,我将非常感谢使用它的人的任何反馈 - 请在 https://github.com/jelmer/silver-platter/issues/new 的问题跟踪器中提交错误。

入门

要登录到代码托管网站,请使用svp login:

svp login https://github.com/

创建作为合并提案的更改的最简单方法是运行类似以下命令

svp run --mode=propose ./framwork.sh https://github.com/jelmer/dulwich

其中framwork.sh对工作副本进行一些修改,并将拉取请求的提交信息和正文中打印到标准输出。例如

#!/bin/sh
sed -i 's/framwork/framework/' README.rst
echo "Fix common typo: framwork ⇒ framework"

如果您留下挂起的更改,Silver-Platter 将自动创建一个提交,并使用脚本输出作为提交信息。脚本也可以创建自己的提交 - 如果它们希望创建多个提交,这特别有用。

食谱

为了使此过程更容易重复,可以使用食谱文件。对于上面的示例,我们可以创建一个framwork.yaml以下内容

---
name: framwork
command: |-
 sed -i 's/framwork/framework/' README.rst
 echo "Fix common typo: framwork ⇒ framework"
mode: propose
merge-request:
  commit-message: Fix a typo
  description:
    markdown: |-
      I spotted that we often mistype *framework* as *framwork*.

要执行此食谱,请运行

svp run --recipe=framwork.yaml https://github.com/jelmer/dulwich

有关具有大量注释的示例食谱,请参阅 example.yaml

此外,您可以通过指定候选列表来在一系列存储库上运行特定的食谱。例如,如果 candidates.yaml 看起来像这样

---
- url: https://github.com/dulwich/dulwich
- url: https://github.com/jelmer/xandikos

则以下命令将依次处理每个存储库

svp run --recipe=framwork.yaml --candidates=candidates.yaml

批量模式

当您将要进行大量更改并希望在发送之前查看或修改差异时,请使用批量模式

svp batch generate --recipe=framwork.yaml --candidates=candidate.syml framwork

然后创建一个名为 "framwork" 的目录,并包含一个名为batch.yaml其中包含所有待处理的更改

name: framwork
work:
- url: https://github.com/dulwich/dulwich
  name: dulwich
  description: I spotted that we often mistype *framework* as *framwork*.
  commit-message: Fix a typo
  mode: propose
- url: https://github.com/jelmer/xandikos
  name: dulwich
  description: I spotted that we often mistype *framework* as *framwork*.
  commit-message: Fix a typo
  mode: propose
recipe: ../framwork.yaml

对于每个候选者,将创建一个带有更改的克隆。您可以根据需要检查和修改克隆。

在您审查更改后,根据需要编辑 batch.yaml - 删除看起来不正确的条目,编辑合并请求的详细信息等。

一旦您满意,您就可以发布结果

svp batch publish framwork

这将发布所有更改,使用在batch.yaml.

batch.yaml中指定的模式和参数

自动删除任何已经完全落地的作业条目,即已合并的拉取请求或已推送到原始分支的更改。要检查更改的状态,运行:

svp batch status framwork

svp batch status

svp batch publish framwork

要刷新可能已经过时的任何合并提案,再次运行发布

支持的主机

与 Debian 软件包一起工作

Debian 软件包的几个常见操作都有特定的子命令在debian-svp命令下。这些也会自动查找任何指定 Debian 软件包名称的打包存储库位置。

  • upload-pending:构建和上传软件包,并推送/提出更改日志更新。
  • run:类似于 svp run,但针对 Debian 软件包:它确保 upstreampristine-tar 分支可用,可选地更新更改日志,并可以测试分支是否仍然可构建。

examples/debian/ 中提供了几个 Debian 特定的示例食谱。

  • lintian-fixes.yaml:运行 lintian-brush 命令来修复由 lintian 报告的常见问题。
  • new-upstream-release.yaml:合并新的上游版本。
  • multi-arch-hints.yaml:应用多架构提示。
  • orphan.yaml:将软件包标记为弃用,更新其 Maintainer 字段并将其移动到常见的 Debian salsa 组。
  • rules-requires-root.yaml:将软件包标记为 "Rules-Requires-Root: no"。
  • cme.yaml:运行来自 cme 软件包 的 "cme fix dpkg"。

debian-svp run 接收软件包名称参数,这些参数将解析为软件包中的 Vcs-Git 字段中的存储库位置。

查看更多详细信息。debian-svp COMMAND --help

示例运行debian-svp:

# Create merge proposal running lintian-brush against Samba
debian-svp run --recipe=examples/lintian-brush.yaml samba

# Upload pending changes for tdb
debian-svp upload-pending tdb

# Upload pending changes for any packages maintained by Jelmer,
# querying vcswatch.
debian-svp upload-pending --vcswatch --maintainer [email protected]

# Import the latest upstream release for tdb, without testing
# the build afterwards.
debian-svp run --recipe=examples/debian/new-upstream-release.yaml \
    --no-build-verify tdb

# Apply multi-arch hints to tdb
debian-svp run --recipe=examples/debian/multiarch-hints.yaml tdb

以下环境变量为 Debian 软件包提供

  • DEB_SOURCE:源软件包名称
  • DEB_UPDATE_CHANGELOG:指示是否应添加更改日志条目。可以是 "leave"(保留)或 "update"(更新更改日志)。

凭据

可以使用svp hosters子命令来显示 silver-platter 所知的主机网站

svp hosters

要登录到新的主机网站,只需运行svp login BASE-URL,例如

svp login https://launchpad.net/

退出状态

svp run如果没有进行更改,则退出 0;如果至少有一个存储库已更改,则退出 1;如果遇到问题,则退出 2。

Python API

除了命令行 API 之外,silver-platter 还有一个 Python API。核心类是Workspace上下文管理器,存在于两种形式

  • silver_platter.workspace.Workspace(用于通用项目)
  • silver_platter.debian.Workspace(用于Debian软件包)

示例:在dulwich Debian软件包的changelog文件中添加新条目并创建一个包含该更改的合并提案dulwichDebian软件包和创建一个包含该更改的合并提案

from silver_platter.debian import Workspace
import subprocess

with Workspace.from_apt_package(package="dulwich") as ws:
    subprocess.check_call(['dch', 'some change'], cwd=ws.path)
    ws.commit()  # Behaves like debcommit
    ws.publish(mode='propose')

依赖项

~16–34MB
~527K SLoC