diff --git a/Jenkinsfile b/Jenkinsfile new file mode 100644 index 0000000..e40fc46 --- /dev/null +++ b/Jenkinsfile @@ -0,0 +1,94 @@ +pipeline { + agent { label 'android' } + + environment { + ANDROID_HOME = "${env.HOME}/Android/Sdk" + ANDROID_SDK_ROOT = "${env.HOME}/Android/Sdk" + JAVA_HOME = '/usr/lib/jvm/java-17-openjdk' + PATH = "${env.ANDROID_HOME}/cmdline-tools/latest/bin:${env.ANDROID_HOME}/platform-tools:${env.PATH}" + } + + options { + buildDiscarder(logRotator(numToKeepStr: '10')) + timeout(time: 30, unit: 'MINUTES') + } + + stages { + stage('Verify JDK') { + steps { + sh 'java -version' + sh 'javac -version' + } + } + + stage('Bootstrap Android SDK') { + steps { + sh ''' + if [ ! -d "$ANDROID_HOME/cmdline-tools/latest/bin" ]; then + echo "Installing Android SDK command-line tools..." + mkdir -p "$ANDROID_HOME" + CMDLINE_TOOLS_URL="https://dl.google.com/android/repository/commandlinetools-linux-11076708_latest.zip" + curl -fsSL -o /tmp/cmdline-tools.zip "$CMDLINE_TOOLS_URL" + unzip -qo /tmp/cmdline-tools.zip -d "$ANDROID_HOME/cmdline-tools-tmp" + mkdir -p "$ANDROID_HOME/cmdline-tools/latest" + mv "$ANDROID_HOME/cmdline-tools-tmp/cmdline-tools/"* "$ANDROID_HOME/cmdline-tools/latest/" + rm -rf "$ANDROID_HOME/cmdline-tools-tmp" /tmp/cmdline-tools.zip + fi + ''' + sh ''' + yes | sdkmanager --licenses > /dev/null 2>&1 || true + sdkmanager --install \ + "platform-tools" \ + "platforms;android-34" \ + "build-tools;34.0.0" + ''' + } + } + + stage('Build Debug APK') { + steps { + sh 'chmod +x gradlew' + sh './gradlew assembleDebug --no-daemon' + } + } + + stage('Build Release APK') { + when { + expression { + try { + credentials('joykoo-scanner-keystore') + return true + } catch (e) { + echo 'Signing credentials not configured — skipping release build.' + return false + } + } + } + environment { + KEYSTORE_FILE = credentials('joykoo-scanner-keystore') + KEYSTORE_CREDS = credentials('joykoo-scanner-keystore-creds') + } + steps { + sh ''' + ./gradlew assembleRelease --no-daemon \ + -Pandroid.injected.signing.store.file=$KEYSTORE_FILE \ + -Pandroid.injected.signing.store.password=$KEYSTORE_CREDS_PSW \ + -Pandroid.injected.signing.key.alias=$KEYSTORE_CREDS_USR \ + -Pandroid.injected.signing.key.password=$KEYSTORE_CREDS_PSW + ''' + } + } + } + + post { + success { + archiveArtifacts artifacts: 'app/build/outputs/apk/**/*.apk', fingerprint: true + } + failure { + echo 'Build failed — check the console output above.' + } + always { + cleanWs() + } + } +}