SPEC 4 — 使用和创建每日构建轮子

作者:
Brigitta Sipőcz <brigitta.sipocz@gmail.com>,Jarrod Millman <millman@berkeley.edu>,Matthew Feickert <matthew.feickert@cern.ch>,Matthias Bussonnier <bussonniermatthias@gmail.com>,Mridul Seth <mail@mriduls.com>,Olivier Grisel <olivier.grisel@ensta.org>,Tim Head <betatim@gmail.com>
讨论:
https://discuss.scientific-python.org/t/spec-4-nightly-wheels/474
历史:
https://github.com/scientific-python/specs/commits/main/spec-0004
获得认可:
ipythonmatplotlibnetworkxnumpyscikit-imagescikit-learnscipyxarray

描述#

本 SPEC 描述了如何针对多个广泛使用的项目的每日构建轮子进行测试,以及如何为您的项目创建每日构建轮子。本文档使用“每日构建”一词来指代一些半定期间隔,例如每天、每周或每三天。

在使用依赖项的每日构建版本的同时定期运行项目的测试,可以让你在发布新版本之前发现由上游更改引起的问题。这样,潜在的问题就可以在它们进入发布版本之前得到解决,因为一旦进入发布版本,修改或回滚某些内容就会变得更加困难。

定期为您的项目创建每日构建轮子,可以让依赖您项目的项目对即将发生的更改提供反馈。与针对依赖项的每日构建进行测试一样,这使您的依赖项有机会在问题进入发布版本之前报告问题。

核心项目认可#

生态系统采用#

徽章#

项目可以通过包含 SPEC 徽章来突出显示它们对本 SPEC 的采用。

SPEC 4 — Using and Creating Nightly Wheels
[![SPEC 4 — Using and Creating Nightly Wheels](https://img.shields.io/badge/SPEC-4-green?labelColor=%23004811&color=%235CA038)](https://scientific-python.cn/specs/spec-0004/)
|SPEC 4 — Using and Creating Nightly Wheels| 

.. |SPEC 4 — Using and Creating Nightly Wheels| image:: https://img.shields.io/badge/SPEC-4-green?labelColor=%23004811&color=%235CA038
   :target: https://scientific-python.cn/specs/spec-0004/
要使用一个徽章指示对多个 SPEC 的采用,请参阅此处

实施#

本节概述了如何实施使用和构建每日构建轮子的方法。我们假设您的项目已经具有一定的 CI 基础设施,并且您需要将其与现有设置相结合。在“注释”部分,我们链接到已在其设置中实施此方法的项目,为您提供完整设置的示例。

使用每日构建轮子进行测试#

我们建议项目添加一个每周的 cron 作业,以使用依赖项的每日构建版本运行其测试。当 cron 作业遇到错误时,应自动在您的存储库中打开一个问题。

如果您发现问题,请调查这是否是由于已知的弃用或错误修复导致的。如果您认为两者都不是,请将其报告给相关的上游项目。

要安装依赖项的每日构建版本,请检查哪些依赖项在https://anaconda.org/scientific-python-nightly-wheels/上可用。例如,要安装 NumPy 和 SciPy 的每日构建版本,请使用

python -m pip install --pre --upgrade --extra-index-url https://pypi.anaconda.org/scientific-python-nightly-wheels/simple numpy scipy

项目如何在 CI 设置中实施此方法的完整示例链接在“注释”部分。

构建每日构建轮子#

为您的项目实施此方法需要几个步骤

  1. 访问https://anaconda.org/scientific-python-nightly-wheels/,这是用于托管每日构建轮子的位置
  2. 设置一个 CI 步骤,用于为您的项目构建轮子
  3. 设置一个 CI 步骤,用于将轮子上传到https://anaconda.org/scientific-python-nightly-wheels/

对于步骤 (1),请访问https://github.com/scientific-python/upload-nightly-action并创建一个问题以请求访问权限。列出您维护并希望为其上传每日构建版本的项目。我们会回复问题并告知您接下来会发生什么。

步骤 (2) 的工作取决于您的项目。您可能已经在为您的发布版本执行此操作。需要记住的部分是定期构建轮子,至少每周一次。

对于步骤 (3),有一个您可以使用的 GitHub Action。您可以在https://github.com/scientific-python/upload-nightly-action找到此 Action。要在您的“构建轮子工作流”中使用它,请添加以下行作为附加步骤

- name: Upload wheel
  uses: scientific-python/upload-nightly-action@main
  with:
    artifacts_path: dist/
    anaconda_nightly_upload_token: ${{ secrets.UPLOAD_TOKEN }}

项目如何在 CI 设置中实施此方法的完整示例链接在“注释”部分。

工件清理策略位于https://anaconda.org/scientific-python-nightly-wheels#

为了避免托管过时的开发版本,以及为了清理空间,我们确实有一个保留策略:

  • 最新的**N 个版本**
  • **M 天**内创建的工件

超出这些范围的任何版本都会作为每日 cron 作业的一部分自动删除。项目可能出于某些原因要求将其添加到免于此自动清理的列表中,但在这种情况下,清理旧的、未使用的版本的责任将由项目本身承担。

注意:NM 的实际值在https://github.com/scientific-python/upload-nightly-action存储库中定义和记录。

添加新项目的流程#

站点管理员来自科学 Python 社区的活跃成员。理想情况下,管理员的集合包含来自不同项目和底层组织的广泛的社区成员。这是为了确保社区拥有轮子托管基础设施和由共识管理的管理,而不是由任何个人、项目或组织单方面做出决策。添加新的管理员需要创建一个问题。在项目在https://github.com/scientific-python/upload-nightly-action上创建一个问题以请求上传轮子的访问权限后,管理员必须回复该请求。

我们希望对新的项目上传轮子保持开放态度。同时,在授予访问权限之前,我们需要进行一些尽职调查,因为已批准的项目将在科学 Python 生态系统中获得广泛的曝光。恶意行为者可能会滥用这一点。

项目的指定代表应在https://anaconda.org上分别创建一个帐户,并将他们的用户名与 Anaconda 上科学 Python 组织的管理员共享。为了提高弹性,我们建议每个项目至少有两名注册代表。

然后,代表可以在https://anaconda.org/[user]/settings/access生成一个个人访问令牌,并在 CI 中使用它来上传轮子。该令牌应仅具有“允许上传到标准 Python 存储库”、“允许读取 API 站点访问权限”和“允许写入 API 站点访问权限”范围。出于安全原因,应避免在组织级别创建令牌。

下一步是将轮子进行初始上传,以便在 anaconda.org 上创建包列表。完成此操作后,您可以撤销令牌并将新用户添加到其项目中。每个项目都应至少有一位也是项目管理员的用户。

此时,请告知用户他们已添加,并且可以创建个人访问令牌(如上所述)。他们现在可以上传新的轮子并对他们的项目执行维护操作。

注释#

在此页面上