发布

从 GitHub 问题自动生成带标签的发布版本和发布说明

概述

nbdev.release 提供了 3 个命令,您可以在 shell 中运行这些命令来管理您的更新日志文件和 Git 发布版本

  • nbdev_changelog: 从已关闭并标记的 GitHub 问题创建 CHANGELOG.md 文件
  • nbdev_release_git: 为当前版本在 GitHub 中标记并创建一个发布版本
  • nbdev_release_gh: 调用 nbdev_changelog,允许您编辑结果,然后推送到 Git 并调用 nbdev_release_git

它提供了另外 3 个用于在 pypi 或 conda 上发布包的命令

  • nbdev_pypi: 创建并上传 pypi 安装程序
  • nbdev_conda: 创建并上传 conda 安装程序
  • nbdev_release_both: 同时创建并上传 pypi 和 conda 安装程序

这里有一个简短的演示,说明如何在 nbdev.release 中使用更新日志和 Git 发布工具。这个演示首先使用 gh 命令行工具创建一个问题,然后使用 git 关闭它;您也可以使用 GitHub 的网页界面完成这两项任务。(请注意,这个功能以前在一个叫做 fastrelease 的项目中,所以在视频中,命令行工具的名称不同,以 fastrelease_ 开头而不是 nbdev_)。

设置

如果您还没有 GitHub 个人访问令牌,则需要获取一个。为此,请点击这里并在“Note”部分输入“nbdev”,然后点击 repo 复选框。

然后点击屏幕底部的“Generate Token”,并复制该令牌(显示的一长串字母和数字)。您可以通过点击令牌旁边的小剪贴板图标轻松完成此操作。

Copying your token

最简单的方法是将令牌保存为一个环境变量 GITHUB_TOKEN,以便自动访问。我们建议您通过将以下内容添加到您的 .bashrc.zshrc 文件末尾来实现这一点

export GITHUB_TOKEN=xxx

...然后用您刚刚复制的令牌替换 xxx。这样,当您启动一个新的 shell 时,它将自动可用(但更改后别忘了 source 该文件或打开一个新的 shell)。

创建发布说明

现在您可以创建发布说明了。这些说明会保存在一个名为 CHANGELOG.md 的文件中。这里有一个创建示例:nbdev 更新日志

自上次发布以来,所有在您的仓库中已关闭且带有 bugenhancementbreaking 标签的问题都将添加到此文件顶部。如果您之前没有进行过任何发布,那么所有带有这些标签的问题都将包含在内。

因此,在创建或更新 CHANGELOG.md 之前,请前往您的 GitHub 问题页面,从过滤器中移除 is:open,并为您希望包含的任何问题打上上述标签之一。完成这些操作后,您可以通过在终端中运行以下命令来创建或更新您的发布说明

nbdev_changelog

每个问题的标题和正文都将被添加。在编辑器中打开 CHANGELOG.md 并进行您想要的任何修改,然后将文件提交到您的仓库(别忘了 git add 它!)

标记发布

您现在应该标记一个发布版本。这将在 GitHub 中创建一个带有您在 settings.ini 中当前版本号的标签,然后将其转换为一个发布版本,使用您最新的发布说明作为该发布版本的描述

nbdev_release_git

运行此命令后,请务必在 settings.ini 中增加您的版本号。您可以手动编辑,或者如果您使用 nbdev,可以通过运行以下命令自动完成

nbdev_bump_version

同时执行两项操作(创建发布说明和标记发布)

要完成以上两个步骤,请运行

nbdev_release_gh

有关此内容的演示,请参阅上面的截屏视频。

Python API


来源

Release

 Release (owner=None, repo=None, token=None, **groups)

从 GitHub 问题创建 CHANGELOG.md

要创建 markdown 格式的更新日志,首先创建一个 Release 对象,可以选择传入一个将 GitHub 标签映射到 markdown 标题的映射。将您的 github token 放在仓库根目录下名为 token 的文件中。Release 在未提供参数值时会尝试从以下位置获取:

  • owner:settings.ini 中的 user 字段获取。这是 GitHub 仓库的所有者名称。例如,对于仓库 fastai/fastcore,所有者是 fastai
  • repo:settings.ini 中的 lib_name 字段获取。这是 GitHub 仓库的名称。例如,对于仓库 fastai/fastcore,名称是 fastcore
  • token: 从仓库根目录下名为 token 的文件获取。在设置部分讨论了如何创建令牌。
  • groups: (可选)从 settings.ini 中的 label_groups 字段获取,该字段是一个 JSON 字符串。这是一个将标签名称映射到发布说明中标题的映射。如果未指定,则默认为
{"breaking": "Breaking Changes", "enhancement":"New Features", "bug":"Bugs Squashed"}

来源

Release.changelog

 Release.changelog (debug=False)

创建 CHANGELOG.md 文件,如果 debugTrue 则返回建议的文本

类型 默认值 详情
debug bool False 只打印最新更改,而不更新文件
rel = Release()
# print(rel.changelog(debug=True))

来源

Release.release

 Release.release ()

为当前版本在 GitHub 中标记并创建一个发布版本

这使用您的 settings.ini 中的版本信息。


来源

Release.latest_notes

 Release.latest_notes ()

最新更新日志条目

所有相关的 pull request 和问题都从 GitHub API 获取,并根据用户提供的从标签到 markdown 标题的映射进行分类。

CLI 函数


来源

