如何使用 github actions 发布 pipwheels

Geo*_*rge 6 python github pypi python-wheel github-actions

也许是一个有点宽泛的问题,但我认为这对于任何使用 github 的 python 包的维护者来说都是相关的,并且可以显着减少他们的工作量,所以希望权力能够让它成立。

本质上,在我看来:

  • 为 python 构建和发布轮子很好,但有时它们必须特定于操作系统才能正常工作(即构建在类似的操作系统/环境上)
  • Github actions 提供了广泛的操作系统来运行作业(目前免费),因此它可以用来构建这些轮子
  • 可以轻松使用 Github actions 通过 twine 发布 sidst

所以我的问题是:

  • 有没有一种直接的方法来为一堆环境构建轮子(例如在 github actions 中使用 OS/env 矩阵),然后通过 github actionse.g 发布它们。通过将它们聚集在一处然后运行一些 twine 命令?问题似乎是无法通过 github 操作在不同的 envs/vms 设置之间进行通信。

我可以想到涉及中间 s3 存储桶的各种解决方案,但对于 pypi 和/或 github 操作在这方面的工作方式,我可能犯了很大的错误,因此我正在浏览一个非常简单的问题。

ITC*_*hap 9

正如我的评论中提到的,这是运行并行构建但单个上传的一种可能方法:

name: 'Aggregation'

on: [push]

env:
  ARTIFACT: artifact.bin

jobs:
  build:
    runs-on: ${{ matrix.os }} 
    strategy:
      matrix:
        os:
          - windows-latest
          - ubuntu-latest
          - macos-latest
    steps:
      - uses: actions/checkout@v2

      - shell: bash
        run: |
          echo "Run your build command here"
          echo "This is a fake ${{ matrix.os }} build artifact" >$ARTIFACT

      - uses: actions/upload-artifact@v2
        with:
          name: build-${{ matrix.os }}-${{ github.sha }}
          path: ${{ env.ARTIFACT }}

  publish:
    runs-on: ubuntu-latest
    needs: build
    steps:
      - uses: actions/download-artifact@v2
        with:
          path: artifacts

      - shell: bash
        working-directory: artifacts
        run: |
          for i in $( ls ); do
            cat $i/$ARTIFACT
          done
Run Code Online (Sandbox Code Playgroud)

每个矩阵作业都会构建自己的工件并将其上传到 github。发布作业会等待所有先前作业完成,然后再下载所有工件并在本例中迭代它们。另一个好处是,如果任何矩阵作业失败,发布都会失败。当然,只有当所有操作系统上的构建步骤和命令都相同时,这才很简单。

以下是一些测试运行的截图: 工作流程运行

由此产生的工件: 文物

发布作业的输出: 输出