| # Copyright (c) 2022, the Dart project authors. Please see the AUTHORS file |
| # for details. All rights reserved. Use of this source code is governed by a |
| # BSD-style license that can be found in the LICENSE file. |
| |
| # Note: There's a script under `jnigen/tool` which runs a subset of these |
| # tests on local machine. It's a useful little script for checking the |
| # code before making a PR. If you add a task here, you might want to add |
| # the equivalent in that script as well. |
| |
| name: Dart CI |
| |
| on: |
| # Run on PRs and pushes to the default branch. |
| push: |
| branches: [ main ] |
| pull_request: |
| branches: [ main ] |
| schedule: |
| - cron: "0 0 * * 0" |
| |
| env: |
| PUB_ENVIRONMENT: bot.github |
| |
| jobs: |
| check_java_format: |
| runs-on: ubuntu-latest |
| steps: |
| - uses: actions/checkout@8f4b7f84864484a7bf31766abe9204da3cbe65b3 # v2 minimum required |
| - uses: axel-op/googlejavaformat-action@fe78db8a90171b6a836449f8d0e982d5d71e5c5a |
| with: |
| args: "--set-exit-if-changed" |
| |
| analyze_jnigen: |
| runs-on: ubuntu-latest |
| defaults: |
| run: |
| working-directory: ./pkgs/jnigen |
| strategy: |
| fail-fast: false |
| matrix: |
| sdk: [stable] |
| steps: |
| - uses: actions/checkout@8f4b7f84864484a7bf31766abe9204da3cbe65b3 |
| - uses: subosito/flutter-action@48cafc24713cca54bbe03cdc3a423187d413aafa |
| with: |
| channel: ${{ matrix.sdk }} |
| cache: true |
| cache-key: 'flutter-:os:-:channel:-:version:-:arch:-:hash:' |
| - id: install |
| name: Install dependencies |
| run: dart pub get |
| - name: Check formatting |
| run: dart format --output=none --set-exit-if-changed . |
| if: always() && steps.install.outcome == 'success' |
| - name: Analyze code |
| run: dart analyze --fatal-infos |
| if: always() && steps.install.outcome == 'success' |
| |
| test_jnigen: |
| needs: [analyze_jnigen] |
| runs-on: ${{ matrix.os }} |
| defaults: |
| run: |
| working-directory: ./pkgs/jnigen |
| strategy: |
| fail-fast: false |
| matrix: |
| os: [ubuntu-latest] |
| sdk: [stable, beta] |
| steps: |
| - uses: actions/checkout@8f4b7f84864484a7bf31766abe9204da3cbe65b3 |
| - uses: subosito/flutter-action@48cafc24713cca54bbe03cdc3a423187d413aafa |
| with: |
| channel: ${{ matrix.sdk }} |
| cache: true |
| cache-key: 'flutter-:os:-:channel:-:version:-:arch:-:hash:' |
| - uses: actions/setup-java@5ffc13f4174014e2d4d4572b3d74c3fa61aeb2c2 |
| with: |
| distribution: 'zulu' |
| java-version: '11' |
| cache: maven |
| ## Committed bindings are formatted with clang-format. |
| ## So this is required to format generated bindings identically |
| - name: install clang tools |
| run: | |
| sudo apt-get update -y |
| sudo apt-get install -y clang-format |
| - name: Install dependencies |
| run: dart pub get |
| - name: build in_app_java APK |
| run: flutter build apk --target-platform=android-arm64 |
| working-directory: ./pkgs/jnigen/example/in_app_java |
| - name: build notification_plugin example APK |
| run: flutter build apk --target-platform=android-arm64 |
| working-directory: ./pkgs/jnigen/example/notification_plugin/example |
| - name: Run VM tests |
| run: dart test --platform vm |
| - name: Install coverage |
| run: dart pub global activate coverage |
| - name: Collect coverage |
| run: dart pub global run coverage:test_with_coverage |
| - name: Upload coverage |
| uses: coverallsapp/github-action@67662d24394fd74bffcf7b462d1b432814159afd |
| with: |
| github-token: ${{ secrets.GITHUB_TOKEN }} |
| flag-name: jnigen_tests |
| parallel: true |
| path-to-lcov: ./pkgs/jnigen/coverage/lcov.info |
| if: ${{ matrix.sdk == 'stable' }} |
| |
| test_summarizer: |
| runs-on: ubuntu-latest |
| defaults: |
| run: |
| working-directory: ./pkgs/jnigen/java |
| steps: |
| - uses: actions/checkout@8f4b7f84864484a7bf31766abe9204da3cbe65b3 |
| - uses: actions/setup-java@5ffc13f4174014e2d4d4572b3d74c3fa61aeb2c2 |
| with: |
| distribution: 'zulu' |
| java-version: '11' |
| - name: run tests using maven surefire |
| run: mvn surefire:test |
| |
| analyze_jni: |
| runs-on: ubuntu-latest |
| defaults: |
| run: |
| working-directory: ./pkgs/jni |
| steps: |
| - uses: actions/checkout@8f4b7f84864484a7bf31766abe9204da3cbe65b3 |
| - uses: subosito/flutter-action@48cafc24713cca54bbe03cdc3a423187d413aafa |
| with: |
| channel: 'stable' |
| cache: true |
| cache-key: 'flutter-:os:-:channel:-:version:-:arch:-:hash:' |
| - uses: actions/setup-java@5ffc13f4174014e2d4d4572b3d74c3fa61aeb2c2 |
| with: |
| distribution: 'zulu' |
| java-version: '11' |
| - name: install clang tools & CMake |
| run: | |
| sudo apt-get update -y |
| sudo apt-get install -y clang-format build-essential cmake |
| - run: flutter pub get |
| - name: Check formatting |
| run: flutter format --output=none --set-exit-if-changed . |
| - name: Run lints |
| run: flutter analyze --fatal-infos |
| - name: Check C code formatting using clang-format |
| run: clang-format --dry-run -Werror dartjni.c dartjni.h third_party/*.c third_party/*.h |
| working-directory: ./pkgs/jni/src |
| - name: verify that tool/generate_ide_files.dart generates a file |
| run: | |
| dart run tool/generate_ide_files.dart |
| ls src/compile_commands.json |
| |
| |
| test_jni: |
| runs-on: ubuntu-latest |
| needs: [analyze_jni] |
| defaults: |
| run: |
| working-directory: ./pkgs/jni |
| steps: |
| - uses: actions/checkout@8f4b7f84864484a7bf31766abe9204da3cbe65b3 |
| - uses: subosito/flutter-action@48cafc24713cca54bbe03cdc3a423187d413aafa |
| with: |
| channel: 'stable' |
| cache: true |
| cache-key: 'flutter-:os:-:channel:-:version:-:arch:-:hash:' |
| - uses: actions/setup-java@5ffc13f4174014e2d4d4572b3d74c3fa61aeb2c2 |
| with: |
| distribution: 'zulu' |
| java-version: '11' |
| - run: | |
| sudo apt-get update -y |
| sudo apt-get install -y ninja-build libgtk-3-dev libclang-dev |
| - run: dart pub get |
| - run: dart run jni:setup |
| - name: Get dependencies |
| run: dart pub get |
| - name: Run tests |
| run: dart test |
| - name: Install coverage |
| run: dart pub global activate coverage |
| - name: Collect coverage |
| run: dart pub global run coverage:test_with_coverage |
| - name: Upload coverage |
| uses: coverallsapp/github-action@67662d24394fd74bffcf7b462d1b432814159afd |
| with: |
| github-token: ${{ secrets.GITHUB_TOKEN }} |
| flag-name: jni_tests |
| parallel: true |
| path-to-lcov: ./pkgs/jni/coverage/lcov.info |
| - name: regenerate & compare ffigen bindings |
| run: | |
| cp lib/src/third_party/jni_bindings_generated.dart __old_bindings |
| dart run ffigen --config ffigen.yaml |
| diff lib/src/third_party/jni_bindings_generated.dart __old_bindings |
| |
| ## Run tests for package:jni on windows, just to confirm it works. |
| ## Do not, for example, collect coverage or check formatting. |
| test_jni_windows_minimal: |
| needs: [analyze_jni] |
| runs-on: windows-latest |
| defaults: |
| run: |
| working-directory: ./pkgs/jni |
| steps: |
| - uses: actions/checkout@8f4b7f84864484a7bf31766abe9204da3cbe65b3 |
| - uses: subosito/flutter-action@48cafc24713cca54bbe03cdc3a423187d413aafa |
| with: |
| channel: 'stable' |
| cache: true |
| cache-key: 'flutter-:os:-:channel:-:version:-:arch:-:hash:' |
| - uses: actions/setup-java@5ffc13f4174014e2d4d4572b3d74c3fa61aeb2c2 |
| with: |
| distribution: 'zulu' |
| java-version: '11' |
| - run: Add-Content $env:GITHUB_PATH "$env:JAVA_HOME\bin\server" |
| - run: dart pub get |
| - run: dart run jni:setup |
| ## TODO(#51): -j 1 is required to avoid a rare race condition which is caused by |
| ## all tests which spawn JVM being run in same process. |
| - run: dart test -j 1 |
| |
| test_jnigen_windows_minimal: |
| needs: [analyze_jnigen] |
| runs-on: windows-latest |
| defaults: |
| run: |
| working-directory: ./pkgs/jnigen |
| steps: |
| - uses: actions/checkout@8f4b7f84864484a7bf31766abe9204da3cbe65b3 |
| - name: Setup clang |
| uses: egor-tensin/setup-clang@ef434b41eb33a70396fb336b1bae39c76d740c3d |
| with: |
| version: latest |
| platform: x64 |
| - uses: subosito/flutter-action@48cafc24713cca54bbe03cdc3a423187d413aafa |
| with: |
| channel: 'stable' |
| cache: true |
| cache-key: 'flutter-:os:-:channel:-:version:-:arch:-:hash:' |
| - uses: actions/setup-java@5ffc13f4174014e2d4d4572b3d74c3fa61aeb2c2 |
| with: |
| distribution: 'zulu' |
| java-version: '11' |
| - run: git config --global core.autocrlf true |
| - run: Add-Content $env:GITHUB_PATH "$env:JAVA_HOME\bin\server" |
| - run: dart pub get |
| - run: dart run jnigen:setup |
| - name: build in_app_java APK |
| run: flutter build apk --target-platform=android-arm64 |
| working-directory: ./pkgs/jnigen/example/in_app_java |
| - name: build notification_plugin example APK |
| run: flutter build apk --target-platform=android-arm64 |
| working-directory: ./pkgs/jnigen/example/notification_plugin/example |
| - run: dart test |
| |
| test_jni_macos_minimal: |
| needs: [analyze_jni] |
| runs-on: macos-latest |
| defaults: |
| run: |
| working-directory: ./pkgs/jni |
| steps: |
| - uses: actions/checkout@8f4b7f84864484a7bf31766abe9204da3cbe65b3 |
| - uses: subosito/flutter-action@48cafc24713cca54bbe03cdc3a423187d413aafa |
| with: |
| channel: 'stable' |
| cache: true |
| cache-key: 'flutter-:os:-:channel:-:version:-:arch:-:hash:' |
| - uses: actions/setup-java@5ffc13f4174014e2d4d4572b3d74c3fa61aeb2c2 |
| with: |
| distribution: 'temurin' |
| java-version: '11' |
| - run: dart pub get |
| - run: dart run jni:setup |
| ## TODO(#51): -j 1 is required to avoid a rare race condition which is caused by |
| ## all tests which spawn JVM being run in same process. |
| - run: dart test -j 1 |
| |
| test_jnigen_macos_minimal: |
| needs: [analyze_jnigen] |
| runs-on: macos-latest |
| defaults: |
| run: |
| working-directory: ./pkgs/jnigen |
| steps: |
| - uses: actions/checkout@8f4b7f84864484a7bf31766abe9204da3cbe65b3 |
| - name: Setup clang format |
| uses: ConorMacBride/install-package@3e7ad059e07782ee54fa35f827df52aae0626f30 |
| with: |
| brew: clang-format |
| - uses: subosito/flutter-action@48cafc24713cca54bbe03cdc3a423187d413aafa |
| with: |
| channel: 'stable' |
| cache: true |
| cache-key: 'flutter-:os:-:channel:-:version:-:arch:-:hash:' |
| - uses: actions/setup-java@5ffc13f4174014e2d4d4572b3d74c3fa61aeb2c2 |
| with: |
| distribution: 'temurin' |
| java-version: '11' |
| - run: git config --global core.autocrlf true |
| - run: dart pub get |
| - run: dart run jnigen:setup |
| - run: dart test |
| |
| build_jni_example_linux: |
| runs-on: ubuntu-latest |
| defaults: |
| run: |
| working-directory: ./pkgs/jni/example |
| steps: |
| - uses: actions/checkout@8f4b7f84864484a7bf31766abe9204da3cbe65b3 |
| - uses: subosito/flutter-action@48cafc24713cca54bbe03cdc3a423187d413aafa |
| with: |
| channel: 'stable' |
| cache: true |
| cache-key: 'flutter-:os:-:channel:-:version:-:arch:-:hash:' |
| - uses: actions/setup-java@5ffc13f4174014e2d4d4572b3d74c3fa61aeb2c2 |
| with: |
| distribution: 'zulu' |
| java-version: '11' |
| - run: | |
| sudo apt-get update -y |
| sudo apt-get install -y ninja-build libgtk-3-dev |
| - run: flutter config --enable-linux-desktop |
| - run: flutter pub get |
| - run: dart run jni:setup |
| - run: flutter build linux |
| |
| build_jni_example_windows: |
| runs-on: windows-latest |
| defaults: |
| run: |
| working-directory: ./pkgs/jni/example |
| steps: |
| - uses: actions/checkout@8f4b7f84864484a7bf31766abe9204da3cbe65b3 |
| - uses: subosito/flutter-action@48cafc24713cca54bbe03cdc3a423187d413aafa |
| with: |
| channel: 'stable' |
| cache: true |
| cache-key: 'flutter-:os:-:channel:-:version:-:arch:-:hash:' |
| - uses: actions/setup-java@5ffc13f4174014e2d4d4572b3d74c3fa61aeb2c2 |
| with: |
| distribution: 'zulu' |
| java-version: '11' |
| - run: flutter config --enable-windows-desktop |
| - run: flutter pub get |
| - run: flutter build windows |
| |
| build_jni_example_android: |
| runs-on: ubuntu-latest |
| defaults: |
| run: |
| working-directory: ./pkgs/jni/example |
| steps: |
| - uses: actions/checkout@8f4b7f84864484a7bf31766abe9204da3cbe65b3 |
| - uses: actions/setup-java@5ffc13f4174014e2d4d4572b3d74c3fa61aeb2c2 |
| with: |
| distribution: 'zulu' |
| java-version: '11' |
| - uses: subosito/flutter-action@48cafc24713cca54bbe03cdc3a423187d413aafa |
| with: |
| channel: 'stable' |
| cache: true |
| cache-key: 'flutter-:os:-:channel:-:version:-:arch:-:hash:' |
| - run: flutter pub get |
| - run: flutter build apk |
| |
| run_pdfbox_example_linux: |
| runs-on: ubuntu-latest |
| defaults: |
| run: |
| working-directory: ./pkgs/jnigen/example/pdfbox_plugin |
| steps: |
| - uses: actions/checkout@8f4b7f84864484a7bf31766abe9204da3cbe65b3 |
| - uses: subosito/flutter-action@48cafc24713cca54bbe03cdc3a423187d413aafa |
| with: |
| channel: 'stable' |
| cache: true |
| cache-key: 'flutter-:os:-:channel:-:version:-:arch:-:hash:' |
| - uses: actions/setup-java@5ffc13f4174014e2d4d4572b3d74c3fa61aeb2c2 |
| with: |
| distribution: 'zulu' |
| java-version: '11' |
| - run: | |
| sudo apt-get update -y |
| sudo apt-get install -y ninja-build libgtk-3-dev clang-format |
| - run: flutter config --enable-linux-desktop |
| - run: dart pub get |
| - name: Generate bindings |
| run: | |
| dart run jnigen -Doutput.c.path=_c/ -Doutput.dart.path=_dart/ --config jnigen.yaml |
| - name: Compare generated bindings |
| run: | |
| diff -r _c src/ |
| diff -r _dart lib/src/third_party |
| - name: Generate full bindings |
| run: dart run jnigen --config jnigen.yaml --override classes="org.apache.pdfbox" |
| - name: Analyze generated bindings |
| run: | |
| flutter pub get # dart-analyze errors on flutter example |
| flutter analyze |
| - name: Run standalone example |
| run: | |
| dart pub get |
| dart run jni:setup |
| wget 'https://dart.dev/guides/language/specifications/DartLangSpec-v2.2.pdf' |
| dart run bin/pdf_info.dart DartLangSpec-v2.2.pdf |
| working-directory: ./pkgs/jnigen/example/pdfbox_plugin/dart_example |
| - name: Build flutter example for pdfbox_plugin |
| run: | |
| flutter pub get |
| flutter build linux |
| working-directory: ./pkgs/jnigen/example/pdfbox_plugin/example |
| |
| coveralls_finish: |
| needs: [test_jnigen, test_jni] |
| runs-on: ubuntu-latest |
| steps: |
| - name: Coveralls finished |
| uses: coverallsapp/github-action@67662d24394fd74bffcf7b462d1b432814159afd |
| with: |
| github-token: ${{ secrets.github_token }} |
| parallel-finished: true |