changelog

 changelog (debug:<function store_true>=False, repo:str=None)

从已关闭并标记的 GitHub 问题创建 CHANGELOG.md 文件

类型 默认值 详情
debug store_true False 打印要添加到更新日志的信息,而不更新文件
repo str None 要使用的仓库,而不是从 settings.ini 获取的 lib_name

来源

release_git

 release_git (token:str=None)

为当前版本在 GitHub 中标记并创建一个发布版本

类型 默认值 详情
token str None 可选的 GitHub 令牌(否则使用 token 文件)

来源

release_gh

 release_gh (token:str=None)

调用 nbdev_changelog,允许您编辑结果,然后推送到 Git 并调用 nbdev_release_git

类型 默认值 详情
token str None 可选的 GitHub 令牌(否则使用 token 文件)

发布包


来源

pypi_json

 pypi_json (s)

PYPI 路径 s 的字典解码 JSON


来源

latest_pypi

 latest_pypi (name)

name 在 pypi 上的最新版本


来源

pypi_details

 pypi_details (name)

name 从 pypi 获取的版本、URL 和 SHA256


来源

conda_output_path

 conda_output_path (name, build='build')

Conda 构建的输出路径


来源

write_conda_meta

 write_conda_meta (path='conda')

meta.yaml 文件写入当前目录的 conda 子目录

此函数用于 conda_package CLI 命令。

注意:在创建 conda 包之前,您首先需要将您的包上传到 PyPi。


来源

write_requirements

 write_requirements (path:str='')

根据 settings.ini 将 requirements.txt 文件写入 directory 目录。

在需要为项目生成 requirements.txt 文件的情况下,可以使用此函数。


来源

anaconda_upload

 anaconda_upload (name, loc=None, user=None, token=None, env_token=None)

name 上传到 anaconda

from fastcore.xtras import globtastic

来源

release_conda

 release_conda (path:str='conda', do_build:<function bool_arg>=True,
                build_args:str='', skip_upload:<function
                store_true>=False, mambabuild:<function store_true>=False,
                upload_user:str=None)

创建一个准备构建成包的 meta.yaml 文件,并可选地构建和上传它

类型 默认值 详情
path str conda 包将被创建的路径
do_build bool_arg True 运行 conda build 步骤
build_args str 发送给 conda build 的额外参数(字符串形式)
skip_upload store_true False 跳过 anaconda upload 步骤
mambabuild store_true False 使用 mambabuild(需要 boa
upload_user str None 可选的上传包的用户

来源

chk_conda_rel

 chk_conda_rel (nm:str, apkg:str=None, channel:str='fastai',
                force:<function store_true>=False)

仅当 PyPI 上存在比 Anaconda 仓库更新的发布版本时,才打印 GitHub 标签。

类型 默认值 详情
nm str pypi 上的包名称
apkg str None Anaconda 包(默认为 {nm})
channel str fastai Anaconda 频道
force store_true False 总是返回 github 标签

要构建和上传 conda 包,请 cd 到您的仓库根目录,然后

nbdev_conda_package

或者更手动地操作

nbdev_conda_package --do_build false
cd conda
conda build --no-anaconda-upload --output-folder build {name}
anaconda upload build/noarch/{name}-{ver}-*.tar.bz2

conda build command 添加 --debug 以调试发生的任何问题。请注意,构建步骤需要几分钟。如果您希望上传到组织,请向 anaconda upload 命令添加 -u {org_name},或者将 upload_user 传递给 nbdev_conda_package

注意:在创建 conda 包之前,您首先需要将您的包上传到 PyPi。


来源

release_pypi

 release_pypi (repository:str='pypi')

创建并上传 Python 包到 PyPI

类型 默认值 详情
repository str pypi 要上传到的仓库(在 ~/.pypirc 中定义)

使用 --repository 标志可以上传到 TestPypi(例如 nbdev_pypi --repository testpypi)以及自定义/私有仓库。

可以更新 ~/.pypirc 文件来配置额外的仓库,请参见下面的示例

[distutils]
index-servers =
    pypi
    testpypi
    private-repository

[pypi]
username = __token__
password = <PyPI token>

[testpypi]
username = __token__
password = <TestPyPI token>

[private-repository]
repository = <private-repository URL>
username = <private-repository username>
password = <private-repository password>

使用 nbdev_pypi --repository private-repository 上传到私有仓库。


来源

release_both

 release_both (path:str='conda', do_build:<function bool_arg>=True,
               build_args:str='', skip_upload:<function store_true>=False,
               mambabuild:<function store_true>=False,
               upload_user:str=None, repository:str='pypi')

发布 conda 和 PyPI 包

类型 默认值 详情
path str conda 包将被创建的路径
do_build bool_arg True 运行 conda build 步骤
build_args str 发送给 conda build 的额外参数(字符串形式)
skip_upload store_true False 跳过 anaconda upload 步骤
mambabuild store_true False 使用 mambabuild(需要 boa
upload_user str None 可选的上传包的用户
repository str pypi 要上传到的 Pypi 仓库(在 ~/.pypirc 中定义)

增加版本号


来源

bump_version

 bump_version (version, part=2, unbump=False)

来源

nbdev_bump_version

 nbdev_bump_version (part:int=2, unbump:bool=False)

将 settings.ini 中的版本号增加一

类型 默认值 详情
part int 2 要增加的版本部分
unbump bool False 减小版本号而不是增加