# CI for the native_* packages. # # Combined into a single workflow so that deps are configured and installed once. name: native permissions: read-all on: pull_request: # No `branches:` to enable stacked PRs on GitHub. paths: - ".github/workflows/native.yaml" - "pkgs/native_assets_builder/**" - "pkgs/native_assets_cli/**" - "pkgs/native_toolchain_c/**" - "tools/**" push: branches: [main] paths: - ".github/workflows/native.yaml" - "pkgs/native_assets_builder/**" - "pkgs/native_assets_cli/**" - "pkgs/native_toolchain_c/**" - "tools/**" schedule: - cron: "0 0 * * 0" # weekly jobs: build: strategy: fail-fast: false matrix: os: [ubuntu, macos, windows] sdk: [stable, dev] package: [native_assets_builder, native_assets_cli, native_toolchain_c] # Breaking changes temporarily break the example run on the Dart SDK until native_assets_builder is rolled into the Dart SDK dev build. breaking-change: [false] runs-on: ${{ matrix.os }}-latest defaults: run: working-directory: pkgs/${{ matrix.package }} steps: - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 - uses: dart-lang/setup-dart@e630b99d28a3b71860378cafdc2a067c71107f94 with: sdk: ${{ matrix.sdk }} - uses: nttld/setup-ndk@afb4c9964b521afb97c864b7d40b11e6911bd410 with: ndk-version: r27 if: ${{ matrix.os != 'macos' }} - run: dart pub get - run: dart pub get -C test_data/dart_app/ if: ${{ matrix.package == 'native_assets_builder' }} - run: dart pub get -C test_data/native_add/ if: ${{ matrix.package == 'native_assets_builder' }} - run: dart pub get -C test_data/native_add_duplicate/ if: ${{ matrix.package == 'native_assets_builder' }} - run: dart pub get -C test_data/native_add_add_source/ if: ${{ matrix.package == 'native_assets_builder' }} - run: dart pub get -C test_data/native_add_version_skew/ if: ${{ matrix.package == 'native_assets_builder' }} - run: dart pub get -C test_data/native_add_version_skew_2/ if: ${{ matrix.package == 'native_assets_builder' }} - run: dart pub get -C test_data/native_subtract/ if: ${{ matrix.package == 'native_assets_builder' }} - run: dart pub get -C test_data/package_reading_metadata/ if: ${{ matrix.package == 'native_assets_builder' }} - run: dart pub get -C test_data/package_with_metadata/ if: ${{ matrix.package == 'native_assets_builder' }} - run: dart pub get -C test_data/simple_link/ if: ${{ matrix.package == 'native_assets_builder' }} - run: dart pub get -C test_data/complex_link/ if: ${{ matrix.package == 'native_assets_builder' }} - run: dart pub get -C test_data/complex_link_helper/ if: ${{ matrix.package == 'native_assets_builder' }} - run: dart pub get -C test_data/drop_dylib_link/ if: ${{ matrix.package == 'native_assets_builder' }} - run: dart pub get -C test_data/add_asset_link/ if: ${{ matrix.package == 'native_assets_builder' }} - run: dart pub get -C test_data/transformer/ if: ${{ matrix.package == 'native_assets_builder' }} - run: dart pub get -C test_data/treeshaking_native_libs/ if: ${{ matrix.package == 'native_assets_builder' }} - run: dart pub get -C test_data/native_dynamic_linking/ if: ${{ matrix.package == 'native_assets_builder' }} - run: dart pub get -C test_data/no_hook/ if: ${{ matrix.package == 'native_assets_builder' }} - run: dart pub get -C example/build/download_asset/ if: ${{ matrix.package == 'native_assets_cli' }} - run: dart pub get -C example/build/native_dynamic_linking/ if: ${{ matrix.package == 'native_assets_cli' }} - run: dart pub get -C example/build/native_add_app/ if: ${{ matrix.package == 'native_assets_cli' }} - run: dart pub get -C example/build/native_add_library/ if: ${{ matrix.package == 'native_assets_cli' }} - run: dart pub get -C example/build/use_dart_api/ if: ${{ matrix.package == 'native_assets_cli' }} - run: dart pub get -C example/build/system_library/ if: ${{ matrix.package == 'native_assets_cli' }} - run: dart pub get -C example/link/package_with_assets/ if: ${{ matrix.package == 'native_assets_cli' }} - run: dart pub get -C example/link/app_with_asset_treeshaking/ if: ${{ matrix.package == 'native_assets_cli' }} - run: dart pub get -C test_data/fail_build/ if: ${{ matrix.package == 'native_assets_builder' }} - run: dart pub get -C test_data/depend_on_fail_build/ if: ${{ matrix.package == 'native_assets_builder' }} - run: dart pub get -C test_data/depend_on_fail_build_app/ if: ${{ matrix.package == 'native_assets_builder' }} - run: dart pub get -C test_data/system_library/ if: ${{ matrix.package == 'native_assets_builder' }} - run: dart analyze --fatal-infos # Run on dev to ensure we're not depending on deprecated SDK things. - run: dart format --output=none --set-exit-if-changed . - name: Install native toolchains run: sudo apt-get update && sudo apt-get install clang-15 gcc-i686-linux-gnu gcc-aarch64-linux-gnu gcc-arm-linux-gnueabihf gcc-riscv64-linux-gnu if: ${{ matrix.os == 'ubuntu' }} - run: dart test - run: dart --enable-experiment=native-assets test working-directory: pkgs/${{ matrix.package }}/example/build/native_dynamic_linking/ # TODO(https://github.com/dart-lang/native/issues/190): Enable on windows once # https://github.com/dart-lang/sdk/commit/903eea6bfb8ee405587f0866a1d1e92eea45d29e # has landed in dev channel. if: ${{ matrix.package == 'native_assets_cli' && matrix.sdk == 'dev' && !matrix.breaking-change && matrix.os != 'windows' }} - run: dart --enable-experiment=native-assets test working-directory: pkgs/${{ matrix.package }}/example/build/native_add_app/ if: ${{ matrix.package == 'native_assets_cli' && matrix.sdk == 'dev' && !matrix.breaking-change }} - run: dart --enable-experiment=native-assets run working-directory: pkgs/${{ matrix.package }}/example/build/native_add_app/ if: ${{ matrix.package == 'native_assets_cli' && matrix.sdk == 'dev' && !matrix.breaking-change }} - run: dart --enable-experiment=native-assets build bin/native_add_app.dart working-directory: pkgs/${{ matrix.package }}/example/build/native_add_app/ if: ${{ matrix.package == 'native_assets_cli' && matrix.sdk == 'dev' && !matrix.breaking-change }} - run: ./native_add_app.exe working-directory: pkgs/${{ matrix.package }}/example/build/native_add_app/bin/native_add_app/ if: ${{ matrix.package == 'native_assets_cli' && matrix.sdk == 'dev' && !matrix.breaking-change }} - run: dart --enable-experiment=native-assets test working-directory: pkgs/${{ matrix.package }}/example/build/use_dart_api/ if: ${{ matrix.package == 'native_assets_cli' && matrix.sdk == 'dev' && !matrix.breaking-change }} # TODO(https://github.com/dart-lang/native/issues/1879): Enable this when the fix has rolled into Dart. # - run: dart --enable-experiment=native-assets test # working-directory: pkgs/${{ matrix.package }}/example/build/system_library/ # if: ${{ matrix.package == 'native_assets_cli' && matrix.sdk == 'dev' && !matrix.breaking-change }} - 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@648a8eb78e6d50909eff900e4ec85cab4524a45b with: flag-name: ${{ matrix.package }}_${{ matrix.os }} github-token: ${{ secrets.GITHUB_TOKEN }} parallel: true coverage-finished: needs: [build] runs-on: ubuntu-latest steps: - name: Upload coverage uses: coverallsapp/github-action@648a8eb78e6d50909eff900e4ec85cab4524a45b with: carryforward: "ffigen,jni,jnigen,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,objective_c,swift2objc" github-token: ${{ secrets.GITHUB_TOKEN }} parallel-finished: true