Search code examples
github-actions

GitHub Actions: Run step on specific OS


I'm using GitHub Actions to run a workflow on multiple operating systems.

However, there is a specific step that I have to run only on Ubuntu:

runs-on: ${{ matrix.os }}
strategy:
    matrix:
        os: [ubuntu-latest, windows-latest, macos-latest]
steps:
    - name: Setup Ubuntu
      run : export DISPLAY="127.0.0.1:10.0"
      if: # --> What should be here? <--

How can I run steps only on specific operating systems?


Solution

  • You can use either if: matrix.os == 'NAME_FROM_MATRIX' or if: runner.os == 'OS_TYPE'

    For checking matrix context:

    if: matrix.os == 'ubuntu-latest'

    if: matrix.os == 'windows-latest'

    if: matrix.os == 'macos-latest'

    For checking runner context:

    if: runner.os == 'Linux'

    if: runner.os == 'Windows'

    if: runner.os == 'macOS'

    Related documentation: runner context

    UPDATE

    GitHub provides RUNNER_OS variable now, which simplifies checks inside single step:

    - name:  Install
      run:   |
             if [ "$RUNNER_OS" == "Linux" ]; then
                  apt install important_linux_software
             elif [ "$RUNNER_OS" == "Windows" ]; then
                  choco install important_windows_software
             else
                  echo "$RUNNER_OS not supported"
                  exit 1
             fi
      shell: bash
    

    This might be better approach for more complex steps, where current OS is just one of many variables.