跳转到主要内容

适用于任何CI的简单DCO检查脚本。

项目描述

dco-check

PyPI codecov License Docker Pulls

GitHub Action Status GitLab pipeline status Travis CI Azure DevOps builds AppVeyor CircleCI

适用于任何CI的简单DCO检查脚本。

动机

许多开源项目要求在每次提交消息中使用“Signed-off-by:”行。这是为了证明贡献者有权根据开发者证书起源(DCO)提交其代码。然而,据我所知,没有自动检查可以在任何CI平台(或大多数平台)上运行。某些平台根本不具备这种功能。

这受到了DCO GitHub App的启发。

如何获取和使用

有几个选项

  1. 使用来自PyPI的软件包
    $ pip install dco-check
    $ dco-check
    
  2. 使用与您的CI一起的Docker镜像(christophebedard/dco-check)(请参阅示例
    $ dco-check
    
  3. 下载脚本并运行它(您可以将master替换为特定版本)
    这是由dco-check是一个没有任何第三方依赖项的单个Python文件所实现的。
    $ wget https://raw.githubusercontent.com/christophebedard/dco-check/master/dco_check/dco_check.py
    $ python3 dco_check.py
    

如果所有已检查的提交都已签出,则它将以0退出。否则,它将以非零数字退出。

运行--help以获取更多信息,包括

  • 忽略合并提交
  • 默认分支
  • 默认远程仓库
  • 要排除的提交作者电子邮件列表
  • 用于排除匹配通用电子邮件的正则表达式模式
  • 静默模式
  • 详细模式
  • 排除某些作者电子邮件(例如,用于机器人)

这些选项也可以通过环境变量设置(请参阅--help),但命令行参数的优先级高于环境变量。

工作原理

dco-check关注两个用例

  1. 功能分支的一部分,即一个提议的更改(拉取请求或合并请求)
  2. 默认分支上的提交,例如master,或者更具体地说,推送到默认分支的新提交

第一个用例在普通的git仓库中很容易处理。我们可以简单地使用git merge-base --fork-point $DEFAULT_BRANCH来获取默认分支上特定功能分支的提交列表。一些CI提供了更多信息,例如更改的目标分支,这对于我们不期望总是针对默认分支的情况很有用。然后我们可以使用git log检查每个提交,并确保它已被作者签出。

第二个用例在简单的git仓库中实际上是不可能的,因为它们不包含必要的信息(据我所知)。幸运的是,一些CI提供了这些信息。

此外,默认情况下,一些CI平台仅克隆git仓库到特定的深度,即你只能得到部分提交历史。这个深度有时对于某些CI来说可能为1,即浅克隆。对于这些情况,通常可以在作业配置中设置正确的参数来防止浅克隆。然而,由于dco-check的一个目标是尽可能简单易用,因此它尽量不依赖于这一点。

这就是为什么dco-check会检测当前的CI平台并使用该平台可以提供的信息。否则,它将回退到默认的通用实现,该实现使用简单的git命令。在这种情况下,CLI选项允许用户提供大量缺失的信息。

CI支持

以下是支持的CIs及其已知行为的摘要。

CI 在推送到默认分支时检测新更改 检测PRs/MRs 使用以下方式获取基础分支 使用以下方式获取默认分支 注意
GitHub CI (未使用) 使用GitHub API检索提交数据,因为GitHub默认进行浅克隆
GitLab CI CI 检测正常的GitLab MRs和外部(GitHub)MRs
Azure Pipelines CI CLI参数
AppVeyor CI CLI参数
CircleCI CI*(或CLI参数) CLI参数 *如果提供,可以使用基础修订信息(请参阅示例)
Travis CI CLI参数 CLI参数 默认支持作为正常git仓库
默认(git) CLI参数 CLI参数 在本地使用;在不支持CI的平台中使用可能存在问题,该平台仅进行浅克隆

示例CI配置

以下是一些示例CI配置。

GitHub

# .github/workflows/dco.yml
name: DCO
on:
  pull_request:
  push:
    branches:
      - master
jobs:
  check_dco:
    runs-on: ubuntu-latest
    name: Check DCO
    steps:
      - name: Run dco-check
        uses: christophebedard/dco-check@0.5.0
        with:
            python-version: '3.12'
            args: '--verbose'
        env:
          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}

请注意,with:属性是可选的,默认Python版本是3.12,默认不传递任何额外参数。

GitLab

# .gitlab-ci.yml
variables:
  DOCKER_DRIVER: overlay2
dco:
  image: christophebedard/dco-check:latest
  rules:
    - if: $CI_MERGE_REQUEST_ID
    - if: $CI_EXTERNAL_PULL_REQUEST_IID
    - if: $CI_COMMIT_BRANCH == 'master'
  script:
    - pip3 install -U dco-check  # optional
    - dco-check

Python版本支持

由于使用了f-strings,需要Python 3.6+。然而,如果需要或如果此类更改被贡献给dco-check,则应该不难将其移除以支持较旧的Python 3版本。

贡献

请参阅CONTRIBUTING.md

项目详情


下载文件

下载适用于您平台的文件。如果您不确定选择哪一个,请了解有关安装包的更多信息。

源分布

dco_check-0.5.0.tar.gz (24.3 kB 查看哈希值)

上传时间

构建分布

dco_check-0.5.0-py3-none-any.whl (19.1 kB 查看哈希值)

上传时间 Python 3

由以下提供支持

AWS AWS 云计算和安全赞助商 Datadog Datadog 监控 Fastly Fastly CDN Google Google 下载分析 Microsoft Microsoft PSF赞助商 Pingdom Pingdom 监控 Sentry Sentry 错误日志 StatusPage StatusPage 状态页面