如何使用 github 操作发布 pip wheels

How to publish pip wheels using github actions

也许是一个宽泛的问题,但我认为这与使用 github 的 python 包的任何维护者都相关,并且可以显着减少他们的工作量,所以希望权力会让它站起来。

基本上,在我看来:

所以我的问题是:

我可以想到各种解决方案,例如一个中间的 s3 存储桶,但我可能对 pypi and/or github 操作在这方面的工作方式有很大的误解,所以我可能会浏览一个非常简单的问题。

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

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

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

以下是测试的部分截图运行:

生成的工件:

发布作业的输出: