properties([
    parameters([
        string(name: 'ANNOTATIONS', defaultValue: '', description: '', trim: true),
        booleanParam(name: 'REPORT', defaultValue: true, description: ''),
    ])
])

catchError {
    def annotations = params.ANNOTATIONS
    if (!annotations) {
        annotations = "--annotation utf.daily_test=${new Date(currentBuild.startTimeInMillis).format("yyyy-MM-dd")}"
    }
    annotations += " --annotation jenkins.trigger=$BUILD_URL"

    def ok = true
    def tasks = [:]
    [
        [
            'cases/feature/backup_restore/suite.jsonnet',
        ],
        [
            'cases/feature/table_partition/suite.jsonnet',
            'cases/feature/collation/suite.jsonnet',
        ],
        [
            'cases/feature/chunkrpc/suite.jsonnet',
            'cases/feature/spm/suite.jsonnet',
        ],
        [

            'cases/feature/hashjoin/suite.jsonnet',
            'cases/feature/hint/suite.jsonnet',
            'cases/feature/indexjoin/suite.jsonnet',
            'cases/feature/indexmerge/suite.jsonnet',
            'cases/feature/plancache/suite.jsonnet',
        ],
        [
            'cases/feature/memory_quota/suite.jsonnet',
            'cases/feature/admin_show_ddl/suite.jsonnet',
            'cases/feature/auto_random/suite.jsonnet',
            'cases/feature/flashback/suite.jsonnet',
            'cases/feature/sequence/suite.jsonnet',
        ],
        [
            'cases/feature/rbac/suite.jsonnet',
            'cases/feature/statements/suite.jsonnet',
            'cases/feature/unionscan/suite.jsonnet',
            'cases/feature/view/suite.jsonnet',
            'cases/regression/suite.jsonnet',
        ],
    ].eachWithIndex { group, idx ->
        tasks["Group $idx"] = {
            for (f in group) {
                try {
                    echo("test $f")
                    build(job: "test-utf-py", parameters: [
                        string(name: "SUITE_FILE", value: f),
                        string(name: "ANNOTATIONS", value: annotations),
                        booleanParam(name: "REPORT", value: params.REPORT),
                    ])
                } catch (e) { ok = false }
            }
        }
    }

    stage('Test') {
        parallel(tasks)
    }

    assert ok
}
