diff --git a/.github/workflows/deploy.yml b/.github/workflows/deploy.yml index a218a1ad..99db8d8f 100644 --- a/.github/workflows/deploy.yml +++ b/.github/workflows/deploy.yml @@ -49,13 +49,13 @@ jobs: bash deploy/build_linux.sh - name: 'Upload installer artifact' - uses: actions/upload-artifact@v3 + uses: actions/upload-artifact@v4 with: name: AmneziaVPN_Linux_installer path: deploy/AmneziaVPN_Linux_Installer retention-days: 7 - name: 'Upload unpacked artifact' - uses: actions/upload-artifact@v3 + uses: actions/upload-artifact@v4 with: name: AmneziaVPN_Linux_unpacked path: deploy/AppDir @@ -110,13 +110,13 @@ jobs: call deploy\\build_windows.bat - name: 'Upload installer artifact' - uses: actions/upload-artifact@v3 + uses: actions/upload-artifact@v4 with: name: AmneziaVPN_Windows_installer path: AmneziaVPN_x${{ env.BUILD_ARCH }}.exe retention-days: 7 - name: 'Upload unpacked artifact' - uses: actions/upload-artifact@v3 + uses: actions/upload-artifact@v4 with: name: AmneziaVPN_Windows_unpacked path: deploy\\build_${{ env.BUILD_ARCH }}\\client\\Release @@ -200,7 +200,7 @@ jobs: IOS_NE_PROVISIONING_PROFILE: ${{ secrets.IOS_NE_PROVISIONING_PROFILE }} # - name: 'Upload appstore .ipa and dSYMs to artifacts' -# uses: actions/upload-artifact@v3 +# uses: actions/upload-artifact@v4 # with: # name: app-store ipa & dsyms # path: | @@ -255,13 +255,13 @@ jobs: bash deploy/build_macos.sh - name: 'Upload installer artifact' - uses: actions/upload-artifact@v3 + uses: actions/upload-artifact@v4 with: name: AmneziaVPN_MacOS_installer path: AmneziaVPN.dmg retention-days: 7 - name: 'Upload unpacked artifact' - uses: actions/upload-artifact@v3 + uses: actions/upload-artifact@v4 with: name: AmneziaVPN_MacOS_unpacked path: deploy/build/client/AmneziaVPN.app @@ -277,6 +277,7 @@ jobs: ANDROID_BUILD_PLATFORM: android-34 QT_VERSION: 6.6.1 QT_MODULES: 'qtremoteobjects qt5compat qtimageformats qtshadertools' + BUILD_AAB: ${{ github.ref == 'refs/heads/master' || startsWith(github.ref, 'refs/tags/') }} steps: - name: 'Install desktop Qt' @@ -375,32 +376,45 @@ jobs: ANDROID_KEYSTORE_KEY_ALIAS: ${{ secrets.ANDROID_RELEASE_KEYSTORE_KEY_ALIAS }} ANDROID_KEYSTORE_KEY_PASS: ${{ secrets.ANDROID_RELEASE_KEYSTORE_KEY_PASS }} shell: bash - run: ./deploy/build_android.sh --apk all --build-platform ${{ env.ANDROID_BUILD_PLATFORM }} + run: ./deploy/build_android.sh ${{ env.BUILD_AAB == 'true' && '--aab' || '' }} --apk all --build-platform ${{ env.ANDROID_BUILD_PLATFORM }} - name: 'Upload x86_64 apk' - uses: actions/upload-artifact@v3 + uses: actions/upload-artifact@v4 with: name: AmneziaVPN-android-x86_64 path: deploy/build/AmneziaVPN-x86_64-release.apk + compression-level: 0 retention-days: 7 - name: 'Upload x86 apk' - uses: actions/upload-artifact@v3 + uses: actions/upload-artifact@v4 with: name: AmneziaVPN-android-x86 path: deploy/build/AmneziaVPN-x86-release.apk + compression-level: 0 retention-days: 7 - name: 'Upload arm64-v8a apk' - uses: actions/upload-artifact@v3 + uses: actions/upload-artifact@v4 with: name: AmneziaVPN-android-arm64-v8a path: deploy/build/AmneziaVPN-arm64-v8a-release.apk + compression-level: 0 retention-days: 7 - name: 'Upload armeabi-v7a apk' - uses: actions/upload-artifact@v3 + uses: actions/upload-artifact@v4 with: name: AmneziaVPN-android-armeabi-v7a path: deploy/build/AmneziaVPN-armeabi-v7a-release.apk + compression-level: 0 + retention-days: 7 + + - name: 'Upload aab' + if: ${{ env.BUILD_AAB == 'true' }} + uses: actions/upload-artifact@v4 + with: + name: AmneziaVPN-android + path: deploy/build/AmneziaVPN-release.aab + compression-level: 0 retention-days: 7 diff --git a/deploy/build_android.sh b/deploy/build_android.sh index 0c5a80c8..151cabc2 100755 --- a/deploy/build_android.sh +++ b/deploy/build_android.sh @@ -7,15 +7,18 @@ usage() { cat < -Build AmneziaVPN android client. By default, a signed Android App Bundle (AAB) is built. +Build AmneziaVPN android client. -Options: - -d, --debug Build debug version +Artifact types: + -u, --aab Build Android App Bundle (AAB) -a, --apk ( | all) Build APKs for the specified ABIs or for all available ABIs Available ABIs: 'x86', 'x86_64', 'armeabi-v7a', 'arm64-v8a' - list of ABIs delimited by ';' + +Options: + -d, --debug Build debug version -b, --build-platform The SDK platform used for building the Java code of the application By default, the latest available platform is used -m, --move Move the build result to the root of the build directory @@ -25,14 +28,14 @@ EOT } BUILD_TYPE="release" -AAB=1 -opts=$(getopt -l debug,apk:,build-platform:,move,help -o "da:b:mh" -- "$@") +opts=$(getopt -l debug,aab,apk:,build-platform:,move,help -o "dua:b:mh" -- "$@") eval set -- "$opts" while true; do case "$1" in -d | --debug) BUILD_TYPE="debug"; shift;; - -a | --apk) ABIS=$2; unset AAB; shift 2;; + -u | --aab) AAB=1; shift;; + -a | --apk) ABIS=$2; shift 2;; -b | --build-platform) ANDROID_BUILD_PLATFORM=$2; shift 2;; -m | --move) MOVE_RESULT=1; shift;; -h | --help) usage; exit 0;; @@ -49,6 +52,11 @@ if [[ -v ABIS && \ exit 1 fi +# At least one artifact type must be specified +if [[ ! (-v AAB || -v ABIS) ]]; then + usage; exit 0 +fi + echo "Build script started..." PROJECT_DIR=$(pwd) @@ -137,7 +145,8 @@ gradle_opts=() if [ -v AAB ]; then gradle_opts+=(bundle"${BUILD_TYPE^}") -else +fi +if [ -v ABIS ]; then gradle_opts+=(assemble"${BUILD_TYPE^}") fi @@ -151,7 +160,9 @@ if [[ -v CI || -v MOVE_RESULT ]]; then if [ -v AAB ]; then mv -u $OUT_APP_DIR/android-build/build/outputs/bundle/$BUILD_TYPE/AmneziaVPN-$BUILD_TYPE.aab \ $PROJECT_DIR/deploy/build/ - else + fi + + if [ -v ABIS ]; then if [ "$ABIS" = "all" ]; then ABIS="x86;x86_64;armeabi-v7a;arm64-v8a" fi