如何使用 github 操作发布 pip wheels
How to publish pip wheels using github actions
也许是一个宽泛的问题,但我认为这与使用 github 的 python 包的任何维护者都相关,并且可以显着减少他们的工作量,所以希望权力会让它站起来。
基本上,在我看来:
- 为 python 构建和发布轮子很好,但有时它们必须特定于操作系统才能正常工作(即构建在类似的 OS/Env 上)
- Github actions 为 运行 作业提供了广泛的操作系统(目前是免费的),因此它可用于构建这些轮子
- Github 操作可以很容易地用于通过 twine 发布 sidst
所以我的问题是:
- 是否有一种直接的方法来为一堆环境构建轮子(例如,在 github 动作中使用 OS/env 矩阵)然后通过 github 动作发布它们。 G。通过将它们聚集在一个地方然后 运行ning 一些 twine 命令?问题似乎是无法通过 github 操作在不同的 envs/vms 设置之间进行通信。
我可以想到各种解决方案,例如一个中间的 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。
发布作业等待所有先前的作业完成,然后下载所有工件并在本例中迭代它们。一个额外的好处是,如果任何矩阵作业失败,发布将失败。当然,只有在所有操作系统上的构建步骤和命令都相同时,这才简单。
以下是测试的部分截图运行:
生成的工件:
发布作业的输出:
也许是一个宽泛的问题,但我认为这与使用 github 的 python 包的任何维护者都相关,并且可以显着减少他们的工作量,所以希望权力会让它站起来。
基本上,在我看来:
- 为 python 构建和发布轮子很好,但有时它们必须特定于操作系统才能正常工作(即构建在类似的 OS/Env 上)
- Github actions 为 运行 作业提供了广泛的操作系统(目前是免费的),因此它可用于构建这些轮子
- Github 操作可以很容易地用于通过 twine 发布 sidst
所以我的问题是:
- 是否有一种直接的方法来为一堆环境构建轮子(例如,在 github 动作中使用 OS/env 矩阵)然后通过 github 动作发布它们。 G。通过将它们聚集在一个地方然后 运行ning 一些 twine 命令?问题似乎是无法通过 github 操作在不同的 envs/vms 设置之间进行通信。
我可以想到各种解决方案,例如一个中间的 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。 发布作业等待所有先前的作业完成,然后下载所有工件并在本例中迭代它们。一个额外的好处是,如果任何矩阵作业失败,发布将失败。当然,只有在所有操作系统上的构建步骤和命令都相同时,这才简单。
以下是测试的部分截图运行:
生成的工件:
发布作业的输出: