标签: github-actions

在多个存储库之间共享 github 工作流程的最有效方法是什么?

我目前正在为我的团队设置一个包含 Github 操作的工作流程。然而,我有十多个用于不同微服务的存储库,我不想简单地笨拙地在每个存储库之间复制 .github/workflows/ 目录。如果我们需要更改工作流程,我必须复制每个存储库之间的所有更改。

我目前正在考虑的解决方案只是将我的工作流程目录作为 git 子模块。(编辑:对此进行了测试,当您的工作流程目录是子模块时,github 不会将其识别为包含操作)

这个解决方案还有其他选择吗?目前是否有管理这些工作流程的“最佳实践”?

continuous-integration github-actions

5
推荐指数
1
解决办法
3522
查看次数

当 Github Actions 部署 R 包文档并中断时,Git 不知道我的姓名/电子邮件

一段时间以来,我一直很高兴使用 Github 的 Actions 来运行我的库R CMD check并部署包的文档。突然,打包操作开始失败,并出现以下错误:

\n
\xe2\x94\x80\xe2\x94\x80 Commiting updated site \xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\nRunning git add -A .\nRunning git commit --allow-empty -m \'Built site for lares: 4.9.0@d936943\'\n\n*** Please tell me who you are.\n\nRun\n\n  git config --global user.email "you@example.com"\n  git config --global user.name "Your Name"\n\nto set your account\'s default identity.\nOmit --global to set the identity only in this repository.\n\nfatal: unable to auto-detect email address (got \'runner@Mac-1594850189701.(none)\')\n\nError: System command \'git\' failed, exit status: 128, stdout & stderr were printed\n\n …
Run Code Online (Sandbox Code Playgroud)

r pkgdown github-actions

5
推荐指数
1
解决办法
2102
查看次数

在 github 操作中运行时,Python 自动版本控制不会发生

我试图在成功构建后将包从 CI 直接推送到 pypi。我已经尝试了几个工具,比如“setuptools-scm”,一切都运行良好,并且我根据我的标记自动进行版本更改,就像package-0.0.2.post11-py3-none-any.whl在本地一样。

当我将相同的代码作为 github 操作(命令)的一部分推送时,Run python3 setup.py sdist bdist_wheel我没有看到版本更新,而且我总是得到package-0.0.0-py3-none-any.whl

以下是 setup.py 的片段

