From 3d49180b0bfb13b80694936f6dd6c25aa4355676 Mon Sep 17 00:00:00 2001 From: Egor Tensin Date: Fri, 2 Jul 2021 20:16:57 +0300 Subject: workflows/test: factor out steps & refactoring --- .github/workflows/test.yml | 125 +++++++++++++-------------------------------- 1 file changed, 35 insertions(+), 90 deletions(-) (limited to '.github/workflows') diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index 3d3d5de..77edef1 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -11,118 +11,63 @@ on: jobs: test: strategy: - fail-fast: false matrix: platform: [x86, x64] - cygwin: [0, 1] - hardlinks: [0, 1] os: [ubuntu-18.04, ubuntu-20.04, ubuntu-latest, windows-2016, windows-2019, windows-latest] - - include: - # Prettier run names. - - {os: ubuntu-18.04, name: Ubuntu 18.04} - - {os: ubuntu-20.04, name: Ubuntu 20.04} - - {os: ubuntu-latest, name: Ubuntu (latest)} - - {os: windows-2016, name: Windows Server 2016} - - {os: windows-2019, name: Windows Server 2019} - - {os: windows-latest, name: Windows Server (latest)} - - {cygwin: 1, name: Cygwin} - exclude: - # No Cygwin on Ubuntu. - - {os: ubuntu-18.04, cygwin: 1} - - {os: ubuntu-20.04, cygwin: 1} - - {os: ubuntu-latest, cygwin: 1} - # Cygwin is the same on all Windows Server versions. - - {os: windows-2016, cygwin: 1} - - {os: windows-2019, cygwin: 1} - # Only test hardlinks on Cygwin. - - {cygwin: 0, hardlinks: 1} - runs-on: '${{ matrix.os }}' - - name: '${{ matrix.name }} / ${{ matrix.platform }} / Hardlinks: ${{ matrix.hardlinks }}' - - defaults: - run: - shell: pwsh - + name: 'Test: ${{ matrix.os }} / ${{ matrix.platform }}' steps: - name: Checkout uses: actions/checkout@v2 - - name: Clean up PATH uses: egor-tensin/cleanup-path@v1 if: runner.os == 'Windows' + - name: Set up Clang + uses: ./ + with: + platform: '${{ matrix.platform }}' + cc: 1 + - name: Build foo.exe + uses: ./.github/actions/build-foo + - name: Run foo.exe + uses: ./.github/actions/run-foo + - name: Check cc/c++ + uses: ./.github/actions/check-cc + cygwin: + strategy: + matrix: + platform: [x86, x64] + hardlinks: [0, 1] + runs-on: windows-latest + name: 'Cygwin: ${{ matrix.platform }} / hardlinks${{ matrix.hardlinks }}' + steps: + - name: Checkout + uses: actions/checkout@v2 + - name: Clean up PATH + uses: egor-tensin/cleanup-path@v1 - name: Install Cygwin uses: egor-tensin/setup-cygwin@v3 with: platform: '${{ matrix.platform }}' - if: matrix.cygwin - - name: Set up Clang uses: ./ with: platform: '${{ matrix.platform }}' - cygwin: '${{ matrix.cygwin }}' + cygwin: 1 cc: 1 hardlinks: '${{ matrix.hardlinks }}' - - name: Build foo.exe - run: | - $flags = @() - if ('${{ matrix.platform }}' -eq 'x86') { - $flags += '-m32' - } - $flags += '-std=c++14','-o','foo.exe','foo.cpp' - if ('${{ runner.os }}' -eq 'Linux') { - $flags += '-lpthread' - } - clang++ $flags - if: '!matrix.cygwin || matrix.hardlinks' - - - name: Build foo.exe on Cygwin - run: | - $cwd = cygpath.exe -ua (Get-Location) - $arch = if ('${{ matrix.platform }}' -eq 'x64') { '-m64' } else { '-m32' } - $cmd = printf.exe -- 'cd %q && clang++ %q -std=c++14 -o foo.exe foo.cpp' $cwd $arch - bash.exe --login -o errexit -c $cmd - if: matrix.cygwin && !matrix.hardlinks - + uses: ./.github/actions/build-foo + if: matrix.hardlinks + - name: Build foo.exe + uses: ./.github/actions/build-foo-cygwin + if: '!matrix.hardlinks' - name: Run foo.exe - run: | - $expected = @" - Doing something #1 - Doing something #2 - Doing something #3 - "@ - - $actual = & (Join-Path . foo.exe) - $actual = $actual -join [Environment]::NewLine - - $($actual -eq $expected) -or $(throw @" - Unexpected output: - $actual - "@) - + uses: ./.github/actions/run-foo - name: Check cc/c++ - run: | - echo (Get-Command cc).Path - $cc = & cc --version - echo $cc - $($cc | Select-String -Pattern "clang version" -SimpleMatch -Quiet) -or $(throw "Unexpected `cc --version` output") - echo (Get-Command c++).Path - $cxx = & c++ --version - echo $cxx - $($cxx | Select-String -Pattern "clang version" -SimpleMatch -Quiet) -or $(throw "Unexpected `c++ --version` output") - if: '!matrix.cygwin || matrix.hardlinks' - + uses: ./.github/actions/check-cc + if: matrix.hardlinks - name: Check cc/c++ on Cygwin - run: | - $cc = bash.exe --login -o errexit -c 'cc --version' - echo $cc - $($cc | Select-String -Pattern "clang version" -SimpleMatch -Quiet) -or $(throw "Unexpected `cc --version` output") - $cxx = bash.exe --login -o errexit -c 'c++ --version' - echo $cxx - $($cxx | Select-String -Pattern "clang version" -SimpleMatch -Quiet) -or $(throw "Unexpected `c++ --version` output") - if: matrix.cygwin && !matrix.hardlinks + uses: ./.github/actions/check-cc-cygwin + if: '!matrix.hardlinks' -- cgit v1.2.3