pipeline {
    agent any

    environment {
        ROOTFS_JOB = "espos-rootfs"
        WORKDIR = "${WORKSPACE}/work"
    }

    stages {
        stage('Cleanup Previous Mounts') {
            steps {
                sh '''
                    sudo umount -R "$WORKDIR/rootfs" 2>/dev/null || true

                    sudo umount -lf "$WORKDIR/rootfs/dev/pts" 2>/dev/null || true
                    sudo umount -lf "$WORKDIR/rootfs/dev/shm" 2>/dev/null || true
                    sudo umount -lf "$WORKDIR/rootfs/dev" 2>/dev/null || true
                    sudo umount -lf "$WORKDIR/rootfs/proc" 2>/dev/null || true
                    sudo umount -lf "$WORKDIR/rootfs/sys" 2>/dev/null || true

                    sudo rm -rf "$WORKDIR" || true
                '''
            }
        }

        stage("Checkout") {
            steps {
                checkout scm
            }
        }
        stage("Install dependencies") {
            steps {
                sh 'sudo apt install -y squashfs-tools xorriso grub-pc-bin grub-efi-amd64-bin grub-common grub2-common mtools dosfstools zstd pv tree file'
            }
        }

        stage('Download RootFS') {
            steps {
                copyArtifacts(
                    projectName: env.ROOTFS_JOB,
                    selector: lastSuccessful()
                )
            }
        }

        stage('Build ISO') {
            steps {
                sh '''
                    chmod +x build-liveiso.sh
                    sudo ./build-liveiso.sh
                '''
            }
        }
    }

    post {
        always {
            sh '''
                sudo umount -R "$WORKDIR/rootfs" 2>/dev/null || true

                sudo umount -lf "$WORKDIR/rootfs/dev/pts" 2>/dev/null || true
                sudo umount -lf "$WORKDIR/rootfs/dev/shm" 2>/dev/null || true
                sudo umount -lf "$WORKDIR/rootfs/dev" 2>/dev/null || true
                sudo umount -lf "$WORKDIR/rootfs/proc" 2>/dev/null || true
                sudo umount -lf "$WORKDIR/rootfs/sys" 2>/dev/null || true
            '''
        }

        success {
            archiveArtifacts(
                artifacts: '*.iso',
                fingerprint: true
            )
        }
    }
}