diff --git a/.flavor b/.env similarity index 100% rename from .flavor rename to .env diff --git a/.github/workflows/prepare.yml b/.github/workflows/prepare.yml index 927bd8a5..21f3df2e 100644 --- a/.github/workflows/prepare.yml +++ b/.github/workflows/prepare.yml @@ -213,10 +213,10 @@ jobs: platform: test skip-core: true - - name: Generate Flavor Configuration + - name: Generate Environment Configuration run: | - echo FLAVOR=${{ inputs.flavor }} > .flavor - echo COMMIT=${{ github.sha }} >> .flavor + echo FLAVOR=${{ inputs.flavor }} > .env + echo COMMIT=${{ github.sha }} >> .env - name: Generate Localization run: dart ${{github.workspace }}/scripts/generate_localization.dart @@ -229,6 +229,6 @@ jobs: with: name: core-files path: | - ${{ github.workspace }}/.flavor + ${{ github.workspace }}/.env ${{ github.workspace }}/assets/localization ${{ github.workspace }}/lib/**/*.g.dart diff --git a/build.yaml b/build.yaml index 7643f731..dacca006 100644 --- a/build.yaml +++ b/build.yaml @@ -12,7 +12,7 @@ targets: exclude: - lib include: - - lib/core/system/flavor.dart + - lib/system/build/environment.dart # Hive hive_generator: enabled: true diff --git a/lib/core/models/logs/log_type.dart b/lib/core/models/logs/log_type.dart index 2f2c8d77..c750ce1b 100644 --- a/lib/core/models/logs/log_type.dart +++ b/lib/core/models/logs/log_type.dart @@ -1,6 +1,9 @@ import 'package:flutter/material.dart'; import 'package:lunasea/core.dart'; +import '../../../system/build/environment.dart'; +import '../../../system/build/flavor.dart'; + part 'log_type.g.dart'; @HiveType(typeId: 24, adapterName: 'LunaLogTypeAdapter') @@ -52,7 +55,7 @@ extension LunaLogTypeExtension on LunaLogType { case LunaLogType.CRITICAL: return true; case LunaLogType.DEBUG: - return LunaFlavor().isLowerOrEqualTo(LunaEnvironment.CANDIDATE); + return LunaEnvironment().isFlavorSupported(LunaFlavor.CANDIDATE); } } diff --git a/lib/core/modules.dart b/lib/core/modules.dart index 0db24b79..4a6db4d3 100644 --- a/lib/core/modules.dart +++ b/lib/core/modules.dart @@ -18,6 +18,8 @@ import '../modules/dashboard/core/database.dart'; import '../modules/dashboard/core/state.dart' as dashboard_state; import '../modules/dashboard/routes/dashboard/route.dart' as dashboard_home; import '../modules/wake_on_lan/api/wake_on_lan.dart'; +import '../system/build/environment.dart'; +import '../system/build/flavor.dart'; part 'modules.g.dart'; @@ -75,7 +77,7 @@ extension LunaModuleExtension on LunaModule { case LunaModule.NZBGET: return true; case LunaModule.OVERSEERR: - return LunaFlavor().isLowerOrEqualTo(LunaEnvironment.EDGE); + return LunaEnvironment().isFlavorSupported(LunaFlavor.EDGE); case LunaModule.RADARR: return true; case LunaModule.SABNZBD: diff --git a/lib/core/system.dart b/lib/core/system.dart index fa748ba1..e78167d9 100644 --- a/lib/core/system.dart +++ b/lib/core/system.dart @@ -1,5 +1,4 @@ export 'system/configuration.dart'; -export 'system/flavor.dart'; export 'system/in_app_purchases.dart'; export 'system/localization.dart'; export 'system/profile.dart'; diff --git a/lib/core/system/flavor.dart b/lib/core/system/flavor.dart deleted file mode 100644 index 19394cb5..00000000 --- a/lib/core/system/flavor.dart +++ /dev/null @@ -1,120 +0,0 @@ -import 'package:flutter/material.dart'; -import 'package:lunasea/core.dart'; -import 'package:envify/envify.dart'; - -part 'flavor.g.dart'; - -const _EDGE = 'edge'; -const _BETA = 'beta'; -const _CANDIDATE = 'candidate'; -const _STABLE = 'stable'; - -@Envify(path: '.flavor') -class LunaFlavor { - static const flavor = _LunaFlavor.flavor; - static const commit = _LunaFlavor.commit; -} - -extension FlavorExtension on LunaFlavor { - LunaEnvironment get environment { - switch (LunaFlavor.flavor) { - case _EDGE: - return LunaEnvironment.EDGE; - case _BETA: - return LunaEnvironment.BETA; - case _CANDIDATE: - return LunaEnvironment.CANDIDATE; - case _STABLE: - return LunaEnvironment.STABLE; - } - throw Exception('Invalid LunaEnvironment'); - } - - String get shortCommit { - return LunaFlavor.commit.substring(0, min(7, LunaFlavor.commit.length)); - } - - Future openCommitHistory() async { - String _base = 'https://github.com/JagandeepBrar/LunaSea/commits'; - return '$_base/${LunaFlavor.commit}'.lunaOpenGenericLink(); - } - - /// Returns if the given flavor is "lower" than the given environment. - /// For example, `alpha` is lower than `beta` but is not lower than `develop`. - bool isLowerOrEqualTo(LunaEnvironment env) { - if (this.environment == env) return true; - switch (env) { - case LunaEnvironment.EDGE: - return false; - case LunaEnvironment.BETA: - return this.environment == LunaEnvironment.EDGE; - case LunaEnvironment.CANDIDATE: - return this.environment == LunaEnvironment.EDGE || - this.environment == LunaEnvironment.BETA; - case LunaEnvironment.STABLE: - return true; - } - } -} - -enum LunaEnvironment { - EDGE, - BETA, - CANDIDATE, - STABLE, -} - -extension LunaEnvironmentExtension on LunaEnvironment { - String get key { - switch (this) { - case LunaEnvironment.EDGE: - return _EDGE; - case LunaEnvironment.BETA: - return _BETA; - case LunaEnvironment.CANDIDATE: - return _CANDIDATE; - case LunaEnvironment.STABLE: - return _STABLE; - } - } - - String get name { - switch (this) { - case LunaEnvironment.EDGE: - return 'lunasea.Edge'.tr(); - case LunaEnvironment.BETA: - return 'lunasea.Beta'.tr(); - case LunaEnvironment.CANDIDATE: - return 'lunasea.Candidate'.tr(); - case LunaEnvironment.STABLE: - return 'lunasea.Stable'.tr(); - } - } - - Color get color { - switch (this) { - case LunaEnvironment.EDGE: - return LunaColours.red; - case LunaEnvironment.BETA: - return LunaColours.orange; - case LunaEnvironment.CANDIDATE: - return LunaColours.blue; - case LunaEnvironment.STABLE: - return LunaColours.accent; - } - } - - LunaEnvironment from(String key) { - switch (key) { - case _EDGE: - return LunaEnvironment.EDGE; - case _BETA: - return LunaEnvironment.BETA; - case _CANDIDATE: - return LunaEnvironment.CANDIDATE; - case _STABLE: - return LunaEnvironment.STABLE; - } - throw Exception('Unknown Flavor'); - } -} diff --git a/lib/core/system/localization.dart b/lib/core/system/localization.dart index f47b9bdf..95fa20f5 100644 --- a/lib/core/system/localization.dart +++ b/lib/core/system/localization.dart @@ -1,6 +1,9 @@ import 'package:flutter/material.dart'; import 'package:lunasea/core.dart'; +import '../../system/build/environment.dart'; +import '../../system/build/flavor.dart'; + class LunaLocalization { /// List of [LunaLanguage] values with all currently supported languages List get supportedLanguages => @@ -85,7 +88,7 @@ extension LunaLanguageExtension on LunaLanguage { case LunaLanguage.HUNGARIAN: case LunaLanguage.SPANISH: case LunaLanguage.TURKISH: - return LunaFlavor().isLowerOrEqualTo(LunaEnvironment.BETA); + return LunaEnvironment().isFlavorSupported(LunaFlavor.BETA); } } diff --git a/lib/core/utilities/changelog.dart b/lib/core/utilities/changelog.dart index 0a8de9c3..22fcb3a4 100644 --- a/lib/core/utilities/changelog.dart +++ b/lib/core/utilities/changelog.dart @@ -1,6 +1,9 @@ import 'package:flutter/material.dart'; import 'package:lunasea/core.dart'; +import '../../system/build/environment.dart'; +import '../../system/build/flavor.dart'; + class LunaChangelogSheet extends LunaBottomModalSheet { late _Changelog _changelog; String _version = ''; @@ -25,8 +28,8 @@ class LunaChangelogSheet extends LunaBottomModalSheet { bool showCommitHistory = false, }) async { // Do not show unless it is a prod release - if (LunaFlavor().isLowerOrEqualTo(LunaEnvironment.CANDIDATE)) { - if (showCommitHistory) LunaFlavor().openCommitHistory(); + if (LunaEnvironment().isFlavorSupported(LunaFlavor.CANDIDATE)) { + if (showCommitHistory) LunaEnvironment().openCommitHistory(); return; } diff --git a/lib/modules/settings/routes/settings/route.dart b/lib/modules/settings/routes/settings/route.dart index d28ff2ed..4fb2f7df 100644 --- a/lib/modules/settings/routes/settings/route.dart +++ b/lib/modules/settings/routes/settings/route.dart @@ -2,6 +2,9 @@ import 'package:flutter/material.dart'; import 'package:lunasea/core.dart'; import 'package:lunasea/modules/settings.dart'; +import '../../../../system/build/environment.dart'; +import '../../../../system/build/flavor.dart'; + class SettingsHomeRouter extends SettingsPageRouter { SettingsHomeRouter() : super('/settings'); @@ -92,7 +95,7 @@ class _State extends State<_Widget> with LunaScrollControllerMixin { trailing: const LunaIconButton(icon: Icons.settings_rounded), onTap: () async => SettingsSystemRouter().navigateTo(context), ), - if (LunaFlavor().isLowerOrEqualTo(LunaEnvironment.EDGE)) + if (LunaEnvironment().isFlavorSupported(LunaFlavor.EDGE)) LunaBlock( title: 'settings.DebugMenu'.tr(), body: [TextSpan(text: 'settings.DebugMenuDescription'.tr())], diff --git a/lib/modules/settings/routes/system/route.dart b/lib/modules/settings/routes/system/route.dart index e1a4a940..895d5f05 100644 --- a/lib/modules/settings/routes/system/route.dart +++ b/lib/modules/settings/routes/system/route.dart @@ -3,6 +3,8 @@ import 'package:lunasea/core.dart'; import 'package:lunasea/modules/settings.dart'; import '../../../../core/cache/image_cache/image_cache.dart'; +import '../../../../system/build/environment.dart'; +import '../../../../system/build/flavor.dart'; class SettingsSystemRouter extends SettingsPageRouter { SettingsSystemRouter() : super('/settings/system'); @@ -56,7 +58,9 @@ class _State extends State<_Widget> with LunaScrollControllerMixin { } Widget _versionInformation() { - LunaFlavor _flavor = LunaFlavor(); + LunaEnvironment _env = LunaEnvironment(); + LunaFlavor _flavor = LunaFlavor.EDGE.from(LunaEnvironment.flavor); + return FutureBuilder( future: PackageInfo.fromPlatform(), builder: (context, AsyncSnapshot snapshot) { @@ -67,12 +71,12 @@ class _State extends State<_Widget> with LunaScrollControllerMixin { title: 'Version: $version', body: [ TextSpan( - text: _flavor.isLowerOrEqualTo(LunaEnvironment.CANDIDATE) - ? '${_flavor.environment.name} (${_flavor.shortCommit})' + text: _env.isFlavorSupported(LunaFlavor.CANDIDATE) + ? '${_flavor.name} (${_env.getShortCommit()})' : 'settings.ViewRecentChanges'.tr(), style: TextStyle( fontWeight: LunaUI.FONT_WEIGHT_BOLD, - color: _flavor.environment.color, + color: _flavor.color, ), ), ], diff --git a/lib/system/build/environment.dart b/lib/system/build/environment.dart new file mode 100644 index 00000000..ffa747e9 --- /dev/null +++ b/lib/system/build/environment.dart @@ -0,0 +1,39 @@ +import 'package:envify/envify.dart'; + +import '../../core/extensions.dart'; +import '../../vendor.dart'; +import 'flavor.dart'; + +part 'environment.g.dart'; + +@Envify(path: '.env') +class LunaEnvironment { + static const flavor = _LunaEnvironment.flavor; + static const commit = _LunaEnvironment.commit; + + String getShortCommit() { + return commit.substring(0, min(7, commit.length)); + } + + Future openCommitHistory() async { + String _base = 'https://github.com/JagandeepBrar/LunaSea/commits'; + return '$_base/$commit'.lunaOpenGenericLink(); + } + + /// Returns if the given flavor is "lower" than the given environment. + /// For example, `alpha` is lower than `beta` but is not lower than `develop`. + bool isFlavorSupported(LunaFlavor env) { + LunaFlavor _flavor = LunaFlavor.EDGE.from(flavor); + if (_flavor == env) return true; + switch (env) { + case LunaFlavor.EDGE: + return false; + case LunaFlavor.BETA: + return _flavor == LunaFlavor.EDGE; + case LunaFlavor.CANDIDATE: + return _flavor == LunaFlavor.EDGE || _flavor == LunaFlavor.BETA; + case LunaFlavor.STABLE: + return true; + } + } +} diff --git a/lib/system/build/flavor.dart b/lib/system/build/flavor.dart new file mode 100644 index 00000000..229f64e8 --- /dev/null +++ b/lib/system/build/flavor.dart @@ -0,0 +1,70 @@ +import 'package:flutter/material.dart'; + +import '../../core/ui.dart'; + +const _EDGE = 'edge'; +const _BETA = 'beta'; +const _CANDIDATE = 'candidate'; +const _STABLE = 'stable'; + +enum LunaFlavor { + EDGE, + BETA, + CANDIDATE, + STABLE, +} + +extension LunaFlavorExtension on LunaFlavor { + String get key { + switch (this) { + case LunaFlavor.EDGE: + return _EDGE; + case LunaFlavor.BETA: + return _BETA; + case LunaFlavor.CANDIDATE: + return _CANDIDATE; + case LunaFlavor.STABLE: + return _STABLE; + } + } + + String get name { + switch (this) { + case LunaFlavor.EDGE: + return 'lunasea.Edge'.tr(); + case LunaFlavor.BETA: + return 'lunasea.Beta'.tr(); + case LunaFlavor.CANDIDATE: + return 'lunasea.Candidate'.tr(); + case LunaFlavor.STABLE: + return 'lunasea.Stable'.tr(); + } + } + + Color get color { + switch (this) { + case LunaFlavor.EDGE: + return LunaColours.red; + case LunaFlavor.BETA: + return LunaColours.orange; + case LunaFlavor.CANDIDATE: + return LunaColours.blue; + case LunaFlavor.STABLE: + return LunaColours.accent; + } + } + + LunaFlavor from(String key) { + switch (key) { + case _EDGE: + return LunaFlavor.EDGE; + case _BETA: + return LunaFlavor.BETA; + case _CANDIDATE: + return LunaFlavor.CANDIDATE; + case _STABLE: + return LunaFlavor.STABLE; + } + throw Exception('Invalid LunaFlavor'); + } +} diff --git a/package.json b/package.json index 44a415cd..ec8e64e8 100644 --- a/package.json +++ b/package.json @@ -25,8 +25,8 @@ "generate:assets": "dart pub global activate spider && spider build", "generate:build_runner": "flutter packages pub run build_runner build --delete-conflicting-outputs", "generate:localization": "dart ./scripts/generate_localization.dart", - "git:ignore": "npm run git:ignore:flavor && npm run git:ignore:firebase", - "git:ignore:flavor": "git update-index --skip-worktree .flavor", + "git:ignore": "npm run git:ignore:environment && npm run git:ignore:firebase", + "git:ignore:environment": "git update-index --skip-worktree .env", "git:ignore:firebase": "git update-index --skip-worktree lib/firebase_options.dart", "prepare": "husky install && npm run git:ignore && flutter pub get", "prepare:keychain": "npm run prepare:keychain:ios && npm run prepare:keychain:macos",