diff --git a/Jenkinsfile b/Jenkinsfile index 57269aa..c5a6f91 100644 --- a/Jenkinsfile +++ b/Jenkinsfile @@ -63,11 +63,12 @@ lazyConfig( name: 'dummy-and', env: [ - RELEASE: true, - JAVA_HOME: '/usr/java/latest', - ANDROID_HOME: '/opt/android/sdk', - GRADLE_USER_HOME: '/opt/android/gradle', - ], + RELEASE: true, + JAVA_HOME: '/usr/java/latest', + ANDROID_HOME: '/opt/android/sdk', + GRADLE_USER_HOME: '/opt/android/gradle', + GRADLE_OPTS: '-XX:MaxMetaspaceSize=128m -Xmx1024m -Dfile.encoding=UTF-8 -Duser.country=US -Duser.language=en -Duser.variant -Dme.jenkins', + ], noIndex: '(.+_.+|production)', // Avoid automatic indexing for release and private branches ) @@ -76,7 +77,7 @@ name = 'validate' onlyif = (! deployBranches.contains(lazyConfig['branch']) ) tasks = [ - pre: { + pre: { def currentVersion = androidVersion() currentBuild.displayName = "#${env.BUILD_NUMBER} ${currentVersion.string}-${currentVersion.number}" // Try to see if we can still merge the deploy branches @@ -89,31 +90,31 @@ run: { fastLane('android', 'test', '', 'rh-ruby24') }, - args: "-v /opt/android:/opt/android" - + " -e JAVA_HOME=${env.JAVA_HOME}" - + " -e ANDROID_HOME=${env.ANDROID_HOME}" - + " -e GRADLE_USER_HOME=${env.GRADLE_USER_HOME}", - in: [ 'centos7' ], - on: 'android', + args: "-v /opt/android:/opt/android" + + " -e JAVA_HOME=${env.JAVA_HOME}" + + " -e ANDROID_HOME=${env.ANDROID_HOME}" + + " -e GRADLE_USER_HOME=${env.GRADLE_USER_HOME}", + in: [ 'centos7' ], + on: 'android', ] } lazyStage { name = 'package' tasks = [ - pre: { + pre: { def currentVersion = androidVersion() currentBuild.displayName = "#${env.BUILD_NUMBER} ${currentVersion.string}-${currentVersion.number}" }, run: { fastLane('android', 'build', '', 'rh-ruby24') }, - args: "-v /opt/android:/opt/android" - + " -v /opt/certificates:/opt/certificates" - + " -e JAVA_HOME=${env.JAVA_HOME}" - + " -e ANDROID_HOME=${env.ANDROID_HOME}" - + " -e GRADLE_USER_HOME=${env.GRADLE_USER_HOME}", - in: [ 'centos7' ], + args: "-v /opt/android:/opt/android" + + " -v /opt/certificates:/opt/certificates" + + " -e JAVA_HOME=${env.JAVA_HOME}" + + " -e ANDROID_HOME=${env.ANDROID_HOME}" + + " -e GRADLE_USER_HOME=${env.GRADLE_USER_HOME}", + in: [ 'centos7' ], on: 'android', post: { archiveArtifacts(artifacts: "${buildDir}/**", allowEmptyArchive: false) @@ -165,7 +166,7 @@ gitPush(remote, workingBranch) }) }, - in: [ 'centos7' ], + in: [ 'centos7' ], on: 'android', ] } @@ -184,11 +185,11 @@ fastLane('android', 'alpha', '', 'rh-ruby24') } }, - args: "-v /opt/android:/opt/android" - + " -e JAVA_HOME=${env.JAVA_HOME}" - + " -e ANDROID_HOME=${env.ANDROID_HOME}" - + " -e GRADLE_USER_HOME=${env.GRADLE_USER_HOME}", - in: [ 'centos7' ], + args: "-v /opt/android:/opt/android" + + " -e JAVA_HOME=${env.JAVA_HOME}" + + " -e ANDROID_HOME=${env.ANDROID_HOME}" + + " -e GRADLE_USER_HOME=${env.GRADLE_USER_HOME}", + in: [ 'centos7' ], on: 'android', ] } @@ -206,11 +207,11 @@ fastLane('android', 'beta', '', 'rh-ruby24') } }, - args: "-v /opt/android:/opt/android" - + " -e JAVA_HOME=${env.JAVA_HOME}" - + " -e ANDROID_HOME=${env.ANDROID_HOME}" - + " -e GRADLE_USER_HOME=${env.GRADLE_USER_HOME}", - in: [ 'centos7' ], + args: "-v /opt/android:/opt/android" + + " -e JAVA_HOME=${env.JAVA_HOME}" + + " -e ANDROID_HOME=${env.ANDROID_HOME}" + + " -e GRADLE_USER_HOME=${env.GRADLE_USER_HOME}", + in: [ 'centos7' ], on: 'android', ] } @@ -228,11 +229,11 @@ fastLane('android', 'beta_crash', "fl_branch:\"${lazyConfig['branch']}\"", 'rh-ruby24') } }, - args: "-v /opt/android:/opt/android" - + " -e JAVA_HOME=${env.JAVA_HOME}" - + " -e ANDROID_HOME=${env.ANDROID_HOME}" - + " -e GRADLE_USER_HOME=${env.GRADLE_USER_HOME}", - in: [ 'centos7' ], + args: "-v /opt/android:/opt/android" + + " -e JAVA_HOME=${env.JAVA_HOME}" + + " -e ANDROID_HOME=${env.ANDROID_HOME}" + + " -e GRADLE_USER_HOME=${env.GRADLE_USER_HOME}", + in: [ 'centos7' ], on: 'android', ] } @@ -250,11 +251,11 @@ fastLane('android', 'production', '', 'rh-ruby24') } }, - args: "-v /opt/android:/opt/android" - + " -e JAVA_HOME=${env.JAVA_HOME}" - + " -e ANDROID_HOME=${env.ANDROID_HOME}" - + " -e GRADLE_USER_HOME=${env.GRADLE_USER_HOME}", - in: [ 'centos7' ], + args: "-v /opt/android:/opt/android" + + " -e JAVA_HOME=${env.JAVA_HOME}" + + " -e ANDROID_HOME=${env.ANDROID_HOME}" + + " -e GRADLE_USER_HOME=${env.GRADLE_USER_HOME}", + in: [ 'centos7' ], on: 'android', ] } diff --git a/README.md b/README.md new file mode 100644 index 0000000..a6c41c6 --- /dev/null +++ b/README.md @@ -0,0 +1,35 @@ +# Dummy Android + +## Requirements + +- Android SDK +- Docker (18.09.1+) +- Docker Composer (1.21.0+) + +## Configuration + +By default, Android SDK is expected under `~/android/sdk`. +It is possible to adapt this path in `docker-compose.yml`. +But it may also be specified in your `local.properties`! + +## Usage + +The following command should build (if required) and start a shell session inside the container: + +``` +docker-compose --compatibility run --rm default +``` + +From there, Gradle and Fastlane should work as expected: + +``` +./gradlew tasks +fastlane lanes +``` + +Most importantly, Fastlane or the whole bundle can be updated: + +``` +bundle update fastlane +bundle update +``` diff --git a/build.gradle b/build.gradle index f184424..3101fbc 100644 --- a/build.gradle +++ b/build.gradle @@ -5,7 +5,7 @@ ext { // Sdk and tools compileSdkVersion = 28 - minSdkVersion = 14 + minSdkVersion = 16 targetSdkVersion = 28 // App dependencies diff --git a/docker-compose.yml b/docker-compose.yml new file mode 100644 index 0000000..aa08d07 --- /dev/null +++ b/docker-compose.yml @@ -0,0 +1,30 @@ +version: '3' +services: + default: + build: + context: lazyDir + dockerfile: centos7.Dockerfile + args: + uid: "${_UID:-1000}" + gid: "${_GID:-1000}" + volumes: + - .:/home/android/workspace + - ~/android/sdk:/opt/android/sdk + - ~/.gradle:/home/android/.gradle + working_dir: /home/android/workspace + stdin_open: true + tty: true + hostname: build-android.local + container_name: build-android.local + command: bash + networks: + - bridge + deploy: + resources: + limits: + cpus: '1.5' + memory: 1280M + +networks: + bridge: + external: true diff --git a/lazyDir/centos7.Dockerfile b/lazyDir/centos7.Dockerfile index 4292876..7052f59 100644 --- a/lazyDir/centos7.Dockerfile +++ b/lazyDir/centos7.Dockerfile @@ -67,13 +67,27 @@ && yum -q clean packages # Install extra java deps +ARG jdk=1.8.0 RUN yum -q clean expire-cache \ && yum -y install tzdata-java \ - java-11-openjdk-devel \ + java-${jdk}-openjdk-devel \ && yum -q clean packages # Create a symbolic link to latest JVM - for legacy scripts -RUN mkdir /usr/java && ln -s /usr/lib/jvm/java-11-openjdk /usr/java/latest +RUN mkdir /usr/java && ln -s /usr/lib/jvm/java-${jdk}-openjdk /usr/java/latest + +# Enable Ruby 2.4 for any later bash session +RUN echo "#!/bin/bash" > "/usr/local/bin/withruby" \ + && echo "export PATH=\${PATH}:\${HOME}/bin" >> "/usr/local/bin/withruby" \ + && echo "source scl_source enable rh-ruby24" >> "/usr/local/bin/withruby" \ + && echo 'exec "$@"' >> "/usr/local/bin/withruby" \ + && chmod 0755 "/usr/local/bin/withruby" + +ENTRYPOINT [ "/usr/local/bin/withruby" ] + +# Configure desired timezone +ENV TZ=Europe/Amsterdam +RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone # Parameters for default user:group ARG uid=1000 @@ -84,25 +98,20 @@ # Add user to build RUN groupadd -g "${gid}" "${group}" && useradd -ms /bin/bash -g "${group}" -u "${uid}" "${user}" -# Copy and install requirements +# Copy requirements in non-root user home directory COPY "Gemfile" "/home/${user}/Gemfile" COPY "Gemfile.lock" "/home/${user}/Gemfile.lock" RUN chown "${user}:${group}" "/home/${user}/Gemfile"* -RUN su - "${user}" -c 'scl enable rh-ruby24 "bundler install"' -# Enable Ruby 2.4 for any later bash session -RUN echo "#!/bin/bash" > "/usr/local/bin/withruby" \ - && echo "export PATH=\$PATH:/home/${user}/bin" >> "/usr/local/bin/withruby" \ - && echo "source scl_source enable rh-ruby24" >> "/usr/local/bin/withruby" \ - && echo 'exec "$@"' >> "/usr/local/bin/withruby" \ - && chmod 0755 "/usr/local/bin/withruby" +# Switch to non-root user and install requirements +USER ${user} +WORKDIR /home/${user} +RUN /usr/local/bin/withruby bundler install # Prepare locales (for Jekyll) ARG locale=en_US.UTF-8 ENV LANG "${locale}" ENV LC_ALL "${locale}" -ENTRYPOINT [ "/usr/local/bin/withruby" ] - # Get script directory from lazyLib at last to avoid warning w/o invalidating the cache ARG dir=.