pipeline {
    agent any

    stages {
        stage('Lint') {
            steps {
                sh 'pip install ansible-lint yamllint pyyaml'
                sh 'make lint'
            }
        }

        stage('Test Matrix') {
            steps {
                script {
                    def matrixJson = sh(script: 'python3 ci/build_matrix.py', returnStdout: true).trim()
                    def matrix = readJSON(text: matrixJson)
                    def parallelStages = [:]
                    matrix.each { entry ->
                        def slug = entry.slug
                        parallelStages[slug] = {
                            sh "make test-${slug}"
                        }
                    }
                    parallel parallelStages
                }
            }
        }
    }

    post {
        always {
            sh 'make clean || true'
        }
    }
}
