我正在为 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 为我验证这一点?
我创建了一个 R 包,每当我将更改合并到 master 分支时,我想通过 GitHub Actions 将其上传到 CRAN。我发现了很多R 操作的示例,我什至查找了一些最流行的软件包(如 dplyr)是如何做到这一点的,尽管我找到了一个devtools::release()辅助函数,但我仍然没有看到一个工作流程可以当您将更改合并到主分支时,将库提交到 CRAN。软件包开发人员是否手动执行此操作?有什么原因导致这没有自动化吗?
我的家庭应用程序(正面和背面)有一个简单的工作流程,全部在一项工作中,在自托管运行器上运行:
apt install ...)spaspa到后面的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 actions 的新手,我对它们的工作原理有很好的了解,但我在为多个分支创建版本时遇到了麻烦。是否可以在单个工作流程中从多个分支创建多个版本?
我目前的工作流程为我的主分支生成和部署版本。我现在想为第二个分支创建版本,该分支稍微相似但具有不同的功能。
我的问题和疑问是:
if: github.ref但我不知道如何去做。以下是我的主分支中的 .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 中的秘密:
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 操作,并且想向其传递参数 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) 与此问题类似How to run Github Actions with the 'deployment_status' kitty and only on the QAS Branch?
我想仅在特定分支上执行工作流程,但与deployment_status触发器结合使用。
因此,我只想在部署完成并且我们位于分支上时才执行端到端测试develop。
这里的问题是:在触发器上未设置变量deployment_status。github.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 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) 我有一项将上下文上传到其他网站的操作工作。令牌已设置并存储在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)
我认为这里存在两个安全问题。