diff --git a/.github/workflows/publish-release.yml b/.github/workflows/publish-release.yml deleted file mode 100644 index e3b151e875f26a..00000000000000 --- a/.github/workflows/publish-release.yml +++ /dev/null @@ -1,231 +0,0 @@ -name: Publish Release -on: - push: - tags: - - "v0.*.*" # This should match v0.X.Y - - "v0.*.*-rc.*" # This should match v0.X.Y-RC.0 -jobs: - set_release_type: - runs-on: ubuntu-latest - if: github.repository == 'facebook/react-native' - outputs: - RELEASE_TYPE: ${{ steps.set_release_type.outputs.RELEASE_TYPE }} - env: - EVENT_NAME: ${{ github.event_name }} - REF: ${{ github.ref }} - steps: - - id: set_release_type - run: | - echo "Setting release type to release" - echo "RELEASE_TYPE=release" >> $GITHUB_OUTPUT - - prepare_hermes_workspace: - runs-on: ubuntu-latest - env: - HERMES_WS_DIR: /tmp/hermes - HERMES_VERSION_FILE: packages/react-native/sdks/.hermesversion - outputs: - react-native-version: ${{ steps.prepare-hermes-workspace.outputs.react-native-version }} - hermes-version: ${{ steps.prepare-hermes-workspace.outputs.hermes-version }} - steps: - - name: Checkout - uses: actions/checkout@v4 - - name: Prepare Hermes Workspace - id: prepare-hermes-workspace - uses: ./.github/actions/prepare-hermes-workspace - with: - hermes-ws-dir: ${{ env.HERMES_WS_DIR }} - hermes-version-file: ${{ env.HERMES_VERSION_FILE }} - - build_hermesc_apple: - runs-on: macos-13 - needs: prepare_hermes_workspace - env: - HERMES_WS_DIR: /tmp/hermes - steps: - - name: Checkout - uses: actions/checkout@v4 - - name: Build HermesC Apple - uses: ./.github/actions/build-hermesc-apple - with: - hermes-version: ${{ needs.prepare_hermes_workspace.output.hermes-version }} - react-native-version: ${{ needs.prepare_hermes_workspace.output.react-native-version }} - build_apple_slices_hermes: - runs-on: macos-14 - needs: [build_hermesc_apple, prepare_hermes_workspace] - env: - HERMES_WS_DIR: /tmp/hermes - HERMES_TARBALL_ARTIFACTS_DIR: /tmp/hermes/hermes-runtime-darwin - HERMES_OSXBIN_ARTIFACTS_DIR: /tmp/hermes/osx-bin - IOS_DEPLOYMENT_TARGET: "15.1" - XROS_DEPLOYMENT_TARGET: "1.0" - MAC_DEPLOYMENT_TARGET: "10.15" - strategy: - fail-fast: false - matrix: - flavor: [Debug, Release] - slice: [macosx, iphoneos, iphonesimulator, appletvos, appletvsimulator, catalyst, xros, xrsimulator] - steps: - - name: Checkout - uses: actions/checkout@v4 - - name: Build Slice - uses: ./.github/actions/build-apple-slices-hermes - with: - flavor: ${{ matrix.flavor }} - slice: ${{ matrix.slice}} - hermes-version: ${{ needs.prepare_hermes_workspace.outputs.hermes-version }} - react-native-version: ${{ needs.prepare_hermes_workspace.outputs.react-native-version }} - - build_hermes_macos: - runs-on: macos-13 - needs: [build_apple_slices_hermes, prepare_hermes_workspace] - env: - HERMES_WS_DIR: /tmp/hermes - HERMES_TARBALL_ARTIFACTS_DIR: /tmp/hermes/hermes-runtime-darwin - continue-on-error: true - strategy: - fail-fast: false - matrix: - flavor: [Debug, Release] - steps: - - name: Checkout - uses: actions/checkout@v4 - - name: Build Hermes MacOS - uses: ./.github/actions/build-hermes-macos - with: - hermes-version: ${{ needs.prepare_hermes_workspace.outputs.hermes-version }} - react-native-version: ${{ needs.prepare_hermes_workspace.outputs.react-native-version }} - flavor: ${{ matrix.flavor }} - prebuild_apple_dependencies: - uses: ./.github/workflows/prebuild-ios.yml - - build_hermesc_linux: - runs-on: ubuntu-latest - needs: prepare_hermes_workspace - env: - HERMES_WS_DIR: /tmp/hermes - HERMES_TARBALL_ARTIFACTS_DIR: /tmp/hermes/hermes-runtime-darwin - steps: - - name: Checkout - uses: actions/checkout@v4 - - name: Build HermesC Linux - uses: ./.github/actions/build-hermesc-linux - with: - hermes-version: ${{ needs.prepare_hermes_workspace.outputs.hermes-version }} - react-native-version: ${{ needs.prepare_hermes_workspace.outputs.react-native-version }} - - build_hermesc_windows: - runs-on: windows-2019 - needs: prepare_hermes_workspace - env: - HERMES_WS_DIR: 'D:\tmp\hermes' - HERMES_TARBALL_ARTIFACTS_DIR: 'D:\tmp\hermes\hermes-runtime-darwin' - HERMES_OSXBIN_ARTIFACTS_DIR: 'D:\tmp\hermes\osx-bin' - ICU_URL: "https://github.com/unicode-org/icu/releases/download/release-64-2/icu4c-64_2-Win64-MSVC2017.zip" - MSBUILD_DIR: 'C:\Program Files (x86)\Microsoft Visual Studio\2019\BuildTools\MSBuild\Current\Bin' - CMAKE_DIR: 'C:\Program Files\CMake\bin' - steps: - - name: Checkout - uses: actions/checkout@v4 - - name: Build HermesC Windows - uses: ./.github/actions/build-hermesc-windows - with: - hermes-version: ${{ needs.prepare_hermes_workspace.outputs.hermes-version }} - react-native-version: ${{ needs.prepare_hermes_workspace.outputs.react-native-version }} - - build_android: - runs-on: 8-core-ubuntu - needs: [set_release_type] - container: - image: reactnativecommunity/react-native-android:latest - env: - TERM: "dumb" - GRADLE_OPTS: "-Dorg.gradle.daemon=false" - ORG_GRADLE_PROJECT_SIGNING_PWD: ${{ secrets.ORG_GRADLE_PROJECT_SIGNING_PWD }} - ORG_GRADLE_PROJECT_SIGNING_KEY: ${{ secrets.ORG_GRADLE_PROJECT_SIGNING_KEY }} - ORG_GRADLE_PROJECT_SONATYPE_USERNAME: ${{ secrets.ORG_GRADLE_PROJECT_SONATYPE_USERNAME }} - ORG_GRADLE_PROJECT_SONATYPE_PASSWORD: ${{ secrets.ORG_GRADLE_PROJECT_SONATYPE_PASSWORD }} - steps: - - name: Checkout - uses: actions/checkout@v4 - - name: Build Android - uses: ./.github/actions/build-android - with: - release-type: ${{ needs.set_release_type.outputs.RELEASE_TYPE }} - gradle-cache-encryption-key: ${{ secrets.GRADLE_CACHE_ENCRYPTION_KEY }} - - build_npm_package: - runs-on: 8-core-ubuntu - needs: - [ - set_release_type, - prepare_hermes_workspace, - build_hermes_macos, - build_hermesc_linux, - build_hermesc_windows, - build_android, - prebuild_apple_dependencies, - ] - container: - image: reactnativecommunity/react-native-android:latest - env: - TERM: "dumb" - GRADLE_OPTS: "-Dorg.gradle.daemon=false" - # By default we only build ARM64 to save time/resources. For release/nightlies, we override this value to build all archs. - ORG_GRADLE_PROJECT_reactNativeArchitectures: "arm64-v8a" - env: - HERMES_WS_DIR: /tmp/hermes - GHA_NPM_TOKEN: ${{ secrets.GHA_NPM_TOKEN }} - ORG_GRADLE_PROJECT_SIGNING_PWD: ${{ secrets.ORG_GRADLE_PROJECT_SIGNING_PWD }} - ORG_GRADLE_PROJECT_SIGNING_KEY: ${{ secrets.ORG_GRADLE_PROJECT_SIGNING_KEY }} - ORG_GRADLE_PROJECT_SONATYPE_USERNAME: ${{ secrets.ORG_GRADLE_PROJECT_SONATYPE_USERNAME }} - ORG_GRADLE_PROJECT_SONATYPE_PASSWORD: ${{ secrets.ORG_GRADLE_PROJECT_SONATYPE_PASSWORD }} - REACT_NATIVE_BOT_GITHUB_TOKEN: ${{ secrets.REACT_NATIVE_BOT_GITHUB_TOKEN }} - steps: - - name: Checkout - uses: actions/checkout@v4 - with: - fetch-depth: 0 - fetch-tags: true - - name: Build and Publish NPM Package - uses: ./.github/actions/build-npm-package - with: - hermes-ws-dir: ${{ env.HERMES_WS_DIR }} - release-type: ${{ needs.set_release_type.outputs.RELEASE_TYPE }} - gha-npm-token: ${{ env.GHA_NPM_TOKEN }} - gradle-cache-encryption-key: ${{ secrets.GRADLE_CACHE_ENCRYPTION_KEY }} - - name: Publish @react-native-community/template - id: publish-template-to-npm - uses: actions/github-script@v6 - with: - github-token: ${{ secrets.REACT_NATIVE_BOT_GITHUB_TOKEN }} - script: | - const {publishTemplate} = require('./.github/workflow-scripts/publishTemplate.js') - const version = "${{ github.ref_name }}" - const isDryRun = false - await publishTemplate(github, version, isDryRun); - - name: Wait for template to be published - timeout-minutes: 3 - uses: actions/github-script@v6 - with: - github-token: ${{ secrets.REACT_NATIVE_BOT_GITHUB_TOKEN }} - script: | - const {verifyPublishedTemplate, isLatest} = require('./.github/workflow-scripts/publishTemplate.js') - const version = "${{ github.ref_name }}" - await verifyPublishedTemplate(version, isLatest()); - - name: Update rn-diff-purge to generate upgrade-support diff - run: | - curl -X POST https://api.github.com/repos/react-native-community/rn-diff-purge/dispatches \ - -H "Accept: application/vnd.github.v3+json" \ - -H "Authorization: Bearer $REACT_NATIVE_BOT_GITHUB_TOKEN" \ - -d "{\"event_type\": \"publish\", \"client_payload\": { \"version\": \"${{ github.ref_name }}\" }}" - - name: Verify Release is on NPM - timeout-minutes: 3 - uses: actions/github-script@v6 - with: - github-token: ${{ secrets.REACT_NATIVE_BOT_GITHUB_TOKEN }} - script: | - const {verifyReleaseOnNpm} = require('./.github/workflow-scripts/verifyReleaseOnNpm.js'); - const {isLatest} = require('./.github/workflow-scripts/publishTemplate.js'); - const version = "${{ github.ref_name }}"; - await verifyReleaseOnNpm(version, isLatest()); diff --git a/packages/react-native/ReactAndroid/build.gradle.kts b/packages/react-native/ReactAndroid/build.gradle.kts index 7658a23fce3b62..796438bc01600f 100644 --- a/packages/react-native/ReactAndroid/build.gradle.kts +++ b/packages/react-native/ReactAndroid/build.gradle.kts @@ -13,18 +13,16 @@ import de.undercouch.gradle.tasks.download.Download import java.nio.file.Paths import org.jetbrains.kotlin.gradle.tasks.KotlinCompile +import org.gradle.api.tasks.bundling.Jar + plugins { + alias(libs.plugins.android.library) id("maven-publish") id("com.facebook.react") - alias(libs.plugins.android.library) alias(libs.plugins.download) alias(libs.plugins.kotlin.android) } -version = project.findProperty("VERSION_NAME")?.toString()!! - -group = "com.facebook.react" - // We download various C++ open-source dependencies into downloads. // We then copy both the downloaded code and our custom makefiles and headers into third-party-ndk. // After that we build native code from src/main/jni with module path pointing at third-party-ndk. @@ -40,7 +38,8 @@ val reactNativeRootDir = projectDir.parent // We put the publishing version from gradle.properties inside ext. so other // subprojects can access it as well. -extra["publishing_version"] = project.findProperty("VERSION_NAME")?.toString()!! +// Use the determined project version +extra["publishing_version"] = project.version // This is the version of CMake we're requesting to the Android SDK to use. // If missing it will be downloaded automatically. Only CMake versions shipped with the @@ -489,15 +488,29 @@ android { // Used to override the NDK path/version on internal CI or by allowing // users to customize the NDK path/version from their root project (e.g. for Apple Silicon // support) - if (rootProject.hasProperty("ndkPath") && rootProject.properties["ndkPath"] != null) { - ndkPath = rootProject.properties["ndkPath"].toString() + val rootProjectNdkPath = rootProject.findProperty("ndkPath")?.toString() + val rootProjectNdkVersion = rootProject.findProperty("ndkVersion")?.toString() + + project.logger.lifecycle("[ReactAndroid] NDK Config: rootProjectNdkPath = '$rootProjectNdkPath'") + project.logger.lifecycle("[ReactAndroid] NDK Config: rootProjectNdkVersion = '$rootProjectNdkVersion'") + project.logger.lifecycle("[ReactAndroid] NDK Config: libs.versions.ndkVersion.get() = '${libs.versions.ndkVersion.get()}'") + + // Rely on root project properties (influenced by ANDROID_NDK and libs.versions.toml via root build.gradle) + // Ensure your ANDROID_NDK env var points to NDK 27.0.12077973 + // Ensure libs.versions.toml has ndkVersion = "27.0.12077973" + if (!rootProjectNdkPath.isNullOrBlank()) { + project.logger.lifecycle("[ReactAndroid] NDK Config: Setting ndkPath from rootProject: '$rootProjectNdkPath'") + ndkPath = rootProjectNdkPath } - if (rootProject.hasProperty("ndkVersion") && rootProject.properties["ndkVersion"] != null) { - ndkVersion = rootProject.properties["ndkVersion"].toString() + + if (!rootProjectNdkVersion.isNullOrBlank()) { + project.logger.lifecycle("[ReactAndroid] NDK Config: Setting ndkVersion from rootProject: '$rootProjectNdkVersion'") + ndkVersion = libs.versions.ndkVersion.get() } else { + project.logger.lifecycle("[ReactAndroid] NDK Config: Fallback: Setting ndkVersion from libs.versions.toml: '${libs.versions.ndkVersion.get()}'") ndkVersion = libs.versions.ndkVersion.get() } - + project.logger.lifecycle("[ReactAndroid] NDK Config: Final applied android.ndkPath='${ndkPath}', android.ndkVersion='${ndkVersion}'") compileOptions { sourceCompatibility = JavaVersion.VERSION_17 targetCompatibility = JavaVersion.VERSION_17 @@ -712,13 +725,81 @@ kotlin { tasks.withType { jvmArgs = listOf("-Xshare:off") } -/* Publishing Configuration */ -apply(from = "./publish.gradle") +// ----------------------------- +// Publishing Configuration +// ----------------------------- +// Upstream ReactNative ships both release & debug AARs to Maven Central via a top‑level publish.gradle. +// Here, we adapt that flow to push our patched artifacts into our GitHub Packages fork. -// We need to override the artifact ID as this project is called `ReactAndroid` but -// the maven coordinates are on `react-android`. -// Please note that the original coordinates, `react-native`, have been voided -// as they caused https://github.com/facebook/react-native/issues/35210 -publishing { - publications { getByName("release", MavenPublication::class) { artifactId = "react-android" } } +// We removed the generic publish.gradle include, opting for an in‑place Kotlin DSL block +// that binds our build artifacts to GitHub Packages. + +afterEvaluate { + // make sure both sources-jar tasks wait for codegen + listOf("releaseSourcesJar", "debugSourcesJar").forEach { name -> + tasks.named(name) { + dependsOn("generateCodegenArtifactsFromSchema") + } + } + + group = "com.facebook.react" + version = "0.79.2" + publishing { + publications { + // 2) Mirror upstream: publish both release and debug components + create("release") { + from(components["release"]) + groupId = "com.facebook.react" + artifactId = "react-android" + version = "0.79.2" + pom { + name.set("Aura Patched ReactAndroid") + description.set("Release build of ReactAndroid AAR for the Aura project.") + url.set("https://github.com/isubscribed/react-native") + } + } + create("debug") { + from(components["debug"]) + groupId = "com.facebook.react" + artifactId = "react-android-debug" + version = "0.79.2" + pom { + name.set("Aura Patched ReactAndroid (Debug)") + description.set("Debug build of ReactAndroid AAR for the Aura project.") + url.set("https://github.com/isubscribed/react-native") + } + } + } + repositories { + maven { + // Push to your fork's GitHub Packages registry + name = "GitHubPackages" + url = uri("https://maven.pkg.github.com/isubscribed/react-native") + credentials { + // try a project property first (so you can set -Pgpr.user=foo locally), + // then fall back to the GitHub Actions env + username = (project.findProperty("gpr.user") as String?) + ?: System.getenv("GITHUB_ACTOR") + password = (project.findProperty("gpr.key") as String?) + ?: System.getenv("GITHUB_TOKEN") + } + } + } + } } + +/********************** + * Some utility tasks + **********************/ + +tasks.register("printComponents") { + doLast { + components.names.forEach { println(it) } + } +} + +tasks.register("printPublications") { + doLast { + println(">>> publications: " + publishing.publications.names) + } +} \ No newline at end of file diff --git a/packages/react-native/gradle/libs.versions.toml b/packages/react-native/gradle/libs.versions.toml index 43c8bb3c463e67..664b9d19b16572 100644 --- a/packages/react-native/gradle/libs.versions.toml +++ b/packages/react-native/gradle/libs.versions.toml @@ -4,7 +4,7 @@ minSdk = "24" targetSdk = "35" compileSdk = "35" buildTools = "35.0.0" -ndkVersion = "27.1.12297006" +ndkVersion = "27.0.12077973" # Dependencies versions agp = "8.8.2" androidx-annotation = "1.6.0"