#!groovy
// Ce depot ne construit rien : il porte du CODE DE BUILD, consomme par les depots
// pyimporters de deux facons -- la bibliotheque partagee '@Library(python-archetype@master)'
// pour vars/pythonPipeline.groovy, et le submodule pour resources/Taskfile.yml.
//
// Le job existe d'abord pour donner une CIBLE D'UPSTREAM a ces depots : sans lui, modifier
// le pipeline partage ne reconstruit personne, et la regression ne se voit qu'au prochain
// commit fonctionnel d'un consommateur.
//
// Il porte en plus le seul travail que ce depot puisse verifier lui-meme : la validation de
// la marketplace Claude Code 'kairntech-python' qu'il distribue (voir HOWTO.md). C'est ce
// stage qui l'ecarte du fichier de gradle-archetype, gradle-docker-archetype et
// docker-image-pipeline, par ailleurs identique -- l'ecart est ici deliberement assume :
// eux n'ont pas de manifeste a valider.
library('tools')

pipeline {
    agent any

    stages {
        stage('Info') {
            steps {
                abortOnNoBuildCommit()
                echo 'This pipeline builds nothing. It validates the marketplace manifest and triggers downstream builds.'
            }
        }

        // Un manifeste casse ne se voit ni au clone ni a la relecture : il se voit chez
        // le premier developpeur qui installe le plugin, et le message est loin de la cause.
        // Ce stage est la seule chose qui rattrape ca avant lui.
        //
        // Il ne tourne pas quand le marqueur de commit fait abandonner le build a
        // abortOnNoBuildCommit() -- soit exactement les commits declares sans effet sur
        // l'aval. Un changement de manifeste n'en est pas un.
        stage('marketplace') {
            steps {
                // Un script du depot, et non 'claude plugin validate --strict' : le
                // validateur officiel exige la CLI, soit 206 Mo telecharges par agent
                // -- avec 'agent any', potentiellement tout le parc -- pour relire deux
                // manifestes de vingt lignes. Et il ne verifie pas ce qui casse
                // reellement une livraison ici : la version non incrementee, que ce
                // script controle. Le detail du choix est dans HOWTO.md.
                //
                // Le controle de version lit les tags 'python-archetype--v*' : sur un
                // checkout sans tags il s'annonce inactif au lieu d'echouer. C'est la
                // seule raison pour laquelle ce job a besoin des tags.
                sh 'python3 tools/check-marketplace.py'
            }
        }
    }

    post {
        always {
            script {
                abortOnNoDownstreamCommit()
            }
        }
    }
}
