pipeline {
	agent any
	stages {
		////////////////////////////////////////////////////
		stage('Linux gcc') {
			agent { label 'linux && gcc && c++20' }
			steps {
				echo 'Cleaning workspace ...'
				sh 'git clean -d -x -f'
				echo 'Building (gcc) ...'
				sh 'CXX=g++ ./bootstrap.sh'
				echo 'Testing (gcc) ...'
				sh './ctor check'
				echo 'Testing suite (gcc) ...'
				sh '(cd test/suite; CTORDIR=../../build CXX=g++ ./test.sh)'
			}
			post {
				always {
					xunit(thresholds: [ skipped(failureThreshold: '0'),
					                    failed(failureThreshold: '0') ],
					      tools: [ CppUnit(pattern: 'build/test/*.xml') ])
				}
			}
		}
		////////////////////////////////////////////////////
		stage('Linux clang') {
			agent { label 'linux && clang && c++20' }
			steps {
				echo 'Cleaning workspace ...'
				sh 'git clean -d -x -f'
				echo 'Building (clang) ...'
				sh 'CXX=clang++ ./bootstrap.sh'
				echo 'Testing (clang) ...'
				sh './ctor check'
				echo 'Testing suite (clang) ...'
				sh '(cd test/suite; CTORDIR=../../build CXX=clang++ ./test.sh)'
			}
			post {
				always {
					xunit(thresholds: [ skipped(failureThreshold: '0'),
					                    failed(failureThreshold: '0') ],
					      tools: [ CppUnit(pattern: 'build/test/*.xml') ])
				}
			}
		}
		////////////////////////////////////////////////////
	}
}