chore: reintegrate environment and flavor loading

This commit is contained in:
Jagandeep Brar
2022-05-02 20:29:58 -04:00
parent 1842e286ba
commit d735f37200
14 changed files with 144 additions and 138 deletions

View File

View File

@@ -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

View File

@@ -12,7 +12,7 @@ targets:
exclude:
- lib
include:
- lib/core/system/flavor.dart
- lib/system/build/environment.dart
# Hive
hive_generator:
enabled: true

View File

@@ -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);
}
}

View File

@@ -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:

View File

@@ -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';

View File

@@ -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<void> 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');
}
}

View File

@@ -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<LunaLanguage> 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);
}
}

View File

@@ -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;
}

View File

@@ -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())],

View File

@@ -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<PackageInfo> 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,
),
),
],

View File

@@ -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<void> 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;
}
}
}

View File

@@ -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');
}
}

View File

@@ -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",