#!/usr/bin/env groovy

/*
 * Copyright (C) 2019 - present Instructure, Inc.
 *
 * This file is part of Canvas.
 *
 * Canvas is free software: you can redistribute it and/or modify it under
 * the terms of the GNU Affero General Public License as published by the Free
 * Software Foundation, version 3 of the License.
 *
 * Canvas is distributed in the hope that it will be useful, but WITHOUT ANY
 * WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR
 * A PARTICULAR PURPOSE. See the GNU Affero General Public License for more
 * details.
 *
 * You should have received a copy of the GNU Affero General Public License along
 * with this program. If not, see <http://www.gnu.org/licenses/>.
 */

pipeline {
  agent { label 'canvas-docker' }
  options {
    ansiColor('xterm')
    timestamps()
  }

  environment {
    COMPOSE_FILE = 'docker-compose.new-jenkins.yml:docker-compose.new-jenkins-selenium.yml'
  }

  // TODO: This will run all xbrowser tests consecutively, still need to get parallel depending on runtime
  stages {
    stage ('Setup') {
      steps {
        cleanAndSetup()
        timeout(time: 10) {
          sh 'build/new-jenkins/docker-compose-pull.sh'
          sh 'build/new-jenkins/docker-compose-pull-selenium.sh'
          sh 'build/new-jenkins/docker-compose-build-up.sh'
          sh 'build/new-jenkins/docker-compose-setup-databases.sh'
        }
      }
    }

    stage ('Xbrowser Tests') {
      steps {
        timeout(time: 60) {
          sh 'build/new-jenkins/xbrowser-test.sh'
        }
      }
    }
  }

  post {
    unsuccessful {
      // copy spec failures to local
      sh 'docker cp $(docker ps -q --filter "name=canvas_"):/usr/src/app/log/spec_failures/ ./tmp'
      script {
        def htmlFiles
        // find all results files
        dir ('tmp') {
          htmlFiles = findFiles glob: '**/index.html'
        }
        // publish html
        publishHTML target: [
          allowMissing: false,
          alwaysLinkToLastBuild: false,
          keepAll: true,
          reportDir: "tmp",
          reportFiles: htmlFiles.join(','),
          reportName: 'Test Failures'
        ]
      }
    }

    cleanup {
      sh 'rm -vrf ./tmp/spec_failures'
      execute 'bash/docker-cleanup.sh --allow-failure'
    }
  }
}
