Added workflow for CI/CD

This commit is contained in:
Nguyen Thai
2022-09-28 10:52:22 +07:00
committed by Dat H. Pham
parent 7c69ba820c
commit fb19c5a66c
14 changed files with 2177 additions and 16 deletions
+73
View File
@@ -0,0 +1,73 @@
on:
workflow_call:
name: Analyze and test
jobs:
analyze-test:
runs-on: ubuntu-latest
strategy:
matrix:
modules:
- default
- core
- model
- contact
- forward
- rule_filter
fail-fast: false
steps:
- name: Checkout repository
uses: actions/checkout@v3
- name: Setup flutter
uses: subosito/flutter-action@v2
with:
flutter-version: "3.0.5"
channel: "stable"
cache: true
cache-key: "deps-${{ hashFiles('pubspec.lock') }}"
cache-path: ${{ runner.tool_cache }}/flutter # optional, change this to specify the cache path
- name: Run prebuild
run: bash prebuild.sh
- name: Analyze
uses: zgosalvez/github-actions-analyze-dart@v1
with:
analysis-options-file: "placeholder"
- name: Test
run: |
if [[ "${{ matrix.modules }}" == "default" ]]; then
flutter test -r json > test-report-${{ matrix.modules }}.json
else
flutter test -r json ${{ matrix.modules }} > test-report-${{ matrix.modules }}.json
fi
- name: Upload test reports
if: success() || failure() # Always upload report
uses: actions/upload-artifact@v3
with:
name: test-reports
path: test-report*.json
report:
runs-on: ubuntu-latest
if: success() || failure() # Always upload report
needs:
- analyze-test
steps:
- uses: actions/checkout@v3
- uses: actions/download-artifact@v3
with:
name: test-reports
- uses: dorny/test-reporter@v1
with:
name: Flutter Tests
path: "*.json"
reporter: flutter-json
only-summary: "true"
+94
View File
@@ -0,0 +1,94 @@
on:
pull_request:
paths-ignore:
- ".github/**"
name: CI
jobs:
analyze-test:
name: Analyze and test
uses: ./.github/workflows/analyze-test.yaml
build-app:
name: Build app
needs:
- analyze-test
runs-on: macos-latest
strategy:
matrix:
os:
- android
- ios
environment: dev
steps:
- name: Checkout repository
uses: actions/checkout@v3
- name: Setup flutter
uses: subosito/flutter-action@v2
with:
flutter-version: "3.0.5"
channel: "stable"
cache: true
cache-key: deps-${{ hashFiles('pubspec.lock') }} # optional, change this to force refresh cache
cache-path: ${{ runner.tool_cache }}/flutter # optional, change this to specify the cache path
- name: Setup Android environment
if: matrix.os == 'android'
env:
# GOOGLE_SERVICES_JSON: ${{ secrets.GOOGLE_SERVICES_JSON }}
PLAY_STORE_UPLOAD_KEY_BASE64: ${{ secrets.PLAY_STORE_UPLOAD_KEY_BASE64 }}
PLAY_STORE_KEY_INFO_BASE64: ${{ secrets.PLAY_STORE_KEY_INFO_BASE64 }}
run: |
# echo "$GOOGLE_SERVICES_JSON" > app/google-services.json
echo "$PLAY_STORE_UPLOAD_KEY_BASE64" | base64 --decode --output app/keystore.jks
echo "$PLAY_STORE_KEY_INFO_BASE64" | base64 --decode --output key.properties
working-directory: ${{ matrix.os }}
- name: Setup Java
if: matrix.os == 'android'
uses: actions/setup-java@v3
with:
distribution: "temurin"
java-version: "11"
- name: Setup iOS environment
if: matrix.os == 'ios'
env:
# GOOGLE_SERVICES_PLIST: ${{ secrets.GOOGLE_SERVICES_PLIST }}
CERTIFICATE_BASE64: ${{ secrets.CERTIFICATE_BASE64 }}
PROVISION_PROFILE_BASE64: ${{ secrets.PROVISION_PROFILE_BASE64 }}
SHAREEXT_PROVISION_PROFILE_BASE64: ${{ secrets.SHAREEXT_PROVISION_PROFILE_BASE64 }}
run: |
# echo -n "$GOOGLE_SERVICES_PLIST" > Runner/GoogleService-Info.plist
echo -n "$CERTIFICATE_BASE64" | base64 --decode --output cert.p12
echo -n "$PROVISION_PROFILE_BASE64" | base64 --decode --output buildpp.mobileprovision
echo -n "$SHAREEXT_PROVISION_PROFILE_BASE64" | base64 --decode --output shareextpp.mobileprovision
flutter pub get && pod install
working-directory: ${{ matrix.os }}
- name: Setup Fastlane
uses: ruby/setup-ruby@v1
with:
ruby-version: "ruby"
bundler-cache: true
working-directory: ${{ matrix.os }}
- name: Run prebuild
run: bash prebuild.sh
- name: Build
env:
CERTIFICATE_PASSWORD: ${{ secrets.CERTIFICATE_PASSWORD }}
run: bundle exec fastlane dev
working-directory: ${{ matrix.os }}
- name: Upload artifacts
uses: actions/upload-artifact@v3
with:
name: tmail-dev-pr-${{ github.event.pull_request.number }}
path: |
build/app/outputs/flutter-apk/app-release.apk
ios/Runner.ipa
+94
View File
@@ -0,0 +1,94 @@
on:
push:
branches:
- "release"
tags:
- "v*.*.*"
name: Release
jobs:
analyze-test:
name: Analyze and test
uses: ./.github/workflows/analyze-test.yaml
release:
name: Release
if: startsWith(github.ref, 'refs/tags/v')
needs:
- analyze-test
runs-on: macos-latest
strategy:
matrix:
os:
- android
- ios
environment: prod
steps:
- name: Checkout repository
uses: actions/checkout@v3
with:
ref: "release"
fetch-depth: 0
- name: Setup flutter
uses: subosito/flutter-action@v2
with:
flutter-version: "3.0.5"
channel: "stable"
cache: true
cache-key: deps-${{ hashFiles('pubspec.lock') }} # optional, change this to force refresh cache
cache-path: ${{ runner.tool_cache }}/flutter # optional, change this to specify the cache path
- name: Setup Android environment
if: matrix.os == 'android'
env:
PLAY_STORE_UPLOAD_KEY_BASE64: ${{ secrets.PLAY_STORE_UPLOAD_KEY_BASE64 }}
PLAY_STORE_KEY_INFO_BASE64: ${{ secrets.PLAY_STORE_KEY_INFO_BASE64 }}
run: |
echo "$PLAY_STORE_UPLOAD_KEY_BASE64" | base64 --decode --output app/keystore.jks
echo "$PLAY_STORE_KEY_INFO_BASE64" | base64 --decode --output key.properties
working-directory: ${{ matrix.os }}
- name: Setup Java
if: matrix.os == 'android'
uses: actions/setup-java@v3
with:
distribution: "temurin"
java-version: "11"
- name: Setup iOS environment
if: matrix.os == 'ios'
env:
CERTIFICATE_BASE64: ${{ secrets.CERTIFICATE_BASE64 }}
PROVISION_PROFILE_BASE64: ${{ secrets.PROVISION_PROFILE_BASE64 }}
SHAREEXT_PROVISION_PROFILE_BASE64: ${{ secrets.SHAREEXT_PROVISION_PROFILE_BASE64 }}
APPLE_API_KEY_BASE64: ${{ secrets.APPLE_API_KEY_BASE64 }}
run: |
echo -n "$CERTIFICATE_BASE64" | base64 --decode --output cert.p12
echo -n "$PROVISION_PROFILE_BASE64" | base64 --decode --output buildpp.mobileprovision
echo -n "$SHAREEXT_PROVISION_PROFILE_BASE64" | base64 --decode --output shareextpp.mobileprovision
echo -n "$APPLE_API_KEY_BASE64" | base64 --decode --output apiKey.p8
flutter pub get && pod install
working-directory: ${{ matrix.os }}
- name: Setup Fastlane
uses: ruby/setup-ruby@v1
with:
ruby-version: "ruby"
bundler-cache: true
working-directory: ${{ matrix.os }}
- name: Run prebuild
run: bash prebuild.sh
- name: Build and deploy
env:
CERTIFICATE_PASSWORD: ${{ secrets.CERTIFICATE_PASSWORD }}
FASTLANE_USER: ${{ secrets.APPLE_ID }}
PLAY_STORE_CONFIG_JSON: ${{ secrets.PLAY_STORE_CONFIG_JSON }}
APPLE_ISSUER_ID: ${{ secrets.APPLE_ISSUER_ID }}
APPLE_KEY_ID: ${{ secrets.APPLE_KEY_ID }}
run: bundle exec fastlane release
working-directory: ${{ matrix.os }}
+2
View File
@@ -113,6 +113,8 @@ app.*.symbols
!**/ios/**/default.perspectivev3
!/packages/flutter_tools/test/data/dart_dependencies_test/**/.packages
!/dev/ci/**/Gemfile.lock
!**/pubspec.lock
!**/Podfile.lock
#generated file
*.g.dart
+3
View File
@@ -0,0 +1,3 @@
source "https://rubygems.org"
gem "fastlane"
+16 -1
View File
@@ -25,6 +25,12 @@ apply plugin: 'com.android.application'
apply plugin: 'kotlin-android'
apply from: "$flutterRoot/packages/flutter_tools/gradle/flutter.gradle"
def keystoreProperties = new Properties()
def keystorePropertiesFile = rootProject.file('key.properties')
if (keystorePropertiesFile.exists()) {
keystoreProperties.load(new FileInputStream(keystorePropertiesFile))
}
android {
compileSdkVersion 32
@@ -45,11 +51,20 @@ android {
]
}
// Use key information file
signingConfigs {
release {
keyAlias keystoreProperties['keyAlias']
keyPassword keystoreProperties['keyPassword']
storeFile keystoreProperties['storeFile'] ? file(keystoreProperties['storeFile']) : null
storePassword keystoreProperties['storePassword']
}
}
buildTypes {
release {
// TODO: Add your own signing config for the release build.
// Signing with the debug keys for now, so `flutter run --release` works.
signingConfig signingConfigs.debug
signingConfig signingConfigs.release
}
}
}
+1
View File
@@ -0,0 +1 @@
package_name("com.linagora.android.teammail") # e.g. com.krausefx.app
+41
View File
@@ -0,0 +1,41 @@
# This file contains the fastlane.tools configuration
# You can find the documentation at https://docs.fastlane.tools
#
# For a list of all available actions, check out
#
# https://docs.fastlane.tools/actions
#
# For a list of all available plugins, check out
#
# https://docs.fastlane.tools/plugins/available-plugins
#
# Uncomment the line if you want fastlane to automatically update itself
# update_fastlane
#
opt_out_usage # Opt out of telemetry
default_platform(:android)
platform :android do
desc "Build development version"
lane :dev do
sh "flutter build apk --verbose --release --dart-define=SERVER_URL=$SERVER_URL"
end
desc "Build and deploy release version"
lane :release do
track = "alpha"
latest_build_number = google_play_track_version_codes(
track: track,
json_key_data: ENV["PLAY_STORE_CONFIG_JSON"]
)[0].to_i
build_name = last_git_tag.gsub("v", "")
sh "flutter build appbundle --verbose --release --dart-define=SERVER_URL=$SERVER_URL --build-number=#{latest_build_number+1} --build-name=#{build_name}"
upload_to_play_store(
json_key_data: ENV["PLAY_STORE_CONFIG_JSON"],
track: track,
aab: "../build/app/outputs/bundle/release/app-release.aab",
)
end
end
+3
View File
@@ -0,0 +1,3 @@
source "https://rubygems.org"
gem "fastlane"
+249
View File
@@ -0,0 +1,249 @@
PODS:
- AppAuth (1.4.0):
- AppAuth/Core (= 1.4.0)
- AppAuth/ExternalUserAgent (= 1.4.0)
- AppAuth/Core (1.4.0)
- AppAuth/ExternalUserAgent (1.4.0)
- better_open_file (0.0.1):
- Flutter
- connectivity_plus (0.0.1):
- Flutter
- ReachabilitySwift
- contacts_service (0.2.2):
- Flutter
- device_info_plus (0.0.1):
- Flutter
- DKImagePickerController/Core (4.3.4):
- DKImagePickerController/ImageDataManager
- DKImagePickerController/Resource
- DKImagePickerController/ImageDataManager (4.3.4)
- DKImagePickerController/PhotoGallery (4.3.4):
- DKImagePickerController/Core
- DKPhotoGallery
- DKImagePickerController/Resource (4.3.4)
- DKPhotoGallery (0.0.17):
- DKPhotoGallery/Core (= 0.0.17)
- DKPhotoGallery/Model (= 0.0.17)
- DKPhotoGallery/Preview (= 0.0.17)
- DKPhotoGallery/Resource (= 0.0.17)
- SDWebImage
- SwiftyGif
- DKPhotoGallery/Core (0.0.17):
- DKPhotoGallery/Model
- DKPhotoGallery/Preview
- SDWebImage
- SwiftyGif
- DKPhotoGallery/Model (0.0.17):
- SDWebImage
- SwiftyGif
- DKPhotoGallery/Preview (0.0.17):
- DKPhotoGallery/Model
- DKPhotoGallery/Resource
- SDWebImage
- SwiftyGif
- DKPhotoGallery/Resource (0.0.17):
- SDWebImage
- SwiftyGif
- file_picker (0.0.1):
- DKImagePickerController/PhotoGallery
- Flutter
- fk_user_agent (2.0.0):
- Flutter
- Flutter (1.0.0)
- flutter_appauth (0.0.1):
- AppAuth (= 1.4.0)
- Flutter
- flutter_downloader (0.0.1):
- Flutter
- flutter_image_compress (0.0.1):
- Flutter
- Mantle
- SDWebImage
- SDWebImageWebPCoder
- flutter_inappwebview (0.0.1):
- Flutter
- flutter_inappwebview/Core (= 0.0.1)
- OrderedSet (~> 5.0)
- flutter_inappwebview/Core (0.0.1):
- Flutter
- OrderedSet (~> 5.0)
- flutter_keyboard_visibility (0.0.1):
- Flutter
- flutter_native_splash (0.0.1):
- Flutter
- fluttertoast (0.0.2):
- Flutter
- Toast
- FMDB (2.7.5):
- FMDB/standard (= 2.7.5)
- FMDB/standard (2.7.5)
- libwebp (1.2.3):
- libwebp/demux (= 1.2.3)
- libwebp/mux (= 1.2.3)
- libwebp/webp (= 1.2.3)
- libwebp/demux (1.2.3):
- libwebp/webp
- libwebp/mux (1.2.3):
- libwebp/demux
- libwebp/webp (1.2.3)
- Mantle (2.2.0):
- Mantle/extobjc (= 2.2.0)
- Mantle/extobjc (2.2.0)
- OrderedSet (5.0.0)
- package_info_plus (0.4.5):
- Flutter
- path_provider (0.0.1):
- Flutter
- permission_handler_apple (9.0.4):
- Flutter
- ReachabilitySwift (5.0.0)
- receive_sharing_intent (0.0.1):
- Flutter
- SDWebImage (5.13.3):
- SDWebImage/Core (= 5.13.3)
- SDWebImage/Core (5.13.3)
- SDWebImageWebPCoder (0.9.1):
- libwebp (~> 1.0)
- SDWebImage/Core (~> 5.13)
- share (0.0.1):
- Flutter
- shared_preferences (0.0.1):
- Flutter
- sqflite (0.0.2):
- Flutter
- FMDB (>= 2.7.5)
- SwiftyGif (5.4.3)
- Toast (4.0.0)
- url_launcher_ios (0.0.1):
- Flutter
- webview_flutter_wkwebview (0.0.1):
- Flutter
DEPENDENCIES:
- better_open_file (from `.symlinks/plugins/better_open_file/ios`)
- connectivity_plus (from `.symlinks/plugins/connectivity_plus/ios`)
- contacts_service (from `.symlinks/plugins/contacts_service/ios`)
- device_info_plus (from `.symlinks/plugins/device_info_plus/ios`)
- file_picker (from `.symlinks/plugins/file_picker/ios`)
- fk_user_agent (from `.symlinks/plugins/fk_user_agent/ios`)
- Flutter (from `Flutter`)
- flutter_appauth (from `.symlinks/plugins/flutter_appauth/ios`)
- flutter_downloader (from `.symlinks/plugins/flutter_downloader/ios`)
- flutter_image_compress (from `.symlinks/plugins/flutter_image_compress/ios`)
- flutter_inappwebview (from `.symlinks/plugins/flutter_inappwebview/ios`)
- flutter_keyboard_visibility (from `.symlinks/plugins/flutter_keyboard_visibility/ios`)
- flutter_native_splash (from `.symlinks/plugins/flutter_native_splash/ios`)
- fluttertoast (from `.symlinks/plugins/fluttertoast/ios`)
- package_info_plus (from `.symlinks/plugins/package_info_plus/ios`)
- path_provider (from `.symlinks/plugins/path_provider/ios`)
- permission_handler_apple (from `.symlinks/plugins/permission_handler_apple/ios`)
- receive_sharing_intent (from `.symlinks/plugins/receive_sharing_intent/ios`)
- share (from `.symlinks/plugins/share/ios`)
- shared_preferences (from `.symlinks/plugins/shared_preferences/ios`)
- sqflite (from `.symlinks/plugins/sqflite/ios`)
- url_launcher_ios (from `.symlinks/plugins/url_launcher_ios/ios`)
- webview_flutter_wkwebview (from `.symlinks/plugins/webview_flutter_wkwebview/ios`)
SPEC REPOS:
trunk:
- AppAuth
- DKImagePickerController
- DKPhotoGallery
- FMDB
- libwebp
- Mantle
- OrderedSet
- ReachabilitySwift
- SDWebImage
- SDWebImageWebPCoder
- SwiftyGif
- Toast
EXTERNAL SOURCES:
better_open_file:
:path: ".symlinks/plugins/better_open_file/ios"
connectivity_plus:
:path: ".symlinks/plugins/connectivity_plus/ios"
contacts_service:
:path: ".symlinks/plugins/contacts_service/ios"
device_info_plus:
:path: ".symlinks/plugins/device_info_plus/ios"
file_picker:
:path: ".symlinks/plugins/file_picker/ios"
fk_user_agent:
:path: ".symlinks/plugins/fk_user_agent/ios"
Flutter:
:path: Flutter
flutter_appauth:
:path: ".symlinks/plugins/flutter_appauth/ios"
flutter_downloader:
:path: ".symlinks/plugins/flutter_downloader/ios"
flutter_image_compress:
:path: ".symlinks/plugins/flutter_image_compress/ios"
flutter_inappwebview:
:path: ".symlinks/plugins/flutter_inappwebview/ios"
flutter_keyboard_visibility:
:path: ".symlinks/plugins/flutter_keyboard_visibility/ios"
flutter_native_splash:
:path: ".symlinks/plugins/flutter_native_splash/ios"
fluttertoast:
:path: ".symlinks/plugins/fluttertoast/ios"
package_info_plus:
:path: ".symlinks/plugins/package_info_plus/ios"
path_provider:
:path: ".symlinks/plugins/path_provider/ios"
permission_handler_apple:
:path: ".symlinks/plugins/permission_handler_apple/ios"
receive_sharing_intent:
:path: ".symlinks/plugins/receive_sharing_intent/ios"
share:
:path: ".symlinks/plugins/share/ios"
shared_preferences:
:path: ".symlinks/plugins/shared_preferences/ios"
sqflite:
:path: ".symlinks/plugins/sqflite/ios"
url_launcher_ios:
:path: ".symlinks/plugins/url_launcher_ios/ios"
webview_flutter_wkwebview:
:path: ".symlinks/plugins/webview_flutter_wkwebview/ios"
SPEC CHECKSUMS:
AppAuth: 31bcec809a638d7bd2f86ea8a52bd45f6e81e7c7
better_open_file: 03cf320415d4d3f46b6e00adc4a567d76c1a399d
connectivity_plus: 413a8857dd5d9f1c399a39130850d02fe0feaf7e
contacts_service: 849e1f84281804c8bfbec1b4c3eedcb23c5d3eca
device_info_plus: e5c5da33f982a436e103237c0c85f9031142abed
DKImagePickerController: b512c28220a2b8ac7419f21c491fc8534b7601ac
DKPhotoGallery: fdfad5125a9fdda9cc57df834d49df790dbb4179
file_picker: 817ab1d8cd2da9d2da412a417162deee3500fc95
fk_user_agent: 1f47ec39291e8372b1d692b50084b0d54103c545
Flutter: 50d75fe2f02b26cc09d224853bb45737f8b3214a
flutter_appauth: 05c3778a1e4ae23364dd2ef37cbae14b244f646b
flutter_downloader: 058b9c41564a90500f67f3e432e3524613a7fd83
flutter_image_compress: fd2b476345226e1a10ea352fa306af95704642c1
flutter_inappwebview: bfd58618f49dc62f2676de690fc6dcda1d6c3721
flutter_keyboard_visibility: 0339d06371254c3eb25eeb90ba8d17dca8f9c069
flutter_native_splash: 52501b97d1c0a5f898d687f1646226c1f93c56ef
fluttertoast: 6122fa75143e992b1d3470f61000f591a798cc58
FMDB: 2ce00b547f966261cd18927a3ddb07cb6f3db82a
libwebp: 60305b2e989864154bd9be3d772730f08fc6a59c
Mantle: c5aa8794a29a022dfbbfc9799af95f477a69b62d
OrderedSet: aaeb196f7fef5a9edf55d89760da9176ad40b93c
package_info_plus: 6c92f08e1f853dc01228d6f553146438dafcd14e
path_provider: abfe2b5c733d04e238b0d8691db0cfd63a27a93c
permission_handler_apple: 44366e37eaf29454a1e7b1b7d736c2cceaeb17ce
ReachabilitySwift: 985039c6f7b23a1da463388634119492ff86c825
receive_sharing_intent: c0d87310754e74c0f9542947e7cbdf3a0335a3b1
SDWebImage: af5bbffef2cde09f148d826f9733dcde1a9414cd
SDWebImageWebPCoder: 18503de6621dd2c420d680e33d46bf8e1d5169b0
share: 0b2c3e82132f5888bccca3351c504d0003b3b410
shared_preferences: af6bfa751691cdc24be3045c43ec037377ada40d
sqflite: 6d358c025f5b867b29ed92fc697fd34924e11904
SwiftyGif: 6c3eafd0ce693cad58bb63d2b2fb9bacb8552780
Toast: 91b396c56ee72a5790816f40d3a94dd357abc196
url_launcher_ios: 839c58cdb4279282219f5e248c3321761ff3c4de
webview_flutter_wkwebview: b7e70ef1ddded7e69c796c7390ee74180182971f
PODFILE CHECKSUM: 91efd4097cc41f032416d67ecaac21cc2de8dd55
COCOAPODS: 1.11.3
+5
View File
@@ -0,0 +1,5 @@
app_identifier("com.linagora.ios.teammail") # The bundle identifier of your app
# For more information about the Appfile, see:
# https://docs.fastlane.tools/advanced/#appfile
+110
View File
@@ -0,0 +1,110 @@
# This file contains the fastlane.tools configuration
# You can find the documentation at https://docs.fastlane.tools
#
# For a list of all available actions, check out
#
# https://docs.fastlane.tools/actions
#
# For a list of all available plugins, check out
#
# https://docs.fastlane.tools/plugins/available-plugins
#
# Uncomment the line if you want fastlane to automatically update itself
# update_fastlane
opt_out_usage
default_platform(:ios)
setup_ci if ENV['CI']
# Import signing certificate
import_certificate(
certificate_path: "cert.p12",
certificate_password: ENV["CERTIFICATE_PASSWORD"],
keychain_name: ENV["MATCH_KEYCHAIN_NAME"]
)
# 2 provisioning profiles, 1 for the main app and 1 for the share extension
install_provisioning_profile(path: "buildpp.mobileprovision")
install_provisioning_profile(path: "shareextpp.mobileprovision")
platform :ios do
desc "Build development version"
lane :dev do
update_code_signing_settings(
use_automatic_signing: false,
path: "Runner.xcodeproj",
code_sign_identity: "Apple Development"
)
# Update the provisioning profile for both the main app and extension
update_project_provisioning(
xcodeproj: "Runner.xcodeproj",
profile: "./buildpp.mobileprovision",
target_filter: ".*Runner.*"
)
update_project_provisioning(
xcodeproj: "Runner.xcodeproj",
profile: "./shareextpp.mobileprovision",
target_filter: ".*TeamMailShareExtension.*"
)
build_app(
scheme: "Runner",
workspace: "Runner.xcworkspace",
export_method: "development",
export_options: {
provisioningProfiles: {
"com.linagora.ios.teammail": "tmail.development.profile",
"com.linagora.ios.teammail.TeamMailShareExtension": "tmail.ext.ios.development.provisioning.profile"
}
}
)
end
desc "Build and deploy release version"
lane :release do
# App Store Connect API setup
app_store_connect_api_key(
key_id: ENV["APPLE_KEY_ID"],
issuer_id: ENV["APPLE_ISSUER_ID"],
key_filepath: "./apiKey.p8"
)
increment_build_number(
build_number: latest_testflight_build_number + 1
)
increment_version_number(
version_number: last_git_tag.gsub("v", "")
)
update_code_signing_settings(
use_automatic_signing: false,
path: "Runner.xcodeproj",
code_sign_identity: "Apple Distribution"
)
# Update the provisioning profile for both the main app and extension
update_project_provisioning(
xcodeproj: "Runner.xcodeproj",
profile: "./buildpp.mobileprovision",
target_filter: ".*Runner.*"
)
update_project_provisioning(
xcodeproj: "Runner.xcodeproj",
profile: "./shareextpp.mobileprovision",
target_filter: ".*TeamMailShareExtension.*"
)
build_app(
scheme: "Runner",
workspace: "Runner.xcworkspace",
export_method: "app-store",
export_options: {
provisioningProfiles: {
"com.linagora.ios.teammail": "tmail.distribution.profile",
"com.linagora.ios.teammail.TeamMailShareExtension": "tmail.share.ext.distribution.profile"
}
}
)
upload_to_testflight(
skip_waiting_for_build_processing: true,
ipa: "Runner.ipa"
)
end
end
+14 -14
View File
@@ -1,12 +1,15 @@
#!/bin/bash
echo Pre-build ...
#!/usr/bin/env bash
# fail if any commands fails
set -e
# debug log
set -x
cd core
flutter pub get
# Install necessary pods
cd ../ios
flutter pub get && pod install
## Install necessary pods
#cd ../ios
#flutter pub get && pod install
cd ../model
flutter pub get && flutter pub run build_runner build --delete-conflicting-outputs
@@ -14,17 +17,14 @@ flutter pub get && flutter pub run build_runner build --delete-conflicting-outpu
cd ../contact
flutter pub get && flutter pub run build_runner build --delete-conflicting-outputs
cd ../rule_filter
flutter pub get && flutter pub run build_runner build --delete-conflicting-outputs
cd ../forward
flutter pub get && flutter pub run build_runner build --delete-conflicting-outputs
cd ..
cd ../rule_filter
flutter pub get && flutter pub run build_runner build --delete-conflicting-outputs
flutter pub get && flutter pub run intl_generator:extract_to_arb --output-dir=./lib/l10n lib/main/localizations/app_localizations.dart
flutter pub get && flutter pub run intl_generator:generate_from_arb --output-dir=lib/l10n --no-use-deferred-loading lib/main/localizations/app_localizations.dart lib/l10n/intl*.arb
echo \[Completed\] pre-build!!!
cd ..
flutter pub get \
&& flutter pub run build_runner build --delete-conflicting-outputs \
&& flutter pub run intl_generator:extract_to_arb --output-dir=./lib/l10n lib/main/localizations/app_localizations.dart \
&& flutter pub run intl_generator:generate_from_arb --output-dir=lib/l10n --no-use-deferred-loading lib/main/localizations/app_localizations.dart lib/l10n/intl*.arb
+1471
View File
File diff suppressed because it is too large Load Diff