Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 5 additions & 0 deletions .changeset/itchy-nails-visit.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
---
'@rock-js/platform-apple-helpers': patch
---

fix: debug logs in mergeFrameworks not showing path to removed framework before writing merge output
6 changes: 6 additions & 0 deletions .changeset/itchy-spoons-trade.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
---
'@rock-js/plugin-brownfield-android': patch
'@rock-js/plugin-brownfield-ios': patch
---

feat: expose logic of brownfield plugin actions
2 changes: 1 addition & 1 deletion .github/pr-labeler.yml
Original file line number Diff line number Diff line change
Expand Up @@ -3,4 +3,4 @@
'release: bug fix':
- '/^fix/'
'release: breaking change':
- '/^breaking/'
- '/^breaking/'
2 changes: 1 addition & 1 deletion packages/cli/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -32,7 +32,7 @@ Choose your path based on your current situation:

### Creating a new project

> [!TIP]
> [!TIP]
> For **new projects**, we recommend starting with [Expo](https://expo.dev) for the best developer experience and similar remote caching capabilities. Rock is designed for teams who have outgrown the Community CLI.

To create a fresh React Native app with Rock, open a terminal and run:
Expand Down
4 changes: 2 additions & 2 deletions packages/cli/src/lib/plugins/fingerprint.ts
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
import { createHash } from 'node:crypto';
import { performance } from 'node:perf_hooks';
import type { PluginApi } from '@rock-js/config';
import type { FingerprintInputHash, FingerprintSources } from '@rock-js/tools';
import type { FingerprintInputHash, FingerprintOptions } from '@rock-js/tools';
import {
color,
intro,
Expand Down Expand Up @@ -39,7 +39,7 @@ type NativeFingerprintCommandOptions = {

export async function nativeFingerprintCommand(
path: string,
{ extraSources, ignorePaths, env }: FingerprintSources,
{ extraSources, ignorePaths, env }: FingerprintOptions,
options: NativeFingerprintCommandOptions,
) {
validateOptions(options);
Expand Down
4 changes: 2 additions & 2 deletions packages/cli/src/lib/plugins/remoteCache.ts
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@ import fs from 'node:fs';
import os from 'node:os';
import path from 'node:path';
import type { PluginApi, PluginOutput } from '@rock-js/config';
import type { FingerprintSources, RemoteBuildCache } from '@rock-js/tools';
import type { FingerprintOptions, RemoteBuildCache } from '@rock-js/tools';
import {
color,
colorLink,
Expand Down Expand Up @@ -48,7 +48,7 @@ async function remoteCache({
args: Flags;
remoteCacheProvider: null | (() => RemoteBuildCache);
projectRoot: string;
fingerprintOptions: FingerprintSources;
fingerprintOptions: FingerprintOptions;
}) {
const isJsonOutput = args.json;
if (!remoteCacheProvider) {
Expand Down
8 changes: 4 additions & 4 deletions packages/config/src/lib/config.ts
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@ import * as fs from 'node:fs';
import { createRequire } from 'node:module';
import * as path from 'node:path';
import { pathToFileURL } from 'node:url';
import type { FingerprintSources, RemoteBuildCache } from '@rock-js/tools';
import type { FingerprintOptions, RemoteBuildCache } from '@rock-js/tools';
import { colorLink, getReactNativeVersion, logger } from '@rock-js/tools';
import type { ValidationError } from 'joi';
import { ConfigTypeSchema } from './schema.js';
Expand Down Expand Up @@ -54,7 +54,7 @@ export type PluginApi = {
getRemoteCacheProvider: () => Promise<
null | undefined | (() => RemoteBuildCache)
>;
getFingerprintOptions: () => FingerprintSources;
getFingerprintOptions: () => FingerprintOptions;
getBundlerStart: () => ({ args }: { args: DevServerArgs }) => void;
getUsePrebuiltRNCore: () => number | undefined;
};
Expand Down Expand Up @@ -103,7 +103,7 @@ export type ConfigType = {
ignorePaths?: string[];
env?: string[];
};
usePrebuiltRNCore?: number,
usePrebuiltRNCore?: number;
};

export type ConfigOutput = {
Expand Down Expand Up @@ -219,7 +219,7 @@ Read more: ${colorLink('https://rockjs.dev/docs/configuration#github-actions-pro
return validatedConfig.remoteCacheProvider;
},
getFingerprintOptions: () =>
validatedConfig.fingerprint as FingerprintSources,
validatedConfig.fingerprint as FingerprintOptions,
getBundlerStart:
() =>
({ args }: { args: DevServerArgs }) => {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@ import * as fs from 'node:fs';
import * as path from 'node:path';
import { cleanup, getTempDirectory, writeFiles } from '@rock-js/test-helpers';
import * as tools from '@rock-js/tools';
import { updateAndroidBuildGradle } from "../initInExistingProject.js";
import { updateAndroidBuildGradle } from '../initInExistingProject.js';

const directory = getTempDirectory('test_updateAndroidBuildGradle');

Expand Down Expand Up @@ -61,15 +61,23 @@ describe('updateAndroidBuildGradle', () => {
},
];

it.each(workingCases)('should update the Android build.gradle file when $name', ({ content, expected }) => {
const files = {
'android/app/build.gradle': content,
};
writeFiles(directory, files);
updateAndroidBuildGradle(directory, 'android');

expect(fs.readFileSync(path.join(directory, 'android/app/build.gradle'), 'utf8')).toStrictEqual(expected)
});
it.each(workingCases)(
'should update the Android build.gradle file when $name',
({ content, expected }) => {
const files = {
'android/app/build.gradle': content,
};
writeFiles(directory, files);
updateAndroidBuildGradle(directory, 'android');

expect(
fs.readFileSync(
path.join(directory, 'android/app/build.gradle'),
'utf8',
),
).toStrictEqual(expected);
},
);

it('should not update the Android build.gradle file when cliFile is already set', () => {
const content = `
Expand All @@ -84,7 +92,9 @@ describe('updateAndroidBuildGradle', () => {
writeFiles(directory, files);
updateAndroidBuildGradle(directory, 'android');

expect(fs.readFileSync(path.join(directory, 'android/app/build.gradle'), 'utf8')).toStrictEqual(content)
expect(
fs.readFileSync(path.join(directory, 'android/app/build.gradle'), 'utf8'),
).toStrictEqual(content);
});

it('should display a warning when unable to update the Android build.gradle file', () => {
Expand All @@ -101,10 +111,12 @@ describe('updateAndroidBuildGradle', () => {
writeFiles(directory, files);
updateAndroidBuildGradle(directory, 'android');

expect(fs.readFileSync(path.join(directory, 'android/app/build.gradle'), 'utf8')).toStrictEqual(content)
expect(
fs.readFileSync(path.join(directory, 'android/app/build.gradle'), 'utf8'),
).toStrictEqual(content);

expect(warn).toHaveBeenCalledWith(
expect.stringContaining('Unable to update')
)
expect.stringContaining('Unable to update'),
);
});
});
1 change: 1 addition & 0 deletions packages/platform-android/src/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@ export {
options as packageAarOptions,
} from './lib/commands/aar/packageAar.js';
export {
type PublishLocalAarFlags,
publishLocalAar,
options as publishLocalAarOptions,
} from './lib/commands/aar/publishLocalAar.js';
32 changes: 11 additions & 21 deletions packages/platform-android/src/lib/commands/aar/packageAar.ts
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
import type { RockCLIOptions } from '@rock-js/tools';
import { outro } from '@rock-js/tools';
import { runGradleAar } from '../runGradle.js';
import { toPascalCase } from '../toPascalCase.js';
Expand All @@ -12,35 +13,24 @@ export type PackageAarFlags = {
moduleName?: string;
};

export async function packageAar(
aarProject: AarProject,
args: PackageAarFlags,
) {
normalizeArgs(args);
export async function packageAar(aarProject: AarProject, variant: string) {
normalizeVariant(variant);
const tasks = [`assemble${toPascalCase(variant)}`];

const tasks = [`assemble${toPascalCase(args.variant)}`];

await runGradleAar({ tasks, aarProject, variant: args.variant });
await runGradleAar({ tasks, aarProject, variant });
outro('Success 🎉.');
}

export async function localPublishAar(
aarProject: AarProject,
args: PackageAarFlags,
) {
export async function localPublishAar(aarProject: AarProject, variant: string) {
const tasks = ['publishToMavenLocal'];

await runGradleAar({
tasks,
aarProject,
variant: args.variant,
});
await runGradleAar({ tasks, aarProject, variant });
outro('Success 🎉.');
}

function normalizeArgs(args: PackageAarFlags) {
if (!args.variant) {
args.variant = 'debug';
function normalizeVariant(variant: string) {
if (!variant) {
variant = 'debug';
}
}

Expand All @@ -54,4 +44,4 @@ export const options = [
name: '--module-name <string>',
description: 'AAR module name',
},
];
] satisfies RockCLIOptions;
Original file line number Diff line number Diff line change
@@ -1,7 +1,12 @@
import type { RockCLIOptions } from '@rock-js/tools';
import { outro } from '@rock-js/tools';
import { runGradleAar } from '../runGradle.js';
import type { AarProject } from './packageAar.js';

export type PublishLocalAarFlags = {
moduleName?: string;
};

export async function publishLocalAar(aarProject: AarProject) {
const tasks = ['publishToMavenLocal'];

Expand All @@ -17,4 +22,4 @@ export const options = [
name: '--module-name <string>',
description: 'AAR module name',
},
];
] satisfies RockCLIOptions;
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
import type { AndroidProjectConfig } from '@react-native-community/cli-types';
import type { RemoteBuildCache } from '@rock-js/tools';
import type { RemoteBuildCache, RockCLIOptions } from '@rock-js/tools';
import {
colorLink,
type FingerprintSources,
type FingerprintOptions,
formatArtifactName,
getBinaryPath,
logger,
Expand All @@ -28,7 +28,7 @@ export async function buildAndroid(
args: BuildFlags,
projectRoot: string,
remoteCacheProvider: null | (() => RemoteBuildCache) | undefined,
fingerprintOptions: FingerprintSources,
fingerprintOptions: FingerprintOptions,
) {
normalizeArgs(args);
// Use assemble task by default, but bundle if the flag is set
Expand Down Expand Up @@ -104,4 +104,4 @@ export const options = [
name: '--local',
description: 'Force local build with Gradle wrapper.',
},
];
] satisfies RockCLIOptions;
Original file line number Diff line number Diff line change
Expand Up @@ -313,7 +313,7 @@ test.each([['release'], ['debug'], ['staging']])(
{ ...args, variant },
'/',
undefined,
{ extraSources: [], ignorePaths: [], env: [] },
{ extraSources: [], ignorePaths: [], env: [], platform: 'android' },
vi.fn(), // startDevServer mock
'/path/to/react-native', // reactNativePath
'0.79.0', // reactNativeVersion
Expand Down Expand Up @@ -365,7 +365,7 @@ test('runAndroid runs gradle build with custom --appId, --appIdSuffix and --main
},
'/',
undefined,
{ extraSources: [], ignorePaths: [], env: [] },
{ extraSources: [], ignorePaths: [], env: [], platform: 'android' },
vi.fn(), // startDevServer mock
'/path/to/react-native', // reactNativePath
'0.79.0', // reactNativeVersion
Expand Down Expand Up @@ -395,7 +395,7 @@ test('runAndroid fails to launch an app on not-connected device when specified w
{ ...args, device: 'emulator-5554' },
'/',
undefined,
{ extraSources: [], ignorePaths: [], env: [] },
{ extraSources: [], ignorePaths: [], env: [], platform: 'android' },
vi.fn(), // startDevServer mock
'/path/to/react-native', // reactNativePath
'0.79.0', // reactNativeVersion
Expand Down Expand Up @@ -468,7 +468,7 @@ test.each([['release'], ['debug']])(
{ ...args, device: 'emulator-5554', variant },
'/',
undefined,
{ extraSources: [], ignorePaths: [], env: [] },
{ extraSources: [], ignorePaths: [], env: [], platform: 'android' },
vi.fn(), // startDevServer mock
'/path/to/react-native', // reactNativePath
'0.79.0', // reactNativeVersion
Expand Down Expand Up @@ -538,6 +538,7 @@ test('runAndroid launches an app on all connected devices', async () => {
extraSources: [],
ignorePaths: [],
env: [],
platform: 'android',
},
vi.fn(),
'/path/to/react-native',
Expand Down Expand Up @@ -609,7 +610,7 @@ test('runAndroid skips building when --binary-path is passed', async () => {
},
'/root',
undefined,
{ extraSources: [], ignorePaths: [], env: [] },
{ extraSources: [], ignorePaths: [], env: [], platform: 'android' },
vi.fn(), // startDevServer mock
'/path/to/react-native', // reactNativePath
'0.79.0', // reactNativeVersion
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ import type {
Config,
} from '@react-native-community/cli-types';
import type { StartDevServerArgs } from '@rock-js/config';
import type { FingerprintSources, RemoteBuildCache } from '@rock-js/tools';
import type { FingerprintOptions, RemoteBuildCache } from '@rock-js/tools';
import {
color,
formatArtifactName,
Expand Down Expand Up @@ -50,7 +50,7 @@ export async function runAndroid(
args: Flags,
projectRoot: string,
remoteCacheProvider: null | (() => RemoteBuildCache) | undefined,
fingerprintOptions: FingerprintSources,
fingerprintOptions: FingerprintOptions,
startDevServer: (options: StartDevServerArgs) => void,
reactNativeVersion: string,
reactNativePath: string,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -20,9 +20,7 @@ export async function tryInstallAppOnDevice(
) {
let deviceId: string;
if (!device.deviceId) {
logger.debug(
`No "deviceId" for ${device}, skipping launching the app`,
);
logger.debug(`No "deviceId" for ${device}, skipping launching the app`);
return;
} else {
deviceId = device.deviceId;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -11,9 +11,7 @@ export async function tryLaunchAppOnDevice(
) {
let deviceId;
if (!device.deviceId) {
logger.debug(
`No "deviceId" for ${device}, skipping launching the app`,
);
logger.debug(`No "deviceId" for ${device}, skipping launching the app`);
return {};
} else {
deviceId = device.deviceId;
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
import fs from 'node:fs';
import path from 'node:path';
import type { FingerprintSources, RemoteBuildCache } from '@rock-js/tools';
import type { FingerprintOptions, RemoteBuildCache } from '@rock-js/tools';
import {
colorLink,
formatArtifactName,
Expand Down Expand Up @@ -37,7 +37,7 @@ export const createBuild = async ({
args: BuildFlags;
projectRoot: string;
reactNativePath: string;
fingerprintOptions: FingerprintSources;
fingerprintOptions: FingerprintOptions;
remoteCacheProvider: null | (() => RemoteBuildCache) | undefined;
usePrebuiltRNCore?: number;
}) => {
Expand Down
Loading
Loading