catchError {
    def ok = true
    stage('Build') {
        try {
            parallel(
                "tikv-master": {
                    build(job: "build-tikv", parameters: [string(name: "BRANCH", value: "master"), string(name: "MAKE_TARGET", value: "dist_release")])
                    build(job: "build-tikv", parameters: [string(name: "BRANCH", value: "master"), string(name: "MAKE_TARGET", value: "fail_release")])
                },
                "tikv-release-5.0-rc": {
                    build(job: "build-tikv", parameters: [string(name: "BRANCH", value: "release-5.0-rc"), string(name: "MAKE_TARGET", value: "dist_release")])
                    build(job: "build-tikv", parameters: [string(name: "BRANCH", value: "release-5.0-rc"), string(name: "MAKE_TARGET", value: "fail_release")])
                },
                "tikv-release-5.0": {
                    build(job: "build-tikv", parameters: [string(name: "BRANCH", value: "release-5.0"), string(name: "MAKE_TARGET", value: "dist_release")])
                    build(job: "build-tikv", parameters: [string(name: "BRANCH", value: "release-5.0"), string(name: "MAKE_TARGET", value: "fail_release")])
                },
                "tikv-release-4.0": {
                    build(job: "build-tikv", parameters: [string(name: "BRANCH", value: "release-4.0"), string(name: "MAKE_TARGET", value: "dist_release")])
                    build(job: "build-tikv", parameters: [string(name: "BRANCH", value: "release-4.0"), string(name: "MAKE_TARGET", value: "fail_release")])
                },
                "tikv-release-3.x": {
                    build(job: "build-tikv", parameters: [string(name: "BRANCH", value: "release-3.1"), string(name: "MAKE_TARGET", value: "dist_release")])
                    build(job: "build-tikv", parameters: [string(name: "BRANCH", value: "release-3.0"), string(name: "MAKE_TARGET", value: "dist_release")])
                },
                "pd-all-releases": {
                    for (branch in ["release-3.0", "release-3.1", "release-4.0", "release-5.0-rc", "release-5.0", "master"]) {
                        try {
                            build(job: "build-pd", parameters: [string(name: "BRANCH", value: branch), string(name: "BUILD_METHOD", value: "go1.13-module")])
                            if (["release-4.0", "master"].contains(branch)) {
                                build(job: "build-pd", parameters: [string(name: "BRANCH", value: branch), string(name: "BUILD_METHOD", value: "go1.13-module"), booleanParam(name: "FAILPOINT", value: true)])
                            }
                        } catch (e) { ok = false }
                    }
                    assert ok
                },
                "tidb-all-releases": {
                    for (branch in ["release-3.0", "release-3.1", "release-4.0", "release-5.0-rc", "release-5.0", "master"]) {
                        try {
                            build(job: "build-tidb", parameters: [string(name: "BRANCH", value: branch), string(name: "BUILD_METHOD", value: "go1.13-module")])
                            if (["release-4.0", "master"].contains(branch)) {
                                build(job: "build-tidb", parameters: [string(name: "BRANCH", value: branch), string(name: "BUILD_METHOD", value: "go1.13-module"), booleanParam(name: "FAILPOINT", value: true)])
                            }
                        } catch (e) { ok = false }
                    }
                    assert ok
                },
            )
        } catch (e) { ok = false }
    }

    assert ok
}
