pipeline {
    parameters {
        string(name: 'BUILD_DICT', description: 'Build dictionary in JSON format')
    }
    agent none
    stages {
        stage('prepare') {
            steps {
                script {
                    env.build_dict_str = params.BUILD_DICT
                    def build_dict = readJSON text: env.build_dict_str
                    echo "build_dict: ${build_dict}"
                    echo "build_products: ${build_dict.build_products}"
                }
            }
        }
        stage('parallel_stages') {
            steps {
                script {
                    def build_dict = readJSON text: env.build_dict_str
                    def build_products = build_dict.build_products
                    parallel build_products.collectEntries { product ->
                        ["build: ${product}" : {
                            node("${build_dict.milestone} && ${product}") {
                                dir("${product}/SCM") {
                                    stage("setup_scm") {
                                        echo "Setting up SCM for ${product}"
                                    }
                                    stage("pull_dp_code") {
                                        echo "Pulling DP code for ${product}"
                                        sh "echo Pull DP code for ${product}"
                                    }
                                }
                            }
                        }]
                    }
                }
            }
        }
        stage('post_parallel') {
            steps {
                echo "complete"
            }
        }
    }
}