mastodon-dart / mastodon-api

This library provides the easiest and powerful Dart/Flutter library for Mastodon API 🎯
http://pub.dev/packages/mastodon_api
BSD 3-Clause "New" or "Revised" License
64 stars 13 forks source link

Improve Suggestion: build is not deterministic #84

Closed SkywaveTM closed 1 year ago

SkywaveTM commented 1 year ago

1. What could be improved

freeze package, which is being used for generating model classes, could produces different outputs within the versions with the same major version (check commit history for that file). With current version constraints, auto generated codes are not deterministic since different versions of freezed package could be used.

You may reproduce this by playing with follwing commands - dart pub upgrade, dart pub downgrade, dart run build_runner build, dart run build_runner clean

2. Why should this be improved

Contributors may override exiting auto generated codes with auto generated codes in their environment.

3. Any risks?

You may need to manually upgrade freeze package.

4. More information

github-actions[bot] commented 1 year ago

Thanks for your contribution! :)

myConsciousness commented 1 year ago

Hi @SkywaveTM , thanks for your feedback! :)

I'm not very familiar with this issue, but is it related to this?

SkywaveTM commented 1 year ago

Hi @SkywaveTM , thanks for your feedback! :)

I'm not very familiar with this issue, but is it related to this?

Thanks for the reply :D

Anyway, It seems that that is not relevant since I don't get any exceptions. The problem I faced is that after preparing fresh dev environments, set by cloning the repository and runningdart pub get, dart run build_runner build complains about conflicts between auto generated source codes existing on the main branch and newly generated one.

myConsciousness commented 1 year ago

Hi @SkywaveTM ,

What exactly is the conflict between sources? I have tried to follow your procedure to generate the code, but only got the following diffs.

Map<String, dynamic> _$$_InstanceActivityToJson(_$_InstanceActivity instance) {
+  final val = <String, dynamic>{};
+
+  void writeNotNull(String key, dynamic value) {
+    if (value != null) {
+      val[key] = value;
+    }
+  }
+
+  writeNotNull('week', const UnixTimestampConverter().toJson(instance.week));
+  writeNotNull('statuses', const IntConverter().toJson(instance.statusCount));
+  writeNotNull('logins', const IntConverter().toJson(instance.loginCount));
+  writeNotNull(
+      'registrations', const IntConverter().toJson(instance.registrationCount));
+  return val;
}

Is this the conflict you are referring to?

myConsciousness commented 1 year ago

@SkywaveTM ,

Or maybe this message?

[INFO] Found 93 declared outputs which already exist on disk. This is likely because the`.dart_tool/build` folder was deleted, or you are submitting generated files to your source repository.
Delete these files?
1 - Delete
2 - Cancel build
3 - List conflicts
SkywaveTM commented 1 year ago

@SkywaveTM ,

Or maybe this message?

[INFO] Found 93 declared outputs which already exist on disk. This is likely because the`.dart_tool/build` folder was deleted, or you are submitting generated files to your source repository.
Delete these files?
1 - Delete
2 - Cancel build
3 - List conflicts

Yes, exactly (except that I got 89 conflicts). Maybe I had to include the whole outputs earlier :p

