Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
67 commits
Select commit Hold shift + click to select a range
69caf1f
chore: move RN CLI example app to dedicated folder
artus9033 Dec 10, 2025
7c3025f
feat: bootstrap CLI & add Android commands
artus9033 Dec 10, 2025
3a402e5
docs: added CLI docs
artus9033 Dec 10, 2025
554ceb4
fix: update path to root project in metro and react-native config files
artus9033 Dec 10, 2025
106e4a6
chore: upgraded pods in example app
artus9033 Dec 11, 2025
b1d9510
feat: ios support PoC using Rock utilities
artus9033 Dec 11, 2025
01ad7b4
chore: bootstrap new RN app with RN CLI
artus9033 Dec 11, 2025
7531c35
feat: integrate brownfield into demo Android RN app
artus9033 Dec 11, 2025
a570af0
chore: bootstrap demo android app
artus9033 Dec 11, 2025
b234988
feat: integrate brownfield RN lib into demo native Android app
artus9033 Dec 12, 2025
f24d8af
ci: added CI for new Android app
artus9033 Dec 12, 2025
3218e2f
docs: updated links to apps in docs
artus9033 Dec 12, 2025
c14f9d7
chore: bootstrap demo iOS app
artus9033 Dec 12, 2025
e0f2d2f
feat: added brownfield framework target to RN iOS app
artus9033 Dec 12, 2025
37c3700
ci: added pipeline for new iOS app
artus9033 Dec 12, 2025
6c51de4
feat: better logging in verbose mode in the CLI
artus9033 Dec 12, 2025
aa103e3
feat: cleanup cli flags for CLI
artus9033 Dec 12, 2025
ec1b6c0
chore: re-add brownfield target to RN iOS project
artus9033 Dec 12, 2025
156bb47
chore: use static frameworks in RN iOS app
artus9033 Dec 12, 2025
3cb8f89
fix: cli for iOS
artus9033 Dec 18, 2025
6bd8605
chore: deintegrate old, obsolete example app
artus9033 Dec 18, 2025
b9d77cd
docs: added README in example/ directory
artus9033 Dec 18, 2025
00d8750
chore: static frameworks in RNApp
artus9033 Dec 19, 2025
de3a21e
feat: pod install in CLI
artus9033 Dec 19, 2025
56a02d5
feat: simplify iOS CLI logic, add xcframework merging
artus9033 Dec 19, 2025
6d3875e
feat: integrate brownfield with demo iOS app
artus9033 Dec 19, 2025
41ba000
feat: new, nicer UI in demo Android app
artus9033 Dec 19, 2025
9d6b18c
ci: build Release variants
artus9033 Dec 19, 2025
948eac6
chore: remove obsolete tag in AndroidManifest.xml
artus9033 Dec 19, 2025
964c6b5
Merge branch 'main' into feat/cli-and-rework
artus9033 Jan 2, 2026
5690431
chore: move cli sources and configuration after merge
artus9033 Jan 2, 2026
c5a51fd
chore: proper turborepo configuration
artus9033 Jan 2, 2026
cb9f696
chore: provide brownfield bin
artus9033 Jan 2, 2026
8f161de
fix(ci): fix ci
artus9033 Jan 2, 2026
8e0b6bb
fix: paths in demo RNApp configuration
artus9033 Jan 3, 2026
a530ed0
fix: respect --no-install-pods CLI option
artus9033 Jan 3, 2026
d59f2b1
ci: merge workflows
artus9033 Jan 3, 2026
3c728dc
ci: build iOS Release configuration
artus9033 Jan 3, 2026
4fe7530
chore: remove yarn.lock in RNApp
artus9033 Jan 3, 2026
268c52b
chore: rename CI workflow, add badge to README.md
artus9033 Jan 3, 2026
989c47a
chore: move tester app, reorganize CI workflow
artus9033 Jan 3, 2026
df26f82
fix(ci): fix CLI commands in CI
artus9033 Jan 3, 2026
aaeeb85
fix(ci): use first available iOS simulator
artus9033 Jan 3, 2026
c7d682e
fix(ci): right path to the CLI
artus9033 Jan 3, 2026
2763916
fix(ci): use any iOS target
artus9033 Jan 3, 2026
639361b
fix(ci): proper native app build commands
artus9033 Jan 3, 2026
15b08f4
chore: add android / ios scripts to run the RN app
artus9033 Jan 4, 2026
bbd5f2a
chore: rework turbo repo config
artus9033 Jan 4, 2026
7199d27
chore: add CONTRIBUTING.md and describe demo apps in docs
artus9033 Jan 4, 2026
032ea0e
ci: use Turbo tasks instead of manual commands
artus9033 Jan 4, 2026
33c29bf
ci: cache Turbo caches on GH Actions
artus9033 Jan 4, 2026
213eb0f
fix: move build:brownfield task to turbo repo root
artus9033 Jan 4, 2026
77981c9
fix: iOS app script name
artus9033 Jan 4, 2026
5ad0ffd
ci: build framework only for iphoneos to speed up
artus9033 Jan 4, 2026
37f6641
ci: build iOS artifact for iphonesimulator to match consumer app dest…
artus9033 Jan 4, 2026
7feec98
chore: add linting of gradle plugins to the lint job
artus9033 Jan 7, 2026
edc5573
fix: add eslint dev-dependency to react-native-brownfield
artus9033 Jan 7, 2026
ef70d95
chore: deintegrate CLI from this PR
artus9033 Jan 7, 2026
e81d2a4
ci: cache tester app in CI
artus9033 Jan 7, 2026
0e68071
chore: remove cli bin entry from yarn.lock
artus9033 Jan 7, 2026
fb99767
chore: rename tester-integrated directory to TesterIntegrated
artus9033 Jan 7, 2026
d5c11f5
chore: embed frameworks in Apple example app
artus9033 Jan 7, 2026
4529998
fix(ci): fix caching keys
artus9033 Jan 7, 2026
4ffde99
ci: rename caching steps
artus9033 Jan 7, 2026
290a4b2
ci: cache gradle files
artus9033 Jan 7, 2026
74ce796
chore: enable ccache in Podfiles
artus9033 Jan 7, 2026
1fe8fd2
chore: separate script for linting gradle plugin sources
artus9033 Jan 7, 2026
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
11 changes: 11 additions & 0 deletions .github/actions/setup/action.yml
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,17 @@ runs:
node-version: 'lts/*'
cache: 'yarn'

