/**
 * Générer des paquets Debian, RPM, Alpine (ipk) via nfpm
 * Voir See https://nfpm.goreleaser.com/
 *
 * Options:
 * - installDir - Répertoire d'installation du binaire nfpm, par défaut /usr/local/bin
 * - version - Version de nfpm à installer, par défaut 2.15.1
 * - forceDownload - Forcer l'installation de nfpm, par défaut false
 * - config - Fichier de configuration nfpm à utiliser, par défaut nfpm.yaml
 * - target - Répertoire cible pour nfpm, par défaut ./dist
 * - packager - Limiter l'exécution de nfpm à un packager spécifique, par défaut "deb" (i.e. pas de limitation)
 */
void call(Map options = [:]) {
    String installDir = options.get('installDir', '/usr/local/bin')
    String version = options.get('version', '2.20.0')
    Boolean forceDownload = options.get('forceDownload', false)
    String downloadUrl = options.get('downloadUrl', "https://github.com/goreleaser/nfpm/releases/download/v${version}/nfpm_${version}_Linux_x86_64.tar.gz")
    String config = options.get('config', 'nfpm.yaml')
    String target = options.get('target', env.WORKSPACE + '/dist')
    String packager = options.get('packager', 'deb')

    String nfpmBin = sh(returnStdout: true, script: 'which nfpm || exit 0').trim()
    if (nfpmBin == '' || forceDownload) {
        sh("""
        mkdir -p '${installDir}'
        curl -L '${downloadUrl}' > /tmp/nfpm.tar.gz
        tar -C /usr/local/bin -xzf /tmp/nfpm.tar.gz
        """)

        nfpmBin = "${installDir}/nfpm"
    }

    sh("""
    mkdir -p '${target}'
    ${nfpmBin} package --config '${config}' ${packager ? '--packager ' + packager : ''} --target '${target}'
    """)
}