From 9078f82963370339a517375882568b2b600d7388 Mon Sep 17 00:00:00 2001 From: len Date: Sun, 4 Feb 2018 13:55:21 +0100 Subject: [PATCH] Update dependencies and travis scripts --- .gitignore | 2 + .travis.yml | 70 ++++++++++++----------- .travis/build.sh | 23 ++++++++ .travis/create-repo.sh | 42 ++++++++++++++ .travis/secrets.tar.enc | Bin 0 -> 10256 bytes build.gradle | 6 +- common.gradle | 6 +- gradle/wrapper/gradle-wrapper.properties | 4 +- 8 files changed, 112 insertions(+), 41 deletions(-) create mode 100755 .travis/build.sh create mode 100755 .travis/create-repo.sh create mode 100644 .travis/secrets.tar.enc diff --git a/.gitignore b/.gitignore index 6d5672336..b982f2b7d 100644 --- a/.gitignore +++ b/.gitignore @@ -6,3 +6,5 @@ build/ /captures .idea/ *.iml +repo/ +apk/ diff --git a/.travis.yml b/.travis.yml index 784724989..5513db549 100644 --- a/.travis.yml +++ b/.travis.yml @@ -1,43 +1,45 @@ language: android android: components: - - platform-tools - - tools - - # The BuildTools version used by your project - - build-tools-25.0.1 - - android-25 - - extra-android-m2repository - - extra-google-m2repository - - extra-android-support - - extra-google-google_play_services - + - build-tools-27.0.2 + - android-27 + - extra-android-m2repository + - extra-google-m2repository + - extra-android-support licenses: - - android-sdk-license-.+ - - '.+' - -jdk: - - oraclejdk8 - -before_script: - - chmod +x gradlew - + - android-sdk-license-.+ before_install: - - mkdir "$ANDROID_HOME/licenses" || true - - echo -e "\n8933bad161af4178b1185d1a37fbf41ea5269c55" > "$ANDROID_HOME/licenses/android-sdk-license" - - echo -e "\n84831b9409646a918e30573bab4c9c91346d8abd" > "$ANDROID_HOME/licenses/android-sdk-preview-license" - -#Build, and run tests -script: "./gradlew clean assembleDebug" -sudo: false - +- yes | sdkmanager "platforms;android-27" # workaround for accepting the license +- openssl aes-256-cbc -K $encrypted_5ba4ee4c096f_key -iv $encrypted_5ba4ee4c096f_iv -in "$PWD/.travis/secrets.tar.enc" -out secrets.tar -d +- tar xf secrets.tar +- mkdir "$ANDROID_HOME/licenses" || true +- echo -e "\n8933bad161af4178b1185d1a37fbf41ea5269c55" > "$ANDROID_HOME/licenses/android-sdk-license" +- echo -e "\n84831b9409646a918e30573bab4c9c91346d8abd" > "$ANDROID_HOME/licenses/android-sdk-preview-license" +script: + - .travis/build.sh && .travis/create-repo.sh before_cache: - - rm -f $HOME/.gradle/caches/modules-2/modules-2.lock - +- rm -f $HOME/.gradle/caches/modules-2/modules-2.lock +- rm -fr $HOME/.gradle/caches/*/plugin-resolution/ cache: directories: - - $HOME/.gradle/caches/ - - $HOME/.gradle/wrapper/ - + - $HOME/.gradle/caches/ + - $HOME/.gradle/wrapper/ + - $HOME/.android/build-cache + - repo +deploy: +- provider: pages + local-dir: repo + target-branch: repo + skip-cleanup: true + keep-history: true + github-token: + secure: "SCzQyavQM/bfOjEF+eKp9l0DxiAgsB3v64hYQNb2s/sql4WiL8Mjv9HEAyxBWDfGwUg1cNELWR7s2Y1j/8lCLFaZ5doy7222ZSaRP48MGhpGJQi22jGOqavMNCIcS5EZCjo3OJ9+VWLcx67OIJUQK3KHmnxgeM00luPjzC0a3FiED7/7joU4y9fkQhizfnV6AEZjEma0wUH4+wQxUC+5H71nNDZuz77BO3slZ4TX2YKg9O+QIr5jIjv4GT7dqh+UDQUoMvPXVtORUTI3yOzziwEawc64uMUr+0NtSr9ww+9lg4fs7IeVwkTlDEDbVDFdwvLYAvKlZCqboKygG7NX5Pi11grLYYCrqynXXIsyyBtEyV/fkGt2UcQrMOJRxxI6RkZFuUwozP/DVVO9XiebEfoKKZaQ/ehljveu8+B5S+qsKTO/sFMQJhvi2muhXkUvXeduSjHfqgAxEzrnh6sTR4laI05ICVJVw5j38iUfqOEo4rF+cX11ywgHFzp9RJjYCYhndvobv5vtwk77hrndzVcLlKKlKO4tJDfwg+czRRD7oSX9pT0NeL7tRyD86sNryPMG5pBAfJ4D7knnM9+YmRNJmnsmnu/FGeYlBygUK5IiG05LQ7TfkXiF0wQt7nvlixAiB3ULrso18lqP9U2bGHdjLNaRip3dVxHbrCmP9xY=" + on: + branch: master + repo: inorichi/tachiyomi-extensions env: - - GRADLE_OPTS="-XX:MaxPermSize=1024m -XX:+CMSClassUnloadingEnabled -XX:+HeapDumpOnOutOfMemoryError -Xmx2048m" + global: + - secure: "VvCw9E2eOPoExCKjs4jbGEUJ8hYS6Hw8YzJ4VPqtLa0YJSMKhdwNAcW2ldy47tJklTYKv6djehjh7oivTMFOR4m5jhG5MNrAbCprPtTeiK7KU3o8vCK8CyCYgRS/+LfmryNdXTB4N5B8VQzx26jl3+aJE8g5uJacSOYnv1bc+i89ZLAVW9Xwy4EGKZqQW/cZrDS6NDAPyU05Hell/PZMcHIqkNhcb4AJdGfjXJ3zOrv02F7PxYL8cAsapfUgaFME/2rNokuUTYAWN9lHx3VH51bxEM36lVlPKme0O9Op7hVE4GWvcjab7u54oOlOTFk1L4f2gYC75f1rsweRLwxpQ/XgZgwMAQHkGdYsp1jagVJkbXZE0p+jFN12KOQK/+9ahLuSJwxk4rCsIvR1XlIU2Taw0/v3OWM5u2A00WQkRHW7A3LfHGDFg2JgKCxPnBlzUFliFEubuU5WyWK/BllqZPpSUhinQrymVQEdSFM1eJEfJNVxN6lj4DmcWUmcMiRQIjol5tqopDbL/Htf3sRMacL+X9acPSuUQGnJdQWJ+6VIXmzyrjQl1IXCll4MHvAAnHkn/v4wFHjgKMESYlVtk6q8yiWVgoGkR1lq13TYnjXLTPqmFgBzFd/IqmNYn+33QwRi9s3Njuawm61eDspqmJ8OXxM+QStDW8DckRQCEts=" + - secure: "GkIGZB+A0N+NMhWlX1d9bLpz98qwHu6nWO525MzdQ5y+tC+OtuEJURxzd9kvy0Q3Q0jrEU50Y8vB7xTgP1YptVZpdhNjVp3WgYloQNkRO/xUQWxDBE2wArJ+mKHYmbgqCYdQ8szsjUw/JIBzlpMU7wniU9oDWZx8r1NirdtRzP7osV3jVa6zg9uXHZMc65mOR7mf8LJWT9FBSqwOVvFYrgIS/XIQ32T55NgAt19Bmndf+0JLE5ZdQ/6ZRGuzyfAlOpXSxaQxKVDHcs7FJhLMH9liTj1trSLj3tETyAsnwjiJV7PNuv43mRJKIc0oBCBqRu7TtJVo8BNGyoiCP49FvNLq03nPIPIPWULa8wZVg4FruWvEY5iERqodaIwDPS7mawbXloc2+htDlAzLGKfd0IOiAsTrQqE5F6g90XCW8DmyJLMrLixsXGWmUf/qsFGJJTEmpNsy5p15Pm7BypvoFJ/QB6quEe5or2J6J7NzqLxe1AGplHjkIStApVNm6tRHsxBDOCPo1oCPQTc5H77Fh6odWOf0A/6wC7+HYKJptycmpL8qUzwLSZbOC05WCMrEQQKYNJYWkZgEt0G+8jpaeri66146LRjYuFeKtj/IRlHNY31pL9tZCkgV9wVFLd2s0Z+YfaTW3+Nxls8z4llUaGdgQjjNqNr8P6PKoEQ+9bI=" + - secure: "iZlQiZiOt5YKOJR6I5aRkhF09G/SFd712CnHHbVu6070MIAQ4WGyqMw4DuiqbgCW2153ol1nQhtb9PIDSyys3g+N0/OEXwxoE0frvf48AlUd7I2l/6f8rVwrCJ55ZtWVhKTR+fz+Kqxj1SOwcBshapUCB4V7CdPg0i+XjHrSf3MKIGFyOLyl38hQHhrNqWttc9b6g1728HPu1XB2w0sqYJ3IfV8VGjURZkjAYoA3p5dklcUUa6bdIT9bhQp854ROUWrAn/oudkOe0JvDJhYnF31qmoTkYePdvnycC7/yKH6sXf89F5HKUB6NwvDWWwVySHV3Eu4C/KppAZtRVGwJ1liX/AH9c5zfYYuUpGRIwk6R/xUffk8DJFdKvI3mK0mEzuESBwH9Y1FI2VvcifVL0ELPGJO6zXl8A/dP5v8Wtwa0Ipv/bpqZwE7unZU1PxF0f4xd4QmCfjZ98oi1TLV5uY+z+2kuWaXcKF1ETNof9oYgkUKg++ezYLhyLp1NxFtEpgAFgWSTHG838PfvCX0768Ept0XifICz+SjD5jnSZ7Vi9D77czSmKGQO2tnT3+tqf3A2ldZjzEY9oLnYbxpEwBC6PYzthn0rox5KmE3ffIQnt299Em9yxbXH3jqOQo2pFvthuiEzZ9G+dZ6bNRqfT25T7HwzqtDlNLypEvi8/UA=" + - secure: "XiY+CQZqCSfo4DMUWuA+7YAuDSZxphTODAhENwsTV/jPKm/CV4i4bw3mdS7EtMLVyixFuvV1RdNd96MEF+kjpFG1qN3xO8+6VP6GVz7ycBP73NVGwseLvCaSG+xiW/iiwpINRCMdLS+9YGcj9rGKvPYkLrLQMox9zFoHFEXvRxGCe72sOgRaqf5AQICn4KTyaDBFsCrVtWI9obPNGDel4Y7ZpSRiz5JPxPQVBFC4FX5CdH5MuHQVHuiAHcwKIzzienwhAAkzK0pPINTpNdQB6Qa1R8B8/vNE12iHPMCGF5eQFWe5yy07lOwrt5Np3gVbg8cLocv9L+dUKuG+qXnLS8UlEtiFj01MImG/1qS+TNY323S1sPD/zmQrKCRj77qtxwC2mmZ3PONpkqEwx/wlyk4up93F9jDZWrHPDxw7kbvIP5AiNPR5ZQG7U++ClcFzAxhKNMGFaJV2W3XKFjOwZbMy7bwIKOHXxQQrQsb8kdFnZ1G4Y+WersYolf4/1PItHmhCM1KaXL8qu5JuwQCiOUsRrip+a3AB3T2+yfYY3m0xH73X4SoMUWWAgBJqTSghgCxtxTqMaeI1psMq2k1IWq42wPYlDlEqRNoyR1q4Hh3CW4Q6Sz3k5lktLoUUsQREJ5/5d/mNOr76gOUDO4C+QJKYBLojZnfHiY66RjHIqjs=" diff --git a/.travis/build.sh b/.travis/build.sh new file mode 100755 index 000000000..d1970c2db --- /dev/null +++ b/.travis/build.sh @@ -0,0 +1,23 @@ +#!/bin/bash + +set -e + +./gradlew --no-daemon clean assembleRelease + +TOOLS="$(ls -d ${ANDROID_HOME}/build-tools/* | tail -1)" + +shopt -s globstar nullglob extglob +APKS=( **/*"-unsigned.apk"* ) + +DEST=$PWD/apk + +rm -rf $DEST && mkdir -p $DEST + +for APK in ${APKS[@]}; do + BASENAME=$(basename $APK) + APKNAME="${BASENAME%%+(-release*)}.apk" + APKDEST="$DEST/$APKNAME" + + ${TOOLS}/zipalign -v -p 4 $APK $APKDEST + ${TOOLS}/apksigner sign --ks $STORE_PATH --ks-key-alias $STORE_ALIAS --ks-pass env:STORE_PASS --key-pass env:KEY_PASS $APKDEST +done diff --git a/.travis/create-repo.sh b/.travis/create-repo.sh new file mode 100755 index 000000000..4e1d6fde9 --- /dev/null +++ b/.travis/create-repo.sh @@ -0,0 +1,42 @@ +#!/bin/bash + +set -e + +TOOLS="$(ls -d ${ANDROID_HOME}/build-tools/* | tail -1)" + +mkdir -p repo/apk +mkdir -p repo/icon + +cp -f apk/* repo/apk || true + +cd repo + +APKS=( apk/*".apk"* ) + +for APK in ${APKS[@]}; do + FILENAME=$(basename ${APK}) + BADGING="$(${TOOLS}/aapt dump badging $APK)" + + PACKAGE=$(echo "$BADGING" | grep package:) + PKGNAME=$(echo $PACKAGE | grep -Po "name='\K[^']+") + VCODE=$(echo $PACKAGE | grep -Po "versionCode='\K[^']+") + VNAME=$(echo $PACKAGE | grep -Po "versionName='\K[^']+") + + APPLICATION=$(echo "$BADGING" | grep application:) + LABEL=$(echo $APPLICATION | grep -Po "label='\K[^']+") + + LANG=$(echo $APK | grep -Po "tachiyomi-\K[^\.]+") + + ICON=$(echo "$BADGING" | grep -Po "application-icon-320.*'\K[^']+") + unzip -p $APK $ICON > icon/${FILENAME%.*}.png + + jq -n \ + --arg name "$LABEL" \ + --arg pkg "$PKGNAME" \ + --arg apk "$FILENAME" \ + --arg lang "$LANG" \ + --argjson code $VCODE \ + --arg version "$VNAME" \ + '{name:$name, pkg:$pkg, apk:$apk, lang:$lang, code:$code, version:$version}' + +done | jq -sr '[.[]]' > index.json diff --git a/.travis/secrets.tar.enc b/.travis/secrets.tar.enc new file mode 100644 index 0000000000000000000000000000000000000000..5af16e0932d447011c0b1b3c234f8a71736a5f96 GIT binary patch literal 10256 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�<^+|J3?DEyu4HU9A@`u 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 We~Leo^JWOie}p&uO