name: Build and test on: push: branches: [ "dev", "main", "release/**" ] paths-ignore: - '**.md' - 'fastlane/**' - '.github/workflows/crowdin_contributors.yml' pull_request: branches: [ "dev" ] paths-ignore: - '**.md' - 'fastlane/**' - '.github/workflows/crowdin_contributors.yml' workflow_dispatch: { } env: # Misc GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} # Signing info IDE_SIGNING_ALIAS: ${{ secrets.IDE_SIGNING_ALIAS }} IDE_SIGNING_AUTH_PASS: ${{ secrets.IDE_SIGNING_AUTH_PASS }} IDE_SIGNING_AUTH_USER: ${{ secrets.IDE_SIGNING_AUTH_USER }} IDE_SIGNING_KEY_PASS: ${{ secrets.IDE_SIGNING_KEY_PASS }} IDE_SIGNING_STORE_PASS: ${{ secrets.IDE_SIGNING_STORE_PASS }} IDE_SIGNING_URL: ${{ secrets.IDE_SIGNING_URL }} IDE_SIGNING_KEY_BIN: ${{ secrets.IDE_SIGNING_KEY_BIN }} # Publishing credentials ORG_GRADLE_PROJECT_mavenCentralUsername: ${{ secrets.MVN_USERNAME }} ORG_GRADLE_PROJECT_mavenCentralPassword: ${{ secrets.MVN_PASSWORD }} ORG_GRADLE_PROJECT_signingInMemoryKey: ${{ secrets.MVN_SIGNING_KEY }} ORG_GRADLE_PROJECT_signingInMemoryKeyId: ${{ secrets.MVN_SIGNING_KEY_ID }} ORG_GRADLE_PROJECT_signingInMemoryKeyPassword: ${{ secrets.MVN_SIGNING_KEY_PASSWORD }} # Build configuration BUILD_JAVA_VERSION: '17' BUILD_JAVA_DIST: 'temurin' BUILD_IS_RELEASE: ${{ github.ref == 'refs/heads/main' || github.ref == 'refs/heads/release/**' }} ReleaseAndroidIDE: ${{ github.ref == 'refs/heads/main' }} jobs: build_debug_apk: name: Build Debug APK runs-on: ubuntu-latest if: ${{ github.ref != 'refs/heads/main' }} steps: - name: Cancel previous runs uses: styfle/cancel-workflow-action@0.11.0 with: access_token: ${{ github.token }} - name: Checkout uses: actions/checkout@v4 with: fetch-depth: 0 - name: Set up JDK 17 uses: actions/setup-java@v3 with: java-version: ${{ env.BUILD_JAVA_VERSION }} distribution: ${{ env.BUILD_JAVA_DIST }} - name: Change Gradle wrapper permissions run: chmod +x ./gradlew - name: Restore cache uses: actions/cache@v3 with: path: | ~/.gradle/caches ~/.gradle/wrapper key: ${{ runner.os }}-gradle-${{ hashFiles('**/*.gradle*') }} restore-keys: | ${{ runner.os }}-gradle- - name: Assemble Debug run: ./gradlew assembleDebug - name: Copy debug APK run: cp app/build/outputs/apk/**/debug/*.apk ./ - name: Upload arm64-v8a-debug APK uses: actions/upload-artifact@v3 with: name: apk-arm64-v8a-debug path: app-arm64-v8a-arm64-v8a-debug.apk - name: Upload armeabi-v7a-debug APK uses: actions/upload-artifact@v3 with: name: apk-armeabi-v7a-debug path: app-armeabi-v7a-armeabi-v7a-debug.apk build_release_apk: name: Build Release APK runs-on: ubuntu-latest steps: - name: Cancel previous runs uses: styfle/cancel-workflow-action@0.11.0 with: access_token: ${{ github.token }} - name: Checkout uses: actions/checkout@v4 with: fetch-depth: 0 - name: Set up JDK 17 uses: actions/setup-java@v3 with: java-version: ${{ env.BUILD_JAVA_VERSION }} distribution: ${{ env.BUILD_JAVA_DIST }} - name: Change Gradle wrapper permissions run: chmod +x ./gradlew - name: Restore cache uses: actions/cache@v3 with: path: | ~/.gradle/caches ~/.gradle/wrapper key: ${{ runner.os }}-gradle-${{ hashFiles('**/*.gradle*') }} restore-keys: | ${{ runner.os }}-gradle- - name: Assemble Release run: ./gradlew assembleRelease - name: Copy release APK run: cp app/build/outputs/apk/**/release/*.apk ./ - name: Upload arm64-v8a-release APK uses: actions/upload-artifact@v3 with: name: apk-arm64-v8a-release path: app-arm64-v8a-arm64-v8a-release.apk - name: Upload armeabi-v7a-release APK uses: actions/upload-artifact@v3 with: name: apk-armeabi-v7a-release path: app-armeabi-v7a-armeabi-v7a-release.apk - name: Upload mappings uses: actions/upload-artifact@v3 with: name: release-mappings path: '**/build/outputs/mapping' unit_test_debug: name: Run local tests runs-on: ubuntu-latest steps: - name: Checkout uses: actions/checkout@v4 with: fetch-depth: 0 - name: Set up JDK 17 uses: actions/setup-java@v3 with: java-version: ${{ env.BUILD_JAVA_VERSION }} distribution: ${{ env.BUILD_JAVA_DIST }} - name: Change Gradle wrapper permissions run: chmod +x ./gradlew - name: Restore cache uses: actions/cache@v3 with: path: | ~/.gradle/caches ~/.gradle/wrapper key: ${{ runner.os }}-gradle-${{ hashFiles('**/*.gradle*') }} restore-keys: | ${{ runner.os }}-gradle- - name: Run debug tests run: ./gradlew runTestsInCI --continue env: ANDROIDIDE_TEST: true - name: Upload Test Reports if: ${{ always() }} uses: actions/upload-artifact@v3 with: name: test-results-unit-tests path: '**/build/reports/tests/' unit_test_tooling_api: name: Build and test Tooling API runs-on: ubuntu-latest steps: - name: Checkout uses: actions/checkout@v4 with: fetch-depth: 0 - name: Set up JDK 17 uses: actions/setup-java@v3 with: java-version: ${{ env.BUILD_JAVA_VERSION }} distribution: ${{ env.BUILD_JAVA_DIST }} - name: Change Gradle wrapper permissions run: chmod +x ./gradlew - name: Restore cache uses: actions/cache@v3 with: path: | ~/.gradle/caches ~/.gradle/wrapper key: ${{ runner.os }}-gradle-${{ hashFiles('**/*.gradle*') }} restore-keys: | ${{ runner.os }}-gradle- - name: Run debug tests run: ./gradlew :subprojects:tooling-api-impl:build --continue env: ANDROIDIDE_TEST: true TEST_TOOLING_API_IMPL: true - name: Upload Test Reports if: ${{ always() }} uses: actions/upload-artifact@v3 with: name: test-results-tooling-api-tests path: '**/build/reports/tests/' publish: name: Publish release runs-on: ubuntu-latest needs: [ build_release_apk, unit_test_debug, unit_test_tooling_api ] if: ${{ always() && github.ref == 'refs/heads/main' && github.event_name != 'pull_request' && needs.build_release_apk.result == 'success' && needs.unit_test_debug.result == 'success' && needs.unit_test_tooling_api.result == 'success' }} steps: - name: Checkout uses: actions/checkout@v4 with: fetch-depth: 0 - name: Set up JDK 17 uses: actions/setup-java@v3 with: java-version: ${{ env.BUILD_JAVA_VERSION }} distribution: ${{ env.BUILD_JAVA_DIST }} - name: Download arm64-v8a APK uses: actions/download-artifact@v3 with: name: apk-arm64-v8a-release - name: Download armeabi-v7a APK uses: actions/download-artifact@v3 with: name: apk-armeabi-v7a-release - name: Change Gradle wrapper permissions run: chmod +x ./gradlew - name: Restore cache uses: actions/cache@v3 with: path: | ~/.gradle/caches ~/.gradle/wrapper key: ${{ runner.os }}-gradle-${{ hashFiles('**/*.gradle*') }} restore-keys: | ${{ runner.os }}-gradle- - name: Publish release run: ./gradlew nyxMake nyxMark nyxPublish publish release --stacktrace - name: Archive Nyx state file uses: actions/upload-artifact@v3 if: ${{ always() }} with: name: .nyx-state-${{ github.job }}.json path: build/nyx-state.json publish_snapshots: name: Publish package snapshots runs-on: ubuntu-latest needs: [ build_debug_apk ] if: ${{ always() && github.ref != 'refs/heads/main' && github.event_name != 'pull_request' && needs.build_debug_apk.result == 'success' }} steps: - name: Checkout uses: actions/checkout@v4 with: fetch-depth: 0 - name: Set up JDK 17 uses: actions/setup-java@v3 with: java-version: ${{ env.BUILD_JAVA_VERSION }} distribution: ${{ env.BUILD_JAVA_DIST }} - name: Change Gradle wrapper permissions run: chmod +x ./gradlew - name: Restore cache uses: actions/cache@v3 with: path: | ~/.gradle/caches ~/.gradle/wrapper key: ${{ runner.os }}-gradle-${{ hashFiles('**/*.gradle*') }} restore-keys: | ${{ runner.os }}-gradle- - name: Publish snapshots run: ./gradlew publishAllPublicationsToMavenCentralRepository --stacktrace