#!/usr/bin/env groovy
library 'status-jenkins-lib@v1.9.11'

def changesDetected = false

pipeline {
  agent { label 'linux' }

  options {
    timestamps()
    /* Prevent Jenkins jobs from running forever */
    timeout(time: 10, unit: 'MINUTES')
    /* manage how many builds we keep */
    buildDiscarder(logRotator(
      numToKeepStr: '20',
      daysToKeepStr: '30',
    ))
    disableConcurrentBuilds()
  }

  environment {
    PLATFORM = 'chrome'
    ZIP_NAME = utils.pkgFilename(
      type: 'Extension',
      version: 'none',
      arch: 'chrome',
      ext: 'zip',
    )
  }

  stages {
    stage('Check Changed Files') {
      when {
          changeset pattern: "apps/connector/**", comparator: "GLOB"
      }
      steps {
        script {
            changesDetected = true
        }
      }
    }

    stage('Install') {
      when {
          expression { changesDetected }
      }
      steps {
          dir("${env.WORKSPACE}/apps/connector") {
            script {
              nix.shell(
                'pnpm install --frozen-lockfile',
                pure: false,
                entryPoint: "${env.WORKSPACE}/apps/connector/shell.nix"
              )
            }
          }
      }
    }

    stage('Build') {
      when {
          expression { changesDetected }
      }
      steps {
          dir("${env.WORKSPACE}") {
            script {
              nix.shell(
                'pnpm turbo run build --filter=connector',
                pure: false,
                entryPoint: "${env.WORKSPACE}/apps/connector/shell.nix"
              )
            }
          }
      }
    }

    stage('Zip') {
      when {
          expression { changesDetected }
      }
      steps {
        dir("${env.WORKSPACE}/apps/connector") {
          zip(
            zipFile: env.ZIP_NAME,
            dir: 'build/chrome-mv3-prod',
            archive: false,
          )
        }
      }
    }

    stage('Archive') {
      when {
          expression { changesDetected }
      }
      steps {
        dir("${env.WORKSPACE}/apps/connector") {
          archiveArtifacts(
            artifacts: env.ZIP_NAME,
            fingerprint: true,
          )
        }
      }
    }

    stage('Upload') {
      when {
          expression { changesDetected }
      }
      steps {
        dir("${env.WORKSPACE}/apps/connector") {
          script {
            env.PKG_URL = s5cmd.upload(env.ZIP_NAME)
          }
        }
      }
    }
  }

  post {
    success {
      script {
        if(changesDetected) {
          github.notifyPR(true)
        }
      }
    }
    failure {
      script {
        if(changesDetected) {
          github.notifyPR(false)
        }
      }
    }
    cleanup { cleanWs() }
  }
}
