pipeline {
  agent none

  stages {
    stage('build') {
      agent { docker { image 'docker.pkgs.xarth.tv/devtools/bionic/groovy2.4.12:latest' } }
      steps {
        sh './gradlew clean build -x test'
        stash name: 'gradle_dir', includes: '.gradle/**/*'
        stash name: 'build_dir', includes: 'build/**/*'
      }
    }

    stage('test') {
      agent { docker { image 'docker.pkgs.xarth.tv/devtools/bionic/groovy2.4.12:latest' } }
      steps {
        unstash name: 'gradle_dir'
        unstash name: 'build_dir'
        sh './gradlew test'
      }
      post {
        always {
          junit 'build/test-results/test/*.xml'
        }
      }
    }

    stage('generate docs') {
      agent { docker { image 'docker.pkgs.xarth.tv/devtools/bionic/groovy2.4.12:latest' } }
      steps {
        unstash name: 'gradle_dir'
        unstash name: 'build_dir'
        sh './gradlew groovydoc'
        stash name: 'groovydoc_dir', includes: 'build/docs/groovydoc/**/*'
      }
    }

    stage('update gh-pages'){
      agent any
      when { branch 'master' }
      steps {
        unstash name: 'groovydoc_dir'
        git branch: env.BRANCH_NAME, credentialsId: 'git-aws-read-key', url: env.GIT_URL.replace('https://', 'ssh://git@')
        sshagent(credentials: ['git-aws-read-key']) {
          sh """
            git add -f build/docs/groovydoc
            git commit -m "autogenerated docs for \$DATE.\$SHA"
            git push origin `git subtree split --prefix build/docs/groovydoc ${env.BRANCH_NAME}`:gh-pages --force
          """
        }
      }
    }

    stage('tag master'){
      agent any
      when { branch 'master' }
      steps {
        git branch: env.BRANCH_NAME, credentialsId: 'git-aws-read-key', url: env.GIT_URL.replace('https://', 'ssh://git@')
        sshagent(credentials: ['git-aws-read-key']) {
          sh """
            SHA=\$(git rev-parse --short HEAD)
            DATE=\$(date +'%Y.%m.%d')
            git tag -a -m "https://git.xarth.tv/flexo/flexo-libs/commit/\$SHA" \$DATE.\$SHA
            git push origin \$DATE.\$SHA
          """
        }
      }
    }
  }
}