Skip to content

Commit

Permalink
Fix CI for Flutter 3.16.9 and update docker builds (#1137)
Browse files Browse the repository at this point in the history
* updates for docker build and flutter 3.19

* reduce flutter from 3.19 to 3.16.9

* update changelog

* docker script cleanup

* add modified folders to volume mount

* specify flutter version in CI

* remove env requirements
  • Loading branch information
Fmstrat authored Feb 28, 2024
1 parent c1062b1 commit b0c4f36
Show file tree
Hide file tree
Showing 6 changed files with 80 additions and 35 deletions.
6 changes: 5 additions & 1 deletion .dockerignore
Original file line number Diff line number Diff line change
@@ -1,3 +1,7 @@
scripts/docker*
docker
build
build
.dart_tool
key.properties
keystore.jks
android
4 changes: 4 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -43,3 +43,7 @@ app.*.map.json
/android/app/debug
/android/app/profile
/android/app/release

# Docker ignores
key.properties
keystore.jks
1 change: 1 addition & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@
## Changed
- Small UI adjustments for account switcher
- Dynamic Maximum Zoom Level Based on Image Resolution - contribution from @Niranjan-Dorage
- Update docker build scripts for API 34 and Flutter 3.16.9 - contribution from @Fmstrat

### Fixed
- Fixed issue where Thunder was being locked to 60Hz on 120Hz displays on Android
Expand Down
54 changes: 26 additions & 28 deletions docker/Dockerfile
Original file line number Diff line number Diff line change
@@ -1,6 +1,3 @@
# Builder is not optimized for layer size on purpose
# Allows for modification between layers

FROM ubuntu:22.04

ENV DEBIAN_FRONTEND noninteractive
Expand All @@ -26,15 +23,9 @@ RUN \
libglu1-mesa-dev \
git-lfs \
openssl \
wget &&\
# Flutter
wget --quiet https://storage.googleapis.com/flutter_infra_release/releases/beta/linux/flutter_linux_3.12.0-beta.tar.xz -O /tmp/flutter.tar.xz &&\
mkdir -p /opt &&\
cd /opt &&\
tar xf /tmp/flutter.tar.xz &&\
rm /tmp/flutter.tar.xz &&\
git config --global --add safe.directory /opt/flutter &&\
dart pub global activate cider &&\
wget

RUN \
# Android SDK
apt-get install -y --no-install-recommends \
git \
Expand All @@ -51,29 +42,36 @@ RUN \
apt-get install -y --no-install-recommends openjdk-18-jdk openjdk-18-jre &&\
yes | sdkmanager --licenses &&\
sdkmanager --update &&\
sdkmanager --install "platforms;android-28" &&\
sdkmanager --install "platforms;android-29" &&\
sdkmanager --install "platforms;android-30" &&\
sdkmanager --install "platforms;android-31" &&\
sdkmanager --install "platforms;android-32" &&\
sdkmanager --install "platforms;android-33" &&\
sdkmanager --install "platforms;android-34" &&\
sdkmanager --install "build-tools;30.0.3" &&\
sdkmanager --install "ndk;23.1.7779620" &&\
sdkmanager --install "cmake;3.22.1" &&\
sdkmanager --install platform-tools &&\
sdkmanager --install emulator &&\
sdkmanager --install tools &&\
# Cleanup
apt-get autoremove && apt-get autoclean
sdkmanager --install tools

WORKDIR /build

# Copy in prereq files
COPY pubspec.* /build/

# Get deps
RUN flutter pub get

# Add all files
COPY . /build
ARG DEV_UID=0
RUN \
# Flutter
wget --quiet https://storage.googleapis.com/flutter_infra_release/releases/stable/linux/flutter_linux_3.16.9-stable.tar.xz -O /tmp/flutter.tar.xz &&\
mkdir -p /opt &&\
cd /opt &&\
tar xf /tmp/flutter.tar.xz &&\
rm /tmp/flutter.tar.xz &&\
git config --global --add safe.directory /opt/flutter &&\
dart pub global activate cider &&\
chown -R ${DEV_UID} /opt/flutter

# Set up env
RUN echo "# comment" > /build/.env
# Optional add eo language pack
# RUN apt install -y locales language-selector-common
# RUN apt install -y $(check-language-support -l eo)

# Build
RUN dart scripts/build-android.dart
# Optional cleanup if above is combined for push
# RUN apt-get autoremove && apt-get autoclean
2 changes: 1 addition & 1 deletion scripts/build-android.dart
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,7 @@ void buildRelease() {

// Build for Android
print('\nStarting Android build...');
ProcessResult androidResult = Process.runSync('flutter', ['build', 'apk', '--release']);
ProcessResult androidResult = Process.runSync('flutter', ['build', 'apk', '--release', '--no-tree-shake-icons']);
stdout.write(androidResult.stdout);
stderr.write(androidResult.stderr);

Expand Down
48 changes: 43 additions & 5 deletions scripts/docker-build-android.sh
Original file line number Diff line number Diff line change
Expand Up @@ -3,12 +3,50 @@
SCRIPT_DIR=$( cd -- "$( dirname -- "${BASH_SOURCE[0]}" )" &> /dev/null && pwd )
D=$(date +'%Y%m%d.%H%M%S%3N')

set -e

cd "${SCRIPT_DIR}/.."
# Build the apk inside the image
# Create the builder image
docker build \
-t thunder-builder \
-f ./docker/Dockerfile \
. &&\
# Copy the APK out of the image
mkdir -p ./build/app/outputs/apk/release &&\
docker cp $(docker create --name tb thunder-builder):/build/build/app/outputs/apk/release/app-release.apk ./build/app/outputs/apk/release/app-release.${D}.apk && docker rm tb >/dev/null
--build-arg="DEV_UID=$(id -u)" \
.

# Check docker build folder
mkdir -p ./build/docker/flutter/gradle/build
mkdir -p ./build/docker/flutter/gradle/.gradle

# Create keystore
if [ ! -f ./android/app/keystore.jks ]; then
docker run --rm -ti --user "$(id -u)" -e "HOME=/home/builder" --name thunder-builder -v "${PWD}:${PWD}" -v "${PWD}/build/docker:/home/builder" -v "${PWD}/build/docker/flutter/gradle/build:/opt/flutter/packages/flutter_tools/gradle/build" -v "${PWD}/build/docker/flutter/gradle/.gradle:/opt/flutter/packages/flutter_tools/gradle/.gradle" -w "${PWD}" thunder-builder keytool -genkey -v -keystore ./android/app/keystore.jks -keyalg RSA -keysize 2048 -validity 10000 -alias thunderdev -keypass password -storepass password -srcstorepass password -noprompt -dname "cn=First Last, ou=Java, o=Oracle, c=US"
fi

# Make key properties
if [ ! -f ./android/key.properties ]; then
echo '
storePassword=password
keyPassword=password
keyAlias=thunderdev
storeFile=keystore.jks
' > ./android/key.properties
fi


# Build the APK
if [ ! -d ./build/docker/.pub-cache ]; then
docker run --rm -ti --user "$(id -u)" -e "HOME=/home/builder" --name thunder-builder -v "${PWD}:${PWD}" -v "${PWD}/build/docker:/home/builder" -v "${PWD}/build/docker/flutter/gradle/build:/opt/flutter/packages/flutter_tools/gradle/build" -v "${PWD}/build/docker/flutter/gradle/.gradle:/opt/flutter/packages/flutter_tools/gradle/.gradle" -w "${PWD}" thunder-builder bash -ic 'flutter pub get'
docker run --rm -ti --user "$(id -u)" -e "HOME=/home/builder" --name thunder-builder -v "${PWD}:${PWD}" -v "${PWD}/build/docker:/home/builder" -v "${PWD}/build/docker/flutter/gradle/build:/opt/flutter/packages/flutter_tools/gradle/build" -v "${PWD}/build/docker/flutter/gradle/.gradle:/opt/flutter/packages/flutter_tools/gradle/.gradle" -w "${PWD}" thunder-builder bash -ic 'flutter --disable-analytics'
docker run --rm -ti --user "$(id -u)" -e "HOME=/home/builder" --name thunder-builder -v "${PWD}:${PWD}" -v "${PWD}/build/docker:/home/builder" -v "${PWD}/build/docker/flutter/gradle/build:/opt/flutter/packages/flutter_tools/gradle/build" -v "${PWD}/build/docker/flutter/gradle/.gradle:/opt/flutter/packages/flutter_tools/gradle/.gradle" -w "${PWD}" thunder-builder bash -ic 'dart --disable-analytics'
fi

# Make path in container
if [ ! -f ./build/docker/.bashrc ]; then
echo '
export PATH="${PATH}:${HOME}/.pub-cache/bin"
export GRADLE_USER_HOME=${HOME}
' > ./build/docker/.bashrc
fi

# Build the APK
docker run --privileged --rm -ti --user "$(id -u)" -e "HOME=/home/builder" --name thunder-builder -v "${PWD}:${PWD}" -v "${PWD}/build/docker:/home/builder" -v "${PWD}/build/docker/flutter/gradle/build:/opt/flutter/packages/flutter_tools/gradle/build" -v "${PWD}/build/docker/flutter/gradle/.gradle:/opt/flutter/packages/flutter_tools/gradle/.gradle" -w "${PWD}" thunder-builder bash -ic 'dart scripts/build-android.dart'

0 comments on commit b0c4f36

Please sign in to comment.