outputs ``` > dart run build_runner build [INFO] Generating build script completed, took 663ms [INFO] Precompiling build script... completed, took 9.7s [INFO] Building new asset graph completed, took 1.3s [INFO] Found 89 declared outputs which already exist on disk. This is likely because the`.dart_tool/build` folder was deleted, or you are submitting generated files to your source repository. Delete these files? 1 - Delete 2 - Cancel build 3 - List conflicts 3 [INFO] Conflicts: mastodon_api|lib/src/service/v2/entities/v2_search.freezed.dart mastodon_api|lib/src/service/v2/entities/v2_instance_configuration.freezed.dart mastodon_api|lib/src/service/v2/entities/v2_instance.freezed.dart mastodon_api|lib/src/service/entities/application.freezed.dart mastodon_api|lib/src/service/entities/emoji_reaction.freezed.dart mastodon_api|lib/src/service/entities/instance_statistics.freezed.dart mastodon_api|lib/src/service/entities/featured_tag.freezed.dart mastodon_api|lib/src/service/entities/account_preferences.freezed.dart mastodon_api|lib/src/service/entities/announcement_account.freezed.dart mastodon_api|lib/src/service/entities/poll.freezed.dart mastodon_api|lib/src/service/entities/status.freezed.dart mastodon_api|lib/src/service/entities/announcement.freezed.dart mastodon_api|lib/src/service/entities/blocked_domain.freezed.dart mastodon_api|lib/src/service/entities/instance_accounts_configuration.freezed.dart mastodon_api|lib/src/service/entities/thumbnail.freezed.dart mastodon_api|lib/src/service/entities/instance_contact.freezed.dart mastodon_api|lib/src/service/entities/account.freezed.dart mastodon_api|lib/src/service/entities/thumbnail_version.freezed.dart mastodon_api|lib/src/service/entities/tag.freezed.dart mastodon_api|lib/src/service/entities/registered_application.freezed.dart mastodon_api|lib/src/service/entities/instance_urls_configuration.freezed.dart mastodon_api|lib/src/service/entities/instance_usage_users.freezed.dart mastodon_api|lib/src/service/entities/instance.freezed.dart mastodon_api|lib/src/service/entities/instance_usage.freezed.dart mastodon_api|lib/src/service/entities/instance_configuration.freezed.dart mastodon_api|lib/src/service/entities/usage_statistics.freezed.dart mastodon_api|lib/src/service/entities/preview_card.freezed.dart mastodon_api|lib/src/service/entities/instance_registrations.freezed.dart mastodon_api|lib/src/service/entities/instance_translation_configuration.freezed.dart mastodon_api|lib/src/service/entities/instance_polls_configuration.freezed.dart mastodon_api|lib/src/service/entities/rate_limit.freezed.dart mastodon_api|lib/src/service/entities/relationship.freezed.dart mastodon_api|lib/src/service/entities/emoji.freezed.dart mastodon_api|lib/src/service/entities/user_list.freezed.dart mastodon_api|lib/src/service/entities/extended_description.freezed.dart mastodon_api|lib/src/service/entities/instance_media_configuration.freezed.dart mastodon_api|lib/src/service/entities/instance_statuses_configuration.freezed.dart mastodon_api|lib/src/service/entities/rule.freezed.dart mastodon_api|lib/src/service/entities/token.freezed.dart mastodon_api|lib/src/service/entities/field.freezed.dart mastodon_api|lib/src/service/entities/familiar_follower.freezed.dart mastodon_api|lib/src/service/entities/announcement_status.freezed.dart mastodon_api|lib/src/service/entities/poll_option.freezed.dart mastodon_api|lib/src/service/entities/instance_activity.freezed.dart mastodon_api|test/mocks/mock.mocks.dart mastodon_api|lib/src/service/v2/entities/v2_search.g.dart mastodon_api|lib/src/service/v2/entities/v2_instance_configuration.g.dart mastodon_api|lib/src/service/v2/entities/v2_instance.g.dart mastodon_api|lib/src/service/entities/application.g.dart mastodon_api|lib/src/service/entities/emoji_reaction.g.dart mastodon_api|lib/src/service/entities/instance_statistics.g.dart mastodon_api|lib/src/service/entities/featured_tag.g.dart mastodon_api|lib/src/service/entities/account_preferences.g.dart mastodon_api|lib/src/service/entities/announcement_account.g.dart mastodon_api|lib/src/service/entities/poll.g.dart mastodon_api|lib/src/service/entities/status.g.dart mastodon_api|lib/src/service/entities/announcement.g.dart mastodon_api|lib/src/service/entities/blocked_domain.g.dart mastodon_api|lib/src/service/entities/instance_accounts_configuration.g.dart mastodon_api|lib/src/service/entities/thumbnail.g.dart mastodon_api|lib/src/service/entities/instance_contact.g.dart mastodon_api|lib/src/service/entities/account.g.dart mastodon_api|lib/src/service/entities/thumbnail_version.g.dart mastodon_api|lib/src/service/entities/tag.g.dart mastodon_api|lib/src/service/entities/registered_application.g.dart mastodon_api|lib/src/service/entities/instance_urls_configuration.g.dart mastodon_api|lib/src/service/entities/instance_usage_users.g.dart mastodon_api|lib/src/service/entities/instance.g.dart mastodon_api|lib/src/service/entities/instance_usage.g.dart mastodon_api|lib/src/service/entities/instance_configuration.g.dart mastodon_api|lib/src/service/entities/usage_statistics.g.dart mastodon_api|lib/src/service/entities/preview_card.g.dart mastodon_api|lib/src/service/entities/instance_registrations.g.dart mastodon_api|lib/src/service/entities/instance_translation_configuration.g.dart mastodon_api|lib/src/service/entities/instance_polls_configuration.g.dart mastodon_api|lib/src/service/entities/rate_limit.g.dart mastodon_api|lib/src/service/entities/relationship.g.dart mastodon_api|lib/src/service/entities/emoji.g.dart mastodon_api|lib/src/service/entities/user_list.g.dart mastodon_api|lib/src/service/entities/extended_description.g.dart mastodon_api|lib/src/service/entities/instance_media_configuration.g.dart mastodon_api|lib/src/service/entities/instance_statuses_configuration.g.dart mastodon_api|lib/src/service/entities/rule.g.dart mastodon_api|lib/src/service/entities/token.g.dart mastodon_api|lib/src/service/entities/field.g.dart mastodon_api|lib/src/service/entities/familiar_follower.g.dart mastodon_api|lib/src/service/entities/announcement_status.g.dart mastodon_api|lib/src/service/entities/poll_option.g.dart mastodon_api|lib/src/service/entities/instance_activity.g.dart Delete these files? 1 - Delete 2 - Cancel build 3 - List conflicts ```
myConsciousness commented 1 year ago

@SkywaveTM ,

Oh just a few minutes ago I ran dart upgrade --null-safety and committed the code generated from the latest dependencies...

https://github.com/mastodon-dart/mastodon-api/pull/87/files

Basically, you can always use the latest dependencies, and also please select 1: Delete when that option is given, I'll check if it's a breaking change :)

btw, are you interested in pull requests? I'm welcome to add endpoints or even improve the internal process :)

There are few difficulties in adding endpoints, since a generic request mechanism and a mechanism for converting them to model objects already exist :)

myConsciousness commented 1 year ago

@all-contributors please add @SkywaveTM for ideas

allcontributors[bot] commented 1 year ago

@myConsciousness

I've put up a pull request to add @SkywaveTM! :tada: