tidy-html5/.github/workflows/build_and_test.yml
2021-08-17 11:54:56 -04:00

184 lines
7.1 KiB
YAML

################################################################################
# Build and Test tidy on the latest versions of all of the major platforms.
#
# - Build on multiple operating systems, and where possible, multiple
# architectures. On Windows, we will also build and test mingw in
# addition to MSVC.
#
# - Report the version number for each binary that is built.
#
# - Run each binary against the regression test suite.
#
################################################################################
name: Build and Test
on:
push:
paths:
- 'src/**'
- 'include/**'
- '.github/workflows/**'
- 'CMakeLists.txt'
branches:
- 'master'
- 'next'
pull_request:
paths:
- 'src/**'
- 'include/**'
- '.github/workflows/**'
- 'CMakeLists.txt'
jobs:
build_and_test:
runs-on: ${{ matrix.os }}
strategy:
fail-fast: false
matrix:
include:
############################################################
# Ubuntu latest is a normal build with nothing special that
# really need be done.
############################################################
- os: ubuntu-latest
name: Standard
cmake_command: "cmake ../.. -DCMAKE_BUILD_TYPE=Release"
build_command: "cmake --build . --config Release"
vers_command: "./tidy --version"
test_command: "ruby test.rb test"
############################################################
# On macOS, we'll build both architectures.
############################################################
- os: macOS-latest
name: X86_64 & Arm64
cmake_command: "cmake ../.. -DCMAKE_BUILD_TYPE=Release '-DCMAKE_OSX_ARCHITECTURES=x86_64;arm64'"
build_command: "cmake --build . --config Release"
vers_command: "./tidy --version"
test_command: "ruby test.rb test"
############################################################
# The standard Windows build is perfectly vanilla, and as
# of now is using MSVC 19.
############################################################
- os: windows-latest
name: MSVC
cmake_command: "cmake ../.. -DCMAKE_BUILD_TYPE=Release"
build_command: "cmake --build . --config Release"
vers_command: "./tidy.exe --version"
test_command: "ruby test.rb test"
############################################################
# We'll also build using MinGW on Windows, because it's
# always nice to support FOSS toolchains. While we could
# do this another way, we'll use the windows-2016 runner
# to distinguish it from the windows-latest runner.
############################################################
- os: windows-2016
name: MinGW
cmake_command: "cmake ../.. -DCMAKE_BUILD_TYPE=Release -G 'MinGW Makefiles'"
build_command: "cmake --build . --config Release"
vers_command: "./tidy --version"
test_command: "ruby test.rb test"
############################################################
# We'll also build using Cygwin on Windows, because even
# Windows people sometimes dislike Windows. While we could
# do this another way, we'll use the windows-2019 runner to
# distinguish it from the windows-latest runner.
# Note: only the `tidy` target will be built (without the
# man page) for this runner, because xltproc has issues
# loading files in the virtual environment. The man page
# is tested and builds perfectly fine on real installs.
############################################################
- os: windows-2019
name: Cygwin
cmake_command: "cmake ../.. -DCMAKE_BUILD_TYPE=Release"
build_command: "cmake --build . --target tidy --config Release"
vers_command: "./tidy --version"
test_command: "ruby test.rb test"
steps:
############################################################
# Checkput the repository.
############################################################
- uses: actions/checkout@v2
############################################################
# Install MinGW-w64 if needed for the current runner.
############################################################
- name: Install MinGW-w64
if: ${{matrix.os == 'windows-2016'}}
uses: egor-tensin/setup-mingw@v2
with:
platform: x64
############################################################
# Install Cygwin if needed for the current runner.
############################################################
- name: Install Cygwin
if: ${{matrix.os == 'windows-2019'}}
uses: egor-tensin/setup-cygwin@v3
with:
platform: x64
packages: make gcc-core gcc-g++ cmake
############################################################
# Cmake and Make the project.
############################################################
- name: Build
working-directory: ${{github.workspace}}/build/cmake
run: |
${{matrix.cmake_command}}
${{matrix.build_command}}
############################################################
# Windows MSVC is the only oddball here; why does it
# install the binary into a subfolder, unlike all of the
# other builds? Let's make everything else easier by
# relocating it to the same spot as all the other build
# locations.
############################################################
- name: Move the MSVC exe to someplace sensible
if: ${{matrix.os == 'windows-latest'}}
run: |
move-item -path "${{github.workspace}}/build/cmake/Release/tidy.exe" -destination "${{github.workspace}}/build/cmake/"
############################################################
# Just so that a human can make a quick sanity check.
############################################################
- name: Show Version
working-directory: ${{github.workspace}}/build/cmake
run: |
${{matrix.vers_command}}
############################################################
# Install Ruby for running our regression tests. It's quite
# nice that this package is generic enough to work on all
# of the different runners.
############################################################
- uses: ruby/setup-ruby@v1
with:
ruby-version: 2.7
bundler-cache: true
############################################################
# Ensure that dependencies are met.
############################################################
- name: Bundle Install
working-directory: ${{github.workspace}}/regression_testing
run: |
bundle install
############################################################
# Finally, check for regressions.
############################################################
- name: Run Regression Test
working-directory: ${{github.workspace}}/regression_testing
run: |
${{matrix.test_command}}