Github Action:在矩阵组合之前运行一步

Mik*_*ike 11 build github github-actions

我正在创建一个 Github 操作工作流程。
有一个 phing 构建文件,可根据产品变体创建多个 zip。这是通过矩阵完成的。

在构建产品之前,需要构建一个 JS 文件。这是通过汇总构建文件完成的。

一切正常,但 JS 构建只需要完成一次,而不是每个矩阵组合都需要完成。

我不知道该怎么做。也许在开始时运行一个单独的工作流程,但是如何将完成的 JS 文件推送到下一个工作流程中?或者也许一种工作流程就可以了?

name: Build

on: [push]

jobs:
  build:
    runs-on: ubuntu-latest
    env:
      VERSION: 1.0.1
    strategy:
      matrix:
        edition: ["product1", "product2", "product3"]
        limits: [100, 200, 300]
        exclude:
          - edition: product1
            limits: 100
          - edition: product2
            limits: 100
          - edition: product1
            limits: 200
          - edition: product2
            limits: 200
    steps:
      - uses: actions/checkout@v2

      - name: Build JS
        uses: actions/setup-node@v1
        with:
          node-version: 12.x
      - name: Cache Node.js modules
        uses: actions/cache@v2
        with:
          path: ~/.npm
          key: ${{ runner.OS }}-node-${{ hashFiles('**/package-lock.json') }}
          restore-keys: |
            ${{ runner.OS }}-node-
            ${{ runner.OS }}-
      - run: npm ci
      - run: npm run build # builds main.js

      - name: Phing Build
        uses: phingofficial/phing-github-action@main
        with:
          repo-token: "${{ secrets.GITHUB_TOKEN }}"
          buildfile: build/phing/build.xml
          targets: main
          user-properties: editions=${{ matrix.edition }} limits=${{ matrix.limits }}
          version: 3.0.0-alpha4

      - name: Archive code
        uses: actions/upload-artifact@v2
        with:
          name: file-${{ matrix.edition }}${{ matrix.limits }}-v${{ env.VERSION }}
          path: build/${{ matrix.edition }}/zip/
          retention-days: 1
Run Code Online (Sandbox Code Playgroud)

Rob*_*Bos 3

您可以在单独的作业(让我们将其命名为 )中执行创建 JS 文件,然后使用关键字prepare在具有矩阵定义 ( ) 的作业中引用该作业。跨作业共享文件是 GitHub 非常明确的一点:并非每个作业都需要前一个作业的所有文件,因此您需要自己上传和下载该文件。buildneeds

设置示例:

jobs:
  prepare:
    runs-on: ubuntu-latest
    steps:
      ...
      # upload the file here for later use
      - uses: actions/upload-artifact


  build:
    needs: prepare
    strategy:
      matrix:
        edition: ["product1", "product2", "product3"]
    steps:
      # download the file here so you can use it
      - uses: actions/download-artifact

Run Code Online (Sandbox Code Playgroud)

请参阅此处needs有关关键字的文档。