Compare commits
7 Commits
e1b7fd1999
...
b79c151948
Author | SHA1 | Date | |
---|---|---|---|
b79c151948 | |||
9da3a88041 | |||
dc7bc9425e | |||
27edfbf287 | |||
d157673aac | |||
027eb0b7d1 | |||
53116080e4 |
58
Jenkinsfile
vendored
58
Jenkinsfile
vendored
|
@ -7,17 +7,27 @@ pipeline {
|
|||
buildDiscarder(logRotator(numToKeepStr: '10'))
|
||||
}
|
||||
parameters {
|
||||
string(name: 'APP_PACKAGE_ID', defaultValue: 'comptaplan.app', description: 'Application package id used as android identifier')
|
||||
string(name: 'APP_BUNDLE_ID', defaultValue: 'comptaplan_app', description: 'Application bundle id used as ios identifier')
|
||||
string(name: 'APP_TITLE', defaultValue: 'My Comptaplan', description: 'Application title')
|
||||
string(name: 'APP_URI', defaultValue: 'https://my.comptaplan.be', description: 'Application uri')
|
||||
string(name: 'APP_COLOR', defaultValue: 'blue', description: 'Application color (blue, teal, ...)')
|
||||
string(name: 'BUILD_MODE', defaultValue: 'debug', description: 'Flutter build mode (debug/release)')
|
||||
string(name: 'UPLOAD_TRACK', defaultValue: 'alpha', description: 'Upload track')
|
||||
string(name: 'RELEASE_MESSAGE', defaultValue: 'Nouvelle version', description: 'A release message')
|
||||
string(name: 'RELEASE_STATUS', defaultValue: 'completed', description: 'draft/completed')
|
||||
booleanParam(name: 'SKIP_PUBLISH', defaultValue: 'true', description: 'Skip publishing apk')
|
||||
string(name: 'ANDROID_SIGNING_KEYSTORE_CREDENTIAL', defaultValue: 'jenkins-gestemps-android-service-secret-keystore',
|
||||
string(name: 'ANDROID_SIGNING_KEYSTORE_PASSWORD_CREDENTIAL', defaultValue: 'jenkins-gestemps-android-service-secret-keystore-password',
|
||||
string(name: 'ANDROID_SIGNING_KEY_PASSWORD_CREDENTIAL', defaultValue: 'jenkins-gestemps-android-service-secret-key-password',
|
||||
string(name: 'ANDROID_SIGNING_KEY_ALIAS', defaultValue: 'comptaplan',
|
||||
description: 'The key alias to use within the keystore')
|
||||
string(name: 'GIT_CREDENTIAL_ID', defaultValue: 'jenkins-jenkins-ssh-key', description: '')
|
||||
string(name: 'RELEASE_MESSAGE', defaultValue: 'Nouvelle version', description: 'A release message')
|
||||
string(name: 'ANDROID_UPLOAD_TRACK', defaultValue: 'alpha', description: 'Upload track')
|
||||
string(name: 'ANDROID_RELEASE_STATUS', defaultValue: 'completed', description: 'draft/completed')
|
||||
string(name: 'ANDROID_API_KEY_CREDENTIAL', defaultValue: 'jenkins-gestemps-android-service-secret-api-key', description: 'Api key to for the play store api')
|
||||
string(name: 'GIT_SSH_REMOTE_NAME', defaultValue: 'ssh://git@gitea.valuya.com:2022/Valuya/embedded_webview.git',
|
||||
description: 'We use ssh authentication, but gitea may use an http remotes by default. This is the remote to push the build number increment.')
|
||||
string(name: 'GIT_PUSH_BRANCH', defaultValue: 'android-releases', description: 'A branch to push the commit')
|
||||
string(name: 'GIT_TAG', defaultValue: '', description: 'An additional tag to push')
|
||||
string(name: 'SSH_KNOWN_HOSTS_FILE', defaultValue: '/var/run/ssh/known_hosts.gitea.valuya.com', description: 'Known hosts for ssh client (might be used to get flutter git dependencies and push commits)')
|
||||
booleanParam(name: 'SKIP_PUSH_TAG', defaultValue: 'true', description: 'Skip push tag')
|
||||
string(name: 'NODEJS_INSTALLATION', defaultValue: 'node 15',description: 'Nodejs installation to use')
|
||||
}
|
||||
|
@ -25,18 +35,31 @@ pipeline {
|
|||
stage ('Build') {
|
||||
steps {
|
||||
script {
|
||||
env.APP_PACKAGE_ID= params.APP_PACKAGE_ID
|
||||
env.APP_BUNDLE_ID= params.APP_BUNDLE_ID
|
||||
env.APP_TITLE= params.APP_TITLE
|
||||
env.APP_URI= params.APP_URI
|
||||
env.APP_COLOR= params.APP_COLOR
|
||||
env.BUILD_MODE= params.BUILD_MODE
|
||||
env.SSH_KNOWN_HOSTS_FILE= params.SSH_KNOWN_HOSTS_FILE
|
||||
env.ANDROID_KEY_ALIAS= params.ANDROID_SIGNING_KEY_ALIAS
|
||||
}
|
||||
container ('flutter') {
|
||||
sshagent(["${params.GIT_CREDENTIAL_ID}"]) {
|
||||
sh 'flutter doctor'
|
||||
sh 'GIT_SSH_COMMAND="ssh -o UserKnownHostsFile=/var/run/ssh/known_hosts.gitea.valuya.com" flutter pub get'
|
||||
sh 'flutter clean'
|
||||
sh 'APP_TITLE="$APP_TITLE" APP_URI="$APP_URI" APP_COLOR="$APP_COLOR" BUILDMODE="$BUILD_MODE" ./tools/jenkins-build-android.sh'
|
||||
stash(name: 'outputs', includes: 'build/app/outputs/**')
|
||||
withCredentials([
|
||||
file(credentialsId: params.ANDROID_SIGNING_KEYSTORE_CREDENTIAL, variable: 'ANDROID_KEYSTORE_FILE'),
|
||||
string(credentialsId: params.ANDROID_SIGNING_KEYSTORE_PASSWORD_CREDENTIAL, variable: 'ANDROID_KEYSTORE_PASSWORD')
|
||||
string(credentialsId: params.ANDROID_SIGNING_KEY_PASSWORD_CREDENTIAL, variable: 'ANDROID_KEY_PASSWORD')
|
||||
]) {
|
||||
sh 'flutter doctor'
|
||||
sh 'GIT_SSH_COMMAND="ssh -o UserKnownHostsFile=$SSH_KNOWN_HOSTS_FILE" flutter pub get'
|
||||
sh 'flutter clean'
|
||||
sh './tools/set-bundle-identifier.sh "$APP_BUNDLE_ID"'
|
||||
sh './tools/set-package.sh "$APP_PACKAGE_ID"'
|
||||
sh './tools/set-title.sh "$APP_TITLE"'
|
||||
sh './tools/jenkins-build-android.sh'
|
||||
stash(name: 'outputs', includes: 'build/app/outputs/**')
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -51,14 +74,21 @@ pipeline {
|
|||
env.SKIP_PUSH_TAG= params.SKIP_PUSH_TAG
|
||||
env.GIT_TAG= params.GIT_TAG
|
||||
env.GIT_PUSH_BRANCH = params.GIT_PUSH_BRANCH
|
||||
env.TRACK = params.UPLOAD_TRACK
|
||||
env.RELEASE_STATUS = params.RELEASE_STATUS
|
||||
env.ANDROID_UPLOAD_TRACK = params.ANDROID_UPLOAD_TRACK
|
||||
env.ANDROID_RELEASE_STATUS = params.ANDROID_RELEASE_STATUS
|
||||
env.RELEASE_MESSAGE = params.RELEASE_MESSAGE
|
||||
env.GIT_SSH_REMOTE_NAME = params.GIT_SSH_REMOTE_NAME
|
||||
env.SSH_KNOWN_HOSTS_FILE = params.SSH_KNOWN_HOSTS_FILE
|
||||
}
|
||||
unstash(name: 'outputs')
|
||||
sshagent(["${params.GIT_CREDENTIAL_ID}"]) {
|
||||
nodejs(nodeJSInstallationName: "${params.NODEJS_INSTALLATION}") {
|
||||
sh './tools/jenkins-publish-android.sh'
|
||||
withCredentials([
|
||||
file(credentialsId: params.ANDROID_API_KEY_CREDENTIAL, variable: 'GOOGLE_APPLICATION_CREDENTIALS')
|
||||
]) {
|
||||
sh './tools/jenkins-publish-android.sh'
|
||||
}
|
||||
|
||||
}
|
||||
sh '''
|
||||
VERSION_CODE=$(./tools/jenkins-increment-buildnumber.sh || echo $?)
|
||||
|
@ -66,9 +96,9 @@ pipeline {
|
|||
git config user.email "jenkins@valuya.com"
|
||||
git config user.name "Jenkins release"
|
||||
git add pubspec.yaml
|
||||
git remote add ssh "ssh://git@gitea.valuya.com:2022/Valuya/comptaplan_app.git"
|
||||
git remote add ssh "$GIT_SSH_REMOTE_NAME"
|
||||
git commit -m "Bump to build $VERSION_CODE"
|
||||
export GIT_SSH_COMMAND="ssh -o UserKnownHostsFile=/var/run/ssh/known_hosts.gitea.valuya.com"
|
||||
export GIT_SSH_COMMAND="ssh -o UserKnownHostsFile=$SSH_KNOWN_HOSTS_FILE"
|
||||
git push ssh HEAD:$GIT_PUSH_BRANCH
|
||||
if [ "$SKIP_PUSH_TAG" != "true" ] ; then
|
||||
git tag "$GIT_TAG"
|
||||
|
|
|
@ -40,10 +40,6 @@ android {
|
|||
targetCompatibility JavaVersion.VERSION_1_8
|
||||
}
|
||||
|
||||
dependencies {
|
||||
implementation 'com.google.android.material:material:1.4.0'
|
||||
}
|
||||
|
||||
kotlinOptions {
|
||||
jvmTarget = '1.8'
|
||||
}
|
||||
|
@ -52,6 +48,10 @@ android {
|
|||
main.java.srcDirs += 'src/main/kotlin'
|
||||
}
|
||||
|
||||
dependencies {
|
||||
implementation 'com.google.android.material:material:1.4.0'
|
||||
}
|
||||
|
||||
defaultConfig {
|
||||
applicationId "comptaplan.app"
|
||||
minSdkVersion 19
|
||||
|
@ -67,7 +67,6 @@ android {
|
|||
storePassword keystoreProperties['storePassword']
|
||||
}
|
||||
}
|
||||
|
||||
buildTypes {
|
||||
release {
|
||||
signingConfig signingConfigs.release
|
||||
|
|
|
@ -291,7 +291,7 @@
|
|||
ENABLE_BITCODE = NO;
|
||||
INFOPLIST_FILE = Runner/Info.plist;
|
||||
LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks";
|
||||
PRODUCT_BUNDLE_IDENTIFIER = com.charlyghislain.embeddedWebview;
|
||||
PRODUCT_BUNDLE_IDENTIFIER = com.charlyghislain.embedded_webview;
|
||||
PRODUCT_NAME = "$(TARGET_NAME)";
|
||||
SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h";
|
||||
SWIFT_VERSION = 5.0;
|
||||
|
@ -415,7 +415,7 @@
|
|||
ENABLE_BITCODE = NO;
|
||||
INFOPLIST_FILE = Runner/Info.plist;
|
||||
LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks";
|
||||
PRODUCT_BUNDLE_IDENTIFIER = com.charlyghislain.embeddedWebview;
|
||||
PRODUCT_BUNDLE_IDENTIFIER = com.charlyghislain.embedded_webview;
|
||||
PRODUCT_NAME = "$(TARGET_NAME)";
|
||||
SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h";
|
||||
SWIFT_OPTIMIZATION_LEVEL = "-Onone";
|
||||
|
@ -434,7 +434,7 @@
|
|||
ENABLE_BITCODE = NO;
|
||||
INFOPLIST_FILE = Runner/Info.plist;
|
||||
LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks";
|
||||
PRODUCT_BUNDLE_IDENTIFIER = com.charlyghislain.embeddedWebview;
|
||||
PRODUCT_BUNDLE_IDENTIFIER = com.charlyghislain.embedded_webview;
|
||||
PRODUCT_NAME = "$(TARGET_NAME)";
|
||||
SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h";
|
||||
SWIFT_VERSION = 5.0;
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
import 'package:comptaplan_app/webview_widget.dart';
|
||||
import 'package:embedded_webview/webview_widget.dart';
|
||||
import 'package:flutter/material.dart';
|
||||
|
||||
void main() {
|
||||
|
@ -18,7 +18,7 @@ class MyApp extends StatelessWidget {
|
|||
// This widget is the root of your application.
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
MaterialColor materialColor = _getMaterialColor(this._color);
|
||||
MaterialColor materialColor = _getMaterialColor(_color);
|
||||
return MaterialApp(title: _title, theme: ThemeData(primarySwatch: materialColor), home: WebViewWidget(_uri));
|
||||
}
|
||||
|
||||
|
|
|
@ -34,9 +34,9 @@ dependencies:
|
|||
# The following adds the Cupertino Icons font to your application.
|
||||
# Use with the CupertinoIcons class for iOS style icons.
|
||||
cupertino_icons: ^1.0.2
|
||||
# webview_flutter: ^2.0.13
|
||||
# COmmunity plugin adding features unsupported in the official webview
|
||||
#webview_flutter: ^2.3.1
|
||||
flutter_webview_pro: ^1.0.0
|
||||
|
||||
dev_dependencies:
|
||||
flutter_test:
|
||||
sdk: flutter
|
||||
|
|
|
@ -13,7 +13,7 @@ import 'package:comptaplan_app/main.dart';
|
|||
void main() {
|
||||
testWidgets('Counter increments smoke test', (WidgetTester tester) async {
|
||||
// Build our app and trigger a frame.
|
||||
await tester.pumpWidget(const MyApp());
|
||||
await tester.pumpWidget(const MyApp('test', 'test', 'blue'));
|
||||
|
||||
// Verify that our counter starts at 0.
|
||||
expect(find.text('0'), findsOneWidget);
|
||||
|
|
|
@ -1,34 +1,33 @@
|
|||
#!/bin/bash
|
||||
|
||||
# debug/release
|
||||
BUILDMODE=${BUILDMODE:-debug}
|
||||
BUILD_MODE=${BUILD_MODE:-debug}
|
||||
# LOCAL/DEV/PROD
|
||||
APP_TITLE=${APP_TITLE:-}
|
||||
APP_URI=${APP_URI:-}
|
||||
APP_COLOR=${APP_COLOR:-}
|
||||
ANDROID_KEYSTORE_FILE=${ANDROID_KEYSTORE_FILE:-}
|
||||
ANDROID_KEY_ALIAS=${ANDROID_KEY_ALIAS:-}
|
||||
ANDROID_KEYSTORE_PASSWORD=${ANDROID_KEYSTORE_PASSWORD:-}
|
||||
ANDROID_KEY_PASSWORD=${ANDROID_KEY_PASSWORD:-}
|
||||
|
||||
|
||||
cat << EOF > android/local.properties
|
||||
flutter.sdk=/home/developer/flutter
|
||||
sdk.dir=/home/developer/android
|
||||
flutter.buildMode=${BUILDMODE}
|
||||
flutter.buildMode=${BUILD_MODE}
|
||||
flutter.versionName=
|
||||
flutter.versionCode=
|
||||
EOF
|
||||
|
||||
SECRETS_PATH="/var/run/secrets/gestemps"
|
||||
STOREPASS="$(head -n 1 ${SECRETS_PATH}/signing_keystore.store.password)"
|
||||
KEYPASS="$(head -n 1 ${SECRETS_PATH}/signing_keystore.key.password)"
|
||||
KEYALIAS="$(head -n 1 ${SECRETS_PATH}/signing_keystore.key.alias)"
|
||||
|
||||
cat << EOF > android/key.properties
|
||||
storePassword=${STOREPASS}
|
||||
keyPassword=${KEYPASS}
|
||||
keyAlias=${KEYALIAS}
|
||||
storeFile=${SECRETS_PATH}/signing_keystore.jks
|
||||
storePassword=${ANDROID_KEYSTORE_PASSWORD}
|
||||
keyPassword=${ANDROID_KEY_PASSWORD}
|
||||
keyAlias=${ANDROID_SIGNING_KEY_ALIAS}
|
||||
storeFile=${ANDROID_KEYSTORE_FILE}
|
||||
EOF
|
||||
|
||||
pwd
|
||||
|
||||
flutter build appbundle --dart-define="APP_TITLE=${APP_TITLE}" --dart-define="APP_URI=${APP_URI}" --dart-define="APP_COLOR=${APP_COLOR}"
|
||||
|
||||
|
||||
|
|
|
@ -4,6 +4,7 @@
|
|||
TRACK=${TRACK:-alpha}
|
||||
RELEASE_STATUS=${RELEASE_STATUS:-completed}
|
||||
RELEASE_MESSAGE="${RELEASE_MESSAGE:-New version}"
|
||||
GOOGLE_APPLICATION_CREDENTIALS="${GOOGLE_APPLICATION_CREDENTIALS:-}"
|
||||
|
||||
|
||||
VERSION_AND_CODE="$(cat pubspec.yaml | grep 'version:' | sed 's/version: //')"
|
||||
|
@ -19,7 +20,7 @@ npm install
|
|||
./node_modules/.bin/tsc
|
||||
npm install -g --save googleapis
|
||||
|
||||
GOOGLE_APPLICATION_CREDENTIALS=/var/run/secrets/gestemps/google_api.key.json \
|
||||
GOOGLE_APPLICATION_CREDENTIALS=/var/run/secrets/google_api.key.json \
|
||||
node ${WD}/publish-android-js/publish-app-store.js \
|
||||
"$TRACK" "$VERSION_CODE" "$RELEASE_STATUS" "$VERSION_CODE $VERISON_NAME" "$RELEASE_MESSAGE" ${WD}/../build/app/outputs/bundle/release/app-release.aab \
|
||||
|| exit 1
|
||||
|
|
7
tools/set-bundle-identifier.sh
Executable file
7
tools/set-bundle-identifier.sh
Executable file
|
@ -0,0 +1,7 @@
|
|||
#!/bin/bash
|
||||
|
||||
BUNDLE_NAME="$1"
|
||||
|
||||
echo "Setting the ios bundle name to $BUNDLE_NAME"
|
||||
|
||||
sed -i "s/PRODUCT_BUNDLE_IDENTIFIER = .*;/PRODUCT_BUNDLE_IDENTIFIER = $BUNDLE_NAME;/" ios/Runner.xcodeproj/project.pbxproj
|
14
tools/set-package.sh
Executable file
14
tools/set-package.sh
Executable file
|
@ -0,0 +1,14 @@
|
|||
#!/bin/bash
|
||||
|
||||
PACKAGE="$1"
|
||||
|
||||
echo "Setting the application android package to $PACKAGE"
|
||||
|
||||
sed -i "s/package=\"[^\"]\+\"/package=\"$PACKAGE\"/" android/app/src/debug/AndroidManifest.xml
|
||||
sed -i "s/package=\"[^\"]\+\"/package=\"$PACKAGE\"/" android/app/src/main/AndroidManifest.xml
|
||||
sed -i "s/package=\"[^\"]\+\"/package=\"$PACKAGE\"/" android/app/src/profile/AndroidManifest.xml
|
||||
|
||||
sed -i "s/applicationId \"[^\"]\+\"/applicationId \"$PACKAGE\"/" android/app/build.gradle
|
||||
|
||||
sed -i "s/package .*/package $PACKAGE/" android/app/src/main/kotlin/com/charlyghislain/embedded_webview/MainActivity.kt
|
||||
|
19
tools/set-title.sh
Executable file
19
tools/set-title.sh
Executable file
|
@ -0,0 +1,19 @@
|
|||
#!/bin/bash
|
||||
|
||||
TITLE="$1"
|
||||
|
||||
echo "Setting the application title to $TITLE"
|
||||
|
||||
sed -i "s/android:label=\"[^\"]\+\"/android:label=\"$TITLE\"/" android/app/src/main/AndroidManifest.xml
|
||||
|
||||
NAME_LENGTH="${#TITLE}"
|
||||
LONG_NAME="$(( $NAME_LENGTH > 15))" # 1 if long name
|
||||
BUNDLE_NAME="$(echo $TITLE | cut -c -15)"
|
||||
|
||||
perl -0777 -i -pe "s#\t<key>CFBundleName</key>\n[^\n]+#\t<key>CFBundleName</key>\n\t<string>$BUNDLE_NAME</string>#igs" ios/Runner/Info.plist
|
||||
|
||||
if [ "$LONG_NAME" = "1" ] ; then
|
||||
# todo : set bundleDisplayName
|
||||
echo "Warning: name truncated to $BUNDLE_NAME"
|
||||
fi
|
||||
|
Reference in New Issue
Block a user