From fc5516ea9c4debcdc05606d871fb7bc6523a1b92 Mon Sep 17 00:00:00 2001 From: Jagandeep Brar Date: Sun, 9 Jan 2022 02:27:21 -0500 Subject: [PATCH] new(flavor): Added flavor and environment definitions (#579) --- .env.public => .flavor | 0 ...ld_alpha_android.yml => build_android.yml} | 23 +++++-- .../{build_alpha_ios.yml => build_ios.yml} | 37 +++++++---- ...{build_alpha_macos.yml => build_macos.yml} | 35 ++++++---- ios/Runner.xcodeproj/project.pbxproj | 18 ++--- lib/core/extensions/string.dart | 2 +- lib/core/system.dart | 1 + lib/core/system/flavor.dart | 65 +++++++++++++++++++ lib/core/utilities/env.dart | 8 --- macos/Runner.xcodeproj/project.pbxproj | 8 +-- 10 files changed, 147 insertions(+), 50 deletions(-) rename .env.public => .flavor (100%) rename .github/workflows/{build_alpha_android.yml => build_android.yml} (76%) rename .github/workflows/{build_alpha_ios.yml => build_ios.yml} (81%) rename .github/workflows/{build_alpha_macos.yml => build_macos.yml} (82%) create mode 100644 lib/core/system/flavor.dart delete mode 100644 lib/core/utilities/env.dart diff --git a/.env.public b/.flavor similarity index 100% rename from .env.public rename to .flavor diff --git a/.github/workflows/build_alpha_android.yml b/.github/workflows/build_android.yml similarity index 76% rename from .github/workflows/build_alpha_android.yml rename to .github/workflows/build_android.yml index 61ba85dd..bd34f8f5 100644 --- a/.github/workflows/build_alpha_android.yml +++ b/.github/workflows/build_android.yml @@ -1,9 +1,17 @@ -name: '[Build] Alpha - Android' +name: '[Build] Android' on: workflow_dispatch: - push: - tags: ['alpha'] + inputs: + flavor: + type: choice + required: true + description: 'Build Flavor?' + options: + - 'develop' + - 'alpha' + - 'beta' + - 'production' jobs: build: @@ -15,8 +23,13 @@ jobs: with: ref: 'master' fetch-depth: 0 - - - name: Setup Private Keys + + - name: Set Flavor + working-directory: ${{ github.workspace }} + run: | + echo "FLAVOR=${{ github.event.inputs.flavor }}" > .flavor + + - name: Install Secret Keys run: | echo ${{ secrets.GOOGLE_SERVICES_JSON }} | base64 --decode > android/app/google-services.json echo ${{ secrets.KEY_JKS }} | base64 --decode > android/key.jks diff --git a/.github/workflows/build_alpha_ios.yml b/.github/workflows/build_ios.yml similarity index 81% rename from .github/workflows/build_alpha_ios.yml rename to .github/workflows/build_ios.yml index e5087157..e7c5cb07 100644 --- a/.github/workflows/build_alpha_ios.yml +++ b/.github/workflows/build_ios.yml @@ -1,9 +1,17 @@ -name: '[Build] Alpha - iOS' +name: '[Build] iOS' on: workflow_dispatch: - push: - tags: ['alpha'] + inputs: + flavor: + type: choice + required: true + description: 'Build Flavor?' + options: + - 'develop' + - 'alpha' + - 'beta' + - 'production' jobs: build: @@ -15,23 +23,28 @@ jobs: with: ref: 'master' fetch-depth: 0 - - - name: Setup Keys + + - name: Set Flavor working-directory: ${{ github.workspace }} run: | - echo ${{ secrets.GOOGLE_SERVICE_INFO_PLIST }} | base64 --decode > ios/GoogleService-Info.plist - echo ${{ secrets.APPLE_STORE_CONNECT_KEY }} | base64 --decode > ios/${{ secrets.APPLE_STORE_CONNECT_KEY_FILEPATH }} - - - name: Setup SSH Keys - uses: webfactory/ssh-agent@v0.5.4 - with: - ssh-private-key: ${{ secrets.MATCH_SSH_PRIVATE_KEY }} + echo "FLAVOR=${{ github.event.inputs.flavor }}" > .flavor - name: Select Xcode Version uses: maxim-lobanov/setup-xcode@v1 with: xcode-version: latest-stable + - name: Install Secret Keys + working-directory: ${{ github.workspace }} + run: | + echo ${{ secrets.GOOGLE_SERVICE_INFO_PLIST }} | base64 --decode > ios/GoogleService-Info.plist + echo ${{ secrets.APPLE_STORE_CONNECT_KEY }} | base64 --decode > ios/${{ secrets.APPLE_STORE_CONNECT_KEY_FILEPATH }} + + - name: Setup SSH Agent + uses: webfactory/ssh-agent@v0.5.4 + with: + ssh-private-key: ${{ secrets.MATCH_SSH_PRIVATE_KEY }} + - name: Install Ruby uses: ruby/setup-ruby@v1 with: diff --git a/.github/workflows/build_alpha_macos.yml b/.github/workflows/build_macos.yml similarity index 82% rename from .github/workflows/build_alpha_macos.yml rename to .github/workflows/build_macos.yml index 24b65caf..23ef8aae 100644 --- a/.github/workflows/build_alpha_macos.yml +++ b/.github/workflows/build_macos.yml @@ -1,9 +1,17 @@ -name: '[Build] Alpha - macOS' +name: '[Build] macOS' on: workflow_dispatch: - push: - tags: ['alpha'] + inputs: + flavor: + type: choice + required: true + description: 'Build Flavor?' + options: + - 'develop' + - 'alpha' + - 'beta' + - 'production' jobs: build: @@ -16,22 +24,27 @@ jobs: ref: 'master' fetch-depth: 0 - - name: Setup Keys + - name: Set Flavor working-directory: ${{ github.workspace }} run: | - echo ${{ secrets.GOOGLE_SERVICE_INFO_PLIST }} | base64 --decode > macos/GoogleService-Info.plist - echo ${{ secrets.APPLE_STORE_CONNECT_KEY }} | base64 --decode > macos/${{ secrets.APPLE_STORE_CONNECT_KEY_FILEPATH }} - - - name: Setup SSH Keys - uses: webfactory/ssh-agent@v0.5.4 - with: - ssh-private-key: ${{ secrets.MATCH_SSH_PRIVATE_KEY }} + echo "FLAVOR=${{ github.event.inputs.flavor }}" > .flavor - name: Select Xcode Version uses: maxim-lobanov/setup-xcode@v1 with: xcode-version: latest-stable + - name: Install Secret Keys + working-directory: ${{ github.workspace }} + run: | + echo ${{ secrets.GOOGLE_SERVICE_INFO_PLIST }} | base64 --decode > macos/GoogleService-Info.plist + echo ${{ secrets.APPLE_STORE_CONNECT_KEY }} | base64 --decode > macos/${{ secrets.APPLE_STORE_CONNECT_KEY_FILEPATH }} + + - name: Setup SSH Agent + uses: webfactory/ssh-agent@v0.5.4 + with: + ssh-private-key: ${{ secrets.MATCH_SSH_PRIVATE_KEY }} + - name: Install Ruby uses: ruby/setup-ruby@v1 with: diff --git a/ios/Runner.xcodeproj/project.pbxproj b/ios/Runner.xcodeproj/project.pbxproj index 03902add..57fb97c8 100644 --- a/ios/Runner.xcodeproj/project.pbxproj +++ b/ios/Runner.xcodeproj/project.pbxproj @@ -3,7 +3,7 @@ archiveVersion = 1; classes = { }; - objectVersion = 46; + objectVersion = 50; objects = { /* Begin PBXBuildFile section */ @@ -575,7 +575,7 @@ ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; CLANG_ENABLE_MODULES = YES; CODE_SIGN_ENTITLEMENTS = Runner/Runner.entitlements; - CODE_SIGN_IDENTITY = "iPhone Distribution"; + CODE_SIGN_IDENTITY = "iPhone Developer"; CODE_SIGN_STYLE = Manual; CURRENT_PROJECT_VERSION = "$(FLUTTER_BUILD_NUMBER)"; DEVELOPMENT_TEAM = VPH33JQH4R; @@ -593,7 +593,7 @@ ); PRODUCT_BUNDLE_IDENTIFIER = app.lunasea.lunasea; PRODUCT_NAME = "$(TARGET_NAME)"; - PROVISIONING_PROFILE_SPECIFIER = "match AppStore app.lunasea.lunasea"; + PROVISIONING_PROFILE_SPECIFIER = "match Development app.lunasea.lunasea"; SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h"; SWIFT_VERSION = 5.0; VERSIONING_SYSTEM = "apple-generic"; @@ -713,7 +713,7 @@ ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; CLANG_ENABLE_MODULES = YES; CODE_SIGN_ENTITLEMENTS = Runner/Runner.entitlements; - CODE_SIGN_IDENTITY = "iPhone Distribution"; + CODE_SIGN_IDENTITY = "iPhone Developer"; CODE_SIGN_STYLE = Manual; CURRENT_PROJECT_VERSION = "$(FLUTTER_BUILD_NUMBER)"; DEVELOPMENT_TEAM = VPH33JQH4R; @@ -731,7 +731,7 @@ ); PRODUCT_BUNDLE_IDENTIFIER = app.lunasea.lunasea; PRODUCT_NAME = "$(TARGET_NAME)"; - PROVISIONING_PROFILE_SPECIFIER = "match AppStore app.lunasea.lunasea"; + PROVISIONING_PROFILE_SPECIFIER = "match Development app.lunasea.lunasea"; SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h"; SWIFT_OPTIMIZATION_LEVEL = "-Onone"; SWIFT_VERSION = 5.0; @@ -781,7 +781,7 @@ CLANG_WARN_DOCUMENTATION_COMMENTS = YES; CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES; CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; - CODE_SIGN_IDENTITY = "iPhone Distribution"; + CODE_SIGN_IDENTITY = "iPhone Developer"; CODE_SIGN_STYLE = Manual; DEVELOPMENT_TEAM = VPH33JQH4R; ENABLE_BITCODE = NO; @@ -793,7 +793,7 @@ MTL_FAST_MATH = YES; PRODUCT_BUNDLE_IDENTIFIER = app.lunasea.lunasea.ImageNotification; PRODUCT_NAME = "$(TARGET_NAME)"; - PROVISIONING_PROFILE_SPECIFIER = "match AppStore app.lunasea.lunasea.ImageNotification"; + PROVISIONING_PROFILE_SPECIFIER = "match Development app.lunasea.lunasea.ImageNotification"; SKIP_INSTALL = YES; TARGETED_DEVICE_FAMILY = "1,2"; }; @@ -836,7 +836,7 @@ CLANG_WARN_DOCUMENTATION_COMMENTS = YES; CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES; CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; - CODE_SIGN_IDENTITY = "iPhone Distribution"; + CODE_SIGN_IDENTITY = "iPhone Developer"; CODE_SIGN_STYLE = Manual; DEVELOPMENT_TEAM = VPH33JQH4R; ENABLE_BITCODE = NO; @@ -847,7 +847,7 @@ MTL_FAST_MATH = YES; PRODUCT_BUNDLE_IDENTIFIER = app.lunasea.lunasea.ImageNotification; PRODUCT_NAME = "$(TARGET_NAME)"; - PROVISIONING_PROFILE_SPECIFIER = "match AppStore app.lunasea.lunasea.ImageNotification"; + PROVISIONING_PROFILE_SPECIFIER = "match Development app.lunasea.lunasea.ImageNotification"; SKIP_INSTALL = YES; TARGETED_DEVICE_FAMILY = "1,2"; }; diff --git a/lib/core/extensions/string.dart b/lib/core/extensions/string.dart index 82dce385..defbdfaa 100644 --- a/lib/core/extensions/string.dart +++ b/lib/core/extensions/string.dart @@ -41,7 +41,7 @@ extension StringLinksExtension on String { if (_browser != LunaBrowser.APPLE_SAFARI && await _launchCustomBrowser(_browser.formatted(url))) return; //If all else fails, just launch it in Safari/stock browser - await _launch(url, headers: headers!); + await _launch(url, headers: headers ?? {}); } catch (error, stack) { LunaLogger().error('Unable to open link: $url', error, stack); } diff --git a/lib/core/system.dart b/lib/core/system.dart index 54096eae..e6b68103 100644 --- a/lib/core/system.dart +++ b/lib/core/system.dart @@ -1,6 +1,7 @@ export 'system/configuration.dart'; export 'system/desktop_window.dart'; export 'system/filesystem.dart'; +export 'system/flavor.dart'; export 'system/in_app_purchases.dart'; export 'system/localization.dart'; export 'system/networking.dart'; diff --git a/lib/core/system/flavor.dart b/lib/core/system/flavor.dart new file mode 100644 index 00000000..99abafc0 --- /dev/null +++ b/lib/core/system/flavor.dart @@ -0,0 +1,65 @@ +import 'package:envify/envify.dart'; + +part 'flavor.g.dart'; + +const _DEVELOP = 'develop'; +const _ALPHA = 'alpha'; +const _BETA = 'beta'; +const _PRODUCTION = 'production'; + +@Envify(path: '.flavor') +abstract class Flavor { + static const flavor = _Flavor.flavor; +} + +extension FlavorExtension on Flavor { + Environment get environment { + switch (Flavor.flavor) { + case 'develop': + return Environment.DEVELOP; + case 'alpha': + return Environment.ALPHA; + case 'beta': + return Environment.BETA; + case 'production': + return Environment.PRODUCTION; + } + throw Exception('Invalid Environment'); + } +} + +enum Environment { + DEVELOP, + ALPHA, + BETA, + PRODUCTION, +} + +extension EnvironmentExtension on Environment { + String get key { + switch (this) { + case Environment.DEVELOP: + return _DEVELOP; + case Environment.ALPHA: + return _ALPHA; + case Environment.BETA: + return _BETA; + case Environment.PRODUCTION: + return _PRODUCTION; + } + } + + Environment from(String key) { + switch (key) { + case _DEVELOP: + return Environment.DEVELOP; + case _ALPHA: + return Environment.ALPHA; + case _BETA: + return Environment.BETA; + case _PRODUCTION: + return Environment.PRODUCTION; + } + throw Exception('Unknown Flavor'); + } +} diff --git a/lib/core/utilities/env.dart b/lib/core/utilities/env.dart deleted file mode 100644 index 5bfc90e5..00000000 --- a/lib/core/utilities/env.dart +++ /dev/null @@ -1,8 +0,0 @@ -import 'package:envify/envify.dart'; - -part 'env.g.dart'; - -@Envify(path: '.env.public') -abstract class LunaPublicEnv { - static const flavor = _LunaPublicEnv.flavor; -} diff --git a/macos/Runner.xcodeproj/project.pbxproj b/macos/Runner.xcodeproj/project.pbxproj index 3b659b0a..97c05a15 100644 --- a/macos/Runner.xcodeproj/project.pbxproj +++ b/macos/Runner.xcodeproj/project.pbxproj @@ -439,7 +439,7 @@ ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; CLANG_ENABLE_MODULES = YES; CODE_SIGN_ENTITLEMENTS = Runner/DebugProfile.entitlements; - CODE_SIGN_IDENTITY = "3rd Party Mac Developer Application"; + CODE_SIGN_IDENTITY = "Mac Developer"; CODE_SIGN_STYLE = Manual; COMBINE_HIDPI_IMAGES = YES; DEVELOPMENT_TEAM = VPH33JQH4R; @@ -449,7 +449,7 @@ "$(inherited)", "@executable_path/../Frameworks", ); - PROVISIONING_PROFILE_SPECIFIER = "match AppStore app.lunasea.lunasea macos"; + PROVISIONING_PROFILE_SPECIFIER = "match Development app.lunasea.lunasea macos"; SWIFT_VERSION = 5.0; }; name = Profile; @@ -568,7 +568,7 @@ ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; CLANG_ENABLE_MODULES = YES; CODE_SIGN_ENTITLEMENTS = Runner/DebugProfile.entitlements; - CODE_SIGN_IDENTITY = "3rd Party Mac Developer Application"; + CODE_SIGN_IDENTITY = "Mac Developer"; CODE_SIGN_STYLE = Manual; COMBINE_HIDPI_IMAGES = YES; DEVELOPMENT_TEAM = VPH33JQH4R; @@ -578,7 +578,7 @@ "$(inherited)", "@executable_path/../Frameworks", ); - PROVISIONING_PROFILE_SPECIFIER = "match AppStore app.lunasea.lunasea macos"; + PROVISIONING_PROFILE_SPECIFIER = "match Development app.lunasea.lunasea macos"; SWIFT_OPTIMIZATION_LEVEL = "-Onone"; SWIFT_VERSION = 5.0; };