标签: github-actions

为什么未强制执行 GitHub Actions 所需的输入?

我正在为 GitHub Actions 编写一个具有输入的 JavaScript 操作,其中一些输入是必需的。一个简单的例子:

name: 'My action'
description: 'My description'
author: 'me'
inputs:
  thisOneIsOptional: 
    description: 'An optional input'
    required: false
  thisOneIsRequired: 
    description: 'A required input'
    required: true
runs:
  using: 'node12'
  main: '../lib/main.js'
Run Code Online (Sandbox Code Playgroud)

令我惊讶的是,我可以在工作流程中使用此操作,而无需提供所需的参数,并且 GitHub 也没有抱怨。似乎需要由操作本身来验证是否确实提供了所需的输入。是对的吗?

在调用我的操作代码之前,有没有办法让 GitHub 为我验证这一点?

github-actions

7
推荐指数
1
解决办法
2803
查看次数

如何通过 GitHub Actions 向 CRAN 提交 R 包?

我创建了一个 R 包,每当我将更改合并到 master 分支时,我想通过 GitHub Actions 将其上传到 CRAN。我发现了很多R 操作的示例,我什至查找了一些最流行的软件包(如 dplyr)是如何做到这一点的,尽管我找到了一个devtools::release()辅助函数,但我仍然没有看到一个工作流程可以当您将更改合并到主分支时,将库提交到 CRAN。软件包开发人员是否手动执行此操作?有什么原因导致这没有自动化吗?

r continuous-deployment cran github-actions r-usethis

7
推荐指数
1
解决办法
336
查看次数

如何在作业之间重用环境?

我的家庭应用程序(正面和背面)有一个简单的工作流程,全部在一项工作中,在自托管运行器上运行:

  • 为构建准备环境 ( apt install ...)
  • 将前面构建到一个目录spa
  • 将目录复制spa到后面的sources中
  • 构建后面(这会将spa目录嵌入到二进制文件中)
  • 将二进制文件部署到家庭服务器

这些步骤是线性的原因是我需要前端构建的输出来进行后端构建。

这个设置有效。

name: build-n-deploy
on: push
jobs:
  dash:
    runs-on: self-hosted
    steps:
      - uses: actions/checkout@v2
        with:
          ref: master
      - name: prepare build environment
        run: |
          apt update
          apt install software-properties-common -y
          add-apt-repository ppa:longsleep/golang-backports -y
          curl -fsSL https://deb.nodesource.com/setup_14.x | sudo -E bash -
          apt update && apt dist-upgrade -y
          apt install nodejs -y
          apt install golang-go -y
          npm install -g @quasar/cli
      - name: build front
        working-directory: …
Run Code Online (Sandbox Code Playgroud)

github github-actions

7
推荐指数
1
解决办法
1125
查看次数

Github 操作:在单个工作流程中为多个分支创建版本

我是 github actions 的新手,我对它们的工作原理有很好的了解,但我在为多个分支创建版本时遇到了麻烦。是否可以在单个工作流程中从多个分支创建多个版本?

我目前的工作流程为我的主分支生成和部署版本。我现在想为第二个分支创建版本,该分支稍微相似但具有不同的功能。

我的问题和疑问是:

  • github 工作流程如何区分主分支和其他分支以从主分支中的 .yml 文件创建版本?我知道你可以使用,if: github.ref但我不知道如何去做。
  • 我应该在第二个分支中创建一个单独的 .yml,使用单独的工作流程并创建不同的标签吗?
  • 我是否应该在矩阵中创建另一个仅依赖于第二个分支的条目?

以下是我的主分支中的 .yml:

name: "CI/CD"

on:
  push:
    branches: [ main, example ]
  pull_request:
    branches: [ main, example ]

env:
  QT_VERSION: 5.15.2
  BUILD_TYPE: Release
  packageGlob: justAnExample-continuous-*.*

