| # 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: jnigen |
| |
| on: |
| # Run on PRs and pushes to the default branch. |
| push: |
| branches: [main] |
| paths: |
| - '.github/workflows/jnigen.yaml' |
| - 'pkgs/jnigen/**' |
| - 'pkgs/jni/**' |
| pull_request: |
| branches: [main] |
| paths: |
| - '.github/workflows/jnigen.yaml' |
| - 'pkgs/jnigen/**' |
| - 'pkgs/jni/**' |
| schedule: |
| - cron: '0 0 * * 0' |
| |
| env: |
| PUB_ENVIRONMENT: bot.github |
| |
| jobs: |
| analyze_jnigen: |
| runs-on: ubuntu-latest |
| defaults: |
| run: |
| working-directory: ./pkgs/jnigen |
| strategy: |
| fail-fast: false |
| matrix: |
| sdk: [stable] |
| steps: |
| - uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 |
| - uses: subosito/flutter-action@2783a3f08e1baf891508463f8c6653c258246225 |
| with: |
| channel: ${{ matrix.sdk }} |
| cache: true |
| cache-key: 'flutter-:os:-:channel:-:version:-:arch:-:hash:' |
| - uses: axel-op/googlejavaformat-action@fe78db8a90171b6a836449f8d0e982d5d71e5c5a |
| name: 'Check Java formatting with google-java-format' |
| with: |
| args: '--set-exit-if-changed' |
| - id: install |
| name: Install dependencies |
| run: dart pub get |
| - name: install dependencies for android test runner |
| run: flutter pub get |
| working-directory: ./pkgs/jnigen/android_test_runner |
| - name: Check formatting |
| run: dart format --output=none --set-exit-if-changed . |
| if: always() && steps.install.outcome == 'success' |
| - name: Analyze code |
| run: flutter 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@b4ffde65f46336ab88eb53be808477a3936bae11 |
| - uses: subosito/flutter-action@2783a3f08e1baf891508463f8c6653c258246225 |
| with: |
| channel: ${{ matrix.sdk }} |
| cache: true |
| cache-key: 'flutter-:os:-:channel:-:version:-:arch:-:hash:' |
| - uses: actions/setup-java@99b8673ff64fbf99d8d325f52d9a5bdedb8483e9 |
| 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 summarizer tests |
| run: mvn surefire:test |
| working-directory: ./pkgs/jnigen/java |
| - name: Build summarizer |
| run: dart run jnigen:setup |
| - name: Generate runtime tests |
| run: dart run tool/generate_runtime_tests.dart |
| - name: Run VM tests |
| run: dart test --test-randomize-ordering-seed random |
| - 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@3dfc5567390f6fa9267c0ee9c251e4c8c3f18949 |
| with: |
| flag-name: jnigen_tests |
| github-token: ${{ secrets.GITHUB_TOKEN }} |
| parallel: true |
| path-to-lcov: ./pkgs/jnigen/coverage/lcov.info |
| if: ${{ matrix.sdk == 'stable' }} |
| |
| analyze_jni: |
| runs-on: ubuntu-latest |
| defaults: |
| run: |
| working-directory: ./pkgs/jni |
| steps: |
| - uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 |
| - uses: subosito/flutter-action@2783a3f08e1baf891508463f8c6653c258246225 |
| with: |
| channel: 'stable' |
| cache: true |
| cache-key: 'flutter-:os:-:channel:-:version:-:arch:-:hash:' |
| - uses: actions/setup-java@99b8673ff64fbf99d8d325f52d9a5bdedb8483e9 |
| with: |
| distribution: 'zulu' |
| java-version: '11' |
| - uses: axel-op/googlejavaformat-action@fe78db8a90171b6a836449f8d0e982d5d71e5c5a |
| name: 'Check Java formatting with google-java-format' |
| with: |
| args: '--set-exit-if-changed' |
| - 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: dart 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@b4ffde65f46336ab88eb53be808477a3936bae11 |
| - uses: subosito/flutter-action@2783a3f08e1baf891508463f8c6653c258246225 |
| with: |
| channel: 'stable' |
| cache: true |
| cache-key: 'flutter-:os:-:channel:-:version:-:arch:-:hash:' |
| - uses: actions/setup-java@99b8673ff64fbf99d8d325f52d9a5bdedb8483e9 |
| 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 --test-randomize-ordering-seed random |
| - 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@3dfc5567390f6fa9267c0ee9c251e4c8c3f18949 |
| with: |
| flag-name: jni_tests |
| github-token: ${{ secrets.GITHUB_TOKEN }} |
| parallel: true |
| path-to-lcov: ./pkgs/jni/coverage/lcov.info |
| # TODO(https://github.com/dart-lang/ffigen/issues/555): Ffigen generated |
| # on my machine has macOS specific stuff and CI does not. |
| # We should just generate the struct as opaque, but we currently can't. |
| # |
| # - name: regenerate & compare ffigen bindings |
| # ## Use git to verify no source files have changed |
| # run: | |
| # dart run tool/generate_ffi_bindings.dart |
| # git diff --exit-code -- lib/src/third_party src/third_party |
| |
| ## 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@b4ffde65f46336ab88eb53be808477a3936bae11 |
| - uses: subosito/flutter-action@2783a3f08e1baf891508463f8c6653c258246225 |
| with: |
| channel: 'stable' |
| cache: true |
| cache-key: 'flutter-:os:-:channel:-:version:-:arch:-:hash:' |
| - uses: actions/setup-java@99b8673ff64fbf99d8d325f52d9a5bdedb8483e9 |
| 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 |
| - run: dart test --test-randomize-ordering-seed random |
| |
| test_jnigen_windows_minimal: |
| needs: [analyze_jnigen] |
| runs-on: windows-latest |
| defaults: |
| run: |
| working-directory: ./pkgs/jnigen |
| steps: |
| - uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 |
| - name: Setup clang |
| uses: egor-tensin/setup-clang@ef434b41eb33a70396fb336b1bae39c76d740c3d |
| with: |
| version: latest |
| platform: x64 |
| - uses: subosito/flutter-action@2783a3f08e1baf891508463f8c6653c258246225 |
| with: |
| channel: 'stable' |
| cache: true |
| cache-key: 'flutter-:os:-:channel:-:version:-:arch:-:hash:' |
| - uses: actions/setup-java@99b8673ff64fbf99d8d325f52d9a5bdedb8483e9 |
| 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 summarizer |
| run: dart run jnigen:setup |
| - name: Generate runtime tests |
| run: dart run tool/generate_runtime_tests.dart |
| - name: Run tests |
| run: dart test --test-randomize-ordering-seed random |
| |
| test_jni_macos_minimal: |
| needs: [analyze_jni] |
| runs-on: macos-latest |
| defaults: |
| run: |
| working-directory: ./pkgs/jni |
| steps: |
| - uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 |
| - uses: subosito/flutter-action@2783a3f08e1baf891508463f8c6653c258246225 |
| with: |
| channel: 'stable' |
| cache: true |
| cache-key: 'flutter-:os:-:channel:-:version:-:arch:-:hash:' |
| - uses: actions/setup-java@99b8673ff64fbf99d8d325f52d9a5bdedb8483e9 |
| with: |
| distribution: 'temurin' |
| java-version: '11' |
| - run: dart pub get |
| - run: dart run jni:setup |
| - run: dart test --test-randomize-ordering-seed random |
| |
| test_jnigen_macos_minimal: |
| needs: [analyze_jnigen] |
| runs-on: macos-latest |
| defaults: |
| run: |
| working-directory: ./pkgs/jnigen |
| steps: |
| - uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 |
| - name: Setup clang format |
| uses: ConorMacBride/install-package@3e7ad059e07782ee54fa35f827df52aae0626f30 |
| with: |
| brew: clang-format |
| - uses: subosito/flutter-action@2783a3f08e1baf891508463f8c6653c258246225 |
| with: |
| channel: 'stable' |
| cache: true |
| cache-key: 'flutter-:os:-:channel:-:version:-:arch:-:hash:' |
| - uses: actions/setup-java@99b8673ff64fbf99d8d325f52d9a5bdedb8483e9 |
| with: |
| distribution: 'temurin' |
| java-version: '11' |
| - run: git config --global core.autocrlf true |
| - run: dart pub get |
| - name: Build summarizer |
| run: dart run jnigen:setup |
| - name: Generate runtime tests |
| run: dart run tool/generate_runtime_tests.dart |
| - name: Run tests |
| run: dart test --test-randomize-ordering-seed random |
| |
| build_jni_example_linux: |
| runs-on: ubuntu-latest |
| defaults: |
| run: |
| working-directory: ./pkgs/jni/example |
| steps: |
| - uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 |
| - uses: subosito/flutter-action@2783a3f08e1baf891508463f8c6653c258246225 |
| with: |
| channel: 'stable' |
| cache: true |
| cache-key: 'flutter-:os:-:channel:-:version:-:arch:-:hash:' |
| - uses: actions/setup-java@99b8673ff64fbf99d8d325f52d9a5bdedb8483e9 |
| 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@b4ffde65f46336ab88eb53be808477a3936bae11 |
| - uses: subosito/flutter-action@2783a3f08e1baf891508463f8c6653c258246225 |
| with: |
| channel: 'stable' |
| cache: true |
| cache-key: 'flutter-:os:-:channel:-:version:-:arch:-:hash:' |
| - uses: actions/setup-java@99b8673ff64fbf99d8d325f52d9a5bdedb8483e9 |
| 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@b4ffde65f46336ab88eb53be808477a3936bae11 |
| - uses: actions/setup-java@99b8673ff64fbf99d8d325f52d9a5bdedb8483e9 |
| with: |
| distribution: 'zulu' |
| java-version: '11' |
| - uses: subosito/flutter-action@2783a3f08e1baf891508463f8c6653c258246225 |
| 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@b4ffde65f46336ab88eb53be808477a3936bae11 |
| - uses: subosito/flutter-action@2783a3f08e1baf891508463f8c6653c258246225 |
| with: |
| channel: 'stable' |
| cache: true |
| cache-key: 'flutter-:os:-:channel:-:version:-:arch:-:hash:' |
| - uses: actions/setup-java@99b8673ff64fbf99d8d325f52d9a5bdedb8483e9 |
| 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 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://raw.githubusercontent.com/dart-lang/site-www/a7f170389e210adc2aef810cc9a6fdbfa78059a5/src/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@3dfc5567390f6fa9267c0ee9c251e4c8c3f18949 |
| with: |
| carryforward: "ffigen_macos,native_assets_builder_macos,native_assets_builder_ubuntu,native_assets_builder_windows,native_assets_cli_macos,native_assets_cli_ubuntu,native_assets_cli_windows,native_toolchain_c_macos,native_toolchain_c_ubuntu,native_toolchain_c_windows" |
| github-token: ${{ secrets.github_token }} |
| parallel-finished: true |