diff options
-rw-r--r-- | .gitlab-ci.yml | 44 | ||||
-rw-r--r-- | docker/android-fastlane/Dockerfile | 89 | ||||
-rwxr-xr-x | scripts/fastlane.sh | 3 | ||||
-rwxr-xr-x | scripts/installFastlane.sh | 39 | ||||
-rwxr-xr-x | scripts/prepareForScreenshots.sh | 29 | ||||
-rwxr-xr-x | scripts/startEmulators.sh | 25 |
6 files changed, 222 insertions, 7 deletions
diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index 286e6d45..7c9e8a54 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -14,6 +14,7 @@ variables: image: 0xacab.org:4567/leap/docker/debian:bullseye_amd64 tags: - docker-in-docker + - runner02-sea services: - docker:dind @@ -51,6 +52,15 @@ docker_image:emulator: allow_failure: true <<: *build_docker_image +docker_image:fastlane: + stage: docker_image_other + variables: + DOCKER_IMAGE: android-fastlane +# DEFAULT_IMAGE: "registry.0xacab.org/leap/bitmask_android/android-emulator" + when: manual + <<: *build_docker_image + allow_failure: true + unit_test: image: "0xacab.org:4567/leap/bitmask_android/android-ndk:latest" stage: test @@ -63,6 +73,38 @@ unit_test: when: on_failure expire_in: 3 days +screenshot: + image: "0xacab.org:4567/leap/bitmask_android/android-fastlane:latest" + stage: test + when: always +# needs: ["docker_image:fastlane"] + tags: + - birch + variables: + LC_ALL: "en_US.UTF-8" + LANG: "en_US.UTF-8" + ANDROID_EMULATOR_USE_SYSTEM_LIBS: 1 + DEBIAN_FRONTEN: "noninteractive" +# try to re-use the build artifcats from before, lib building is slow +# dependencies: +# - build + script: + - ./scripts/prepareForScreenshots.sh + - ./scripts/installFastlane.sh + - ./gradlew testCustomProductionFatReleaseUnitTest testNormalProductionFatReleaseUnitTest + - ./scripts/startEmulators.sh + - ./scripts/fastlane.sh + artifacts: + paths: + - app + - app/build/screenshots + - ./source/custom/fastlane/metadata/ + - build/ + - src/normal/ + when: always + expire_in: 3 days + allow_failure: true + #ui_test: # image: "0xacab.org:4567/leap/bitmask_android/android-emulator:latest" # stage: test @@ -106,7 +148,7 @@ build: script: - ./scripts/cleanProject.sh - ./scripts/build_deps.sh >> build_deps.log 2>&1 - - ./gradlew clean assembleNormalProductionFatDebug --stacktrace >> build.log 2>&1 + - ./gradlew clean assembleNormalProductionFatDebug -debug >> build.log 2>&1 artifacts: paths: - app/build/outputs/ diff --git a/docker/android-fastlane/Dockerfile b/docker/android-fastlane/Dockerfile new file mode 100644 index 00000000..07240c21 --- /dev/null +++ b/docker/android-fastlane/Dockerfile @@ -0,0 +1,89 @@ +FROM registry.0xacab.org/leap/bitmask_android/android-sdk:latest + +MAINTAINER LEAP Encryption Access Project <info@leap.se> +LABEL Description="Android emulator image based on android-sdk" Vendor="LEAP" Version="2" + +# Make sure debconf doesn't complain about lack of interactivity +ENV DEBIAN_FRONTEND noninteractive +# ensure GL compatibility +ENV ANDROID_EMULATOR_USE_SYSTEM_LIBS=1 + +# ------------------------------------------------------ +# --- System Dependencies + +# Need docker package in order to do Docker-in-Docker (DIND) +RUN lsb_release -a + +RUN apt-get update -qq && \ + apt-get -y dist-upgrade && \ + apt-get -y install gnupg apt-transport-https + +# Docker apt details should be inherited from android_sdk +#RUN curl -fsSL https://download.docker.com/linux/debian/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg && \ +# echo \ +# "deb [arch=amd64 signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/debian \ +# $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null + +# JNI build dependencies w/ 32-bit compatible C libs +# fastlane dependencies + +RUN apt-get update -qq && \ + apt-get install -y docker-ce docker-ce-cli make gcc swig file lib32stdc++6 lib32z1 \ + autoconf autogen automake autopoint autotools-dev gettext-base libtool patch pkg-config po4a \ + curl git openjdk-11-jdk openjdk-11-jre-headless imagemagick libpulse0 po4a \ + make build-essential ruby-dev imagemagick docker-ce-cli mesa-utils xvfb \ + libstdc++6 libncurses5 libsdl1.2debian imagemagick libpulse-java libpulse0 libxkbcommon-x11-0 && \ + apt-get clean && \ + apt-get autoclean && \ + rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/* + +# ------------------------------------------------------ +# --- Install Android Emulator + +RUN echo "accept all licenses" +# Accept all licenses +RUN echo y | sdkmanager --licenses +RUN sdkmanager --list + +# Install Android SDK emulator package +RUN echo y | sdkmanager "emulator" + +# Install System Images for emulators +# seems like every version has its own quirks +RUN echo y | sdkmanager "system-images;android-31;google_apis;x86_64" +#RUN echo y | sdkmanager "system-images;android-27;google_apis;x86" +#RUN echo y | sdkmanager "system-images;android-25;google_apis;x86_64" +#RUN echo y | sdkmanager "system-images;android-23;google_apis;x86_64" + +# fastlane wants 2 emulators. Starting happens in the scripts +RUN echo no | avdmanager create avd --force --name testApi31 --abi google_apis/x86_64 --package 'system-images;android-31;google_apis;x86_64' +# TODO: fastlane has been troublesome for newer versions, need to dive deep to update +#RUN echo no | avdmanager create avd --force --name testApi27 --abi google_apis/x86_64 --package 'system-images;android-27;google_apis;x86_64' +#RUN echo no | avdmanager create avd --force --name testApi27-duet --abi google_apis/x86_64 --package 'system-images;android-27;google_apis;x86_64' + +# Install Android cmake +RUN sdkmanager "cmake;3.10.2.4988404" + +# Fastlane: +RUN gem install bundler fastlane + + +############################################### + +# this stuff is all just notes... really, don't call it a mess +# ------------------------------------------------------ +# --- Install Android NDK (for running C code) + +#ENV ANDROID_NDK_VERSION "r21e" +#ENV ANDROID_NDK_HOME ${ANDROID_HOME}/android-ndk-${ANDROID_NDK_VERSION} +#ENV ANDROID_NDK_URL http://dl.google.com/android/repository/android-ndk-${ANDROID_NDK_VERSION}-linux-x86_64.zip +#ENV ANDROID_SDK_ROOT ${ANDROID_HOME}/latest/cmdline-tools +# +#RUN curl -L $ANDROID_NDK_URL -o ndk.zip \ +# && unzip ndk.zip -d $ANDROID_HOME/ndk \ +# && rm -rf ndk.zip +#RUN cat $ANDROID_HOME/ndk/android-ndk-${ANDROID_NDK_VERSION}/source.properties | \ +# grep Pkg.Revision | cut -d "=" -f 2 | \ +# xargs -I '{}' mv $ANDROID_HOME/ndk/android-ndk-${ANDROID_NDK_VERSION}/ $ANDROID_HOME/ndk/'{}' +#ENV PATH ${PATH}:${ANDROID_NDK_HOME} + diff --git a/scripts/fastlane.sh b/scripts/fastlane.sh index f039cd24..1ce06ab8 100755 --- a/scripts/fastlane.sh +++ b/scripts/fastlane.sh @@ -26,9 +26,8 @@ BASE_DIR="$SCRIPT_DIR/.." cd $BASE_DIR if [[ -z $BUILD_CUSTOM ]]; then - fastlane android bitmask_screenshots + fastlane --verbose android bitmask_screenshots else fastlane android custom_build_screenshots --env custom fi; cd - - diff --git a/scripts/installFastlane.sh b/scripts/installFastlane.sh new file mode 100755 index 00000000..9abc6211 --- /dev/null +++ b/scripts/installFastlane.sh @@ -0,0 +1,39 @@ +#!/bin/bash + +## --- System Dependencies for fastlane +apt-get update -qq && \ +apt-get -y dist-upgrade && \ +apt-get -y install make build-essential ruby ruby-dev imagemagick xvfb libxcb1 libname-dev + +gem install fastlane + +## ------------------------------------------------------ +## --- Android Emulator + +sdkmanager "platforms;android-30" +# +# Install Android SDK emulator package +echo y | sdkmanager "emulator" + +echo y | sdkmanager "system-images;android-31;google_apis;x86_64" +#echo y | sdkmanager "system-images;android-30;google_apis;x86_64" +#echo y | sdkmanager "system-images;android-28;google_apis;x86_64" +#echo y | sdkmanager "system-images;android-27;google_apis;x86" +#echo y | sdkmanager "system-images;android-25;google_apis;x86_64" + +echo no | avdmanager create avd --force --name testApi31 --abi google_apis/x86_64 --package 'system-images;android-31;google_apis;x86_64' +echo no | avdmanager create avd --force --name testApiduet --abi google_apis/x86_64 --package 'system-images;android-31;google_apis;x86_64' + +#echo no | avdmanager create avd --force --name testApi31 --abi google_apis/x86_64 --package 'system-images;android-30;google_apis;x86_64' +#echo no | avdmanager create avd --force --name testApiduet --abi google_apis/x86_64 --package 'system-images;android-30;google_apis;x86_64' + +#echo no | avdmanager create avd --force --name testApi28 --abi google_apis/x86_64 --package 'system-images;android-28;google_apis;x86_64' +#echo no | avdmanager create avd --force --name testApiduet --abi google_apis/x86_64 --package 'system-images;android-28;google_apis;x86_64' + +#echo no | avdmanager create avd --force --name testApi27 --abi google_apis/x86 --package 'system-images;android-27;google_apis;x86' +#echo no | avdmanager create avd --force --name testApiduet --abi google_apis/x86 --package 'system-images;android-27;google_apis;x86' + +#echo no | avdmanager create avd --force --name testApi25 --abi google_apis/x86_64 --package 'system-images;android-25;google_apis;x86_64' +#echo no | avdmanager create avd --force --name testApiduet --abi google_apis/x86_64 --package 'system-images;android-25;google_apis;x86_64' + +##bundle exec fastlane android bitmask_screenshots diff --git a/scripts/prepareForScreenshots.sh b/scripts/prepareForScreenshots.sh new file mode 100755 index 00000000..c2ae1bd5 --- /dev/null +++ b/scripts/prepareForScreenshots.sh @@ -0,0 +1,29 @@ +#!/bin/bash + +# Copyright (c) 2023 LEAP Encryption Access Project and contributors +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see <http://www.gnu.org/licenses/>. + +SCRIPT_DIR=$(dirname "$0") +BASE_DIR="$SCRIPT_DIR/.." + +rm -r $BASE_DIR/bitmaskcore/lib/* + +git checkout -- \* +git checkout -- \.\* +git submodule foreach --recursive git reset --hard HEAD +git submodule sync --recursive +git submodule update --init --recursive + +BUILD_TOR=false BUILD_OPENVPN_LIBS=false ./scripts/build_deps.sh diff --git a/scripts/startEmulators.sh b/scripts/startEmulators.sh index d1bc8292..1d73dee7 100755 --- a/scripts/startEmulators.sh +++ b/scripts/startEmulators.sh @@ -1,5 +1,13 @@ #!/bin/bash +PATH=$PATH:$ANDROID_HOME/cmdline-tools/latest/bin:$ANDROID_HOME/Sdk/tools:$ANDROID_HOME/emulator +apt-get update +apt-get install -y libpulse-java libpulse0 imagemagick libxkbcommon-x11-0 xvfb vulkan-tools +# there's a QT thing missing +emulator -accel-check +docker info +export DISPLAY=:99.0 + # init parameters for ((i=1;i<=$#;i++)); do @@ -28,6 +36,13 @@ err() { } sec=0 timeout=30 + +# make sure the emulator is there - and in the PATH +echo y | sdkmanager "emulator" +avdmanager list avd +emulator -version +find /opt -iname emulator -type f + waitForAdbDevices() { while true; do if [[ $sec -ge $timeout ]]; then @@ -37,7 +52,7 @@ waitForAdbDevices() { if [[ "$out" == "$N" ]]; then break fi - let "r = sec % 5" + let "r = sec % 50" if [[ $r -eq 0 ]]; then echo "Waiting for adb devices to start: $out / $N" fi @@ -47,12 +62,14 @@ waitForAdbDevices() { } #start first N avd images -avdmanager list avd | grep Name: | cut -d ':' -f2 | head -n $N | xargs -I{} -P$N -n1 emulator -no-snapshot -avd {} & +Xvfb :0 -screen 0 800x600x16 & +#avdmanager list avd | grep 'Name:' | cut -d ':' -f2 | head -n $N | xargs -I{} -P$N -n1 emulator -no-snapshot -avd {} & +avdmanager list avd | grep 'Name:' | cut -d ':' -f2 | head -n $N | xargs -I{} -P$N -n1 emulator -no-window -no-audio -no-snapshot -avd {} & +#avdmanager list avd | grep 'Name:' | cut -d ':' -f2 | head -n $N | xargs -I{} -P$N -n1 emulator -no-snapshot -no-window -avd {} & +# avdmanager list avd | grep 'Name:' | cut -d ':' -f2 | head -n $N | xargs -I{} -P$N -n1 emulator -no-snapshot -no-window -no-boot-anim -accel on -avd {} & waitForAdbDevices echo "adb found all emulators..." #wait for each emulator that booting completed adb devices | grep -v List | awk '$2{print $1}' | xargs -I{} .gitlab/wait-for-emulator.sh -s {} echo "all emulators successfully booted" - - |