Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[native_assets_builder] Automatically track all Dart sources as dependencies #1322

Merged
merged 10 commits into from
Jul 12, 2024

Conversation

dcharkes
Copy link
Collaborator

@dcharkes dcharkes commented Jul 11, 2024

Changes

The native_assets_builder now automatically treats all (transitive) Dart sources of a hook and the package_config.json as dependencies. This means the hook output no longer needs to list Dart sources as dependencies.

The native_assets_cli documentation is updated to reflect this.

The native_toolchain_c CBuilder field to list the Dart hook files have been deprecated.

Testing

All Dart sources have been removed from the dependencies of the hooks.

pkgs/native_assets_builder/test/build_runner/build_runner_caching_test.dart already had a test for checking a hook output is not cached if the hook file itself is changed. This test passes now because the native assets builder lists all the Dart sources. The hook itself no longer reports itself as dependency in its output.

One weird quirk when testing is that we need to artificially leave some time between the pub get and kernel compilation. It can be sub-second. And on Windows, the file timestamps only have second-precision. This means that if the dill file is compiled the same second as the package_config.json is written, the next invocation doesn't cache. By slowing the test down, we can test that in fact the second invocation is cached.

Infra

dart compile kernel --depfile is only available on 3.5.0 dev releases. So package:native_assets_builder can no longer be run on the stable releases. This doesn't matter, because this package is pulled in to the last main/master for Flutter and Dart.

Copy link

github-actions bot commented Jul 11, 2024

PR Health

Breaking changes ✔️

Details
Package Change Current Version New Version Needed Version Looking good?
native_assets_cli None 0.7.1 0.7.1-wip 0.7.1 ✔️

Changelog Entry ✔️

Details
Package Changed Files

Changes to files need to be accounted for in their respective changelogs.

License Headers ✔️

Details
// Copyright (c) 2024, 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.
Files
no missing headers

All source files should start with a license header.

Unrelated files missing license headers
Files
pkgs/ffigen/example/libclang-example/generated_bindings.dart
pkgs/ffigen/example/shared_bindings/generate.dart
pkgs/ffigen/example/shared_bindings/lib/generated/a_gen.dart
pkgs/ffigen/example/shared_bindings/lib/generated/a_shared_b_gen.dart
pkgs/ffigen/example/shared_bindings/lib/generated/base_gen.dart
pkgs/ffigen/example/simple/generated_bindings.dart
pkgs/ffigen/lib/src/header_parser/clang_bindings/clang_bindings.dart
pkgs/ffigen/test/collision_tests/expected_bindings/_expected_decl_decl_collision_bindings.dart
pkgs/ffigen/test/collision_tests/expected_bindings/_expected_decl_symbol_address_collision_bindings.dart
pkgs/ffigen/test/collision_tests/expected_bindings/_expected_decl_type_name_collision_bindings.dart
pkgs/ffigen/test/collision_tests/expected_bindings/_expected_reserved_keyword_collision_bindings.dart
pkgs/ffigen/test/header_parser_tests/expected_bindings/_expected_comment_markup_bindings.dart
pkgs/ffigen/test/header_parser_tests/expected_bindings/_expected_dart_handle_bindings.dart
pkgs/ffigen/test/header_parser_tests/expected_bindings/_expected_enum_int_mimic_bindings.dart
pkgs/ffigen/test/header_parser_tests/expected_bindings/_expected_forward_decl_bindings.dart
pkgs/ffigen/test/header_parser_tests/expected_bindings/_expected_functions_bindings.dart
pkgs/ffigen/test/header_parser_tests/expected_bindings/_expected_imported_types_bindings.dart
pkgs/ffigen/test/header_parser_tests/expected_bindings/_expected_native_func_typedef_bindings.dart
pkgs/ffigen/test/header_parser_tests/expected_bindings/_expected_opaque_dependencies_bindings.dart
pkgs/ffigen/test/header_parser_tests/expected_bindings/_expected_packed_structs_bindings.dart
pkgs/ffigen/test/header_parser_tests/expected_bindings/_expected_regress_384_bindings.dart
pkgs/ffigen/test/header_parser_tests/expected_bindings/_expected_struct_fptr_fields_bindings.dart
pkgs/ffigen/test/header_parser_tests/expected_bindings/_expected_typedef_bindings.dart
pkgs/ffigen/test/header_parser_tests/expected_bindings/_expected_unions_bindings.dart
pkgs/ffigen/test/header_parser_tests/expected_bindings/_expected_varargs_bindings.dart
pkgs/ffigen/test/large_integration_tests/_expected_cjson_bindings.dart
pkgs/ffigen/test/large_integration_tests/_expected_libclang_bindings.dart
pkgs/ffigen/test/large_integration_tests/_expected_sqlite_bindings.dart
pkgs/ffigen/test/native_test/_expected_native_test_bindings.dart
pkgs/jni/lib/src/lang/jcharacter.dart
pkgs/jni/lib/src/third_party/generated_bindings.dart
pkgs/jni/lib/src/third_party/global_env_extensions.dart
pkgs/jni/lib/src/third_party/jni_bindings_generated.dart
pkgs/jnigen/android_test_runner/lib/main.dart
pkgs/jnigen/example/in_app_java/lib/android_utils.dart
pkgs/jnigen/example/kotlin_plugin/example/lib/main.dart
pkgs/jnigen/example/kotlin_plugin/lib/kotlin_bindings.dart
pkgs/jnigen/example/kotlin_plugin/lib/kotlin_plugin.dart
pkgs/jnigen/example/pdfbox_plugin/lib/pdfbox_plugin.dart
pkgs/jnigen/example/pdfbox_plugin/lib/src/third_party/org/apache/pdfbox/pdmodel/PDDocument.dart
pkgs/jnigen/example/pdfbox_plugin/lib/src/third_party/org/apache/pdfbox/pdmodel/PDDocumentInformation.dart
pkgs/jnigen/example/pdfbox_plugin/lib/src/third_party/org/apache/pdfbox/pdmodel/_package.dart
pkgs/jnigen/example/pdfbox_plugin/lib/src/third_party/org/apache/pdfbox/text/PDFTextStripper.dart
pkgs/jnigen/example/pdfbox_plugin/lib/src/third_party/org/apache/pdfbox/text/_package.dart
pkgs/jnigen/lib/src/bindings/descriptor.dart
pkgs/jnigen/lib/src/elements/elements.g.dart
pkgs/jnigen/test/jackson_core_test/third_party/bindings/com/fasterxml/jackson/core/_package.dart
pkgs/jnigen/tool/command_runner.dart
pkgs/native_assets_cli/lib/src/api/builder.dart
pkgs/native_assets_cli/lib/src/api/linker.dart
pkgs/swiftgen/swift2objc/lib/src/transformer/_core/unique_namer.dart

