From 7716684e02a445c60c10ecda3ede36e46406da7c Mon Sep 17 00:00:00 2001 From: JimmyDaddy Date: Tue, 28 Nov 2023 20:02:26 +0800 Subject: [PATCH] ci: gh workflows for native ci --- .github/workflows/build-apk.yml | 53 ------- .github/workflows/ci.yml | 48 ------ .github/workflows/native-ci.yml | 251 ++++++++++++++++++++++++++++++++ example/android/build.gradle | 5 + 4 files changed, 256 insertions(+), 101 deletions(-) delete mode 100644 .github/workflows/build-apk.yml delete mode 100644 .github/workflows/ci.yml create mode 100644 .github/workflows/native-ci.yml diff --git a/.github/workflows/build-apk.yml b/.github/workflows/build-apk.yml deleted file mode 100644 index 9ece1d02..00000000 --- a/.github/workflows/build-apk.yml +++ /dev/null @@ -1,53 +0,0 @@ -name: Build Android APK - -on: - push: - branches: - - main - workflow_dispatch: - -jobs: - build: - runs-on: ubuntu-latest - - steps: - - name: Checkout code - uses: actions/checkout@v4 - - - name: Setup node 16 - uses: actions/setup-node@v3 - with: - node-version: '16' - - - name: Set up JDK 1.8 - uses: actions/setup-java@v3 - with: - distribution: 'temurin' - java-version: '17' - cache: 'gradle' - - - name: Setup Android SDK - uses: android-actions/setup-android@v2 - - - - name: Install dependencies - run: | - npm install - cd example - npm install - - - name: Build APK - run: | - npm run prepack - cd example/android - ./gradlew assembleRelease - mv app/build/outputs/apk/release/app-release.apk app-release-${{ github.sha }}.apk - ls - pwd - echo ${{ github.workspace }} - - - name: Upload APK - uses: actions/upload-artifact@v3 - with: - name: app-release-${{ github.sha }}.apk - path: example/android/app-release-${{ github.sha }}.apk diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml deleted file mode 100644 index 9c5ee1fa..00000000 --- a/.github/workflows/ci.yml +++ /dev/null @@ -1,48 +0,0 @@ -name: CI -on: - push: - branches: - - main - pull_request: - branches: - - main - -jobs: - lint: - runs-on: ubuntu-latest - steps: - - name: Checkout - uses: actions/checkout@v3 - - - name: Setup - uses: ./.github/actions/setup - - - name: Lint files - run: yarn lint - - - name: Typecheck files - run: yarn typecheck - - test: - runs-on: ubuntu-latest - steps: - - name: Checkout - uses: actions/checkout@v3 - - - name: Setup - uses: ./.github/actions/setup - - - name: Run unit tests - run: yarn test --maxWorkers=2 --coverage - - build: - runs-on: ubuntu-latest - steps: - - name: Checkout - uses: actions/checkout@v3 - - - name: Setup - uses: ./.github/actions/setup - - - name: Build package - run: yarn prepack diff --git a/.github/workflows/native-ci.yml b/.github/workflows/native-ci.yml new file mode 100644 index 00000000..6232f38f --- /dev/null +++ b/.github/workflows/native-ci.yml @@ -0,0 +1,251 @@ +name: Native Build and Test +on: + pull_request: + types: [opened, reopened ] + push: + workflow_dispatch: + +jobs: + install-dep: + runs-on: macos-latest + name: Install dependencies + steps: + - name: Checkout the code + uses: actions/checkout@v4 + + - name: Set up Ruby + uses: ruby/setup-ruby@v1 + with: + ruby-version: 2.7 + bundler-cache: true + - name: Setup node 16 + uses: actions/setup-node@v3 + with: + node-version: '16' + + - uses: actions/cache@v3 + name: Cache node_modules + id: cache-node-modules + with: + path: | + node_modules + example/node_modules + key: ${{ runner.os }}-nodeModules-${{ hashFiles('package.json') }}-${{ hashFiles('example/package.json') }} + + - name: Install npm dependencies + if: steps.cache-node-modules.outputs.cache-hit != 'true' + run: | + ls + pwd + npm install + cd example + ls + pwd + npm install + + android-build: + runs-on: macos-latest + name: Android Build + needs: install-dep + steps: + - name: Checkout the code + uses: actions/checkout@v4 + + - name: Set up Ruby + uses: ruby/setup-ruby@v1 + with: + ruby-version: 2.7 + bundler-cache: true + + - name: Setup node 16 + uses: actions/setup-node@v3 + with: + node-version: '16' + + - name: Set up JDK + uses: actions/setup-java@v3 + with: + distribution: 'zulu' + java-version: 11 + + - uses: actions/cache@v3 + name: Cache node_modules + id: cache-node-modules + with: + path: | + node_modules + example/node_modules + fail-on-cache-miss: true + key: ${{ runner.os }}-nodeModules-${{ hashFiles('package.json') }}-${{ hashFiles('example/package.json') }} + + - uses: actions/cache@v3 + id: cache-gradle + name: Cache Gradle dependencies + with: + path: | + ~/.gradle/caches + ~/.gradle/wrapper + key: ${{ runner.os }}-gradle-${{ hashFiles('example/android/gradle/wrapper/gradle-wrapper.properties') }}-${{ hashFiles('android/src/**/*.kt') }} + + - name: Install Gradle dependencies + if: steps.cache-gradle.outputs.cache-hit != 'true' + run: | + ls + pwd + echo ${{ github.workspace }} + cd example/android + ./gradlew build --stacktrace + + - name: Run unit tests + run: | + cd example/android + ./gradlew test --stacktrace + + - name: Build APK + run: | + npm run prepack + cd example/android + ./gradlew assembleRelease + mv app/build/outputs/apk/release/app-release.apk app-release-${{ github.sha }}.apk + ls + pwd + echo ${{ github.workspace }} + + - name: Upload APK + uses: actions/upload-artifact@v3 + with: + name: app-release-${{ github.sha }}.apk + path: ${{ github.workspace }}/example/android/app-release-${{ github.sha }}.apk + + android-test: + runs-on: macos-latest + needs: android-build + strategy: + matrix: + api-level: [24, 25, 29, 30, 31] + target: [default] + steps: + - name: Checkout the code + uses: actions/checkout@v4 + + - name: Set up Ruby + uses: ruby/setup-ruby@v1 + with: + ruby-version: 2.7 + bundler-cache: true + + - name: Setup node 16 + uses: actions/setup-node@v3 + with: + node-version: '16' + + - name: Set up JDK + uses: actions/setup-java@v3 + with: + distribution: 'zulu' + java-version: 11 + + - uses: actions/cache@v3 + name: Cache node_modules + id: cache-node-modules + with: + path: | + node_modules + example/node_modules + fail-on-cache-miss: true + key: ${{ runner.os }}-nodeModules-${{ hashFiles('package.json') }}-${{ hashFiles('example/package.json') }} + + - uses: actions/cache@v3 + name: Cache Gradle dependencies + id: cache-gradle + with: + path: | + ~/.gradle/caches + ~/.gradle/wrapper + fail-on-cache-miss: true + key: ${{ runner.os }}-gradle-${{ hashFiles('example/android/gradle/wrapper/gradle-wrapper.properties') }}-${{ hashFiles('android/src/**/*.kt') }} + + - name: Instrumentation Tests + uses: reactivecircus/android-emulator-runner@v2 + with: + api-level: ${{ matrix.api-level }} + target: ${{ matrix.target }} + arch: x86_64 + profile: Nexus 6 + script: | + ls + pwd + echo ${{ github.workspace }} + cd example/android + adb logcat -c # clear logs + touch app/emulator.log # create log file + chmod 777 app/emulator.log # allow writing to log file + adb logcat >> app/emulator.log & # pipe all logcat messages into log file as a background process + ./gradlew connectedCheck --stacktrace # here run your tests + + - name: Upload Reports + uses: actions/upload-artifact@v2 + with: + name: Test-Reports + path: ${{ github.workspace }}/example/android/app/build/reports + if: always() + + ios-build-test: + runs-on: macos-latest + needs: install-dep + strategy: + matrix: + cocoapods: ['1.10.1', '1.11.0', '1.14.3'] + steps: + - name: Checkout the code + uses: actions/checkout@v4 + - name: Set up Ruby + uses: ruby/setup-ruby@v1 + with: + ruby-version: 2.7 + bundler-cache: true + - name: Install Cocoapods + run: gem install cocoapods -v ${{ matrix.cocoapods }} + - name: Setup node 16 + uses: actions/setup-node@v3 + with: + node-version: '16' + + - uses: actions/cache@v3 + name: Cache node_modules + id: cache-node-modules + with: + path: | + node_modules + example/node_modules + key: ${{ runner.os }}-nodeModules-${{ hashFiles('package.json') }}-${{ hashFiles('example/package.json') }} + fail-on-cache-miss: true + + - name: Cache Pods + id: cache-pods + uses: actions/cache@v3 + with: + path: example/ios/Pods + key: ${{ runner.os }}-pods-${{ matrix.cocoapods }}-${{ hashFiles('**/Podfile.lock') }} + + - name: Install Pods + if: steps.cache-pods.outputs.cache-hit != 'true' + run: | + ls + pwd + echo ${{ github.workspace }} + cd example/ios + pod cache clean --all + pod install + + - name: Install xcpretty + run: gem install xcpretty + + - name: Build + run: | + cd example/ios + xcodebuild -workspace ImageMarkerExample.xcworkspace -scheme ImageMarkerExample -configuration Release -sdk iphonesimulator -destination 'platform=iOS Simulator,name=iPhone 12' | xcpretty + - name: Test + run: | + cd example/ios + xcodebuild -workspace ImageMarkerExample.xcworkspace -scheme ImageMarkerExample -sdk iphonesimulator -destination 'platform=iOS Simulator,name=iPhone 12' test | xcpretty \ No newline at end of file diff --git a/example/android/build.gradle b/example/android/build.gradle index a95a9994..957cf0f0 100644 --- a/example/android/build.gradle +++ b/example/android/build.gradle @@ -13,6 +13,11 @@ buildscript { repositories { google() mavenCentral() + jcenter() + maven { url 'https://dl.google.com/dl/android/maven2' } + maven { url "https://repository.jboss.org/maven2" } + maven { url 'https://maven.google.com' } + maven { url 'https://maven.fabric.io/public' } } dependencies { classpath('com.android.tools.build:gradle:7.4.2')