Github actions provides a method to run your tests with various input. This can
be useful if you want to make sure that the code builds on different versions of,
e.g., Java or Node. To avoid repeating the same thing in YAML, you can use
strategy
The app in this repository is Java-based and it is running on Java 11. The example how we can use it for different versions of Node:
jobs:
build:
runs-on: ubuntu-latest
strategy:
matrix:
node: [8, 10, 12]
steps:
- uses: actions/setup-node@v4
with:
node-version: ${{ matrix.node }}With this, the job will run three separate jobs for different versions of NodeJS; 8, 10 and 12. There can be similar solution for container based pipelines:
name: matrix-example
on: [workflow_dispatch]
jobs:
job:
runs-on: ubuntu-latest
strategy:
matrix:
container: ["ubuntu:bionic", "fedora:31", "opensuse/leap:42.3", "centos:8"]
container:
image: ${{ matrix.container }}
steps:
- name: check os
run: cat /etc/os-releaseIn this example pipeline runs-on ubuntu-latest for 4 different containers: "ubuntu:bionic", "fedora:31", "opensuse/leap:42.3", "centos8". This way we can skip repeating the workflows.
we would like to build our application on different versions of Java.
- You can add a new file on
.github/workflows/matrix.yml, which will only includeClone-downandBuildjob.
Build job
name: Matrix workflow
on: push
jobs:
Build:
runs-on: ubuntu-latest
container: gradle:6-jdk11
steps:
- name: Clone down repository
uses: actions/checkout@v4
- name: Build application
run: ci/build-app.sh
- name: Test
run: ci/unit-test-app.sh- Edit build job to run for different versions of Java. Add matrix for types of containers as:
["gradle:6-jdk8", "gradle:6-jdk11", "gradle:6-jdk17"]to your build job.
strategy:
matrix:
container: ["gradle:6-jdk8", "gradle:6-jdk11", "gradle:6-jdk17"]
- Remember to edit container name:
container:
image: ${{ matrix.container }} Solution
name: Matrix workflow
on: push
jobs:
Build:
runs-on: ubuntu-latest
strategy:
matrix:
container: ["gradle:6-jdk8", "gradle:6-jdk11", "gradle:6-jdk17"]
container:
image: ${{ matrix.container }}
steps:
- name: Clone down repository
uses: actions/checkout@v4
- name: Build application
run: ci/build-app.sh
- name: Test
run: ci/unit-test-app.shYou should have 3 jobs under Build job for different version of Java.
- Are there versions of Java which do not work?