diff --git a/Jenkinsfile b/Jenkinsfile index 0a91e3b7..8cfa643e 100644 --- a/Jenkinsfile +++ b/Jenkinsfile @@ -1,11 +1,12 @@ pipeline { - agent { label 'ubuntu' } + agent { + label 'ubuntu' + } environment { PATH = "/home/jenkins/development/flutter/bin:${env.PATH}" } - stages { - stage('Cleanup') { + stage('Pre-build Cleanup') { steps { script { sh '''#!/bin/sh @@ -15,8 +16,7 @@ pipeline { } } } - - stage('Decrypt keys') { + stage('Decrypt main keys') { when { branch 'main' } @@ -33,16 +33,13 @@ pipeline { ) ] ) - env.PASSWORD = userInput.toString() } - sh '''#!/bin/sh echo \$PASSWORD | gocryptfs $HOME/android_secrets secrets/ -nonempty ''' } } - stage('Clone submodules') { steps { script { @@ -50,23 +47,51 @@ pipeline { } } } - stage('Build firka') { steps { sh 'bash -c "./tools/linux/build_apk.sh ' + env.BRANCH_NAME + '"' } } - + stage('Rename Release APKs') { + when { + branch 'main' + } + steps { + script { + sh '''#!/bin/sh + set -e + + APK_DIR="firka/build/app/outputs/flutter-apk" + + # Find all release APKs and rename them + for apk_file in $APK_DIR/app-*-release.apk; do + if [ -f "$apk_file" ]; then + # Extract ABI from filename (e.g., app-arm64-v8a-release.apk -> arm64-v8a) + basename_file=$(basename "$apk_file") + abi=$(echo "$basename_file" | sed 's/app-//; s/-release.apk//') + + # Create new filename + new_name="app.firka.naplo_${abi}.apk" + new_path="$APK_DIR/$new_name" + + echo "Renaming $apk_file to $new_path" + mv "$apk_file" "$new_path" + fi + done + + ls -la $APK_DIR/app.firka.naplo_*.apk || echo "APK files not found" + ''' + } + } + } stage('Publish release artifacts') { when { branch 'main' } steps { - archiveArtifacts artifacts: 'firka/build/app/outputs/flutter-apk/app-*-release.apk', fingerprint: true - sh 'rm firka/build/app/outputs/flutter-apk/app-*-release.apk' + archiveArtifacts artifacts: 'firka/build/app/outputs/flutter-apk/app.firka.naplo_*.apk', fingerprint: true } } - stage('Publish debug artifacts') { when { not { @@ -75,8 +100,72 @@ pipeline { } steps { archiveArtifacts artifacts: 'firka/build/app/outputs/flutter-apk/app-debug.apk', fingerprint: true - sh 'rm firka/build/app/outputs/flutter-apk/app-debug.apk' + } + } + stage('Upload to F-Droid Debug') { + when { + branch 'dev' + } + steps { + script { + withCredentials([usernamePassword(credentialsId: 'fdroid-ssh', usernameVariable: 'SSH_USER', passwordVariable: 'SSHPASS')]) { + sh ''' + SOURCE_FILE="firka/build/app/outputs/flutter-apk/app-debug.apk" + REMOTE_PATH="/home/fdroid/firka-fdroid/repo/app.firka.naplo.debug.apk" + export SSHPASS + + sshpass -e scp -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null \ + "$SOURCE_FILE" "$SSH_USER@10.0.0.21:$REMOTE_PATH" + sshpass -e ssh -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null \ + "$SSH_USER@10.0.0.21" \ + "cd /home/fdroid/firka-fdroid && /run/current-system/sw/bin/fdroid update" + ''' + } + } + } + } + stage('Upload to F-Droid Release') { + when { + branch 'main' + } + steps { + script { + withCredentials([usernamePassword(credentialsId: 'fdroid-ssh', usernameVariable: 'SSH_USER', passwordVariable: 'SSHPASS')]) { + sh ''' + # Use the renamed APK files + REMOTE_PATH="/home/fdroid/firka-fdroid/repo/" + export SSHPASS + + # Loop over each APK file and upload it one by one + for SOURCE_FILE in firka/build/app/outputs/flutter-apk/app.firka.naplo_*.apk; do + if [ -f "$SOURCE_FILE" ]; then + echo "Uploading $SOURCE_FILE to $REMOTE_PATH" + sshpass -e scp -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null \ + "$SOURCE_FILE" "$SSH_USER@10.0.0.21:$REMOTE_PATH" + else + echo "No APK files found to upload." + fi + done + + # Update F-Droid repository + sshpass -e ssh -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null \ + "$SSH_USER@10.0.0.21" \ + "cd /home/fdroid/firka-fdroid && /run/current-system/sw/bin/fdroid update" + ''' + } + } + } + } + stage('Post Cleanup') { + steps { + script { + sh ''' + rm firka/build/app/outputs/flutter-apk/app.firka.naplo_*.apk || true + rm firka/build/app/outputs/flutter-apk/app-debug.apk || true + git checkout -- firka/pubspec.yaml + ''' + } } } } -} +} \ No newline at end of file diff --git a/tools/linux/build_apk.sh b/tools/linux/build_apk.sh index b037668e..4cec07fd 100755 --- a/tools/linux/build_apk.sh +++ b/tools/linux/build_apk.sh @@ -1,37 +1,60 @@ #!/bin/bash - cd firka +set -e +SHORT_SHA=$(git rev-parse --short HEAD) +COMMIT_COUNT=$(git rev-list --count HEAD) +BASE_BUILD_NUMBER=$((1000 + COMMIT_COUNT)) +ORIGINAL_VERSION=$(grep "^version:" pubspec.yaml | sed 's/version: *//' | sed 's/+.*//') + +update_version_for_abi() { + local build_offset=$1 + local new_build_number=$((BASE_BUILD_NUMBER + build_offset)) + local new_version="${ORIGINAL_VERSION}-${SHORT_SHA}+${new_build_number}" + sed -i "s/^version: .*/version: ${new_version}/" pubspec.yaml + echo "Updated version to: ${new_version}" +} + flutter gen-l10n --template-arb-file app_hu.arb if [ "$1" = "main" ]; then if [ -f "$HOME/.flutter_path" ]; then sdk_path="$(cat $HOME/.flutter_path)" echo "Using flutter sdk from: $sdk_path" - mkdir -p build/app/tmp + + update_version_for_abi 1000 flutter build apk --release --tree-shake-icons \ --local-engine-src-path "$sdk_path/engine/src" \ --local-engine=android_release --local-engine-host=host_release \ --split-per-abi \ --target-platform android-arm mv build/app/outputs/flutter-apk/app-armeabi-v7a-release.apk build/app/tmp/ + + update_version_for_abi 2000 flutter build apk --release --tree-shake-icons \ --local-engine-src-path "$sdk_path/engine/src" \ --local-engine=android_release_arm64 --local-engine-host=host_release \ --split-per-abi \ --target-platform android-arm64 mv build/app/outputs/flutter-apk/app-arm64-v8a-release.apk build/app/tmp/ + + update_version_for_abi 3000 flutter build apk --release --tree-shake-icons \ --local-engine-src-path "$sdk_path/engine/src" \ --local-engine=android_release_x64 --local-engine-host=host_release \ --split-per-abi \ --target-platform android-x64 - mv build/app/tmp/*.apk build/app/outputs/flutter-apk + + mv build/app/tmp/*.apk build/app/outputs/flutter-apk/ + mv build/app/outputs/flutter-apk/app-x86_64-release.apk build/app/outputs/flutter-apk/ 2>/dev/null || true + + else echo "$HOME/.flutter_path not found!" exit 1 fi else + update_version_for_abi 0 TRANSFORM_APK=true flutter build apk --debug --target-platform android-arm,android-arm64,android-x64 -fi +fi \ No newline at end of file