setuptools.setup(
    name="package",
    use_scm_version=True,
    setup_requires=['setuptools_scm']
Run Code Online (Sandbox Code Playgroud)

yml 文件:

 publish:
    name: Build and publish Python  distributions  to PyPI and TestPyPI
    runs-on: ubuntu-18.04
    steps:
    - uses: actions/checkout@v2
    - name: Set up Python 3.8
      uses: actions/setup-python@v2
      with:
        python-version: 3.8
    - name: Install scm version
      run: >-
        python -m
        pip install
        setuptools-scm==4.1.2        
    - name: Install wheel
      run: >-
        python -m
        pip install
        wheel==0.34.2
    - name: Build a …
Run Code Online (Sandbox Code Playgroud)

python setuptools pypi python-3.8 github-actions

5
推荐指数
1
解决办法
2730
查看次数

第一次失败时停止多行 GitHub 操作

我们有一个 GitHub 操作来构建我们的应用程序,我们使用多行语法。

run: |
  npm install
  npm run test
  npm run e2e
  npm run deploy
Run Code Online (Sandbox Code Playgroud)

如果其中一个命令失败,操作将继续执行下一个命令并部署应用程序。

有没有办法在第一次失败时中止操作?

github-actions

5
推荐指数
1
解决办法
835
查看次数

Python sqlite3在本地成功,但在Github Action上失败

相同的 python 版本,相同的 sqlite3 版本和相同的文件,但我只是无法传递 Github Action。

\n

这是我的 github 操作:\n https://github.com/CloudAurora/Blog/blob/master/.github/workflows/main.yml

\n

和我的Python文件:https://github.com/CloudAurora/Blog/blob/master/scripts/init_database.py

\n

我可以在本地 Linux 机器上成功运行这个文件:

\n
Projects/Blog - [master\xe2\x97\x8f] \xc2\xbb python scripts/init_database.py -r ./posts --token  xxx\nsqlite version 2.6.0\nINSERT_USER_STATEMENT \n    INSERT INTO User(bio, email, githubId, name)\n    VALUES(?,?,?,?)\n    ON CONFLICT(name) DO NOTHING\n\nINSERT_USER_STATEMENT \n    INSERT INTO User(bio, email, githubId, name)\n    VALUES(?,?,?,?)\n    ON CONFLICT(name) DO NOTHING\n\nCreate db file in: ./prisma/dev.db, and env is set\n
Run Code Online (Sandbox Code Playgroud)\n

但是,当我将其推送到 github 时,它会在 Github Action 中失败:

\n
 sqlite version 2.6.0\nINSERT_USER_STATEMENT \n    INSERT INTO User(bio, email, …
Run Code Online (Sandbox Code Playgroud)

python sqlite github-actions

5
推荐指数
1
解决办法
1581
查看次数

如何在 GitHub Actions/Workflows 配置中安装 imagemagick 和其他自制依赖项?

我基本上必须在 Mac 上执行此操作,才能在本地为我的包连接所需的依赖项:

brew cask install java
brew install graphicsmagick
brew install imagemagick
brew install fontforge
brew install ffmpeg
brew install xetex
brew install nasm
brew install qemu
Run Code Online (Sandbox Code Playgroud)

我正在使用 Node.js,它是一个节点包。我如何告诉 GitHub Actions/Workflows 在 Mac 环境中设置所有这些内容?我还想尝试运行 Ubuntu 环境,因此最好知道如何为每个环境运行不同的安装设置脚本。

我的配置似乎还没有起作用,本质上是这样的: name: build

on:
  pull_request:
    paths-ignore:
      - '**.md'
  push:
    branches:
      - build
    paths-ignore:
      - '**.md'

jobs:
  # linux:
  #   runs-on: ubuntu-latest
  #   steps:
  #     - uses: actions/checkout@v2
  #     - uses: actions/setup-node@v1
  #     - run: sudo apt-get install ninja-build
  #     - run: ninja --version …
Run Code Online (Sandbox Code Playgroud)

macos continuous-integration node.js github-actions

5
推荐指数
1
解决办法
1855
查看次数

git rev-list 在 github 操作中不起作用

我有一个在创建版本时触发的 github 操作。

目标是:

  • 查找该版本所基于的标签
  • 查找该分支上的上一个标签

到目前为止,我有这个:

CURRENT_TAG=${{ github.event.release.tag_name }}
PENULTIMATE_TAG=$(git describe --exact-match --tags `git rev-list --tags --max-count=1 --skip=1`)
Run Code Online (Sandbox Code Playgroud)

然后将这些内容回显以进行测试。第一个工作正常,但第二个总是返回空。我在本地尝试了完全相同的命令,它返回第二个最新标签,如预期的那样。

我不知道为什么它在 github 操作中不起作用。为了调试,我删除了该git describe组件,确认实际上 gitrev-list没有返回任何内容。

git github github-actions

5
推荐指数
1
解决办法
1774
查看次数

使用带有秘密的 github 操作来构建/部署 React 应用程序

我正在尝试使用带有秘密的 github 操作来完成构建/部署我的使用 Firebase(目前仅身份验证模块)的 React 应用程序。对于本地开发,我将 .env 文件与 webpack 和 dotenv-webpack 库一起使用。在本地机器上一切正常。开发服务器从 .env 文件获取环境变量并注入它。但是在 github 操作中构建并在 firebase 托管页面上部署包后,我返回一个错误:

code: "auth/invalid-api-key"
message: "Your API key is invalid, please check you have copied it correctly."
Run Code Online (Sandbox Code Playgroud)

经过一番调查,我发现环境变量没有正确定义:

apiKey: undefined
authDomain: undefined
databaseURL: undefined
messagingSenderId: undefined
projectId: undefined
storageBucket: undefined
Run Code Online (Sandbox Code Playgroud)

主要问题是我是否正确执行变量注入,或者是否有其他方法可以做到这一点?我在构建中使用的 webpack 配置:

webpack.build.conf.js

const { merge } = require('webpack-merge');
const baseWebpackConfig = require('./webpack.base.conf');

const buildWebpackConfig = merge(baseWebpackConfig, {
  //!!!
  //CAUTION Production config
  //!!!
  mode: 'production',
});

module.exports = new Promise((resolve, reject) => { …
Run Code Online (Sandbox Code Playgroud)

javascript firebase reactjs webpack github-actions

5
推荐指数
1
解决办法
7967
查看次数

在 github 操作中使用 openssl

我想将 github 操作的工件发布到特定的更新存储库,以便我的软件可以使用它来更新自身。为了验证本地更新过程中的更新,我想签署此工件。我现在选择将更新本身和签名存储在单独的文件中。

我的 github 操作将获取压缩的工件,并应使用给定的 RSA4096 私钥对其进行签名,并应使用 SHA512 作为摘要。

我的 github 操作如下所示:

- name: Sign release
  run: |
    echo $PRIVATE_KEY > privatekey.pem
    openssl dgst -sha512 -sign privatekey.pem -out latest.sig latest.zip
    env:
      PRIVATE_KEY: ${{ secrets.PRIVATE_KEY }}
Run Code Online (Sandbox Code Playgroud)

此 github 操作应该从存储库的机密中获取我的私钥,将其放入环境变量中,然后将其放入本地文件中,以便以下 openssl 命令可以使用此私钥对其进行签名。我这样做是为了阻止私钥本身被回显到日志中。

私钥值如下:(这当然不是实际的私钥,而是我仅出于测试目的而创建的私钥,直到此 github 操作正常工作为止。这个私钥只有 1024 位,而不是上面提到的 4096 位。我将以后就不再使用这个私钥了。)

- name: Sign release
  run: |
    echo $PRIVATE_KEY > privatekey.pem
    openssl dgst -sha512 -sign privatekey.pem -out latest.sig latest.zip
    env:
      PRIVATE_KEY: ${{ secrets.PRIVATE_KEY }}
Run Code Online (Sandbox Code Playgroud)

问题是执行这一步时github操作的日志输出如下:

-----BEGIN RSA PRIVATE KEY-----
MIICWwIBAAKBgGwdzKeZPLdOHV+/iDpHHtEk7kephhI5eythCfmoqzy5CSx+GZ6X
Z1GiIzII+CtyN69cOgyzO99uPvquBkbo3lHL5+jZnOEue8nMub8iwPXZgDB6s8BV
sFevjLENx4LWJSZSo8rUn6al3bfoWJUySzkla9xc4g0GiO1K81zGeRH9AgMBAAEC
gYBTZbUs/vYny5i69+pkUeICoEMxgiHKQw6win0AWMwl3fGmoWqvu8hV3wTZHrQY …
Run Code Online (Sandbox Code Playgroud)

openssl rsa github github-actions

5
推荐指数
1
解决办法
3736
查看次数

Github 操作在容器中运行步骤

目前,我正在尝试在我的 Github Actions 工作流程中实现一个容器。但是,我很难弄清楚如何在容器本身中运行步骤。

使用以下工作流程:

name: Laravel

on: pull_request

jobs:
  laravel-checks:
    runs-on: ubuntu-latest
    container: thomasowow/laravel-php:7.4

    steps:
    - uses: actions/checkout@v2

    - name: Yarn
      run: |
        yarn
Run Code Online (Sandbox Code Playgroud)

此工作流程会导致以下错误:

/__w/_temp/c399fe7d-6cd2-4cdc-bb06-acc829cddbb8.sh: 1: /__w/_temp/c399fe7d-6cd2-4cdc-bb06-acc829cddbb8.sh: yarn: not found
##[error]Process completed with exit code 127
Run Code Online (Sandbox Code Playgroud)

它无法找到yarnthomasowow/laravel-php:7.4本地运行可用yarn。我已经用 docker 镜像中应该可用的其他东西对此进行了测试,但也没有找到它们。看起来这些步骤没有在容器中执行。

该文档对语法进行了以下说明jobs.<job_id>.container

用于运行作业中尚未指定容器的任何步骤的容器

我知道有些解决方案无需使用容器即可工作,我更愿意使用它。

有人遇到同样的问题或者知道我做错了什么吗?


解决方案

@DannyB 指出我的图像包含以下入口点:

["/bin/bash", "--login", "-c", "tail -f /dev/null"]
Run Code Online (Sandbox Code Playgroud)

这可能是 Github 无法在容器中正常运行的原因。

镜像中需要安装 nvm、node 和yarn

SHELL ["/bin/bash", "--login", "-c"]

RUN curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.35.3/install.sh | bash
RUN …
Run Code Online (Sandbox Code Playgroud)

docker github-actions

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