pipeline {
    agent none

    environment {
        RACK_ENV  = "test"
        RAILS_ENV = "test"
    }

    post {
        success {
            emailext (
                subject: "SUCCESSFUL: Job '${env.JOB_NAME} [${env.BUILD_NUMBER}]'",
                mimeType: "text/html",
                body: """<p>SUCCESSFUL: Job '${env.JOB_NAME} [${env.BUILD_NUMBER}]':</p>
                    <p>Check console output at <a href='${env.BUILD_URL}'>${env.JOB_NAME} [${env.BUILD_NUMBER}]</a></p>""",
                recipientProviders: [[$class: 'CulpritsRecipientProvider'], [$class: 'RequesterRecipientProvider'], [$class: 'DevelopersRecipientProvider']]
            )
        }

        failure {
            emailext (
                subject: "FAILED: Job '${env.JOB_NAME} [${env.BUILD_NUMBER}]'",
                mimeType: "text/html",
                to: "core@onapp.com",
                body: """<p>FAILED: Job '${env.JOB_NAME} [${env.BUILD_NUMBER}]':</p>
                    <p>Check console output at <a href='${env.BUILD_URL}'>${env.JOB_NAME} [${env.BUILD_NUMBER}]</a></p>""",
                recipientProviders: [[$class: 'CulpritsRecipientProvider'], [$class: 'RequesterRecipientProvider'], [$class: 'DevelopersRecipientProvider']]
            )
        }
    }

    stages {
        stage("Run tests") {
            parallel {
                stage("interface/lib+models") {
                    agent {
                        docker {
                            image 'docker.io/nahaylo/onapp-5-ruby'
                            args '-u root:root'
                        }
                    }
                    post {
                        always {
                            archiveArtifacts "rspec_results/lib_models_results.xml"
                            junit "rspec_results/lib_models_results.xml"
                            sh "rm -fr ./*"
                            deleteDir()
                        }
                    }
                    steps {
                        sshagent (credentials: ['7ce580c0-7d01-412f-bff1-485b4ca6196a']) {
                            sh 'printenv'

                            // Starting services
                            sh "/etc/init.d/mysqld start"
                            sh "/etc/init.d/redis start"

                            // Bundle install
                            sh "ssh-keyscan bitbucket.org >> /root/.ssh/known_hosts"
                            sh "ssh-keyscan github.com >> /root/.ssh/known_hosts"
                            sh "bundle install"

                            // Configure
                            sh "cp config/on_app.yml.example config/on_app.yml"
                            sh "cp config/database.test.yml config/database.yml"
                            sh "cp config/redis.test.yml config/redis.yml"
                            sh "touch config/keys/private"
                            sh "touch config/keys/public"
                            sh "mkdir -p log"
                            sh "mkdir -p tmp"
                            sh "bundle exec rake db:create"
                            sh "bundle exec rake db:migrate"

                            // Run
                            sh "bundle exec rspec spec/lib spec/models spec/models_permissions --format progress --format RspecJunitFormatter --out rspec_results/lib_models_results.xml --deprecation-out /dev/null"
                        }
                    }
                }

                stage("interface/policies+services+transactions") {
                    agent {
                        docker {
                            image 'docker.io/nahaylo/onapp-5-ruby'
                            args '-u root:root'
                        }
                    }
                    post {
                        always {
                            archiveArtifacts "rspec_results/policies_services_transactions_results.xml"
                            junit "rspec_results/policies_services_transactions_results.xml"
                            sh "rm -fr ./*"
                            deleteDir()
                        }
                    }
                    steps {
                        sshagent (credentials: ['7ce580c0-7d01-412f-bff1-485b4ca6196a']) {
                            // Starting services
                            sh "/etc/init.d/mysqld start"
                            sh "/etc/init.d/redis start"

                            // Bundle install
                            sh "ssh-keyscan bitbucket.org >> /root/.ssh/known_hosts"
                            sh "ssh-keyscan github.com >> /root/.ssh/known_hosts"
                            sh "bundle install"

                            // Configure
                            sh "cp config/on_app.yml.example config/on_app.yml"
                            sh "cp config/database.test.yml config/database.yml"
                            sh "cp config/redis.test.yml config/redis.yml"
                            sh "touch config/keys/private"
                            sh "touch config/keys/public"
                            sh "mkdir -p log"
                            sh "mkdir -p tmp"
                            sh "bundle exec rake db:create"
                            sh "bundle exec rake db:migrate"

                            // Run
                            sh "bundle exec rspec spec/services spec/policies spec/transactions --format progress --format RspecJunitFormatter --out rspec_results/policies_services_transactions_results.xml --deprecation-out /dev/null"
                        }
                    }
                }

                stage("interface/others") {
                    agent {
                        docker {
                            image 'docker.io/nahaylo/onapp-5-ruby'
                            args '-u root:root'
                        }
                    }
                    post {
                        always {
                            archiveArtifacts "rspec_results/others_results.xml"
                            junit "rspec_results/others_results.xml"
                            sh "rm -fr ./*"
                            deleteDir()
                        }
                    }
                    steps {
                        sshagent (credentials: ['7ce580c0-7d01-412f-bff1-485b4ca6196a']) {
                            // Starting services
                            sh "/etc/init.d/mysqld start"
                            sh "/etc/init.d/redis start"

                            // Bundle install
                            sh "ssh-keyscan bitbucket.org >> /root/.ssh/known_hosts"
                            sh "ssh-keyscan github.com >> /root/.ssh/known_hosts"
                            sh "bundle install"

                            // Configure
                            sh "cp config/on_app.yml.example config/on_app.yml"
                            sh "cp config/database.test.yml config/database.yml"
                            sh "cp config/redis.test.yml config/redis.yml"
                            sh "touch config/keys/private"
                            sh "touch config/keys/public"
                            sh "mkdir -p log"
                            sh "mkdir -p tmp"
                            sh "bundle exec rake db:create"
                            sh "bundle exec rake db:migrate"

                            // Run
                            sh "bundle exec rspec spec --exclude-pattern '{lib,policies,services,models,models_permissions,transactions}/**/*_spec.rb' --format progress --format RspecJunitFormatter --out rspec_results/others_results.xml --deprecation-out /dev/null"
                        }
                    }
                }

                stage("onapp-backups") {
                    agent {
                        docker {
                            image 'docker.io/nahaylo/onapp-5-ruby'
                            args '-u root:root'
                        }
                    }
                    post {
                        always {
                            archiveArtifacts "components/onapp-backups/rspec_results/backups-results.xml"
                            junit "components/onapp-backups/rspec_results/backups-results.xml"
                            sh "rm -fr ./*"
                            deleteDir()
                        }
                    }
                    steps {
                        sshagent (credentials: ['7ce580c0-7d01-412f-bff1-485b4ca6196a']) {
                            sh "/etc/init.d/mysqld start"
                            sh "/etc/init.d/redis start"

                            // Bundle install
                            sh "ssh-keyscan bitbucket.org >> /root/.ssh/known_hosts"
                            sh "ssh-keyscan github.com >> /root/.ssh/known_hosts"

                            sh "cp components/dummy_database.test.yml components/dummy_database.yml"
                            sh "cd components/onapp-backups && bundle install"
                            sh "cd components/onapp-backups && bundle exec rake app:db:create"
                            sh "cd components/onapp-backups && bundle exec rake app:db:migrate"
                            sh "cd components/onapp-backups && bundle exec rspec spec --format progress --format RspecJunitFormatter --out rspec_results/backups-results.xml --deprecation-out /dev/null"
                        }
                    }
                }
                stage("onapp-messaging") {
                    agent {
                        docker {
                            image 'docker.io/nahaylo/onapp-5-ruby'
                            args '-u root:root'
                        }
                    }
                    post {
                        always {
                            archiveArtifacts "components/messaging/rspec_results/messaging-results.xml"
                            junit "components/messaging/rspec_results/messaging-results.xml"
                            sh "rm -fr ./*"
                            deleteDir()
                        }
                    }
                    steps {
                        sshagent (credentials: ['7ce580c0-7d01-412f-bff1-485b4ca6196a']) {
                            sh "/etc/init.d/mysqld start"
                            sh "/etc/init.d/redis start"

                            // Bundle install
                            sh "ssh-keyscan bitbucket.org >> /root/.ssh/known_hosts"
                            sh "ssh-keyscan github.com >> /root/.ssh/known_hosts"

                            sh "cp components/dummy_database.test.yml components/dummy_database.yml"
                            sh "cd components/messaging && bundle install"
                            sh "cd components/messaging && bundle exec rake app:db:create"
                            sh "cd components/messaging && bundle exec rake app:db:migrate"
                            sh "cd components/messaging && bundle exec rspec spec --format progress --format RspecJunitFormatter --out rspec_results/messaging-results.xml --deprecation-out /dev/null"
                        }
                    }
                }
                stage("onapp-networking") {
                    agent {
                        docker {
                            image 'docker.io/nahaylo/onapp-5-ruby'
                            args '-u root:root'
                        }
                    }
                    post {
                        always {
                            archiveArtifacts "components/onapp-networking/rspec_results/networking-results.xml"
                            junit "components/onapp-networking/rspec_results/networking-results.xml"
                            sh "rm -fr ./*"
                            deleteDir()
                        }
                    }
                    steps {
                        sshagent (credentials: ['7ce580c0-7d01-412f-bff1-485b4ca6196a']) {
                            sh "/etc/init.d/mysqld start"
                            sh "/etc/init.d/redis start"

                            // Bundle install
                            sh "ssh-keyscan bitbucket.org >> /root/.ssh/known_hosts"
                            sh "ssh-keyscan github.com >> /root/.ssh/known_hosts"

                            // config for onapp
                            sh "cp config/on_app.yml.example config/on_app.yml"
                            sh "cp config/database.test.yml config/database.yml"
                            sh "cp config/redis.test.yml config/redis.yml"
                            sh "touch config/keys/private"
                            sh "touch config/keys/public"
                            sh "mkdir -p log"
                            sh "mkdir -p tmp"

                            sh "echo -e \"---\npath: `pwd`\" > components/onapp-networking/config/main_app_info.yml"
                            sh "cd components/onapp-networking && bundle install"
                            sh "cd components/onapp-networking && bundle exec rake app:db:create"
                            sh "cd components/onapp-networking && bundle exec rake app:db:migrate"
                            sh "cd components/onapp-networking && bundle exec rspec spec --format progress --format RspecJunitFormatter --out rspec_results/networking-results.xml --deprecation-out /dev/null"
                        }
                    }
                }
                stage("networking-sdn") {
                    agent {
                        docker {
                            image 'docker.io/nahaylo/onapp-5-ruby'
                            args '-u root:root'
                        }
                    }
                    post {
                        always {
                            archiveArtifacts "components/onapp-networking/networking-sdn/rspec_results/networking-sdn-results.xml"
                            junit "components/onapp-networking/networking-sdn/rspec_results/networking-sdn-results.xml"
                            sh "rm -fr ./*"
                            deleteDir()
                        }
                    }
                    steps {
                        sshagent (credentials: ['7ce580c0-7d01-412f-bff1-485b4ca6196a']) {
                            sh "/etc/init.d/mysqld start"
                            sh "/etc/init.d/redis start"

                            // Bundle install
                            sh "ssh-keyscan bitbucket.org >> /root/.ssh/known_hosts"
                            sh "ssh-keyscan github.com >> /root/.ssh/known_hosts"

                            sh "cp components/dummy_database.test.yml components/onapp-networking/networking-sdn/spec/dummy/config/database.yml"
                            sh "cd components/onapp-networking/networking-sdn/spec/dummy && bundle install"
                            sh "cd components/onapp-networking/networking-sdn/spec/dummy && bundle exec rake db:create"
                            sh "cd components/onapp-networking/networking-sdn/spec/dummy && bundle exec rake db:migrate"
                            sh "cd components/onapp-networking/networking-sdn && BUNDLE_GEMFILE=spec/dummy/Gemfile bundle exec rspec spec --format progress --format RspecJunitFormatter --out rspec_results/networking-sdn-results.xml --deprecation-out /dev/null"
                        }
                    }
                }
            }
        }
    }
}
