node('linux') {
    def buildDir = 'build'
    def failures = []

    stage('Checkout') {
        checkout scm
    }

    stage('Install') {
        sh 'npm ci'
    }

    stage('Verify') {
        def suites = ['unit', 'contract']
        def branches = [:]

        for (int i = 0; i < suites.size(); i++) {
            def suite = suites[i]
            branches["test-${suite}"] = {
                try {
                    sh "npm run test:${suite}"
                } catch (err) {
                    failures << suite
                    throw err
                }
            }
        }

        parallel branches
    }

    stage('Report') {
        if (failures.isEmpty()) {
            echo "all suites passed into ${buildDir}"
        } else {
            echo "failed suites: ${failures.join(', ')}"
        }
    }
}