- name: Restore turbo cache
uses: actions/cache@v5
with:
path: |
.turbo
apps/*/.turbo
packages/*/.turbo
key: ${{ runner.os }}-turbo-${{ hashFiles('.turbo', '**/.turbo') }}
restore-keys: |
${{ runner.os }}-turbo-
- name: Install dependencies
run: yarn install
shell: bash
78 changes: 0 additions & 78 deletions .github/workflows/build.yml

This file was deleted.

121 changes: 119 additions & 2 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -6,8 +6,12 @@ on:
pull_request:
branches: [main]

env:
USE_CCACHE: 1

jobs:
lint:
build-lint:
name: Build & static code analysis
runs-on: ubuntu-latest
steps:
- name: Checkout
Expand All @@ -16,11 +20,124 @@ jobs:
- name: Setup
uses: ./.github/actions/setup

- name: Build package
- name: Build packages
run: yarn build

- name: Lint files
run: yarn lint

- name: Typecheck files
run: yarn typecheck

tester-android:
name: Integrated tester Android App
runs-on: ubuntu-latest
needs: build-lint

steps:
- name: Checkout
uses: actions/checkout@v4

- name: Setup Java
uses: actions/setup-java@v4
with:
distribution: 'zulu'
java-version: '17'

- name: Setup Node.js
uses: actions/setup-node@v4
with:
node-version: 'lts/*'
cache: 'yarn'

- name: Install dependencies
run: yarn install

- name: Build packages
run: yarn build

