一个用于管理更改之间依赖关系的Python库。
项目描述
depends-on-action
GitHub操作,用于安装依赖的Pull Requests并将其配置为后续步骤使用。
概述
此操作允许您在触发工作流操作时安装Pull Request依赖项。
如果您项目分为多个仓库,并且您有必须一起测试的Pull Requests,则需要此操作。当您有在不同仓库中的库或微服务,并且需要与使用它们的程序一起测试更改时,这种情况经常发生。即使您依赖于非您自己的第三方仓库,您也可以使用此操作来测试您的PullRequests与第三方PullRequests。
它是如何工作的?此GitHub操作从主PullRequest的描述中提取所有使用Depends-On: <PR url>语法声明的PullRequests。您可以在主PullRequest的描述中添加多个Depends-On:行以拥有多个依赖项。例如,如果您依赖于org/library仓库中的PullRequest,您可以在您的PullRequest描述中添加以下行
Change to use the new library function
Depends-On: https://github.com/org/library/pull/123
如果您需要为特定的PullRequest指定子目录,请使用以下语法
Depends-On: <PR url>?subdir=<subdir path>
然后,此GitHub操作将在代码中注入所需的修改以使用其他更改。
Gerrit和Gitlab更改
也支持Gerrit和Gitlab依赖项。示例
Depends-On: https://gerrit-review.googlesource.com/c/gerrit/+/394841
Depends-On: https://gitlab.com/adblockinc/ext/adblockplus/spec/-/merge_requests/428
更改类型的检测按以下顺序进行
- 如果URL中包含/c/,则它是一个Gerrit更改。
- 如果主机名中包含gitlab,则它是一个Gitlab更改。
- 它是一个GitHub更改。
Gitlab凭证
如果您需要凭证来访问 Gitlab 服务器,您可以将环境变量 GITLAB_TOKEN 和 GITLAB_USER 设置为秘密。根据您服务器的配置,您可能只需要 GITLAB_TOKEN。
Go 语言
对于 Go 语言的更改,操作会在 go.mod 文件中为依赖项添加 replace 指令。此操作需要在安装 Go 工具链之后进行。
Python
操作会替换 requirements.txt 文件中的条目,以进行 Python 更改,使用 -e <local change> 或 pyproject.toml 的等效项。
JavaScript
操作会替换 package.json 文件中的条目,以进行 JavaScript 更改,使用 file:<local change>。
Ansible
操作会替换 requirements.yml 文件中的条目,以进行 Ansible 集合更改。
容器
操作会自动检测是否存在容器,并在存在的情况下以兼容的方式注入更改。
启用操作
示例配置
定义 GitHub Actions 需要创建一个名为 .github/workflows 的目录在您的仓库中。在这个目录内,您创建在事件发生时处理的文件。
使用此操作的简单示例是创建一个名为 .github/workflows/pull_request.yml 的文件,其内容如下
---
name: Pull Request
on:
  pull_request:
    types: [opened, synchronize, reopened]
jobs:
  validate-tests:
    runs-on: ubuntu-latest
    steps:
      - name: Checkout code
        uses: actions/checkout@v4
      # install the toolchain for your language
      - name: Extract dependent Pull Requests
        uses: depends-on/depends-on-action@0.15.0
        with:
          token: ${{ secrets.GITHUB_TOKEN }}
        # optional if needed for Gitlab
        env:
          GITLAB_TOKEN: ${{ secrets.GITLAB_TOKEN }}
          GITLAB_USER: ${{ secrets.GITLAB_USER }}
      # <your usual actions here>
  check-all-dependencies-are-merged:
    runs-on: ubuntu-latest
    steps:
      - name: Check all dependent Pull Requests are merged
        uses: depends-on/depends-on-action@0.15.0
        with:
          token: ${{ secrets.GITHUB_TOKEN }}
          check-unmerged-pr: true
        # optional if needed for Gitlab
        env:
          GITLAB_TOKEN: ${{ secrets.GITLAB_TOKEN }}
          GITLAB_USER: ${{ secrets.GITLAB_USER }}
...
如上所示,您至少需要两个管道:一个或多个用于执行常规构建和测试并注入依赖更改,以及一个用于阻止直到依赖更改合并的特定管道。
多个签出
如果您的管道正在克隆多个 git 仓库,您可能希望在这些所有目录中注入依赖项。为此,使用带空格分隔的目录名称的 extra-dirs 选项,如下所示
---
name: Pull Request
on:
  pull_request:
    types: [opened, synchronize, reopened]
jobs:
  validate-tests:
    runs-on: ubuntu-latest
    steps:
      - name: Checkout code
        uses: actions/checkout@v4
      - name: Check out an extra dir
        uses: actions/checkout@v4
        with:
          repository: org/proj
          path: proj
      # install the toolchain for your language
      - name: Extract dependent Pull Requests
        uses: depends-on/depends-on-action@0.15.0
        with:
          token: ${{ secrets.GITHUB_TOKEN }}
          extra-dirs: org/proj
      # <your usual actions here>
      ...
...
详细信息
- 阶段 1:从主要更改中提取依赖信息 javascript 程序。
- 阶段 2:提取依赖更改 depends_on_stage2 python 程序。
- 阶段 3:根据检测到的编程语言将依赖项注入主要更改 depends_on_stage3 python 程序。
当操作使用 check-unmerged-pr: true 设置调用时,使用阶段 1 和 2 但不使用阶段 3。在这种情况下,阶段 2 不是在磁盘上提取依赖更改,而是仅检查所有依赖更改的合并状态。
GitHub Action 外部使用
如果您想在其他 CI 管道或本地测试中使用相同的依赖项管理,您可以安装 Python 包
$ pip install depends-on
并使用 depends_on_stage1 脚本作为入口点,参数为要下载的更改的 URL
$ cd <workspace>
$ export GITHUB_TOKEN=<your token>
$ # if you need access to a private Gitlab server
$ export GITLAB_USER=<your user>
$ export GITLAB_TOKEN=<your gitlab token>
$ # Extracting a Github change and its dependencies
$ depends_on_stage1 https://github.com/depends-on/pyprog/pulls/2
$ # Extracting a Gitlab change and its dependencies
$ depends_on_stage1 https://gitlab.com/adblockinc/ext/adblockplus/spec/-/merge_requests/428
$ # Extracting a Gerrit change and its dependencies
$ depends_on_stage1 https://softwarefactory-project.io/r/c/dci-pipeline/+/29700
路线图
项目详情
下载文件
下载适合您平台的文件。如果您不确定选择哪个,请了解有关 安装包 的更多信息。
源代码分发
构建分发
depends-on-0.15.0.tar.gz 的哈希值
| 算法 | 哈希摘要 | |
|---|---|---|
| SHA256 | 7723c17d9dd7627b06f707b910c3094a83ea146c657173a3b6a813eafe4ea10b | |
| MD5 | 0952a1c7d8a0e4581a25ac31aa084d8a | |
| BLAKE2b-256 | 045e49695b2891ea18ad3272993d8bc70d9c0523501d4aa0078cdc2a06528279 | 
depends_on-0.15.0-py3-none-any.whl 的哈希值
| 算法 | 哈希摘要 | |
|---|---|---|
| SHA256 | 8b3092a983d2536fff1ccc730c0746f3a9b7f5db73fb90a47f70f71a2d4ca28f | |
| MD5 | eebcba7385fa2976ee6240f044da8fdb | |
| BLAKE2b-256 | eede86d6ca43149159be4c59796264fb9a198b522f6c4d5817de0645bcce66fe |