pipeline {
    agent {
        node {
            label 'soko-web'
            customWorkspace 'workspace/soko-web'
        }
    }

    stages {
        stage('Install composer') {
            agent {
                dockerfile {
                    filename 'Dockerfile'
                    dir '.'
                    reuseNode true
                }
            }
            steps {
                sh 'composer install'
            }
        }

        stage('Unit Testing') {
            agent {
                dockerfile {
                    filename 'Dockerfile'
                    dir '.'
                    reuseNode true
                }
            }
            steps {
                sh 'vendor/bin/phpunit --log-junit unit_test_results.xml --testdox tests'
            }
            post {
                always {
                    archiveArtifacts 'unit_test_results.xml'
                }
            }
        }

        stage('Static Code Analysis') {
            agent {
                dockerfile {
                    filename 'Dockerfile'
                    dir '.'
                    reuseNode true
                }
            }
            steps {
                sh 'php -d memory_limit=1G vendor/bin/phpstan analyse -c phpstan.neon --error-format=prettyJson > static_code_analysis_results.json'
            }
            post {
                always {
                    archiveArtifacts 'static_code_analysis_results.json'
                }
            }
        }
    }
}