- name: Restore android build cache
uses: actions/cache@v5
with:
path: |
apps/TesterIntegrated/kotlin/build
apps/TesterIntegrated/kotlin/app/.cxx
apps/TesterIntegrated/kotlin/app/build
key: ${{ runner.os }}-tester-android-build-${{ github.sha }}
restore-keys: |
${{ runner.os }}-tester-android-build-

- name: Resture Gradle cache
uses: actions/cache@v5
with:
path: |
~/.gradle/caches
~/.gradle/wrapper
key: ${{ runner.os }}-tester-integrated-android-gradle-${{ hashFiles('**/*.gradle*', '**/gradle-wrapper.properties') }}
restore-keys: |
${{ runner.os }}-tester-integrated-android-gradle-

- name: Build integrated Android tester app
run: yarn run build:tester-integrated:android

tester-ios:
name: Integrated tester iOS App
runs-on: macos-latest
needs: build-lint

steps:
- name: Checkout
uses: actions/checkout@v4

- name: Use appropriate Xcode version
uses: maxim-lobanov/setup-xcode@60606e260d2fc5762a71e64e74b2174e8ea3c8bd # v1.6.0
with:
xcode-version: '16'

- name: Setup Node.js
uses: actions/setup-node@v4
with:
node-version: 'lts/*'
cache: 'yarn'

- name: Restore ccache
uses: hendrikmuhs/ccache-action@v1.2

- name: Setup Ruby
uses: ruby/setup-ruby@v1
with:
ruby-version: '3.2'
bundler-cache: true

- name: Install dependencies
run: yarn install

- name: Build packages
run: yarn build

- name: Restore Pods cache
uses: actions/cache@v5
with:
path: |
apps/TesterIntegrated/swift/Pods
key: ${{ runner.os }}-tester-ios-pods-${{ hashFiles('apps/TesterIntegrated/swift/Podfile.lock') }}
restore-keys: |
${{ runner.os }}-tester-ios-pods-

- name: Install pods
run: |
cd apps/TesterIntegrated/swift
pod install

- name: Restore iOS build cache
uses: actions/cache@v5
with:
path: |
apps/TesterIntegrated/swift/build
key: ${{ runner.os }}-tester-ios-build-${{ github.sha }}
restore-keys: |
${{ runner.os }}-tester-ios-build-

- name: Build integrated iOS tester app
run: |
yarn run build:tester-integrated:ios
6 changes: 3 additions & 3 deletions .github/workflows/gradle-plugin-lint.yml
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@ name: ktlint and detekt

on:
push:
branches: [ "main" ]
branches: ['main']
pull_request:
branches: [main]

Expand All @@ -24,8 +24,8 @@ jobs:
distribution: temurin
java-version: 17

- name: Cache Gradle
uses: actions/cache@v4
- name: Restore Gradle cache
uses: actions/cache@v5
with:
path: |
~/.gradle/caches
Expand Down
26 changes: 26 additions & 0 deletions CONTRIBUTING.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
# Contributing to React Native Brownfield

## Project setup

Run `yarn` in the root of the repository to install all dependencies.

Depending on your needs, you may need to install CocoaPods in a subset of the below directories:
- example React Native iOS app: `cd apps/RNApp/ios && pod install`
- integrated iOS tester app: `cd apps/TesterIntegrated/swift && pod install`

## Scripts

