我正在寻找一种在合并 PR 时运行 GitHub Action 的方法,GitHub Action 必须获取 PR 描述并将数据存储在某处以供以后使用。
有没有办法通过 GitHub Actions 而不使用 API 或 Webhook 来做到这一点?
我正在 GitHub Actions 工作流程中构建 Docker 容器,并且我有一个使用Docker buildx 的自定义缓存解决方案。本质上,我使用docker buildx 构建 --cache-from和--cache-to参数来转储上次构建的缓存,将其存储在外部,并在下一次构建时加载它,以节省时间。
在大多数情况下,这工作得很好。大部分构建时间都花在了pip install因为我们使用 Alpine 并且没有可用的轮子上,所以它必须构建包,因此跳过使用缓存的步骤可以节省大量时间。
Dockerfile 中有两行相关的行:
COPY requirements.txt .
RUN pip install --no-cache-dir -r requirements.txt
Run Code Online (Sandbox Code Playgroud)
不过,我遇到了这个奇怪的问题,哪里requirements.txt没有改变,第一行( )COPY正确使用了缓存,但第二行( )RUN不使用缓存,并继续重新构建所有包。
我不知道是什么原因造成的。如果COPY正确使用缓存,那么它必须识别出requirements.txt没有改变,如果requirements.txt没有改变,我不明白为什么它不使用命令的缓存RUN。
最糟糕的是,它是间歇性的。有些构建它使用缓存,有些构建它重新构建包,在两种情况下requirements.txt(或任何前面的 Dockerfile 行)都没有改变。
我错过了什么吗?
我已经为 GitHub Actions 创建了工作流程,如下所述:https: //docs.github.com/en/code-security/supply-chain-security/keeping-your-dependency-updated-automatically/automating-dependabot-with-github - 行动
name: Dependabot auto-approve
on: pull_request_target
permissions:
contents: write
pull-requests: write
jobs:
dependabot:
runs-on: ubuntu-latest
if: ${{ github.actor == 'dependabot[bot]' }}
steps:
- name: Approve a PR
run: gh pr review --approve "$PR_URL"
env:
PR_URL: ${{github.event.pull_request.html_url}}
GITHUB_TOKEN: ${{secrets.GITHUB_TOKEN}}
- name: Enable auto-merge for Dependabot PRs
run: gh pr merge --auto --merge "$PR_URL"
env:
PR_URL: ${{github.event.pull_request.html_url}}
# The documentation incorrectly forgets `GITHUB_TOKEN` here.
GITHUB_TOKEN: ${{secrets.GITHUB_TOKEN}}
Run Code Online (Sandbox Code Playgroud)
上述自动化工作正常,但我有一个分支保护规则,需要代码所有者的审查。
有没有办法包含github-actions到 CODEOWNERS 文件中以使其批准有效?
我正在寻找在 github 操作列表中显示分支名称的提示,如下面的屏幕截图所示。
正如你所看到的,有时 github 会自动添加分支名称,我想知道是否可以配置一些东西来每次都显示分支名称。
有人来帮助我吗?谢谢
我第一次尝试使用 github 操作,我已经创建并遵循了 github 的教程,我的.github/workflows/push_main.yml是:
name: Android CI
on:
push:
branches: [ main ]
jobs:
test:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v1
- name: set up JDK 11
uses: actions/setup-java@v1
with:
java-version: 11
# Runs ktlint
- name: Lint
run: ./gradlew ktlintCheck
# Execute unit tests
- name: Unit Test
run: ./gradlew testDebugUnitTest
Run Code Online (Sandbox Code Playgroud)
另外,我想要的是,当尝试进行变基或合并以main进行此检查时,如果它有效,则保留操作rebase或merge我想做类似的事情,创建一个临时分支,在那里进行检查,如果它有效执行rebaseormerge到 main 中,然后删除临时分支,但我不知道是否有其他有效的方法可以做到这一点。我还看到我可以并行运行作业,这会使其速度更快吗?
我目前有一个工作流程,可以在合并到 master 时触发部署,并确保开发作业在部署产品之前通过。总共有 4 个环境(2 个 dev 和 2 个 prod),如果可能的话,我希望能够减少代码重复并将作业数量减少到 1 个,因为作业之间唯一改变的是环境变量。
我遇到的问题是似乎没有办法根据 github 事件有条件地包含或排除条目。如果有人提供意见或知道一个好的解决方法,我将非常感激。
文件和内容如下。
应用.yaml:
name: Terraform Apply
on:
deployment:
workflow_dispatch:
inputs:
environment:
description: "name of the environment"
required: true
default: "dev"
env:
AWS_ACCESS_KEY_ID: ${{ secrets.KEY_ID_EXAMPLE }}
AWS_SECRET_KEY: ${{ secrets.KEY_EXAMPLE }}
jobs:
deploy-dev:
name: TF Apply - Dev
runs-on: ubuntu-latest
if: ${{ github.event.deployment.environment == 'dev' || github.event.deployment.environment == 'all' || github.event.inputs.environment == 'dev' || github.event.inputs.environment == 'all' }}
env:
TF_VAR_aws_provider_role_arn: arn:example
TF_VAR_example_api_key: ${{ secrets.EXAMPLE_API_KEY }}
TF_VAR_example_app_key: ${{ …Run Code Online (Sandbox Code Playgroud) 升级到 Vue 3 后在 GitHub actions 中运行单元测试时,出现以下错误:
\n> vue-cli-service test:unit\n\n\xe2\x97\x8f Validation Error:\n\n An unknown error occurred in @vue/cli-plugin-unit-jest:\n\n Cannot resolve "@vue/vue3-jest" module. Please make sure you have installed "@vue/vue3-jest" as a dev dependency.\nRun Code Online (Sandbox Code Playgroud)\nGitHub actions 脚本用作npm ci上一步来安装依赖项,并且测试命令vue-cli-service test:unit在本地运行。
我的 package.json 有:
\n"devDependencies": {\n "@babel/core": "^7.16.7",\n "@babel/eslint-parser": "^7.16.5",\n "@babel/plugin-proposal-optional-chaining": "^7.14.5",\n "@storybook/addon-a11y": "^6.4.12",\n "@storybook/addon-actions": "^6.4.12",\n "@storybook/addon-essentials": "^6.4.12",\n "@storybook/addon-links": "^6.4.12",\n "@storybook/addon-storysource": "^6.4.12",\n "@storybook/vue": "^6.4.12",\n "@testing-library/dom": "^7.31.2",\n "@testing-library/jest-dom": "^5.16.1",\n "@testing-library/user-event": "^13.2.1",\n "@testing-library/vue": "^6.4.2",\n "@vue/babel-preset-app": "latest",\n "@vue/cli-plugin-babel": …Run Code Online (Sandbox Code Playgroud) 我目前有一个非常简单的设置,有两个工作流程;build和deploy。截至目前,已deploy为我们部署到开发、测试和生产阶段。这样做有一个缺点,例如很难看到最新的生产部署是什么,而且如果我想重新部署测试或生产,我需要触发整个工作流程。
当我只有上面提到的两个时,我可以build通过访问 来读取工作流程的 git sha github.event.workflow_run.head_sha,因此当前的流程可以工作(不理想,但它有效)。
我的计划现在是为部署到开发、测试和生产提供单独的工作流程,但我知道有一个问题,即知道 git sha 触发了部署到开发将触发的构建。当时我的计划是使用作业的输出,但如何从一个工作流程中访问另一个工作流程中的输出?
所以我想做这样的事情:
name: Deploy dev
on:
workflow_run:
workflows: [Build]
types: [completed]
workflow_dispatch:
jobs:
on-build-failure:
runs-on: ubuntu-latest
if: ${{ github.event.workflow_run.conclusion == 'failure' }}
steps:
- run: |
echo "First workflow was a failure"
exit 1
on-build-success:
outputs:
commit-sha: ${{ github.event.workflow_run.head_sha }}
runs-on: ubuntu-latest
if: ${{ github.event.workflow_run.conclusion == 'success' }}
steps:
- run: echo "Build succeeded, continue with deploy"
Run Code Online (Sandbox Code Playgroud)
然后在部署测试中:
name: Deploy test
on: …Run Code Online (Sandbox Code Playgroud) 我正在尝试为我的 Flutter 应用程序设置 Github 工作流管道,但building命令flutter analyze失败,因为我没有提交 .ENV 文件
有没有办法将 .ENV 添加到我的工作流程中而不将其提交到源代码管理?
\n因为.env不应该提交\xe2\x80\x99
name: CI\non:\n pull_request:\n branches:\n - master\n - dev\n\njobs:\n flutter_test:\n name: Run flutter test and analyze\n runs-on: macos-latest\n steps:\n - uses: actions/checkout@v2\n - uses: actions/setup-java@v1\n with:\n java-version: "12.x"\n - uses: subosito/flutter-action@v1\n with:\n channel: "stable"\n - run: flutter pub get\n - run: flutter analyze\n - run: flutter test\n\n build_ios:\n name: Build Flutter (iOS)\n needs: [flutter_test]\n runs-on: macos-latest\n steps:\n - …Run Code Online (Sandbox Code Playgroud) 我在 GitHub Actions 中有两份工作。一种是运行 Python 脚本来获取列表 [[file1, 1.0], [file2, 3.0]],另一种是将这个列表放入 GitHub Actions 矩阵中。我从 Python 脚本中收到一个无法放入矩阵中的字符串。我该如何解决这个问题?
on:
pull_request:
branches: [master, develop]
types: [closed]
jobs:
compute-version:
runs-on: ubuntu-latest
outputs:
list: ${{ steps.semver.outputs.list }}
steps:
- name: Run Computer Version Script
id: semver
run: |
python ./.github/bump-version.py $GITHUB_REF
res=$?
echo "::set-output name=list::$res"
update-yaml:
needs: compute-version
runs-on: ubuntu-latest
strategy:
matrix:
node: ${{needs.compute-version.outputs.bump_list}}
steps:
- name: Checkout
uses: actions/checkout@v2
- name: Update Version on Yaml File
uses: fjogeleit/yaml-update-action@master
with:
valueFile: ${{ matrix.node['file'] }}
propertyPath: info.version …Run Code Online (Sandbox Code Playgroud)