Package publish validation ✔️

Details
Package Version Status
package:ffi 2.1.3-wip WIP (no publish necessary)
package:ffigen 13.0.0-wip WIP (no publish necessary)
package:jni 0.10.1 already published at pub.dev
package:jnigen 0.10.0 already published at pub.dev
package:native_assets_cli 0.7.1-wip WIP (no publish necessary)
package:objective_c 1.1.0-wip WIP (no publish necessary)
package:swiftgen 0.0.1-wip WIP (no publish necessary)

Documentation at https://github.com/dart-lang/ecosystem/wiki/Publishing-automation.

@github-actions github-actions bot added the type-infra A repository infrastructure change or enhancement label Jul 11, 2024
@coveralls
Copy link

coveralls commented Jul 11, 2024

Coverage Status

coverage: 94.786%. first build
when pulling f328644 on dart-deps
into 3b9e03c on main.

@dcharkes
Copy link
Collaborator Author

Package Change Current Version New Version Needed Version Looking good?
native_assets_cli Breaking 0.7.0 0.7.1-wip 0.8.0
Got "0.7.1-wip" expected >= "0.8.0" (breaking changes) ⚠️

I don't see any breaking changes here.

@dcharkes dcharkes requested review from mosuem and HosseinYousefi and removed request for mosuem July 11, 2024 19:33
@mosuem
Copy link
Member

mosuem commented Jul 12, 2024

Package Change Current Version New Version Needed Version Looking good?
native_assets_cli Breaking 0.7.0 0.7.1-wip 0.8.0
Got "0.7.1-wip" expected >= "0.8.0" (breaking changes) ⚠️

I don't see any breaking changes here.

The log says:

Breaking change report:
{
  "breakingChanges": {
    "label": "BREAKING CHANGES",
    "children": [
      {
        "label": "Class HookConfigImpl",
        "children": [
          {
            "changeDescription": "Method \"checksumDryRun\" added (required)",
            "changeCode": "CE11",
            "isBreaking": true,
            "type": "minor"
          }
        ]
      }
    ]
  },
  "nonBreakingChanges": {
    "label": "Non-Breaking changes",
    "children": [
      {
        "label": "Class BuildConfigImpl",
        "children": [
          {
            "changeDescription": "Method \"checksumDryRun\" added",
            "changeCode": "CE11",
            "isBreaking": false,
            "type": "minor"
          }
        ]
      },
      {
        "label": "Class LinkConfigImpl",
        "children": [
          {
            "changeDescription": "Method \"checksumDryRun\" added",
            "changeCode": "CE11",
            "isBreaking": false,
            "type": "minor"
          }
        ]
      }
    ]
  }
}

@dcharkes
Copy link
Collaborator Author

That seems to be a bug. Adding a static method should not be a breaking change right?

@mosuem
Copy link
Member

mosuem commented Jul 12, 2024

That seems to be a bug. Adding a static method should not be a breaking change right?

Hmm, I think it might be, if somebody defined checksumDryRun in an extension on HookConfigImpl before, it is now overriden by this new method.

Nevermind, we don't have static methods in extensions (yet).

Copy link
Member

@HosseinYousefi HosseinYousefi left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LGTM!

@dcharkes dcharkes merged commit b01a3f3 into main Jul 12, 2024
29 checks passed
@dcharkes dcharkes deleted the dart-deps branch July 12, 2024 14:01
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

Successfully merging this pull request may close these issues.

4 participants