name: CI on: push: branches: - master paths-ignore: - '**.md' env: CI_CHUNK_SIZE: 65 jobs: prepare: name: Prepare job runs-on: ubuntu-latest outputs: individualMatrix: ${{ steps.generate-matrices.outputs.individualMatrix }} #multisrcMatrix: ${{ steps.generate-matrices.outputs.multisrcMatrix }} env: CI_MODULE_GEN: true steps: - name: Cancel previous runs uses: styfle/cancel-workflow-action@0.9.1 with: access_token: ${{ github.token }} all_but_latest: true - name: Clone repo uses: actions/checkout@v3 - name: Find lib changes id: modified-libs uses: tj-actions/changed-files@v32 with: files: lib/** files_ignore: lib/**.md files_separator: " " # This step is going to commit, but this will not trigger another workflow. - name: Bump extensions that uses a modified lib if: steps.modified-libs.outputs.any_changed == 'true' run: | ./.github/scripts/bump-versions.sh ${{ steps.modified-libs.outputs.all_changed_files }} - name: Validate Gradle Wrapper uses: gradle/wrapper-validation-action@v1 - name: Set up JDK uses: actions/setup-java@v3 with: java-version: 11 distribution: adopt # - name: Generate multisrc sources # uses: gradle/gradle-command-action@v2 # with: # arguments: :multisrc:generateExtensions - name: Get number of modules run: | set -x ./gradlew -q projects | grep '.*extensions\:individual\:.*\:.*' > projects.txt echo "NUM_INDIVIDUAL_MODULES=$(cat projects.txt | grep '.*\:individual\:.*' | wc -l)" >> $GITHUB_ENV #echo "NUM_MULTISRC_MODULES=$(cat projects.txt | grep '.*\:multisrc\:.*' | wc -l)" >> $GITHUB_ENV - id: generate-matrices name: Create output matrices uses: actions/github-script@v6 with: script: | const numIndividualModules = process.env.NUM_INDIVIDUAL_MODULES; //const numMultisrcModules = process.env.NUM_MULTISRC_MODULES; const chunkSize = process.env.CI_CHUNK_SIZE; const numIndividualChunks = Math.ceil(numIndividualModules / chunkSize); //const numMultisrcChunks = Math.ceil(numMultisrcModules / chunkSize); console.log(`Individual modules: ${numIndividualModules} (${numIndividualChunks} chunks of ${chunkSize})`); //console.log(`Multi-source modules: ${numMultisrcModules} (${numMultisrcChunks} chunks of ${chunkSize})`); core.setOutput('individualMatrix', { 'chunk': [...Array(numIndividualChunks).keys()] }); //core.setOutput('multisrcMatrix', { 'chunk': [...Array(numMultisrcChunks).keys()] }); #build_multisrc: # name: Build multisrc modules # needs: prepare # runs-on: ubuntu-latest # strategy: # matrix: ${{ fromJSON(needs.prepare.outputs.multisrcMatrix) }} # steps: # - name: Checkout master branch # uses: actions/checkout@v3 # - name: Set up JDK # uses: actions/setup-java@v3 # with: # java-version: 11 # distribution: adopt # - name: Prepare signing key # run: | # echo ${{ secrets.SIGNING_KEY }} | base64 -d > signingkey.jks # - name: Generate sources from the multi-source library # uses: gradle/gradle-command-action@v2 # env: # CI_MODULE_GEN: "true" # with: # arguments: :multisrc:generateExtensions # - name: Build extensions (chunk ${{ matrix.chunk }}) # uses: gradle/gradle-command-action@v2 # env: # CI_MULTISRC: "true" # CI_CHUNK_NUM: ${{ matrix.chunk }} # ALIAS: ${{ secrets.ALIAS }} # KEY_STORE_PASSWORD: ${{ secrets.KEY_STORE_PASSWORD }} # KEY_PASSWORD: ${{ secrets.KEY_PASSWORD }} # with: # arguments: assembleRelease # - name: Upload APKs (chunk ${{ matrix.chunk }}) # uses: actions/upload-artifact@v2 # if: "github.repository == 'jmir1/aniyomi-extensions'" # with: # name: "multisrc-apks-${{ matrix.chunk }}" # path: "**/*.apk" # retention-days: 1 # - name: Clean up CI files # run: rm signingkey.jks build_individual: name: Build individual modules needs: prepare runs-on: ubuntu-latest strategy: matrix: ${{ fromJSON(needs.prepare.outputs.individualMatrix) }} steps: - name: Checkout master branch uses: actions/checkout@v3 - name: Set up JDK uses: actions/setup-java@v3 with: java-version: 11 distribution: adopt - name: Prepare signing key run: | echo ${{ secrets.SIGNING_KEY }} | base64 -d > signingkey.jks - name: Build extensions (chunk ${{ matrix.chunk }}) uses: gradle/gradle-command-action@v2 env: CI_MULTISRC: "false" CI_CHUNK_NUM: ${{ matrix.chunk }} ALIAS: ${{ secrets.ALIAS }} KEY_STORE_PASSWORD: ${{ secrets.KEY_STORE_PASSWORD }} KEY_PASSWORD: ${{ secrets.KEY_PASSWORD }} with: arguments: assembleRelease - name: Upload APKs (chunk ${{ matrix.chunk }}) uses: actions/upload-artifact@v2 if: "github.repository == 'jmir1/aniyomi-extensions'" with: name: "individual-apks-${{ matrix.chunk }}" path: "**/*.apk" retention-days: 1 - name: Clean up CI files run: rm signingkey.jks publish_repo: name: Publish repo needs: - build_individual if: "github.repository == 'jmir1/aniyomi-extensions'" runs-on: ubuntu-latest steps: - name: Download APK artifacts uses: actions/download-artifact@v2 with: path: ~/apk-artifacts - name: Set up JDK uses: actions/setup-java@v3 with: java-version: 11 distribution: adopt - name: Checkout master branch uses: actions/checkout@v3 with: ref: master path: master - name: Create repo artifacts run: | cd master ./.github/scripts/move-apks.sh ./.github/scripts/create-repo.sh - name: Checkout repo branch uses: actions/checkout@v3 with: ref: repo path: repo - name: Deploy repo run: | cd repo ../master/.github/scripts/commit-repo.sh