我创建了一个 GitHub 操作,我正在寻找一种在将其发布到市场之前对其进行测试的方法。如何通过在同一存储库中创建工作流程文件来测试它?
我有以下工作流程。
name: "Build"
on:
pull_request:
push:
branches:
- master
jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- uses: test-action # name of my action
Run Code Online (Sandbox Code Playgroud) 我需要帮助解决一些问题,我正在尝试根据 2 个不同的发布标签触发 2 个不同的工作流程。我希望 prod-* 触发生产工作流程,而 dev-* 触发开发工作流程。
问题是两个标签都会触发两个工作流程,我不知道如何解决这个问题
我将 google-test(gtest) 与 CMake 结合使用,并将单元测试作为适用于 Linux 和 Mac 的 GitHub ci 作业运行。Linux 作业成功通过。但是,我在 mac runner 上遇到错误。错误是
CMake Error at /usr/local/Cellar/cmake/3.21.1/share/cmake/Modules/GoogleTestAddTests.cmake:77 (message):
Error running test executable.
Path: '/Users/runner/work/splitwebp/build/test/splitwebp_tests'
Result: Process terminated due to timeout
Output:
Call Stack (most recent call first):
/usr/local/Cellar/cmake/3.21.1/share/cmake/Modules/GoogleTestAddTests.cmake:173 (gtest_discover_tests_impl)
Run Code Online (Sandbox Code Playgroud)
这是CMakelists.txt测试目录
# CMake config file for unit tests
# Requiring V 3.10 for gtest_discover_tests
cmake_minimum_required(VERSION 3.10)
find_package(OpenCV REQUIRED)
enable_testing()
# finds all .cpp files under this directory (./test) and add them to executable
file(GLOB_RECURSE tests "*.cpp") …Run Code Online (Sandbox Code Playgroud) 我在 github 操作中有以下步骤:
steps:
- name: Check out repository code
uses: actions/checkout@v2
- name: Cache dependencies
id: pip-cache
uses: actions/cache@v2
with:
path: ~.cache/pip
key: ${{ runner.os }}-pip-${{ hashFiles('**/requirements.txt') }}
restore-keys: |
${{ runner.os }}-pip-
- name: Install dependencies
if: steps.pip-cache.outputs.cache-hit != 'true'
run: pip install -r requirements.txt
- name: run mypy
run: mypy .
Run Code Online (Sandbox Code Playgroud)
缓存工作正常,但是当发生缓存命中时,我尝试运行 mypy,它失败并显示:
Run mypy .
/home/runner/work/_temp/9887df5b-d5cc-46d7-90e1-b884d8c49272.sh: line 1: mypy: command not found
Error: Process completed with exit code 127.
Run Code Online (Sandbox Code Playgroud)
缓存依赖项的全部意义在于,我不必每次运行工作流程时都安装它们。如何使用缓存的依赖项?
我正在尝试理解 GitHub 操作中的布尔表达式。该手册给出了以下不同类型文字的示例${{ false }},包括布尔值 as和${{ true }}。
按照他们的指导,我使用以下步骤,将一个env部分设置VARF为 false 和VARTtrue,然后在run密钥中有一些测试输出:
- name: Var test
env:
VARF: ${{ false }}
VART: ${{ true }}
run: |
echo "VART=${{ env.VARF }}"
echo "VART=${{ env.VART }}"
echo "VARF && VART=${{ env.VARF && env.VART }}"
echo "VARF || VART=${{ env.VARF || env.VART }}"
echo "!VARF=${{ ! env.VARF }}"
echo "!!VART=${{ !! env.VART }}"
Run Code Online (Sandbox Code Playgroud)
输出如下:
VART=false
VART=true
VARF …Run Code Online (Sandbox Code Playgroud) 我正在处理 GitHub actions,并且有一个情况需要将多行字符串作为 json 发送。我收到一些意外的令牌错误。
这是我的 test.md 和工作流程:
---------------------------
**test**
- update something
- another (update)
**test2**
- Add `test` to param
Run Code Online (Sandbox Code Playgroud)
steps:
- uses: actions/checkout@v2
- name: Get Log
id: getLog
run: |
CHANGELOG="$(cat test.md)"
CHANGELOG="$($CHANGELOG//'%'/'%25')"
CHANGELOG="$($CHANGELOG//$'\n'/'%0A')"
CHANGELOG="$($CHANGELOG//$'\r'/'%0D')"
echo "::set-output name=changeLog::$CHANGELOG"
- name: Invoke CLI workflow with changelog
uses: benc-uk/workflow-dispatch@v1
with:
workflow: Workflow publish
token: ${{ secrets.TOKEN }}
repo: repo/name
inputs: '{ "changeLog": "${{steps.getLog.outputs.changeLog}}"}'
Run Code Online (Sandbox Code Playgroud)
我收到意外的令牌错误。怎么解决这个问题?
提前致谢
我们打算使用 Git Actions 在每次提交时构建 Docker。
这是我们当前的 Git Actions yml:
# This is a basic workflow to help you get started with Actions
name: CI
# Controls when the workflow will run
on:
push:
branches:
- '**'
pull_request:
branches:
- '**'
# Allows you to run this workflow manually from the Actions tab
workflow_dispatch:
# A workflow run is made up of one or more jobs that can run sequentially or in parallel
jobs:
docker-build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2 …Run Code Online (Sandbox Code Playgroud) 我使用 github 工作流程的 CI/CD 管道失败,并出现以下错误:
错误:无法成功处理命令 '##[add-path]/opt/hostedtoolcache/aws/0.0.0/x64'。错误:该add-path命令被禁用。ACTIONS_ALLOW_UNSECURE_COMMANDS请升级到使用环境文件或通过将环境变量设置为 来选择不安全的命令执行true。有关更多信息,请参阅:https://github.blog/changelog/2020-10-01-github-actions-deprecating-set-env-and-add-path-commands/
这是我的container.yml 文件
name: deploy-container
on:
push:
branches:
- master
- develop
paths:
- "packages/container/**"
defaults:
run:
working-directory: packages/container
jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- run: npm install
- run: npm run build
- uses: chrislennon/action-aws-cli@v1.1
- run: aws s3 sync dist s3://${{ secrets.AWS_S3_BUCKET_NAME }}/container/latest
env:
AWS_ACCESS_KEY_ID: ${{ secrets.AWS_ACCESS_KEY_ID }}
AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
Run Code Online (Sandbox Code Playgroud)
知道为什么会发生这种情况。提前致谢
我对整个 CI/CD 世界有点陌生,但每当我看到config.yml任何 Node js 项目中的文件时,总是会npm ci出现npm install. 我已经从文档中阅读了一些内容,但我仍然不清楚。有人可以用清晰简洁的语言解释一下吗?
我正在尝试了解 Github Actions (GHA) 中的安全模型。假设我对公共仓库有以下要求:
为了使第三个要求起作用,拉取请求需要访问具有存储库写入权限的 GITHUB_TOKEN。这将需要以下两个权限:
现在,如果将写入令牌发送到分叉 PR 中的工作流程,那么如何防止黑客更改 PR 中的工作流程并将其用于任意数量的恶意目的(在原始存储库中创建恶意版本或窃取存储库机密)?我知道您可以限制令牌的权限,但这是在工作流程内完成的;黑客可以像 PR 的一部分一样轻松地消除限制。
有没有什么方法可以在不存在安全漏洞的情况下完成这三个要求?