Skip to content

Stack update (latest RN Fabric support, TypeScript migration, example rebooted, CI tested) #17

Stack update (latest RN Fabric support, TypeScript migration, example rebooted, CI tested)

Stack update (latest RN Fabric support, TypeScript migration, example rebooted, CI tested) #17

Workflow file for this run

name: CI
on:
push:
branches: [main, master]
pull_request:
branches: [main, master]
concurrency:
group: ${{ github.workflow }}-${{ github.ref }}
cancel-in-progress: true
jobs:
lint-and-type-check:
name: Code Quality (Strict)
runs-on: ubuntu-latest
steps:
- name: Checkout code
uses: actions/checkout@v4
- name: Setup Node.js
uses: actions/setup-node@v4
with:
node-version: '20'
cache: 'npm'
- name: Install dependencies
run: npm ci
- name: Check formatting (no prettier diff allowed)
run: npm run format:check
- name: Run TypeScript type check (strict)
run: npm run type-check
- name: Run linter (strict - no warnings allowed)
run: npm run lint:ci
- name: Build project
run: npm run build
build-android:
name: Build Android APK
runs-on: ubuntu-latest
needs: lint-and-type-check
steps:
- name: Checkout code
uses: actions/checkout@v4
- name: Setup Node.js
uses: actions/setup-node@v4
with:
node-version: '20'
cache: 'npm'
- name: Setup Java JDK
uses: actions/setup-java@v4
with:
distribution: 'temurin'
java-version: '17'
- name: Cache Gradle
uses: actions/cache@v4
with:
path: |
~/.gradle/caches
~/.gradle/wrapper
key: ${{ runner.os }}-gradle-${{ hashFiles('**/*.gradle*', '**/gradle-wrapper.properties') }}
restore-keys: |
${{ runner.os }}-gradle-
- name: Install dependencies
run: npm ci
- name: Build library
run: npm run build
- name: Install example dependencies
working-directory: example
run: npm ci
- name: Build Android APK
working-directory: example/android
run: ./gradlew assembleDebug --no-daemon
- name: Upload Android APK
uses: actions/upload-artifact@v4
with:
name: android-apk
path: example/android/app/build/outputs/apk/debug/app-debug.apk
build-ios:
name: Build iOS App
runs-on: macos-14 # Try macos-14 with manual Xcode selection
needs: lint-and-type-check
steps:
- name: Checkout code
uses: actions/checkout@v4
- name: Select Xcode version
run: sudo xcode-select -s /Applications/Xcode_15.4.app/Contents/Developer
- name: Setup Node.js
uses: actions/setup-node@v4
with:
node-version: '20'
cache: 'npm'
- name: Cache CocoaPods
uses: actions/cache@v4
with:
path: example/ios/Pods
key: ${{ runner.os }}-pods-${{ hashFiles('**/Podfile.lock') }}
restore-keys: |
${{ runner.os }}-pods-
- name: Install dependencies
run: npm ci
- name: Build library
run: npm run build
- name: Install example dependencies
working-directory: example
run: npm ci
- name: Setup CocoaPods
uses: maxim-lobanov/setup-cocoapods@v1
with:
version: latest
- name: Pod install
working-directory: example/ios
run: pod install --verbose
- name: Build iOS
working-directory: example
run: |
xcodebuild -workspace ios/ViewShotExample.xcworkspace \
-scheme ViewShotExample \
-configuration Debug \
-destination 'platform=iOS Simulator,name=iPhone 15,OS=17.0' \
build CODE_SIGNING_ALLOWED=NO
- name: Upload iOS Build Logs
if: failure()
uses: actions/upload-artifact@v4
with:
name: ios-build-logs
path: ~/Library/Logs/DiagnosticReports/
# TODO: Re-enable Windows build after fixing react-native-windows dependencies
# build-windows:
# name: Build Windows
# runs-on: windows-latest
# needs: lint-and-type-check
# steps:
# - name: Checkout code
# uses: actions/checkout@v4
# - name: Setup Node.js
# uses: actions/setup-node@v4
# with:
# node-version: '20'
# cache: 'npm'
# - name: Install dependencies
# run: npm ci
# - name: Build library
# run: npm run build
# - name: Setup MSBuild
# uses: microsoft/setup-msbuild@v2
# - name: Build Windows project
# working-directory: windows
# run: msbuild RNViewShot\RNViewShot.csproj /p:Configuration=Debug /p:Platform="Any CPU"