diff --git a/pkg/model/workflow.go b/pkg/model/workflow.go index 7ab6139..d981f23 100644 --- a/pkg/model/workflow.go +++ b/pkg/model/workflow.go @@ -3,6 +3,7 @@ package model import ( "fmt" "io" + "reflect" "regexp" "strings" @@ -176,16 +177,12 @@ func (j *Job) GetMatrixes() []map[string]interface{} { continue MATRIX } } - for _, include := range includes { - if commonKeysMatch(matrix, include) { - log.Debugf("Setting add'l values on matrix '%v' due to include '%v'", matrix, include) - for k, v := range include { - matrix[k] = v - } - } - } matrixes = append(matrixes, matrix) } + for _, include := range includes { + log.Debugf("Adding include '%v'", include) + matrixes = append(matrixes, include) + } } else { matrixes = append(matrixes, make(map[string]interface{})) @@ -195,7 +192,7 @@ func (j *Job) GetMatrixes() []map[string]interface{} { func commonKeysMatch(a map[string]interface{}, b map[string]interface{}) bool { for aKey, aVal := range a { - if bVal, ok := b[aKey]; ok && aVal != bVal { + if bVal, ok := b[aKey]; ok && ! reflect.DeepEqual(aVal, bVal) { return false } } diff --git a/pkg/runner/run_context.go b/pkg/runner/run_context.go index 4615b28..384e70d 100644 --- a/pkg/runner/run_context.go +++ b/pkg/runner/run_context.go @@ -258,7 +258,10 @@ func (rc *RunContext) isEnabled(ctx context.Context) bool { img := rc.platformImage() if img == "" { - l.Infof("\U0001F6A7 Skipping unsupported platform '%+v'", job.RunsOn()) + for _, runnerLabel := range job.RunsOn() { + platformName := rc.ExprEval.Interpolate(runnerLabel) + l.Infof("\U0001F6A7 Skipping unsupported platform '%+v'", platformName) + } return false } return true diff --git a/pkg/runner/runner_test.go b/pkg/runner/runner_test.go index 273afaf..ba20ded 100644 --- a/pkg/runner/runner_test.go +++ b/pkg/runner/runner_test.go @@ -89,6 +89,7 @@ func TestRunEvent(t *testing.T) { {"testdata", "local-action-dockerfile", "push", "", platforms}, {"testdata", "local-action-js", "push", "", platforms}, {"testdata", "matrix", "push", "", platforms}, + {"testdata", "matrix-include-exclude", "push", "", platforms}, {"testdata", "commands", "push", "", platforms}, {"testdata", "workdir", "push", "", platforms}, //{"testdata", "issue-228", "push", "", platforms}, // TODO [igni]: Remove this once everything passes diff --git a/pkg/runner/testdata/matrix-include-exclude/push.yml b/pkg/runner/testdata/matrix-include-exclude/push.yml new file mode 100644 index 0000000..2ea16c5 --- /dev/null +++ b/pkg/runner/testdata/matrix-include-exclude/push.yml @@ -0,0 +1,31 @@ +name: matrix-include-exclude +on: push + +jobs: + build: + name: PHP ${{ matrix.os }} ${{ matrix.node}} + runs-on: ${{ matrix.os }} + steps: + - run: echo ${NODE_VERSION} | grep ${{ matrix.node }} + env: + NODE_VERSION: ${{ matrix.node }} + strategy: + matrix: + os: [ubuntu-18.04, macos-latest] + node: [4, 6, 8, 10] + exclude: + - os: macos-latest + node: 4 + include: + - os: ubuntu-16.04 + node: 10 + + test: + runs-on: ubuntu-latest + strategy: + matrix: + node: [8.x, 10.x, 12.x, 13.x] + steps: + - run: echo ${NODE_VERSION} | grep ${{ matrix.node }} + env: + NODE_VERSION: ${{ matrix.node }}