首页 > 解决方案 > GitHub 操作“扩展”现有工作

问题描述

我想要一些 github 操作工作流,它应该检查 linting,检查构建代码是否成功,如果成功则运行测试。

我的第一个“工作”是安装依赖项。每项工作都需要完成,因此我在每项工作中都执行以下操作:

- uses: actions/checkout@v2

- name: Cache functions node_modules
  uses: actions/cache@v2
  with:
    path: node_modules
    key: ${{ runner.os }}-${{ hashFiles('package.json') }}

- name: Install dependencies
  run: npm ci

有没有办法将其定义为 job dependencies,然后有另一份工作,lint扩展这份工作?有缓存,所以不会重新安装,但感觉就像无缘无故的长代码重复。

在此处输入图像描述

标签: githubgithub-actions

解决方案


注意最初我们不可能在复合动作中使用它,现在有一段时间是可能的。有关更多详细信息,请查看此处

如果你想在这里应用 DRY 规则,你应该检查复合运行步骤

您现在可以使用 shell 脚本创建可重用的操作,甚至可以在同一个操作中混合多种 shell 语言。您可能有很多 shell 脚本来自动执行许多任务,现在您可以轻松地将它们变成一个动作并将它们重用于不同的工作流程。

您可以按如下方式使用它:

主文件:

jobs:
  build:
    runs-on: windows-latest
    steps:
    - uses: actions/checkout@v2
    - uses: octocat/say-hello@v1
      with: 
        os: ${{ runner.os }}

octocat/say-hello/action.yml

inputs:
  name: 
    os: 'Your os'
    default: 'No os default'
runs:
  using: "composite"
  steps: 
    - uses: actions/checkout@v2

    - name: Cache functions node_modules
      uses: actions/cache@v2
      with:
        path: node_modules
        key: ${{ inputs.os }}-${{ hashFiles('package.json') }}

    - name: Install dependencies
      run: npm ci

如果您计划将复合材料保存在与主工作流程相同的存储库中,则将其称为

    - uses: ./.github/actions/say-hello

对于这个文件夹结构:

在此处输入图像描述


推荐阅读