Skip to content

Commit

Permalink
tools: add __scripts__/generate-example.js (#68)
Browse files Browse the repository at this point in the history
* tools: add __scripts__/generate-example.js

* tools: reuse __scripts__/generate-example.js in ci

* chore: add verbose, refactor 'clean' PATH logic
  • Loading branch information
CAMOBAP authored Oct 6, 2024
1 parent e4df66f commit dfcfd77
Show file tree
Hide file tree
Showing 6 changed files with 265 additions and 99 deletions.
111 changes: 36 additions & 75 deletions .github/workflows/tests.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -9,23 +9,36 @@ on:
schedule:
- cron: '0 0 * * 0' # https://crontab.guru/every-week

env:
TEST_APP_DEPS: react-native-modal react-native-webview
TEST_APP_DEV_DEPS: typescript @babel/preset-env react-shallow-renderer
RN_BUNDLE_ARGS: --entry-file index.js --platform android --dev false --bundle-output android/app/src/main/assets/index.android.bundle --assets-dest android/app/src/main/res

jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- run: npm install
- run: npm test
test-yarn:

test:
needs: build
runs-on: ubuntu-latest
runs-on: ${{ matrix.os }}
outputs:
rn-version: ${{ steps.rn-version.outputs.value }}
concurrency:
group: '${{ github.workflow }}-${{ matrix.platform }}-${{ matrix.pm }}-${{ github.head_ref || github.ref_name }}'
cancel-in-progress: true
strategy:
fail-fast: false
max-parallel: 5
matrix:
os: [ ubuntu-latest ]
platform: [ android ]
pm: [ npm, yarn ]
include:
- os: macos-latest
platform: ios
pm: npm
- os: macos-latest
platform: ios
pm: yarn
steps:
- uses: actions/checkout@v4
with:
Expand All @@ -34,85 +47,32 @@ jobs:
with:
java-version: 17
distribution: adopt
- run: npx react-native init rnexample
- run: |
# npm install -g ${{ matrix.pm }} react-native
npm run example -- --pm ${{ matrix.pm }}
working-directory: react-native-hcaptcha
- id: rn-version
working-directory: rnexample
working-directory: react-native-hcaptcha-example
run: |
RN_VERSION=$(cat package.json | jq ".dependencies.\"react-native\"" -r)
echo "value=${RN_VERSION}" >> $GITHUB_OUTPUT
- name: Run yarn add ...
working-directory: rnexample
run: |
yarn add @hcaptcha/react-native-hcaptcha@file:../react-native-hcaptcha
yarn add --dev ${{ env.TEST_APP_DEV_DEPS }}
yarn add ${{ env.TEST_APP_DEPS }}
cp ../react-native-hcaptcha/Example.App.js App.js
cp ../react-native-hcaptcha/Example.jest.config.js jest.config.js
- run: |
mkdir -p android/app/src/main/assets
mkdir -p android/app/src/main/res
yarn react-native bundle ${{ env.RN_BUNDLE_ARGS }}
working-directory: rnexample
- run: cat package.json
working-directory: rnexample
working-directory: react-native-hcaptcha-example
- run: yarn test --config ./jest.config.js
working-directory: rnexample
working-directory: react-native-hcaptcha-example
- run: npx react-native build-${{ matrix.platform }}
working-directory: react-native-hcaptcha-example
- run: npx --yes check-peer-dependencies --yarn --runOnlyOnRootDependencies
working-directory: rnexample
test-npm:
needs: build
runs-on: ubuntu-latest
outputs:
rn-version: ${{ steps.rn-version.outputs.value }}
steps:
- uses: actions/setup-java@v4
with:
java-version: 17
distribution: adopt
- run: npx react-native init rnexample
- id: rn-version
working-directory: rnexample
run: |
RN_VERSION=$(cat package.json | jq ".dependencies.\"react-native\"" -r)
echo "value=${RN_VERSION}" >> $GITHUB_OUTPUT
- uses: actions/checkout@v4
with:
path: rnexample/react-native-hcaptcha
- name: Run npm install ...
working-directory: rnexample
run: |
npm i --save file:./react-native-hcaptcha
npm i --save --include=dev ${{ env.TEST_APP_DEV_DEPS }}
npm i --save ${{ env.TEST_APP_DEPS }}
cp ./react-native-hcaptcha/Example.App.js App.js
cp ./react-native-hcaptcha/Example.jest.config.js jest.config.js
- run: |
mkdir -p android/app/src/main/assets
mkdir -p android/app/src/main/res
npx react-native bundle ${{ env.RN_BUNDLE_ARGS }}
working-directory: rnexample
- run: cat package.json
working-directory: rnexample
- run: npm run test -- --config ./jest.config.js
working-directory: rnexample
- run: npx --yes check-peer-dependencies --npm --runOnlyOnRootDependencies
working-directory: rnexample
- run: |
echo "org.gradle.jvmargs=-Xmx4096m -XX:MaxMetaspaceSize=1024m" >> gradle.properties
./gradlew assemble
working-directory: rnexample/android
- uses: actions/upload-artifact@v4
with:
name: apks
path: rnexample/android/app/build/outputs/apk/release/app-release.apk
working-directory: react-native-hcaptcha-example

create-an-issue:
runs-on: ubuntu-latest
needs: [test-npm, test-yarn]
if: always() && github.event == 'schedule' && (needs.test-npm.result == 'failure' || needs.test-yarn.result == 'failure')
needs: test
if: always() && github.event == 'schedule' && needs.test.result == 'failure'
steps:
- uses: actions/checkout@v4
- run: |
RN_VERSION="${{ needs.test-npm.outputs.rn-version || needs.test-yarn.outputs.rn-version }}"
RN_VERSION="${{ needs.test.outputs.rn-version }}"
GHA_RUN_URL="${{ github.server_url }}/${{ github.repository }}/actions/runs/${{ github.run_id }}"
echo "RN_VERSION=${RN_VERSION}" >> $GITHUB_ENV
echo "GHA_RUN_URL=${GHA_RUN_URL}" >> $GITHUB_ENV
Expand All @@ -123,9 +83,10 @@ jobs:
assignees: CAMOBAP
update_existing: true
filename: .github/examples-issue-template.md

release:
if: github.event_name == 'release'
needs: [test-npm, test-yarn]
needs: test
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
Expand Down
1 change: 1 addition & 0 deletions Example.jest.config.js
Original file line number Diff line number Diff line change
Expand Up @@ -12,4 +12,5 @@ module.exports = {
+ "|react-native-animatable"
+ ")/)",
],
setupFiles: ['./jest.setup.js'],
}
6 changes: 6 additions & 0 deletions Example.jest.setup.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
jest.mock('react-native-webview', () => {
return {
WebView: () => 'WebView',
};
});

