From 0064d8bd960961dc1898bec4a8acb534cb69ab8c Mon Sep 17 00:00:00 2001 From: arkon Date: Sun, 20 Jun 2021 17:45:22 -0400 Subject: [PATCH] Parallelize CI builds --- .github/scripts/sign-apks.sh | 2 + .github/workflows/build_push.yml | 141 +++++++++++++++++++++---------- settings.gradle.kts | 4 +- 3 files changed, 101 insertions(+), 46 deletions(-) diff --git a/.github/scripts/sign-apks.sh b/.github/scripts/sign-apks.sh index 57413ac1b..34775f70b 100755 --- a/.github/scripts/sign-apks.sh +++ b/.github/scripts/sign-apks.sh @@ -4,6 +4,8 @@ shopt -s globstar nullglob extglob TOOLS="$(ls -d ${ANDROID_HOME}/build-tools/* | tail -1)" +# Get APKs from previous jobs' artifacts +cp -R ~/apk-artifacts/ $PWD APKS=( **/*".apk" ) # Fail if too little extensions seem to have been built diff --git a/.github/workflows/build_push.yml b/.github/workflows/build_push.yml index 982b41723..31a008f66 100644 --- a/.github/workflows/build_push.yml +++ b/.github/workflows/build_push.yml @@ -16,16 +16,108 @@ jobs: - name: Validate Gradle Wrapper uses: gradle/wrapper-validation-action@v1 - build: - name: Build extension repo + build_multisrc: + name: Build multisrc modules needs: check_wrapper if: "!startsWith(github.event.head_commit.message, '[SKIP CI]')" runs-on: ubuntu-latest + strategy: + matrix: + lang: [all, en, ar, ca, de, es, fr, id, it, ja, ko, pt, ru, th, tr, vi, zh] steps: - - name: Cancel previous runs - uses: styfle/cancel-workflow-action@0.8.0 + - name: Checkout master branch + uses: actions/checkout@v2 + + - name: Set up JDK + uses: actions/setup-java@v1 with: - access_token: ${{ github.token }} + java-version: 1.8 + + - name: Copy CI gradle.properties + run: | + mkdir -p ~/.gradle + cp .github/runner-files/ci-gradle.properties ~/.gradle/gradle.properties + + - name: Generate sources from the multi-source library + uses: eskatos/gradle-command-action@v1 + env: + CI_MULTISRC: "true" + with: + arguments: :multisrc:generateExtensions + wrapper-cache-enabled: true + dependencies-cache-enabled: true + configuration-cache-enabled: true + + - name: Build "${{ matrix.lang }}" extensions + uses: eskatos/gradle-command-action@v1 + env: + CI_MULTISRC: "true" + CI_MATRIX_LANG: ${{ matrix.lang }} + with: + arguments: assembleRelease + wrapper-cache-enabled: true + dependencies-cache-enabled: true + configuration-cache-enabled: true + + - name: Upload "${{ matrix.lang }}" APKs + uses: actions/upload-artifact@v2 + with: + name: "multisrc-${{ matrix.lang }}-apks" + path: "**/*.apk" + retention-days: 1 + + build_individual: + name: Build individual modules + needs: check_wrapper + if: "!startsWith(github.event.head_commit.message, '[SKIP CI]')" + runs-on: ubuntu-latest + strategy: + matrix: + lang: [all, en, ar, ca, de, es, fr, id, it, ja, ko, pt, ru, th, tr, vi, zh] + steps: + - name: Checkout master branch + uses: actions/checkout@v2 + + - name: Set up JDK + uses: actions/setup-java@v1 + with: + java-version: 1.8 + + - name: Copy CI gradle.properties + run: | + mkdir -p ~/.gradle + cp .github/runner-files/ci-gradle.properties ~/.gradle/gradle.properties + + - name: Build "${{ matrix.lang }}" extensions + uses: eskatos/gradle-command-action@v1 + env: + CI_MULTISRC: "false" + CI_MATRIX_LANG: ${{ matrix.lang }} + with: + arguments: assembleRelease + wrapper-cache-enabled: true + dependencies-cache-enabled: true + configuration-cache-enabled: true + + - name: Upload "${{ matrix.lang }}" APKs + uses: actions/upload-artifact@v2 + with: + name: "individual-${{ matrix.lang }}-apks" + path: "**/*.apk" + retention-days: 1 + + publish_repo: + name: Publish repo + needs: + - build_multisrc + - build_individual + if: "github.repository == 'tachiyomiorg/tachiyomi-extensions'" + runs-on: ubuntu-latest + steps: + - name: Download APK artifacts + uses: actions/download-artifact@v2 + with: + path: ~/apk-artifacts - name: Checkout master branch uses: actions/checkout@v2 @@ -33,43 +125,7 @@ jobs: ref: master path: master - - name: Set up JDK 1.8 - uses: actions/setup-java@v1 - with: - java-version: 1.8 - - - name: Copy CI gradle.properties - run: | - cd master - mkdir -p ~/.gradle - cp .github/runner-files/ci-gradle.properties ~/.gradle/gradle.properties - - - name: Generate sources from the multi-source library - uses: eskatos/gradle-command-action@v1 - env: - CI_PUSH: "true" - with: - build-root-directory: master - wrapper-directory: master - arguments: :multisrc:generateExtensions - wrapper-cache-enabled: true - dependencies-cache-enabled: true - configuration-cache-enabled: true - - - name: Build extensions - uses: eskatos/gradle-command-action@v1 - env: - CI_PUSH: "true" - with: - build-root-directory: master - wrapper-directory: master - arguments: assembleRelease - wrapper-cache-enabled: true - dependencies-cache-enabled: true - configuration-cache-enabled: true - - name: Sign APKs - if: github.repository == 'tachiyomiorg/tachiyomi-extensions' run: | cd master ./.github/scripts/sign-apks.sh \ @@ -79,20 +135,17 @@ jobs: ${{ secrets.KEY_PASSWORD }} - name: Create repo artifacts - if: github.repository == 'tachiyomiorg/tachiyomi-extensions' run: | cd master ./.github/scripts/create-repo.sh - name: Checkout repo branch - if: github.repository == 'tachiyomiorg/tachiyomi-extensions' uses: actions/checkout@v2 with: ref: repo path: repo - name: Deploy repo - if: github.repository == 'tachiyomiorg/tachiyomi-extensions' run: | cd repo ../master/.github/scripts/commit-repo.sh diff --git a/settings.gradle.kts b/settings.gradle.kts index 33b164998..e21545cf9 100644 --- a/settings.gradle.kts +++ b/settings.gradle.kts @@ -10,8 +10,8 @@ project(":duktape-stub").projectDir = File("lib/duktape-stub") include(":lib-dataimage") project(":lib-dataimage").projectDir = File("lib/dataimage") -if (System.getenv("CI") == null || System.getenv("CI_PUSH") == "true") { - // Local development or full build for push +if (System.getenv("CI") == null) { + // Local development (full project build) include(":multisrc") project(":multisrc").projectDir = File("multisrc")