From 4121a73068817ffdf83ffe8add010958dc45dd0f Mon Sep 17 00:00:00 2001 From: randogoth Date: Wed, 14 Oct 2026 08:43:46 +0300 Subject: [PATCH 1/2] feat: release signing, fastlane metadata, CI workflow --- .github/workflows/release.yml | 55 +++++++++++++++++++ android/app/build.gradle.kts | 16 +++++- fastlane/Fastfile | 1 + .../metadata/android/en-US/changelogs/1.txt | 1 + .../android/en-US/full_description.txt | 8 +++ .../android/en-US/short_description.txt | 1 + fastlane/metadata/android/en-US/title.txt | 1 + 7 files changed, 81 insertions(+), 2 deletions(-) create mode 100644 .github/workflows/release.yml create mode 100644 fastlane/Fastfile create mode 100644 fastlane/metadata/android/en-US/changelogs/1.txt create mode 100644 fastlane/metadata/android/en-US/full_description.txt create mode 100644 fastlane/metadata/android/en-US/short_description.txt create mode 100644 fastlane/metadata/android/en-US/title.txt diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml new file mode 100644 index 0000000..e6e0e20 --- /dev/null +++ b/.github/workflows/release.yml @@ -0,0 +1,55 @@ +name: Release APK + +on: + push: + tags: ["v*"] + +jobs: + build: + runs-on: ubuntu-latest + + steps: + - uses: actions/checkout@v4 + + - uses: actions/setup-java@v4 + with: + distribution: temurin + java-version: "17" + + - uses: subosito/flutter-action@v2 + with: + flutter-version: "stable" + cache: true + + - name: Extract version code from pubspec + run: | + VERSION=$(grep '^version:' pubspec.yaml | sed 's/version: //') + VERSION_CODE=$(echo "$VERSION" | grep -oP '(?<=\+)\d+') + VERSION_NAME=$(echo "$VERSION" | grep -oP '^[^+]+') + echo "VERSION_CODE=$VERSION_CODE" >> $GITHUB_ENV + echo "VERSION_NAME=$VERSION_NAME" >> $GITHUB_ENV + + - name: Decode keystore + run: | + echo "${{ secrets.KEYSTORE_BASE64 }}" | base64 -d > android/app/kirakira-release.jks + echo "KEYSTORE_PATH=$GITHUB_WORKSPACE/android/app/kirakira-release.jks" >> $GITHUB_ENV + + - name: Build release APK (prod flavor) + env: + STORE_PASSWORD: ${{ secrets.STORE_PASSWORD }} + KEY_ALIAS: ${{ secrets.KEY_ALIAS }} + KEY_PASSWORD: ${{ secrets.KEY_PASSWORD }} + run: flutter build apk --release --flavor prod + + - name: Rename APK + run: | + cp build/app/outputs/flutter-apk/app-prod-release.apk \ + "kirakira-${{ env.VERSION_NAME }}.apk" + + - name: Create GitHub Release + uses: softprops/action-gh-release@v2 + with: + files: kirakira-*.apk + body_path: fastlane/metadata/android/en-US/changelogs/${{ env.VERSION_CODE }}.txt + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} diff --git a/android/app/build.gradle.kts b/android/app/build.gradle.kts index 9f8f7b0..9c8a583 100644 --- a/android/app/build.gradle.kts +++ b/android/app/build.gradle.kts @@ -19,6 +19,15 @@ android { jvmTarget = JavaVersion.VERSION_11.toString() } + signingConfigs { + create("release") { + storeFile = file(System.getenv("KEYSTORE_PATH") ?: "debug.jks") + storePassword = System.getenv("STORE_PASSWORD") ?: "" + keyAlias = System.getenv("KEY_ALIAS") ?: "" + keyPassword = System.getenv("KEY_PASSWORD") ?: "" + } + } + defaultConfig { applicationId = "com.app.smol_mail" minSdk = flutter.minSdkVersion @@ -55,8 +64,11 @@ android { buildTypes { release { - // Signing with the debug keys for now, so `flutter run --release` works. - signingConfig = signingConfigs.getByName("debug") + signingConfig = signingConfigs.getByName( + if (System.getenv("KEYSTORE_PATH") != null) "release" else "debug" + ) + isMinifyEnabled = true + proguardFiles(getDefaultProguardFile("proguard-android-optimize.txt"), "proguard-rules.pro") } } } diff --git a/fastlane/Fastfile b/fastlane/Fastfile new file mode 100644 index 0000000..87707fa --- /dev/null +++ b/fastlane/Fastfile @@ -0,0 +1 @@ +default_platform(:android) diff --git a/fastlane/metadata/android/en-US/changelogs/1.txt b/fastlane/metadata/android/en-US/changelogs/1.txt new file mode 100644 index 0000000..0dbcc08 --- /dev/null +++ b/fastlane/metadata/android/en-US/changelogs/1.txt @@ -0,0 +1 @@ +Initial release. \ No newline at end of file diff --git a/fastlane/metadata/android/en-US/full_description.txt b/fastlane/metadata/android/en-US/full_description.txt new file mode 100644 index 0000000..5e0daaf --- /dev/null +++ b/fastlane/metadata/android/en-US/full_description.txt @@ -0,0 +1,8 @@ +kirakira is a client for the smol:// mail protocol — a minimalist, end-to-end encrypted messaging system designed for simplicity and privacy. + +Features: +• End-to-end encryption via the smolmail protocol +• QR code identity sharing +• Deep link support for smol:// URIs +• Dark mode support +• No accounts, no servers you don't control diff --git a/fastlane/metadata/android/en-US/short_description.txt b/fastlane/metadata/android/en-US/short_description.txt new file mode 100644 index 0000000..a49c266 --- /dev/null +++ b/fastlane/metadata/android/en-US/short_description.txt @@ -0,0 +1 @@ +Smol Mail client — minimalist end-to-end encrypted messaging \ No newline at end of file diff --git a/fastlane/metadata/android/en-US/title.txt b/fastlane/metadata/android/en-US/title.txt new file mode 100644 index 0000000..9650730 --- /dev/null +++ b/fastlane/metadata/android/en-US/title.txt @@ -0,0 +1 @@ +kirakira \ No newline at end of file From 6eceec32979ad85cb9b26fa096b147b7a82b660c Mon Sep 17 00:00:00 2001 From: randogoth Date: Wed, 14 Oct 2026 08:48:16 +0300 Subject: [PATCH 2/2] fix: use linux-x86_64 runner label --- .github/workflows/release.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index e6e0e20..eeab3e9 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -6,7 +6,7 @@ on: jobs: build: - runs-on: ubuntu-latest + runs-on: linux-x86_64 steps: - uses: actions/checkout@v4