跳转到主要内容

用于提高pyproject.toml文件中指定的依赖项版本的实用程序

项目描述

GitHub Actions Status PyPI Package latest release

概述

BumpDeps是一个实用程序,用于提高pyproject.toml文件中指定的依赖项版本。它试图遵守PEP 440PEP 508中概述的规范。

BumpDeps可以作为发布过程或CI工作流程的一部分使用,以确保固定依赖项不会过时。

背景

通常,依赖项版本不应有上限固定,因为这是一种部署活动。固定依赖项将隐含的安全合同从用户移至维护者。相反,应定期运行自动CI测试,针对依赖项的最新版本,并快速解决任何问题。如果需要,上限固定应该是临时的,并与其问题或任务相关联。

那么,这个工具为什么会存在呢?可能存在一些情况,其中仍然需要进行固定操作。无论这是否有正当的理由,这些情况中的依赖项可能会迅速变得过时。这个工具的目的是简化更新这些依赖项的过程。

使用方法

对于最基本的使用方法,在项目的根目录中运行bumpdeps。这将更新pyproject.toml中找到的基本依赖项。

$ bumpdeps

要更新可选依赖项,请简化提供额外的名称。

$ bumpdeps some_extra some_cooler_extra

要更新所有依赖项,请使用--all-a

$ bumpdeps --all

有关更详细选项,请参阅下文。

自定义

BumpDeps的行为可以通过使用内联注释进行自定义。

如果在依赖项后找到# bumpdeps: ignore,BumpDeps将跳过该依赖项的更新。

如果在依赖项后找到# bumpdeps: ignore-until=YYYY-MM-DD,BumpDeps将跳过该依赖项的更新,直到指定的日期。

CLI参数

用法:bumpdeps [-h] [-a] [-b] [-i REGEX] [-e REGEX] [-f FILE] [–dry-run] [–pkg-index URL] [-d] [EXTRAS …]

-a
–all

更新基础和所有额外依赖项的依赖项。

-b
–base

更新基础依赖项。

如果没有提供额外依赖项,这是默认设置。通常与特定额外依赖项结合使用。

-n
–no-base

不要更新基础依赖项。

这旨在与–all结合使用,当只想更新所有可选依赖项而无需更新基础依赖项时。

-i REGEX
–include REGEX

正则表达式过滤器。只有匹配过滤器的依赖项才会被更新。

-e REGEX
–exclude REGEX

正则表达式过滤器。将跳过匹配过滤器的依赖项。

-f FILE
–file FILE

到TOML文件的路径。默认为当前目录中的pyproject.toml。

此文件应与pyproject.toml格式兼容。

–dry-run

显示将要进行的更改,而不会进行任何更改。

–pkg-index DIR

包索引的URL。默认为https://pypi.ac.cn

如果使用自定义URL,它必须与PyPI兼容的API。

-d
–debug

显示调试输出

-h
–help

显示帮助信息并退出

使用BumpDeps与GitHub Actions

配置部署密钥

建议创建一个部署密钥。这允许CI测试在创建的拉取请求上运行。如果您使用默认权限,则仍然会创建拉取请求,但不会触发CI测试。有其他方法可以实现这一点。有关更多信息,请参阅这里

  1. 创建一个SSH密钥对,留空密码。

    $ ssh-keygen -t ed25519 -f github_deploy

    这将在当前目录中创建两个文件

    • github_deploy

      私钥

    • github_deploy.pub

      公钥

  2. 将公钥(github_deploy.pub的内容)作为部署密钥添加到仓库设置中

    重要:勾选“允许写入访问”框

    有关配置部署密钥的说明,请参阅这里

  3. 在仓库设置中创建一个名为PRIVATE_KEY的repo密钥,其值为私钥(github_deploy的内容)

    有关创建仓库密钥的说明,请参阅这里

示例GitHub Actions配置

此示例避免了使用第三方操作,但可以通过利用peter-evans/create-pull-request进行简化。

name: Update Dependencies

on:
  schedule:
    # Every Monday at 1 AM
    - cron: '0 1 * * 1'

jobs:
  Update_Deps:

    runs-on: ubuntu-latest
    name: ${{ matrix.name || matrix.args }}

    strategy:
      fail-fast: false
      matrix:
        args: [extras_1, extras_2]
        include:

        - args: '-b'
          name: Base Dependencies

        - args: '-a -i toml.*'
          name: All TOML libs

    env:
      DEPS_UPDATED: false

    steps:
      - uses: actions/checkout@v3
        with:
          ssh-key: ${{ secrets.PRIVATE_KEY }}

      - name: Install latest Python
        uses: actions/setup-python@v4
        with:
          python-version: 3.x

      - name: Install bumpdeps
        run: pip install bumpdeps

      - name: Update deps
        run: |
          set -x
          bumpdeps ${{ matrix.args }}
          git diff --quiet || echo "DEPS_UPDATED=true" >> $GITHUB_ENV

      - name: Create PR
        env:
          GH_TOKEN: ${{ github.token }}
        run: |
          set -x
          PR_BRANCH=bumpdeps/$(echo ${{ matrix.name || matrix.args }} | tr ' ' _)_${{ github.run_id }}
          PR_MSG="BumpDeps: ${{ matrix.name || matrix.args }}"

          # Configure Git
          git config --global user.name "BumpDeps"
          git config --global user.email "<>"

          # Create commit in new branch
          git checkout -b $PR_BRANCH
          git commit -a -m "$PR_MSG"
          git --no-pager log -n 2
          git push -u origin $PR_BRANCH

          # Create PR
          gh pr create -B main -H $PR_BRANCH --title "$PR_MSG" --body "Created by Github Action"
        if: env.DEPS_UPDATED == 'true'

项目详情


下载文件

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

源代码分发

bumpdeps-0.2.1.tar.gz (19.6 kB 查看哈希值)

上传时间 源代码

构建分发

bumpdeps-0.2.1-py3-none-any.whl (14.7 kB 查看哈希值)

上传时间 Python 3

由...