jobs:
  main_build:
    name: ${{ matrix.config.name }}
    runs-on: ${{ matrix.config.os }}
    strategy:
      fail-fast: false
      matrix:
        config:
        - {
           name: "Linux-amd64"
           , os: ubuntu-18.04
           , QT_INST_DIR: /opt
           , install_ninja: "sudo apt-get install -qq ninja-build"
           , install_pkgs: "sudo apt-get -qq install libgstreamer-plugins-base1.0-0"
           , …
Run Code Online (Sandbox Code Playgroud)

github github-actions

7
推荐指数
1
解决办法
9859
查看次数

如何制作基于组织的 GitHub 令牌?

为什么我只被允许创建个人代币......?这似乎是他们系统中的一个巨大缺陷...有没有办法创建基于组织的代币,因此,如果公司的特定参与者来来去去,我们不需要不断创建新代币并可能进行生产管道停止工作?

相反...创建需要访问完整私人存储库才能代表组织工作的个人代币是个人知识产权中的一个巨大缺陷...这看起来很荒谬,所以它不可能是事实...请帮助!

github github-actions

7
推荐指数
1
解决办法
5927
查看次数

在 github 操作工作流程中嵌套变量引用

这是我的要求。我为每个环境创建了单独的 GitHub 机密。

例如在 GitHub 中的秘密:

STAGING_USERNAME -> <SOME_VALUE>
PROD_USERNAME -> <SOME_VALUE>
Run Code Online (Sandbox Code Playgroud)

我想构造一个新变量并将其设置在 GitHub env 中,如下所示

name: Build and Deploy to CAA Backend
on:
  push:
    branches: [ master ]
  pull_request:
    branches: [ master ]
  
  workflow_dispatch:
    inputs:
      infraEnv:
        description: 'Env (staging/prod)'     
        required: true
        default: 'staging'
  jobs:
    setup-build-publish:
      name: Test, Build, Deploy, Notify
      runs-on: ubuntu-latest
      steps:
        name: 
          run: |
            echo "USERNAME=${{secrets.${{github.event.inputs.infraEnv}}_username}}" >> $GITHUB_ENV
Run Code Online (Sandbox Code Playgroud)

但这会引发语法错误。如何解决这个问题?

github github-actions

7
推荐指数
2
解决办法
3840
查看次数

使用 bash 变量作为 GitHub Action 的参数

我正在调用 GitHub 操作,并且想向其传递参数 extra_build_args 及其值--build-arg CURRENT_DD_VERSION={$VER}(不是字符串),其中 $VER 是我使用特定版本设置的 shell 变量。当我检查传入的内容时,我发现它采用了文字值 {$VER} 而不是解析变量。我设置$VER了 Github 操作的不同(较早)步骤。如何将shell变量的内容作为参数传入?

    - name: Get version
      run: |
        VER=$(cat ver.txt)
    - name: Build docker image
      uses: kciter/aws-ecr-action@v3
      with:
        //some more parameters
        extra_build_args: "--build-arg CURRENT_DD_VERSION={$VER}"
Run Code Online (Sandbox Code Playgroud)

linux variables shell github github-actions

7
推荐指数
1
解决办法
3104
查看次数

github工作流程仅在deployment_status和特定分支上

与此问题类似How to run Github Actions with the 'deployment_status' kitty and only on the QAS Branch? 我想仅在特定分支上执行工作流程,但与deployment_status触发器结合使用。

因此,我只想在部署完成并且我们位于分支上时才执行端到端测试develop

这里的问题是:在触发器上未设置变量deployment_statusgithub.ref它也写在文档中。所以我无法手动检查我是否在正确的分支上。

name: E2E

on:
  deployment_status:
    # does not work because it is ignored on deployment_status
    branches:
      - develop
      - stage
      - master
      - main

jobs:
  chrome:
    if: github.event.deployment_status.state == 'success'
    runs-on: ubuntu-latest

    steps:
      - name: Checkout code
        uses: actions/checkout@v2
      
      - name: Run Cypress
        uses: cypress-io/github-action@v2
        with:
          browser: chrome
          cache-key: ${{ runner.os }}-yarn-${{ hashFiles('**/yarn.lock') }} …
Run Code Online (Sandbox Code Playgroud)

github vercel github-actions

7
推荐指数
0
解决办法
1421
查看次数

GitHub Actions - 从上次提交中复制 git `user.name` 和 `user.email`

我有一个 GitHub Action,它可以在任何推送到我的存储库时运行。基本上,它编译存储库文件,提交编译的文件,压缩提交到前一个文件,然后强制推送到存储库。

从本质上讲,这个想法是它无缝地创建一个构建并将其添加到存储库中,使其看起来像是原始推送的一部分。

我遇到的唯一问题是git config. 我希望能够复制上次提交的user.name和,这样当我的操作执行提交时,看起来就像是由推送的用户完成的。user.email我知道我可以使用GITHUB_ACTOR环境变量来获取用户名,但似乎没有提供电子邮件的环境变量。GitHub 发现它们并不相同:

在此输入图像描述

那么,如何设置git config使用上次提交的user.name和呢?user.email


.yaml为了完整起见,以下是该操作的文件:

on: [push]
jobs:
  build:
    runs-on: ubuntu-latest
    steps:
      - name: Set up Git repository
        uses: actions/checkout@v2
        with:
          fetch-depth: 2
      - (... step that creates build files ...)
      - name: Upload build files to repo
        run: |
          # Configure git
          git config user.name "$GITHUB_ACTOR"
          git config user.email "<>"
          # Roll back git history to before last commit …
Run Code Online (Sandbox Code Playgroud)

git github github-actions

7
推荐指数
2
解决办法
9995
查看次数

确保某些 github 操作仅由所有者运行

我有一项将上下文上传到其他网站的操作工作。令牌已设置并存储在secret.MY_TOKEN.

但发出拉取请求的其他人也会使用我设置的令牌触发此操作作业。

如何限制执行作业的权限,只有我可以运行此操作作业。

仅供参考,我的ci.yml如下:

name: foobar

on: [push, pull_request]

jobs:

  upload:
    runs-on: ubuntu-latest

    steps:
    ....

    - name: execute upload
      env:
        TOKEN: ${{ secrets.MYTOKEN }}
      run:
        upl --token ${TOKEN}
Run Code Online (Sandbox Code Playgroud)

我认为这里存在两个安全问题。

  1. 该令牌打印在日志文件中。
  2. 其他人可以根据自己的目的通过触发操作来使用此私有令牌。

github-actions

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