我在 GitHub 存储库中有一个文件,需要通过运行命令偶尔更新。
作为GitHub Workflows 的一部分,我想让一个机器人运行一个命令,并查看它是否在 repo 上创建了一个差异,如果是,则自动向存储库发出拉取请求。
我怀疑GitHub 工作流可以帮助我做到这一点,因为 GitHub 现在允许人们运行任意容器(“操作”),这些容器可以在存储库中进行构建等操作。我看到一些官方的自动化工作流程,让你在这里“标记”和“评论”问题等:https : //github.com/actions/starter-workflows/tree/master/automation
如果我想运行任意命令并对存储库进行 PR,我应该查看哪些 GitHub Actions 而不是重新发明我自己的 Actions?任何指针表示赞赏。
我考虑的是:
master分支或专用gh-pages分支上的文件夹中托管文档,但这意味着提交构建工件readthedocs通过 webhooks 为我构建和托管文档,但这意味着在我尝试整合与我的项目相关的所有内容的时间点学习如何配置 Yet Another Toolgithub-actions我已经有一个对我有用的文档构建过程(sphinx用作构建器)并且我也可以在本地测试,所以我宁愿只是利用它。它设置了所有规则并html在工件中放置了一些静态- 它只是不会在任何地方提供。在工作流程中处理它,我的项目的所有其他部署配置都存在,感觉比将它分散在不同的工具或 github 特定选项中感觉更好。
市场上是否已经有一项行动可以让我做这样的事情?
name: CI
on: [push]
jobs:
... # do stuff like building my-project-v1.2.3.whl, testing, etc.
release_docs:
steps:
- uses: actions/sphinx-to-pages@v1 # I wish this existed
with:
dependencies:
- some-sphinx-extension
- dist/my-project*.whl
apidoc_args:
- "--no-toc"
- "--module-first"
- "-o docs/autodoc"
- "src/my-project"
build-args:
- "docs"
- "public" # the content of this folder will then …Run Code Online (Sandbox Code Playgroud) 我正在尝试使用enforce-label-action强制标记 PR 。
name: Enforce PR label
on:
pull_request:
types: [labeled, unlabeled, opened, edited]
jobs:
enforce-label:
runs-on: ubuntu-latest
steps:
- uses: yogevbd/enforce-label-action@master
with:
REQUIRED_LABELS_ANY: "bug,enhancement,feature"
Run Code Online (Sandbox Code Playgroud)
问题是每次标记 PR 时,都会创建一个新的检查运行,而旧的检查运行仍然处于失败状态,导致检查套件显示:Some checks were not successful。
github-actions当触发具有相同名称的工作流检查时,是否可以丢弃旧的检查运行?
我正在将 GitHub Actions 设置为我的一个项目的 CI,整个构建过程基本上是一个 PowerShell 脚本,由环境变量驱动。
这既是为了最大限度地减少供应商锁定,并确保我可以使用几乎相同的过程在本地运行构建。
现在,我的构建脚本确定了一些内容并将其放入环境变量中 - 具体来说,我有一个MH_IS_PROD_BUILDTrue 或 False的变量,并确定我推送到哪个 nuget 包存储库。
但是,当运行 shell 的步骤完成时,环境变量将不复存在,因为进一步的步骤似乎是在新环境中运行的。
我想做的是这样的事情(缩写):
steps:
- name: Run build script
id: pwshbuild
shell: pwsh
run: |
cd scripts
./build.ps1
# The above sets $Env:MH_IS_PROD_BUILD to either True or False
- name: Push Publish to GPR (Dev Package)
if: steps.pwshbuild.outputs.MH_IS_PROD_BUILD == 'False'
shell: pwsh
run: |
# omitted: determine $nupkgPath
nuget push $nupkgPath -Source "GPR" -SkipDuplicate
- name: Push Publish …Run Code Online (Sandbox Code Playgroud) 我有一个Github Action,它创建了一个dotnet 工具,并尝试使用它。
$ dotnet pack MyTool.csproj --configuration Release
$ dotnet tool install --global --add-source . MyTool
Since you just installed the .NET Core SDK, you will need to logout or restart your session before running the tool you installed.
You can invoke the tool using the following command: my-tool
Tool 'MyTool' (version '1.0.0') was successfully installed.
$ my-tool
my-tool: command not found
Run Code Online (Sandbox Code Playgroud)
我怎样才能logout or restart my session在工作中,重新加载PATH?
我使用 github 操作进行集成测试。
问题是,测试不应该在具有相同配置的多个实例上并行运行(测试会失败)。
但是,它可以在配置 1 下运行一次,在配置 2 下并行运行一次。
正如这篇博文所述,无法确保工作流不会并行运行。
有没有办法切换配置,配置1和配置2交替?
在这种情况下,具有相同配置的工作流工作流不太可能并行运行(如果需要,我可以添加更多配置)。
例如,这可以通过全局和可写的(对于工作流)变量变量交替为 1 或 2,并且工作流选择该配置。
示例工作流程(confToSwitch应该切换秘密):
name: test
on: [push]
jobs:
test:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v1
- name: Set up JDK 1.8
uses: actions/setup-java@v1
with:
java-version: 1.8
- name: "load configuration"
run: echo "configuration=$conf" >> ./conf
env:
conf: ${{ secrets.confToSwitch }}
- name: "integration tests"
run: "mvn -B integration-test"
Run Code Online (Sandbox Code Playgroud) 我最近在我的 GitHub 操作中添加了一个静态分析步骤。但是,它有点昂贵,所以我试图减少运行此步骤的次数。我已经添加了一个适当的过滤器,以便它只在一个操作系统上运行,并且只在我的“功能”分支上运行。但是,我还想过滤掉提交消息中包含“WIP”的所有签入。(理论是,在它不再是“正在进行的工作”之前,进行全面分析是没有意义的。)
我搜索了文档,希望能找到一个可以用作github上下文对象一部分的对象,但无济于事。
关于如何实现这一目标的任何想法?
如果你想确切地看到我在做什么,Yaml 的操作如下。我希望找到一些我可以if对Static Analysis项目声明进行的更改,以实现我的目标。
name: On Push
on: [push]
jobs:
build:
runs-on: ${{ matrix.os }}
strategy:
matrix:
os: [ubuntu-latest, macos-latest]
steps:
- uses: actions/checkout@v1
- name: Build
run: |
./configure
make -j 4
- name: Run tests
run: |
make -j 4 check
- name: Static Analysis
if: runner.os == 'macOS' && startsWith(github.ref, 'refs/heads/feature/')
run: |
make analyze
Run Code Online (Sandbox Code Playgroud) 我有一个 Angular 应用程序,需要使用 GitHub Actions 将其部署到 Elastic Beanstalk。我遵循此指南按应用程序部署到 ELB。
我收到一个错误:
未给出文件名,部署现有版本 1
- [错误] 部署失败:类型错误 [ERR_INVALID_ARG_TYPE]:“数据”参数必须是字符串、缓冲区、TypedArray 或 DataView 类型之一。接收类型未定义
- [错误]节点运行失败,退出代码为 2
下面是我的main.yml文件
name: CI
on:
push:
branches:
- dry-run-actions
jobs:
build:
runs-on: ubuntu-latest
strategy:
matrix:
node-version: [10.x]
steps:
- uses: actions/checkout@v1
# I'm removing the intermediate steps to make this code look shorter and these steps are running correctly.
# In these steps I'm "Caching node_module", "npm install" and "npm run build"
- name: Cache node modules …Run Code Online (Sandbox Code Playgroud) 我刚刚为 GitHub 存储库设置了 CI/CD。
唯一仍然困扰我的是,CD 构建也会自动触发拉取请求,但我不知道在哪里可以配置这些检查。
我想在这里摆脱持续交付构建。
但这对我来说也没有明显的影响。
continuous-integration continuous-deployment azure-pipelines github-actions
我正在使用一些 github 操作在单一存储库中发布我的一个包,包含大约 4-5 个包,例如:
github-repository (monorepo):
- folder_1 (package 1)
- folder_2 (package 2)
- folder_3 (package 3)
Run Code Online (Sandbox Code Playgroud)
对于位于此 monorepo 中的每个包,当发布与版本匹配的标签时,该操作将使用工作流程(对于所有包几乎相同)来释放它:
github-repository (monorepo):
- folder_1 (package 1)
- folder_2 (package 2)
- folder_3 (package 3)
Run Code Online (Sandbox Code Playgroud)
每个包都有自己的操作工作流程.yaml并且工作正常,除了我刚刚创建的新包:package 4 (located in github-repository/folder_4)。
它是一个基本包,只是它只包含配置文件,因此它的yarn build脚本只会复制./dist文件夹中的这些文件,而不暗示节点或javascript,使其工作流程如下所示:
name: Config Release
on:
push:
tags:
- package4/v*
permissions:
contents: read
packages: write
jobs:
release:
name: Release
runs-on: ubuntu-latest
defaults:
run:
working-directory: folder_4
steps:
- name: Checkout source code …Run Code Online (Sandbox Code Playgroud) github-actions ×10
github ×4
concurrency ×1
dotnet-tool ×1
github-api ×1
github-pages ×1
npm-registry ×1
ubuntu ×1