diff --git a/.github/workflows/build-android.yml b/.github/workflows/build-android.yml index dd39bc0..1820e12 100644 --- a/.github/workflows/build-android.yml +++ b/.github/workflows/build-android.yml @@ -7,52 +7,77 @@ on: paths: - '.github/workflows/build-android.yml' - 'example/android/**' + - 'example/package.json' - '**/nitrogen/generated/shared/**' - '**/nitrogen/generated/android/**' - - 'android/**' - - '**/bun.lock' - - '**/react-native.config.js' - - '**/nitro.json' + - 'packages/react-native-nitro-image/android/**' + - 'packages/react-native-nitro-web-image/android/**' + - 'packages/react-native-nitro-image/package.json' + - 'packages/react-native-nitro-web-image/package.json' + - 'packages/react-native-nitro-image/react-native.config.js' + - 'packages/react-native-nitro-web-image/react-native.config.js' + - 'packages/react-native-nitro-image/nitro.json' + - 'packages/react-native-nitro-web-image/nitro.json' + - 'package.json' + - 'bun.lock' pull_request: paths: - '.github/workflows/build-android.yml' - 'example/android/**' + - 'example/package.json' - '**/nitrogen/generated/shared/**' - '**/nitrogen/generated/android/**' - - 'android/**' - - '**/bun.lock' - - '**/react-native.config.js' - - '**/nitro.json' + - 'packages/react-native-nitro-image/android/**' + - 'packages/react-native-nitro-web-image/android/**' + - 'packages/react-native-nitro-image/package.json' + - 'packages/react-native-nitro-web-image/package.json' + - 'packages/react-native-nitro-image/react-native.config.js' + - 'packages/react-native-nitro-web-image/react-native.config.js' + - 'packages/react-native-nitro-image/nitro.json' + - 'packages/react-native-nitro-web-image/nitro.json' + - 'package.json' + - 'bun.lock' + +env: + # Build a single ABI in CI to keep native compile time down. + TARGET_ANDROID_ARCH: x86_64 jobs: build: name: Build Android Example App runs-on: ubuntu-latest steps: - - uses: actions/checkout@v4 + - uses: actions/checkout@v6 - uses: oven-sh/setup-bun@v2 - name: Install npm dependencies (bun) run: bun install - name: Setup JDK 17 - uses: actions/setup-java@v4 + uses: actions/setup-java@v5 with: distribution: 'zulu' java-version: 17 java-package: jdk - - name: Restore Gradle cache - uses: actions/cache@v4 + - name: Restore Gradle/CMake cache + uses: actions/cache@v5 with: path: | ~/.gradle/caches - key: ${{ runner.os }}-gradle-${{ hashFiles('**/*.gradle*', '**/gradle-wrapper.properties') }} + ~/.gradle/wrapper + example/android/.gradle + example/android/app/.cxx + packages/react-native-nitro-image/android/.cxx + packages/react-native-nitro-web-image/android/.cxx + key: ${{ runner.os }}-gradle-${{ env.TARGET_ANDROID_ARCH }}-${{ hashFiles('**/*.gradle*', '**/gradle-wrapper.properties', '**/CMakeLists.txt', '**/*.cmake') }} restore-keys: | + ${{ runner.os }}-gradle-${{ env.TARGET_ANDROID_ARCH }}- ${{ runner.os }}-gradle- + - name: Run Gradle Build for example/android/ working-directory: example/android - run: ./gradlew assembleDebug --no-daemon --build-cache + run: ./gradlew :app:assembleDebug --no-daemon --build-cache -PreactNativeArchitectures=${{ env.TARGET_ANDROID_ARCH }} # Gradle cache doesn't like daemons - name: Stop Gradle Daemon diff --git a/.github/workflows/build-ios.yml b/.github/workflows/build-ios.yml index 5164b7b..2d492f0 100644 --- a/.github/workflows/build-ios.yml +++ b/.github/workflows/build-ios.yml @@ -7,26 +7,48 @@ on: paths: - '.github/workflows/build-ios.yml' - 'example/ios/**' + - 'example/Gemfile' + - 'example/Gemfile.lock' + - 'example/package.json' - '**/nitrogen/generated/shared/**' - '**/nitrogen/generated/ios/**' - - 'cpp/**' - - 'ios/**' - - '**/Podfile.lock' - - '**/*.podspec' - - '**/react-native.config.js' - - '**/nitro.json' + - 'packages/react-native-nitro-image/ios/**' + - 'packages/react-native-nitro-web-image/ios/**' + - 'example/ios/Podfile' + - 'example/ios/Podfile.lock' + - 'packages/react-native-nitro-image/NitroImage.podspec' + - 'packages/react-native-nitro-web-image/NitroWebImage.podspec' + - 'packages/react-native-nitro-image/package.json' + - 'packages/react-native-nitro-web-image/package.json' + - 'packages/react-native-nitro-image/react-native.config.js' + - 'packages/react-native-nitro-web-image/react-native.config.js' + - 'packages/react-native-nitro-image/nitro.json' + - 'packages/react-native-nitro-web-image/nitro.json' + - 'package.json' + - 'bun.lock' pull_request: paths: - '.github/workflows/build-ios.yml' - 'example/ios/**' + - 'example/Gemfile' + - 'example/Gemfile.lock' + - 'example/package.json' - '**/nitrogen/generated/shared/**' - '**/nitrogen/generated/ios/**' - - 'cpp/**' - - 'ios/**' - - '**/Podfile.lock' - - '**/*.podspec' - - '**/react-native.config.js' - - '**/nitro.json' + - 'packages/react-native-nitro-image/ios/**' + - 'packages/react-native-nitro-web-image/ios/**' + - 'example/ios/Podfile' + - 'example/ios/Podfile.lock' + - 'packages/react-native-nitro-image/NitroImage.podspec' + - 'packages/react-native-nitro-web-image/NitroWebImage.podspec' + - 'packages/react-native-nitro-image/package.json' + - 'packages/react-native-nitro-web-image/package.json' + - 'packages/react-native-nitro-image/react-native.config.js' + - 'packages/react-native-nitro-web-image/react-native.config.js' + - 'packages/react-native-nitro-image/nitro.json' + - 'packages/react-native-nitro-web-image/nitro.json' + - 'package.json' + - 'bun.lock' env: USE_CCACHE: 1 @@ -36,14 +58,24 @@ jobs: name: Build iOS Example App runs-on: macOS-15 steps: - - uses: actions/checkout@v4 + - uses: actions/checkout@v6 - uses: oven-sh/setup-bun@v2 - name: Install npm dependencies (bun) run: bun install - - name: Restore ccache + - name: Install Ccache uses: hendrikmuhs/ccache-action@v1.2 + with: + max-size: 1.5G + key: ${{ runner.os }}-ccache-example-ios + create-symlink: true + - name: Setup ccache behavior + run: | + echo "CCACHE_SLOPPINESS=clang_index_store,file_stat_matches,include_file_ctime,include_file_mtime,ivfsoverlay,pch_defines,modules,system_headers,time_macros" >> $GITHUB_ENV + echo "CCACHE_FILECLONE=true" >> $GITHUB_ENV + echo "CCACHE_DEPEND=true" >> $GITHUB_ENV + echo "CCACHE_INODECACHE=true" >> $GITHUB_ENV - name: Setup Ruby (bundle) uses: ruby/setup-ruby@v1 @@ -56,25 +88,37 @@ jobs: run: sudo xcode-select -s "/Applications/Xcode_16.4.app/Contents/Developer" - name: Restore Pods cache - uses: actions/cache@v4 + uses: actions/cache@v5 with: path: example/ios/Pods - key: ${{ runner.os }}-pods-${{ hashFiles('**/Podfile.lock', '**/Gemfile.lock') }} + key: ${{ runner.os }}-pods-${{ hashFiles('example/ios/Podfile.lock', 'example/Gemfile.lock') }} restore-keys: | ${{ runner.os }}-pods- - name: Install Pods working-directory: example run: bun pods + - name: Restore DerivedData cache + uses: actions/cache@v5 + with: + path: example/ios/build + key: ${{ runner.os }}-dd-${{ hashFiles('example/ios/Podfile.lock', 'example/Gemfile.lock', 'example/package.json', 'package.json', 'bun.lock') }}-xcode16.4 + restore-keys: | + ${{ runner.os }}-dd- + - name: Build App working-directory: example/ios - run: "set -o pipefail && xcodebuild \ - CC=clang CPLUSPLUS=clang++ LD=clang LDPLUSPLUS=clang++ \ - -derivedDataPath build -UseModernBuildSystem=YES \ - -workspace NitroImageExample.xcworkspace \ - -scheme NitroImageExample \ - -sdk iphonesimulator \ - -configuration Debug \ - -destination 'platform=iOS Simulator,name=iPhone 16' \ - build \ - CODE_SIGNING_ALLOWED=NO" + run: | + set -o pipefail + xcodebuild \ + CC=clang CPLUSPLUS=clang++ LD=clang LDPLUSPLUS=clang++ \ + -derivedDataPath build -UseModernBuildSystem=YES \ + -workspace NitroImageExample.xcworkspace \ + -scheme NitroImageExample \ + -sdk iphonesimulator \ + -configuration Debug \ + -destination 'platform=iOS Simulator,name=iPhone 16' \ + -showBuildTimingSummary \ + ONLY_ACTIVE_ARCH=YES \ + build \ + CODE_SIGNING_ALLOWED=NO