Files
react-native/packages/react-native-popup-menu-android/scripts/prepublish-popup-menu-android.js
Nicola CortiandFacebook GitHub Bot e96396bd18 Fix @react-native/popup-menu-android not building for 3rd party developers (#49212)
Summary:
Pull Request resolved: https://github.com/facebook/react-native/pull/49212

Currently, developers can't use `popup-menu-android` at all because the Gradle file we publish is referencing
internal machinery.

I'm adding a pre-publish script that manipulates the Gradle. This is the easiest solution without having to do
crazy setup inside RNGP or having duplicated version codes around in the monorepo.

Fixes https://github.com/facebook/react-native/issues/49112

Changelog:
[Android] [Fixed] - Fix react-native/popup-menu-android not building for 3rd party developers

Reviewed By: cipolleschi

Differential Revision: D69192874

fbshipit-source-id: 9f9e8a0a6e76308e598a09f4c70dbc659c238b00
2025-02-06 05:47:37 -08:00

47 lines
1.6 KiB
JavaScript

/**
* Copyright (c) Meta Platforms, Inc. and affiliates.
*
* This source code is licensed under the MIT license found in the
* LICENSE file in the root directory of this source tree.
*/
/*
* This script is used to update the android/build.gradle.kts file
* with the versions from the libs.versions.toml file.
*
* This is needed because this package is consumed from source from
* external users and we don't want to have several SDK version around to
* maintain.
*
* It's invoked as a prepublish script for this package.
*/
function extractVersion(tomlContent, regex) {
const match = tomlContent.match(regex);
return match && match[1] ? match[1] : null;
}
const fs = require('fs');
const buildGradleKtsPath = 'android/build.gradle.kts';
const libsVersionsTomlPath = '../react-native/gradle/libs.versions.toml';
console.log(`Updating ${buildGradleKtsPath} with versions from ${libsVersionsTomlPath}...`);
let gradleContent = fs.readFileSync(buildGradleKtsPath, 'utf8');
const tomlContent = fs.readFileSync(libsVersionsTomlPath, 'utf8');
const compileSdk = extractVersion(tomlContent, /compileSdk\s*=\s*"(\d+)"/);
const minSdk = extractVersion(tomlContent, /minSdk\s*=\s*"(\d+)"/);
const buildTools = extractVersion(tomlContent, /buildTools\s*=\s*"([\d.]+)"/);
gradleContent = gradleContent
.replace('libs.versions.compileSdk.get().toInt()', compileSdk)
.replace('libs.versions.minSdk.get().toInt()', minSdk)
.replace('libs.versions.buildTools.get()', `"${buildTools}"`)
.replace('project(":packages:react-native:ReactAndroid")', '"com.facebook.react:react-android"');
fs.writeFileSync(buildGradleKtsPath, gradleContent);
console.log('Done!');