54 changes: 32 additions & 22 deletions MAINTAINER.md
Original file line number Diff line number Diff line change
Expand Up @@ -23,33 +23,20 @@ PATCH: bugfix only.

For `expo` test app

- `cd ..`
- `expo init expo-example -t blank`
- `cd expo-example`
- `yarn add file:../react-native-hcaptcha`
- `yarn add react-native-modal react-native-webview`
- `cp ../react-native-hcaptcha/Example.App.js App.js`
- `yarn android`
- `cd react-native-hcaptcha`
- `yarn example --expo
- `yarn android` or `npm run android`

For `react-native` test app

- `cd ..`
- `react-native init rnexample` or `react-native init rnexample --version 0.63.4` for specific version
- `cd rnexample`
- `yarn add file:../react-native-hcaptcha`
- `yarn add react-native-modal react-native-webview`
- `cp ../react-native-hcaptcha/Example.App.js App.js`
- `yarn android`
- `cd react-native-hcaptcha`
- `yarn example`
- `yarn android` or `npm run android`

For iOS instead the last step do:

- `pushd ios; pod install; popd`
- `yarn ios`

To quickly update `react-native-hcaptcha` locally just run:

`yarn upgrade file:../react-native-hcaptcha`

- `pushd ios; env USE_HERMES=0 pod install; popd`
- `yarn ios` or `npm run ios`

### Known issues

Expand Down Expand Up @@ -145,4 +132,27 @@ ERROR Invariant Violation: No callback found with cbID xxxxx and callID yyyyy

Solution: delete `node_modules` in `react-native-hcaptcha`.

This issue is related to mismatched `react-native` versions in the test app vs. `react-native-hcaptcha`
This issue is related to mismatched `react-native` versions in the test app vs. `react-native-hcaptcha`

---

Problem:

Xcode failed to build with:

> ...
> Framework 'hermes' not found
Solution: `env USE_HERMES=0 pod install` or add `:hermes_enabled => false` into `use_react_native!` call in `ios/Podfile`

---

Problem:
```
> yarn add file:../react-native-hcaptcha
Usage Error: The file:../react-native-hcaptcha string didn't match the required format (package-name@range). Did you perhaps forget to explicitly reference the package name?
```

Solution: `yarn add @hcaptcha/react-native-hcaptcha@file:../react-native-hcaptcha`

Yarn 2.10.x and above doesn't require `file:` scheme prefix https://stackoverflow.com/questions/40102686/how-to-install-package-with-local-path-by-yarn-it-couldnt-find-package
Loading

0 comments on commit dfcfd77

Please sign in to comment.