diff --git a/.github/workflows/core.yml b/.github/workflows/core.yml new file mode 100644 index 00000000..468b9ac5 --- /dev/null +++ b/.github/workflows/core.yml @@ -0,0 +1,131 @@ +name: Android CI + +on: + workflow_dispatch: + push: + branches: [ master ] + pull_request: + +jobs: + build: + name: Build on ${{ matrix.os }} + runs-on: ${{ matrix.os }} + strategy: + matrix: + os: [ ubuntu-latest ] + env: + CCACHE_COMPILERCHECK: '%compiler% -dumpmachine; %compiler% -dumpversion' + CCACHE_NOHASHDIR: 'true' + CCACHE_HARDLINK: 'true' + CCACHE_BASEDIR: '${{ github.workspace }}' + + steps: + - name: Checkout + uses: actions/checkout@v3 + with: + submodules: 'recursive' + fetch-depth: 0 + + - name: Write key + if: github.event_name != 'pull_request' && github.ref == 'refs/heads/master' + run: | + if [ ! -z "${{ secrets.KEY_STORE }}" ]; then + echo androidStorePassword='${{ secrets.KEY_STORE_PASSWORD }}' >> gradle.properties + echo androidKeyAlias='${{ secrets.ALIAS }}' >> gradle.properties + echo androidKeyPassword='${{ secrets.KEY_PASSWORD }}' >> gradle.properties + echo androidStoreFile='key.jks' >> gradle.properties + echo ${{ secrets.KEY_STORE }} | base64 --decode > key.jks + fi + + - name: Checkout libxposed/api + uses: actions/checkout@v3 + with: + repository: libxposed/api + path: libxposed/api + + - name: Checkout libxposed/service + uses: actions/checkout@v3 + with: + repository: libxposed/service + path: libxposed/service + + - name: Setup Java + uses: actions/setup-java@v3 + with: + java-version: '21' + distribution: 'temurin' + + - name: Setup Gradle + uses: gradle/gradle-build-action@v2 + with: + gradle-home-cache-cleanup: true + + - name: Set up ccache + uses: hendrikmuhs/ccache-action@v1.2 + with: + max-size: 2G + key: ${{ runner.os }} + restore-keys: ${{ runner.os }} + save: ${{ github.event_name == 'push' && github.ref == 'refs/heads/master' }} + + - name: Build dependencies + working-directory: libxposed + run: | + cd api + echo 'org.gradle.jvmargs=-Xmx2048m' >> gradle.properties + ./gradlew :api:publishApiPublicationToMavenLocal + cd .. + cd service + echo 'org.gradle.jvmargs=-Xmx2048m' >> gradle.properties + ./gradlew :interface:publishInterfacePublicationToMavenLocal + + - name: Build with Gradle + run: | + echo 'org.gradle.parallel=true' >> gradle.properties + echo 'org.gradle.jvmargs=-Xmx2048m' >> gradle.properties + echo 'android.native.buildOutput=verbose' >> gradle.properties + ./gradlew buildAll + + - name: Upload Debug artifact + uses: actions/upload-artifact@v3 + with: + name: lspatch-debug + path: out/debug/* + + - name: Upload Release artifact + uses: actions/upload-artifact@v3 + with: + name: lspatch-release + path: out/release/* + + - name: Upload mappings + uses: actions/upload-artifact@v3 + with: + name: mappings + path: | + patch-loader/build/outputs/mapping + manager/build/outputs/mapping + + - name: Upload symbols + uses: actions/upload-artifact@v3 + with: + name: symbols + path: | + patch-loader/build/symbols + + - name: Post to channel + if: ${{ github.event_name != 'pull_request' && success() && github.ref == 'refs/heads/master' }} + env: + CHANNEL_ID: ${{ secrets.CHANNEL_ID }} + DISCUSSION_ID: ${{ secrets.DISCUSSION_ID }} + TOPIC_ID: ${{ secrets.TOPIC_ID }} + BOT_TOKEN: ${{ secrets.BOT_TOKEN }} + COMMIT_MESSAGE: ${{ github.event.head_commit.message }} + COMMIT_URL: ${{ github.event.head_commit.url }} + run: | + if [ ! -z "${{ secrets.BOT_TOKEN }}" ]; then + export jarRelease=$(find out/release -name "*.jar") + export managerRelease=$(find out/release -name "*.apk") + export jarDebug=$(find out/debug -name "*.jar") + export managerDebug=$(find out/debug -name "*.apk") + fi