pipeline {
    agent {
        kubernetes {
            cloud 'rsys-devel'
            defaultContainer 'homebrew'
            inheritFrom 'homebrew'
        }
    }
    stages {
        stage("install") {
            steps {
                sh 'brew install python@3.11 sphinx-doc'
                sh 'python3.11 -m pip install -r requirements.txt'
            }
        }
        stage("unit tests") {
            steps {
                sh returnStatus: true, script: "python3.11 -m pytest --junitxml=test_results.xml"
                xunit checksName: '', tools: [JUnit(excludesPattern: '', pattern: 'test_results.xml', stopProcessingIfError: true)]
            }
        }
        stage("build") {
            steps {
                sh "python3.11 -m build"
            }
        }
        stage("test installation") {
            steps {
                sh "python3.11 -m pip install dist/*.whl --force-reinstall"
                sh "nsbdiagnosistoolkit -h"
            }
        }
        stage("archive") {
            steps {
                archiveArtifacts artifacts: 'dist/*.tar.gz, dist/*.whl', fingerprint: true, followSymlinks: false, onlyIfSuccessful: true
            }
        }
        stage("publish") {
            environment {
                CREDS = credentials('git.reslate.systems/ydeng')
            }
            when {
                branch '**/main'
            }
            steps {
                sh returnStatus: true, script: 'python3.11 -m twine upload --repository-url https://git.reslate.systems/api/packages/${CREDS_USR}/pypi -u ${CREDS_USR} -p ${CREDS_PSW} --non-interactive --disable-progress-bar --verbose dist/*'
            }
        }
    }
}