diff --git a/.dockerignore b/.dockerignore index c5abb5ff..33f33614 100644 --- a/.dockerignore +++ b/.dockerignore @@ -2,3 +2,5 @@ !ci/* !tools/aseprite/* !requirements.txt +!gradle/* +!gradlew diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index bbf5ef11..13ac0005 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -11,8 +11,8 @@ jobs: run: ci/build-docker-image shell: bash - name: Build - run: ci/docker-build-game SNAPSHOT=1 shell: bash + run: ci/docker-build-game SNAPSHOT=1 - name: Upload if: github.ref == 'refs/heads/master' run: make upload SNAPSHOT=1 diff --git a/Dockerfile b/Dockerfile index 97513ac6..169d0c12 100644 --- a/Dockerfile +++ b/Dockerfile @@ -10,10 +10,19 @@ RUN apt-get update \ openjdk-8-jdk \ python3-pip \ python3-setuptools \ + unzip \ zip COPY requirements.txt /src/ RUN pip3 install -r /src/requirements.txt +# Install gradle so that we don't have to do it for each build +COPY gradle /src/gradle +COPY gradlew /src +RUN /src/gradlew + +COPY ci/install-android-sdk /src +RUN /src/install-android-sdk + WORKDIR /root ENTRYPOINT ["/bin/bash"] diff --git a/ci/build-docker-image b/ci/build-docker-image index ed1b6ba3..9a87892e 100755 --- a/ci/build-docker-image +++ b/ci/build-docker-image @@ -1,4 +1,4 @@ #!/bin/sh set -e cd $(dirname $0) -docker build -t pixelwheels .. +docker build --tag pixelwheels .. diff --git a/ci/docker-build-game b/ci/docker-build-game index b40ee2eb..e1899753 100755 --- a/ci/docker-build-game +++ b/ci/docker-build-game @@ -5,8 +5,24 @@ cd $(dirname $0) make_args=$@ +SRC_DIR=$PWD/.. +SIGNING_GRADLE=$SRC_DIR/android/signing.gradle +LOCAL_PROPERTIES=$SRC_DIR/local.properties + +# If SIGNING_GRADLE does not exist, gradle fails to run tests +if [ ! -e "$SIGNING_GRADLE" ]; then + echo "Creating empty $SIGNING_GRADLE" + touch $SIGNING_GRADLE +fi + +if [ ! -e "$LOCAL_PROPERTIES" ]; then + echo "Creating $LOCAL_PROPERTIES" + # Must match ci/install-android-sdk + echo "sdk.dir=/opt/android-sdk" > "$LOCAL_PROPERTIES" +fi + # Do not use "make dist" for now because current Docker does not support building apk yet docker run --rm \ - -v $PWD/..:/src/pixelwheels \ + -v $SRC_DIR:/src/pixelwheels \ pixelwheels \ - -c "make GRADLEW='./gradlew --console plain' -C /src/pixelwheels codingstyle-check assets packer desktop-dist $make_args" + -c "make GRADLEW='./gradlew --console plain' -C /src/pixelwheels check assets packer desktop-dist $make_args" diff --git a/ci/install-android-sdk b/ci/install-android-sdk new file mode 100755 index 00000000..592d4069 --- /dev/null +++ b/ci/install-android-sdk @@ -0,0 +1,33 @@ +#!/bin/bash +set -euo pipefail + +TOOLS_URL=https://dl.google.com/android/repository/commandlinetools-linux-6858069_latest.zip + +# Must match android/build.gradle +PACKAGES=" +build-tools;29.0.3 +platforms;android-29 +" + +ANDROID_SDK=/opt/android-sdk +TOOLS_DIR=$ANDROID_SDK/cmdline-tools +SDKMANAGER=$TOOLS_DIR/bin/sdkmanager + +TOOLS_ZIP=tools.zip + +mkdir -p $ANDROID_SDK +cd $ANDROID_SDK + +if [ ! -d $TOOLS_DIR ] ; then + if [ ! -e $TOOLS_ZIP ] ; then + echo "Downloading command-line tools from $TOOLS_URL" + curl $TOOLS_URL --output $TOOLS_ZIP + fi + echo "Unpacking command-line tools" + unzip -q $TOOLS_ZIP +fi + +for pkg in $PACKAGES ; do + echo "Installing $pkg" + echo Y | $SDKMANAGER --sdk_root=$ANDROID_SDK "$pkg" +done