标签: github-actions

如何使用 github actions 发布 pipwheels

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

本质上,在我看来:

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

所以我的问题是:

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

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

python github pypi python-wheel github-actions

6
推荐指数
1
解决办法
2294
查看次数

如何使用 GitHub Actions 实现多阶段 Docker 构建?

问题

我的容器有一个多阶段(两个阶段)docker 构建,让我们命名它cont,我希望通过 GitHub Actions 实现自动化。构建过程的第一阶段/docker-image很少改变,并且构建需要很长时间;让我们称之为cont-build。我想通过不在cont-build每次构建整个项目时都进行构建来减少构建持续时间。

cont-build在本地运行该构建时,我可以通过本地 docker 实例轻松获取该映像。我很难将这种简单的可用性转移到 GitHub Actions。

我检查了 Docker 和 GitHub 文档,但无法找到实现此目的的方法。在本地机器上是如此简单,所以我认为在 GitHub-Actions 上不会那么难......

方法

为了保持cont-build图像,似乎有不同的方法

  • 使用某种 GitHub 缓存。我不确定图像的缓存持续时间。
  • 从 DockerHub 中提取镜像,在构建时间较长的情况下可能比构建快得多

对我来说,第二个似乎更直接、更简单。所以我的方法是发布cont-build到 DockerHub 并cont-build在每次我想要构建cont.

我尝试使用uses: Docker://${{ secrets.DOCKERHUB_USERNAME }}/cont-build,但不知道将其放置在哪里。

问题

在哪里/如何提取下面工作流程中“构建和推送”cont-build所需的映像?Dockerfile-cont另外,如果我的方法不好,那么多阶段构建的一般方法是怎样的,其中构建的一个阶段不会/很少改变,特别是考虑到 GitHub 缓存可能会在一段时间后被删除这一事实?

我意识到我可以使用类似FROM mydockerID/cont-build:latestin的东西Dockerfile-cont,但这似乎不是利用整个 GitHub-Workflow 环境的解决方案。这也意味着我必须以明文形式输入我的 docker-ID,而不是使用 GitHub-Secret。

name: CI for cont

on: workflow_dispatch

jobs:
  docker:
    runs-on: ubuntu-latest    
    steps:
      - …
Run Code Online (Sandbox Code Playgroud)

github docker dockerhub docker-multi-stage-build github-actions

6
推荐指数
1
解决办法
4175
查看次数

如果前一个操作失败但当前操作成功,是否有任何方法可以触发 Github 操作?

我已经设置了一个 Github 操作来在失败时发送一封电子邮件(用于集成测试),并且我想发送另一封电子邮件来通知它已恢复;为此,我需要知道上一次运行是否失败但当前运行是否成功。

这是失败的代码:

(...)
- name: Send mail if failed
  if: ${{ failure() }}
  uses: juanformoso/action-send-mail@1
  with:
(...)
Run Code Online (Sandbox Code Playgroud)

有办法实现我需要的吗?就像是${{ if success_but_previous_failed() }}

编辑:我的意思是在工作流程“运行”之间,这是我想要检测的情况:

在此输入图像描述

最后一次运行应该发送“测试已恢复”邮件

github github-actions

6
推荐指数
1
解决办法
1732
查看次数

如何将秘密从 GitHub Actions 传递到 python 环境变量?

pytest在 GitHub Actions 中运行,我必须传递一些secretsPython 运行环境。例如,

  - name: Test env vars for python
    run: python -c 'import os;print(os.environ)'
    env:
      TEST_ENV: 'hello world'
      TEST_SECRET: ${{ secrets.MY_TOKEN }}
Run Code Online (Sandbox Code Playgroud)

但是,输出如下:

environ({
'TEST_ENV': 'hello world',
'TEST_SECRET':'',
...})
Run Code Online (Sandbox Code Playgroud)

由于GitHub 的修订,它似乎不起作用。

根据 @raspiduino 的回答,我对导入环境变量的两个选项进行了更多探索。

name: python

on: push

