cleaner ci
Some checks failed
Build and push docker image / Build (pull_request) Failing after 21s
Build and release APK / Build APK (pull_request) Successful in 5m32s
Build web / Build Web (pull_request) Successful in 1m47s

This commit is contained in:
Remy Moll 2024-06-03 17:36:13 +02:00
parent d5e0b7d51a
commit 4ec3dd4830
7 changed files with 81 additions and 15 deletions

View File

@ -42,20 +42,20 @@ jobs:
- run: flutter pub get - run: flutter pub get
working-directory: ./frontend working-directory: ./frontend
- run: flutter build apk --release --split-per-abi - name: Add required secrets
run: |
echo ${{ secrets.ANDROID_SECRETS_BASE64 }} | base64 -d > android/secrets.properties
working-directory: ./frontend working-directory: ./frontend
- name: Release APK - run: flutter build apk --release --split-per-abi --build-number=${{ gitea.run_number }}
uses: https://gitea.com/akkuman/gitea-release-action@v1 working-directory: ./frontend
with:
files: ./frontend/build/app/outputs/flutter-apk/*.apk - name: Upload APKs to artifacts
name: Testing release uses: https://gitea.com/actions/upload-artifact@v3
release_name: testing with:
tag: testing name: app-release
tag_name: testing path: frontend/build/app/outputs/flutter-apk/
release_body: "This is a testing release." if-no-files-found: error
prerelease: true retention-days: 15
token: ${{ secrets.GITEA_TOKEN }}
env:
NODE_OPTIONS: '--experimental-fetch'

View File

@ -4,6 +4,7 @@ gradle-wrapper.jar
/gradlew /gradlew
/gradlew.bat /gradlew.bat
/local.properties /local.properties
/secrets.properties
GeneratedPluginRegistrant.java GeneratedPluginRegistrant.java
# Remember to never publicly share your keystore. # Remember to never publicly share your keystore.

View File

@ -0,0 +1,48 @@
## Android Setup
### Keystore setup
```bash
keytool -genkey -v -keystore release.keystore -keyalg RSA -keysize 2048 -validity 10000 -alias release
```
- This is required to store local credentials securely (not used for now).
- But necesseary in order to restrict the particular api key to a particular app (through the sha1 of the associated keystore).
### Building and secret credentials
Following the guide under [https://developers.google.com/maps/flutter-package/config#android_1](https://developers.google.com/maps/flutter-package/config#android_1).
- Add the following to `android/build.gradle`:
```gradle
buildscript {
dependencies {
classpath "com.google.android.libraries.mapsplatform.secrets-gradle-plugin:secrets-gradle-plugin:2.0.1"
}
}
```
- Add the following to `android/app/build.gradle`:
```gradle
plugins {
// ...
id 'com.google.android.libraries.mapsplatform.secrets-gradle-plugin'
}
```
- Add the credentials to `android/secrets.properties`:
```properties
MAPS_API_KEY=YOUR_API_KEY
```
- Reference the credentials in `android/app/src/main/AndroidManifest.xml`:
```xml
<meta-data
android:name="com.google.android.geo.API_KEY"
android:value="${MAPS_API_KEY}" />
```
### Using the credentials in CI
- Add the base64 encoded credentials to the repository secrets (e.g. `ANDROID_SECRETS`).
```bash
base64 -i android/secrets.properties
```
- Use the following in the CI script:
```bash
echo {{ secrets.ANDROID_SECRETS }} | base64 -d > android/secrets.properties
```

View File

@ -2,10 +2,12 @@ plugins {
id "com.android.application" id "com.android.application"
id "kotlin-android" id "kotlin-android"
id "dev.flutter.flutter-gradle-plugin" id "dev.flutter.flutter-gradle-plugin"
id 'com.google.android.libraries.mapsplatform.secrets-gradle-plugin'
} }
def localProperties = new Properties() def localProperties = new Properties()
def localPropertiesFile = rootProject.file('local.properties') def localPropertiesFile = rootProject.file('secrets.properties')
if (localPropertiesFile.exists()) { if (localPropertiesFile.exists()) {
localPropertiesFile.withReader('UTF-8') { reader -> localPropertiesFile.withReader('UTF-8') { reader ->
localProperties.load(reader) localProperties.load(reader)
@ -52,6 +54,9 @@ android {
targetSdkVersion flutter.targetSdkVersion targetSdkVersion flutter.targetSdkVersion
versionCode flutterVersionCode.toInteger() versionCode flutterVersionCode.toInteger()
versionName flutterVersionName versionName flutterVersionName
// Placeholders of keys that are replaced by the build system.
manifestPlaceholders += [MAPS_API_KEY: "some value"]
} }
buildTypes { buildTypes {

View File

@ -32,7 +32,7 @@
/> />
<meta-data <meta-data
android:name="com.google.android.geo.API_KEY" android:name="com.google.android.geo.API_KEY"
android:value="AIzaSyCeWk_D2xvfOHLidvV56EZeQCUybypEntw" android:value="${MAPS_API_KEY}"
/> />

View File

@ -16,3 +16,14 @@ subprojects {
tasks.register("clean", Delete) { tasks.register("clean", Delete) {
delete rootProject.buildDir delete rootProject.buildDir
} }
buildscript {
repositories {
google()
mavenCentral()
}
dependencies {
classpath "com.google.android.libraries.mapsplatform.secrets-gradle-plugin:secrets-gradle-plugin:2.0.1"
}
}

View File

@ -0,0 +1 @@
MAPS_API_KEY=Key