summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--.gitlab-ci.yml44
-rw-r--r--docker/android-fastlane/Dockerfile89
-rwxr-xr-xscripts/fastlane.sh3
-rwxr-xr-xscripts/installFastlane.sh39
-rwxr-xr-xscripts/prepareForScreenshots.sh29
-rwxr-xr-xscripts/startEmulators.sh25
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"
-
-