jobs:
  test_env:
    runs-on: ubuntu-latest
    steps:
    - name: Set up Python
      uses: actions/setup-python@v2
      with:
        python-version: 3.8
        
    - name: Test env vars for python
      run: python -c 'import os;print(os.environ)'
      env:
        ENV_SECRET: ${{ secrets.ENV_SECRET }} 
        REPO_SECRET: ${{ …
Run Code Online (Sandbox Code Playgroud)

python environment-variables github-actions github-secret

6
推荐指数
1
解决办法
1万
查看次数

git 操作和 LFS 缓存

试图减轻来自 github 的大量 LFS 拉取。产生费用。
所以很高兴看到 github actions 支持缓存来自 LFS 的大 blob。

这是在 actions/checkout 模块存储库中发布的问题#165上发布的示例

- name: Checkout code
  uses: actions/checkout@v2

- name: Create LFS file list
  run: git lfs ls-files -l | cut -d' ' -f1 | sort > .lfs-assets-id

- name: Restore LFS cache
  uses: actions/cache@v2
  id: lfs-cache
  with:
    path: .git/lfs
    key: ${{ runner.os }}-lfs-${{ hashFiles('.lfs-assets-id') }}-v1

- name: Git LFS Pull
  run: git lfs pull

- name: run compile and package
  run: python CompileAndPackage.py
Run Code Online (Sandbox Code Playgroud)

我当前的流程如下,我声明支持 …

github github-actions

6
推荐指数
2
解决办法
2312
查看次数

ESLint 不会破坏 Github Actions 的构建

我是第一次使用Github Actions 。我正在使用Vue-CLI并且我想创建一个作业来检查我的文件push并中断构建过程(如果有)ESLint'errors.

这是我package.json的脚本:

"scripts": {
  "serve": "vue-cli-service serve",
  "build": "vue-cli-service build",
  "lint": "vue-cli-service lint",
},
Run Code Online (Sandbox Code Playgroud)

这是我的.github/workflows/main.yml文件:

name: Lint files on push

on: push

jobs:
  build:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v2
      - name: Install modules
        run: npm install
      - name: Run ESLint
        run: npm run lint
Run Code Online (Sandbox Code Playgroud)

我使用这个模板作为灵感。正如您在下面的屏幕截图中看到的那样。该作业已成功完成,但它不会破坏构建或修复 linting。我究竟做错了什么?

在此输入图像描述

javascript continuous-integration github eslint github-actions

6
推荐指数
1
解决办法
4159
查看次数

停止 github 动作矩阵案例

我想对不同的构建类型使用 github 操作矩阵,但我对支持该矩阵的一种情况不感兴趣。如何阻止此案例运行,但仍能成功标记构建。

在这种特殊情况下,我想构建 Windows 和 Ubuntu、32 位和 64 位,但我对在 Ubuntu 上支持 32 位不感兴趣。所以我的矩阵是:

    strategy:
      fail-fast: false
      matrix:
        os: [windows-latest, ubuntu-latest]
        platform: ['x64', 'x86']
Run Code Online (Sandbox Code Playgroud)

我当前的解决方案是通过添加 if 表达式来停止每个操作的运行:

    - name: Build Native
      if: ${{ ! (matrix.os == 'ubuntu-18.04' && matrix.platform == 'x86') }}
Run Code Online (Sandbox Code Playgroud)

虽然这工作正常,但我觉得应该有一种更优雅的方法来解决这个问题。谁能帮我让我的 yaml 脚本更漂亮吗?

yaml github-actions

6
推荐指数
1
解决办法
1283
查看次数

如果失败,拉取请求触发的 GitHub Actions 不会锁定“合并”按钮

对于 python 应用程序,我设置了一个 GitHub 操作,该操作在每个要掌握的拉取请求上运行 pytest(和其他工具)。

当工作流程失败时,我在拉取请求页面的“检查”选项卡中看到它,但即使 GitHub 操作失败,我也可以合并我的分支:

在此输入图像描述

在我的存储库中,设置 -> 分支,我创建了一个符合我的需要的新保护规则,但我无法指定任何状态检查。

我想要做的就是使用我的工作流程来允许(或禁止)根据工作流程的输出合并拉取请求。

有任何想法吗?

git workflow github pull-request github-actions

6
推荐指数
1
解决办法
2504
查看次数

Github 是否支持匿名访问私有存储库的工作流程状态徽章?

这些显示 GitHub操作结果的 GitHub 工作流程徽章在 GitHub README.md 等中显示良好,或者在具有连接到 GitHub 的会话的浏览器中粘贴为 URL 时显示良好。

但是,当使用相同的 URL(或从隐身浏览器实例)从 Confluence Cloud 访问时,GtHub 返回未找到 404,这并不奇怪。

GitHub 是否有一项设置,例如 Azure one Azure Pipelines 状态徽章未在 Markdown 中显示以使徽章公开?到目前为止我还没有找到。

(在 Jenkins 上,此选项称为“为匿名用户授予 ViewStatus 权限”。)

聚苯乙烯

今天早上又谷歌了一下,发现:

但第二个链接中的解决方案对我不起作用。

continuous-integration github salesforce confluence github-actions

6
推荐指数
0
解决办法
582
查看次数

如何获取 GitHub 操作工作流程的总构建时间?

有没有办法获取 GitHub 操作工作流程的总构建时间?我在 GitHub API 和 GraphQL 中没有找到与此相关的任何内容。

github-actions

6
推荐指数
1
解决办法
5465
查看次数