build: Generate the list of libraries
This commit is contained in:
parent
1a29f856e4
commit
2b301ca032
71
generate_licenses.py
Normal file
71
generate_licenses.py
Normal file
@ -0,0 +1,71 @@
|
||||
import yaml
|
||||
import requests
|
||||
|
||||
def render_library(obj, _license):
|
||||
return '\tLibrary(name: "{}", license: "{}", url: "{}")'.format(
|
||||
obj["name"],
|
||||
_license,
|
||||
obj["url"]
|
||||
)
|
||||
|
||||
def homepage_wrapper(obj):
|
||||
if "homepage" in obj["latest"]["pubspec"]:
|
||||
return obj["latest"]["pubspec"]["homepage"]
|
||||
elif "repository" in obj["latest"]["pubspec"]:
|
||||
return obj["latest"]["pubspec"]["repository"]
|
||||
|
||||
raise Exception("No homepage or repository for " + obj["name"])
|
||||
|
||||
def get_library_data(pkg):
|
||||
req = requests.get("https://pub.dev/api/packages/" + pkg)
|
||||
|
||||
return {
|
||||
"name": req.json()["name"],
|
||||
"url": homepage_wrapper(req.json())
|
||||
}
|
||||
|
||||
def get_license(pkg):
|
||||
req = requests.get("https://pub.dev/packages/" + pkg + "/license")
|
||||
|
||||
if "Apache-2.0" in req.text:
|
||||
return "Apache-2.0"
|
||||
elif "BSD-3-Clause" in req.text:
|
||||
return "BSD-3-Clause"
|
||||
elif "MIT" in req.text:
|
||||
return "MIT"
|
||||
|
||||
raise Exception("Unknown license for " + pkg)
|
||||
|
||||
def mklib(pkg):
|
||||
print(pkg)
|
||||
return render_library(get_library_data(pkg), get_license(pkg))
|
||||
|
||||
#print(get_license("flutter_settings_ui"))
|
||||
#print(get_library_data("flutter_settings_ui"))
|
||||
|
||||
def main():
|
||||
with open("pubspec.yaml", "r") as f:
|
||||
pubspec = yaml.load(f.read(), Loader=yaml.Loader)
|
||||
|
||||
libs = [ mklib(pkg) for pkg in pubspec["dependencies"] if pkg not in ("flutter",) ]
|
||||
devlibs = [ mklib(pkg) for pkg in pubspec["dev_dependencies"] if pkg not in ("flutter_test", "test",) ]
|
||||
|
||||
extra = pubspec.get("extra_licenses", {})
|
||||
extralibs = [ render_library({ "name": obj, "url": extra[obj]["url"] }, extra[obj]["license"]) for obj in extra ]
|
||||
|
||||
generated = '''
|
||||
// Generated by generate_providers.py
|
||||
import "dart:collection";
|
||||
import "package:moxxyv2/data/libraries.dart";
|
||||
|
||||
final List<Library> usedLibraryList = [
|
||||
{}
|
||||
];
|
||||
'''.format(",\n".join(libs + devlibs + extralibs));
|
||||
|
||||
with open("lib/data/generated/licenses.dart", "w") as f:
|
||||
f.write(generated)
|
||||
#print(generated)
|
||||
|
||||
if __name__ == "__main__":
|
||||
main()
|
7
lib/data/libraries.dart
Normal file
7
lib/data/libraries.dart
Normal file
@ -0,0 +1,7 @@
|
||||
class Library {
|
||||
final String name;
|
||||
final String license;
|
||||
final String url;
|
||||
|
||||
const Library({ required this.name, required this.license, required this.url });
|
||||
}
|
@ -2,100 +2,12 @@ import "dart:collection";
|
||||
import 'package:flutter/material.dart';
|
||||
import "package:moxxyv2/ui/constants.dart";
|
||||
import "package:moxxyv2/ui/widgets/topbar.dart";
|
||||
import "package:moxxyv2/data/libraries.dart";
|
||||
import "package:moxxyv2/data/generated/licenses.dart";
|
||||
|
||||
import "package:flutter_settings_ui/flutter_settings_ui.dart";
|
||||
import "package:url_launcher/url_launcher.dart";
|
||||
|
||||
// TODO: Maybe also include the License text
|
||||
|
||||
class Library {
|
||||
final String name;
|
||||
final String license;
|
||||
final String url;
|
||||
|
||||
const Library({ required this.name, required this.license, required this.url });
|
||||
}
|
||||
|
||||
// TODO: Maybe generate this list during build
|
||||
const List<Library> _USED_LIBRARIES = [
|
||||
Library(
|
||||
name: "flutter_settings_ui",
|
||||
license: "Apache-2.0",
|
||||
url: "https://github.com/juliansteenbakker/flutter_settings_ui"
|
||||
),
|
||||
Library(
|
||||
name: "flutter_speed_dial",
|
||||
license: "MIT",
|
||||
url: "https://github.com/darioielardi/flutter_speed_dial"
|
||||
),
|
||||
Library(
|
||||
name: "get_it",
|
||||
license: "MIT",
|
||||
url: "https://github.com/fluttercommunity/get_it"
|
||||
),
|
||||
Library(
|
||||
name: "redux",
|
||||
license: "MIT",
|
||||
url: "https://github.com/fluttercommunity/redux.dart"
|
||||
),
|
||||
Library(
|
||||
name: "flutter_redux",
|
||||
license: "MIT",
|
||||
url: "https://github.com/brianegan/flutter_redux"
|
||||
),
|
||||
Library(
|
||||
name: "badges",
|
||||
license: "Apache-2.0",
|
||||
url: "https://github.com/yadaniyil/flutter_badges"
|
||||
),
|
||||
Library(
|
||||
name: "url_launcher",
|
||||
license: "BSD-3-Clause",
|
||||
url: "https://github.com/flutter/plugins/tree/master/packages/url_launcher/url_launcher"
|
||||
),
|
||||
Library(
|
||||
name: "flutter_launcher_icons",
|
||||
license: "MIT",
|
||||
url: "https://github.com/fluttercommunity/flutter_launcher_icons"
|
||||
),
|
||||
Library(
|
||||
name: "flutter_lints",
|
||||
license: "BSD-3-Clause",
|
||||
url: "https://github.com/flutter/packages/tree/master/packages/flutter_lints"
|
||||
),
|
||||
Library(
|
||||
name: "floor",
|
||||
license: "Apache-2.0",
|
||||
url: "https://github.com/vitusortner/floor"
|
||||
),
|
||||
Library(
|
||||
name: "floor_generator",
|
||||
license: "Apache-2.0",
|
||||
url: "https://github.com/vitusortner/floor"
|
||||
),
|
||||
Library(
|
||||
name: "build_runner",
|
||||
license: "BSD-3-Clause",
|
||||
url: "https://github.com/dart-lang/build/tree/master/build_runner"
|
||||
),
|
||||
Library(
|
||||
name: "undraw.co",
|
||||
license: "custom license",
|
||||
url: "https://undraw.co/"
|
||||
),
|
||||
Library(
|
||||
// TODO: This is dangerous
|
||||
name: "xmpp-providers",
|
||||
license: "unknown license",
|
||||
url: "https://invent.kde.org/melvo/xmpp-providers"
|
||||
),
|
||||
Library(
|
||||
name: "qr_flutter",
|
||||
license: "BSD-3-Clause",
|
||||
url: "https://github.com/theyakka/qr.flutter"
|
||||
)
|
||||
];
|
||||
|
||||
class LicenseRow extends StatelessWidget {
|
||||
final Library library;
|
||||
|
||||
@ -124,8 +36,8 @@ class SettingsLicensesPage extends StatelessWidget {
|
||||
return Scaffold(
|
||||
appBar: BorderlessTopbar.simple(title: "Licenses"),
|
||||
body: ListView.builder(
|
||||
itemCount: _USED_LIBRARIES.length,
|
||||
itemBuilder: (context, index) => LicenseRow(library: _USED_LIBRARIES[index])
|
||||
itemCount: usedLibraryList.length,
|
||||
itemBuilder: (context, index) => LicenseRow(library: usedLibraryList[index])
|
||||
)
|
||||
);
|
||||
}
|
||||
|
@ -46,6 +46,15 @@ dev_dependencies:
|
||||
test:
|
||||
flutter_launcher_icons: ^0.9.2
|
||||
|
||||
extra_licenses:
|
||||
undraw.co:
|
||||
license: "custom license"
|
||||
url: "https://undraw.co"
|
||||
xmpp-providers:
|
||||
# TODO: Dangerous
|
||||
license: "unknown license"
|
||||
url: "https://invent.kde.org/melvo/xmpp-providers"
|
||||
|
||||
flutter:
|
||||
uses-material-design: true
|
||||
assets:
|
||||
|
Loading…
Reference in New Issue
Block a user