- `lint` - runs linting on all JS/TS source files in the monorepo *[Turbo]*
- `gradle-plugin:lint` - runs linting on the Brownfield Gradle plugin source code
- `typecheck` - runs TypeScript type checking on all TS source files in the monorepo *[Turbo]*
- `build` - runs all `build*` tasks in the Turbo repo - see below for more details *[Turbo]*
- `release` - releases a new version of React Native Brownfield package using `release-it`
- `brownfield:plugin:publish:local` - publishes the Brownfield Gradle plugin to your local Maven repository for testing purposes
- `build:brownfield` - builds the React Native Brownfield package (`packages/react-native-brownfield`) *[Turbo]*
- `build:docs` - builds the documentation site (`docs/`) *[Turbo]*
- `build:tester-integrated:android` - builds the Android integrated tester app (`apps/TesterIntegrated/android`) *[Turbo]*
- `build:tester-integrated:ios` - builds the iOS integrated tester app (`apps/TesterIntegrated/swift`) *[Turbo]*
- `build:example:android-rn` - builds the example React Native app for Android (`apps/RNApp/android`) *[Turbo]*
- `build:example:ios-rn` - builds the example React Native app for iOS (`apps/RNApp/ios`) *[Turbo]*
- `build:example:android-consumer` - builds the example native Android consumer app (`apps/AndroidApp`) *[Turbo]*
- `build:example:ios-consumer` - builds the example native Apple consumer app (`apps/AppleApp`) *[Turbo]*
1 change: 1 addition & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -62,6 +62,7 @@ This project follows the [all-contributors](https://github.com/kentcdodds/all-co

[build-badge]: https://img.shields.io/circleci/build/github/callstack/react-native-brownfield/master.svg?style=flat-square
[build]: https://circleci.com/gh/callstack/react-native-brownfield
[ci]: https://github.com/callstack/react-native-brownfield/actions/workflows/ci.yml/badge.svg
[version-badge]: https://img.shields.io/npm/v/@callstack/react-native-brownfield.svg?style=flat-square
[package]: https://www.npmjs.com/package/@callstack/react-native-brownfield
[license-badge]: https://img.shields.io/npm/l/@callstack/react-native-brownfield.svg?style=flat-square
Expand Down
15 changes: 15 additions & 0 deletions apps/AndroidApp/.gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
*.iml
.gradle
/local.properties
/.idea/caches
/.idea/libraries
/.idea/modules.xml
/.idea/workspace.xml
/.idea/navEditor.xml
/.idea/assetWizardSettings.xml
.DS_Store
/build
/captures
.externalNativeBuild
.cxx
local.properties
1 change: 1 addition & 0 deletions apps/AndroidApp/app/.gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
/build
71 changes: 71 additions & 0 deletions apps/AndroidApp/app/build.gradle.kts
Original file line number Diff line number Diff line change
@@ -0,0 +1,71 @@
plugins {
alias(libs.plugins.android.application)
alias(libs.plugins.kotlin.android)
alias(libs.plugins.kotlin.compose)
}

configurations.all {
resolutionStrategy {
// force Gradle to always check for new versions of changing modules
cacheChangingModulesFor(0, "seconds")
cacheDynamicVersionsFor(0, "seconds")
}
}

android {
namespace = "com.callstack.brownfield.android.example"
compileSdk {
version = release(36)
}

defaultConfig {
applicationId = "com.callstack.brownfield.android.example"
minSdk = 24
targetSdk = 36
versionCode = 1
versionName = "1.0"

testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner"
}

buildTypes {
release {
isMinifyEnabled = false
proguardFiles(
getDefaultProguardFile("proguard-android-optimize.txt"),
"proguard-rules.pro"
)
}
}
compileOptions {
sourceCompatibility = JavaVersion.VERSION_11
targetCompatibility = JavaVersion.VERSION_11
}
kotlinOptions {
jvmTarget = "11"
}
buildFeatures {
compose = true
}
}

dependencies {
implementation(libs.androidx.core.ktx)
implementation(libs.androidx.lifecycle.runtime.ktx)
implementation(libs.androidx.activity.compose)
implementation(platform(libs.androidx.compose.bom))
implementation(libs.androidx.compose.ui)
implementation(libs.androidx.compose.ui.graphics)
implementation(libs.androidx.compose.ui.tooling.preview)
implementation(libs.androidx.compose.material3)
implementation(libs.androidx.appcompat)
implementation(libs.brownfieldlib)
implementation(libs.androidx.fragment.compose)
testImplementation(libs.junit)
androidTestImplementation(libs.androidx.junit)
androidTestImplementation(libs.androidx.espresso.core)
androidTestImplementation(platform(libs.androidx.compose.bom))
androidTestImplementation(libs.androidx.compose.ui.test.junit4)
debugImplementation(libs.androidx.compose.ui.tooling)
debugImplementation(libs.androidx.compose.ui.test.manifest)
}
Loading