pipeline { agent any environment { PIO_HOME_DIR = "${WORKSPACE}/.pio" VENV_PATH = "${WORKSPACE}/Software/.venv" } stages { stage('🧰 Setup PlatformIO') { steps { dir('Software') { sh """ [ -d .venv ] || python3 -m venv .venv ${env.VENV_PATH}/bin/pip install --upgrade pip platformio """ } } } stage('📄 Dummy WiFi-Creds') { steps { dir('Software') { writeFile file: 'wifi_credentials.ini', text: ''' [wifi_cred] wifi_ssid_client = DummySSID wifi_password_client = DummyPass admin_password = Admin123 wifi_ap_password = DummyAP '''.stripIndent() } } } stage('🧱 Build Firmware for All Environments') { steps { dir('Software') { script { def allEnvironments = ['pcb_rev_1-2_serial', 'pcb_rev_1-3_serial', 'pcb_rev_1-4_serial'] for (envName in allEnvironments) { echo "🔧 Baue Firmware für: ${envName}" sh "${env.VENV_PATH}/bin/platformio run -e ${envName}" } env.REPRESENTATIVE_ENV = allEnvironments[0] } } } } stage('📁 Build Filesystem') { steps { dir('Software') { script { echo "📁 Baue Filesystem für ${env.REPRESENTATIVE_ENV} (repräsentativ)" sh "${env.VENV_PATH}/bin/platformio run -t buildfs -e ${env.REPRESENTATIVE_ENV}" } } } } stage('📦 Find & Archive Firmware') { steps { dir('Software') { script { echo "🔍 Suche nach Firmware (.fw.bin) und Filesystem (.fs.gz) Artefakten..." def firmwareFiles = findFiles(glob: '.pio/build/**/*.fw.bin') def fsFiles = findFiles(glob: '.pio/build/**/*.fs.gz') if (firmwareFiles.length == 0 && fsFiles.length == 0) { echo "⚠️ Keine passenden Artefakte (.fw.bin / .fs.gz) gefunden – nichts zu archivieren." } else { firmwareFiles.each { echo "📦 Firmware: ${it.path}" } fsFiles.each { echo "📦 Filesystem: ${it.path}" } def allArtifacts = (firmwareFiles + fsFiles).collect { it.path } archiveArtifacts artifacts: allArtifacts.join(', ') } } } } } stage('🔌 Flash Hardware (Dummy)') { steps { echo "TODO: Flash-Script aufrufen, z. B.: python3 Hardware/flash.py /dev/ttyUSB0" } } stage('🧠 Run Tests (Dummy)') { steps { dir('Testing') { echo "TODO: Testing mit z. B.: python3 test_runner.py oder pytest starten" } } } stage('🧹 Cleanup Build Output') { steps { dir('Software') { sh "rm -rf .pio" } } } } post { success { echo "✅ CI abgeschlossen – Firmware gebaut, Dummy-Stages bereit" } failure { echo "❌ Fehler im Build – Logs checken, Commander Seraphon" } } }