7

I have a working GitHub workflow that uses a matrix and builds all defined products.

name: Build

on:
  push:
    tags:
      - "*"
  workflow_dispatch:

jobs:
  build:
    runs-on: ubuntu-latest
    strategy:
      matrix:
       product: [yellow, green, black]
       limits: [10,20,50,100]

    steps:
      - uses: actions/checkout@v2
        env:
          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}

    ...

Now a wanted to be able to trigger the build process manually and use input values to only build the product I want. I can enter values on Github interface, but it looks the syntax of using them is not right.

Build : .github#L1 Error when evaluating 'strategy' for job 'build'. .github/workflows/build.yml (Line: 27, Col: 18): Unexpected value 'yellow',.github/workflows/build.yml (Line: 28, Col: 17): Unexpected value '50'

Also, how would one combine previous automatic builds of all predefined products with the one manually done via inputs inside one workflow?

name: Build

on:
  push:
    tags:
      - "*"
  workflow_dispatch:
    inputs:
      product:
        description: "Product"
        default: "yellow"
      limit:
        description: "Limit"
        default: "50"

jobs:
  build:
    runs-on: ubuntu-latest
    strategy:
      matrix:
        product: ${{ github.event.inputs.product}}
        limits: ${{ github.event.inputs.limit }}

        # product: [yellow, green, black]
        # limits: [10,20,50,100]

    steps:
      - uses: actions/checkout@v2
        env:
          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}

    ...
Mike
  • 5,416
  • 4
  • 40
  • 73

2 Answers2

6

The matrix values have to be lists, such as [yellow, green, black]. Your input named product was not a list, it was the string "yellow". Unfortunately, input data type can only be one of string, choice, boolean, or environment.

However, you can convert the string '["yellow", "green", "black"]' to a json list value and specify that as the matrix value using the fromJSON(value) method. The first example in the fromJSON documentation shows computing the json syntax list as a string in the output of one job and using it in the matrix strategy in the next job.

That example shows using the output computed in a job. I have tried it with a workflow dispatch input, like the following from your question:

on:
  workflow_dispatch:
    inputs:
      products:
        description: "List of Products"
        default: '["yellow"]'
      limits:
        description: "List of limits"
        default: '[50]'

jobs:
  build:
    runs-on: ubuntu-latest
    strategy:
      matrix:
        product: ${{ fromJSON(github.event.inputs.products)}}
        limits: ${{ fromJSON(github.event.inputs.limits) }}
S. M.
  • 61
  • 1
  • 3
0

Seems like you made a typo in the input name (should be product instead of edition)?

 strategy:
      matrix:
        edition: ${{ github.event.inputs.product }}
Julien Ma
  • 141
  • 1
  • 6