aboutsummaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
authorEgor Tensin <Egor.Tensin@gmail.com>2021-07-02 20:16:57 +0300
committerEgor Tensin <Egor.Tensin@gmail.com>2021-07-02 20:22:14 +0300
commit3d49180b0bfb13b80694936f6dd6c25aa4355676 (patch)
tree9a1c3fe8a47bc6cff712989928c3ce35c4d40a0a
parentapt-get best scripting practices (diff)
downloadsetup-clang-3d49180b0bfb13b80694936f6dd6c25aa4355676.tar.gz
setup-clang-3d49180b0bfb13b80694936f6dd6c25aa4355676.zip
workflows/test: factor out steps & refactoring
-rw-r--r--.github/actions/build-foo-cygwin/action.yml20
-rw-r--r--.github/actions/build-foo/action.yml20
-rw-r--r--.github/actions/check-cc-cygwin/action.yml25
-rw-r--r--.github/actions/check-cc/action.yml22
-rw-r--r--.github/actions/run-foo/action.yml26
-rw-r--r--.github/workflows/test.yml125
6 files changed, 148 insertions, 90 deletions
diff --git a/.github/actions/build-foo-cygwin/action.yml b/.github/actions/build-foo-cygwin/action.yml
new file mode 100644
index 0000000..08fb820
--- /dev/null
+++ b/.github/actions/build-foo-cygwin/action.yml
@@ -0,0 +1,20 @@
+name: Build foo.exe
+description: Build foo.exe (on Cygwin)
+inputs:
+ platform:
+ description: Target platform
+ required: true
+runs:
+ using: composite
+ steps:
+ - run: |
+ IFS= read -r src_dir <<'EOF'
+ ${{ github.workspace }}
+ EOF
+ echo "$src_dir"
+ src_dir="$( cygpath -ua "$src_dir" )"
+ cd -- "$src_dir"
+ arch=
+ [ '${{ matrix.platform }}' == 'x86' ] && arch=-m32
+ clang++ $arch -std=c++14 -o foo.exe foo.cpp
+ shell: C:\tools\cygwin\bin\bash.exe --login --norc -eo pipefail -o igncr '{0}'
diff --git a/.github/actions/build-foo/action.yml b/.github/actions/build-foo/action.yml
new file mode 100644
index 0000000..50f3f1e
--- /dev/null
+++ b/.github/actions/build-foo/action.yml
@@ -0,0 +1,20 @@
+name: Build foo.exe
+description: Build foo.exe
+inputs:
+ platform:
+ description: Target platform
+ required: true
+runs:
+ using: composite
+ steps:
+ - 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
+ shell: pwsh
diff --git a/.github/actions/check-cc-cygwin/action.yml b/.github/actions/check-cc-cygwin/action.yml
new file mode 100644
index 0000000..f536649
--- /dev/null
+++ b/.github/actions/check-cc-cygwin/action.yml
@@ -0,0 +1,25 @@
+name: Check cc/c++
+description: Check cc/c++ (on Cygwin)
+runs:
+ using: composite
+ steps:
+ - run: |
+ check_tool() {
+ local exe
+ for exe; do
+ full_path="$( command -v "$exe" )"
+ echo "$full_path"
+
+ output="$( "$full_path" --version )"
+ echo "$output"
+
+ if ! echo "$output" | grep -F -- "clang version"; then
+ echo 'Unexpected `'"$exe"' --version` output.' >&2
+ exit 1
+ fi
+ done
+ }
+
+ check_tool cc
+ check_tool c++
+ shell: C:\tools\cygwin\bin\bash.exe --login --norc -eo pipefail -o igncr '{0}'
diff --git a/.github/actions/check-cc/action.yml b/.github/actions/check-cc/action.yml
new file mode 100644
index 0000000..b297f72
--- /dev/null
+++ b/.github/actions/check-cc/action.yml
@@ -0,0 +1,22 @@
+name: Check cc/c++
+description: Check cc/c++
+runs:
+ using: composite
+ steps:
+ - run: |
+ function Check-Exe {
+ param(
+ [Parameter(Mandatory=$true)]
+ [string] $Exe
+ )
+
+ echo (Get-Command $Exe).Path
+ $output = & $Exe --version
+ echo $output
+
+ $($output | Select-String -Pattern "clang version" -SimpleMatch -Quiet) -or $(throw "Unexpected `$Exe --version` output")
+ }
+
+ Check-Exe cc
+ Check-Exe c++
+ shell: pwsh
diff --git a/.github/actions/run-foo/action.yml b/.github/actions/run-foo/action.yml
new file mode 100644
index 0000000..0e56b07
--- /dev/null
+++ b/.github/actions/run-foo/action.yml
@@ -0,0 +1,26 @@
+name: Run foo.exe
+description: Run foo.exe and verify its output
+runs:
+ using: composite
+ steps:
+ - run: |
+ $expected = @"
+ Doing something #1
+ Doing something #2
+ Doing something #3
+ "@
+
+ $actual = & (Join-Path . foo.exe)
+ $actual = $actual -join [Environment]::NewLine
+
+ echo @"
+ Expected output:
+ $expected
+ "@
+ echo @"
+ Actual output:
+ $actual
+ "@
+
+ $($actual -eq $expected) -or $(throw "Unexpected output!")
+ shell: pwsh
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'