Skip to content

Commit a75e4e7

Browse files
Merge pull request #569 from madeofpendletonwool/main
Catchup
2 parents b8e89d1 + 84d07d9 commit a75e4e7

File tree

434 files changed

+54376
-1755
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

434 files changed

+54376
-1755
lines changed

.github/workflows/build-android-app.yml

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
1-
name: Build Android Pinepods App
1+
name: Build Android Pinepods App (Legacy Tauri - Deprecated)
22

33
on:
4+
# This workflow is deprecated in favor of build-android-flutter.yml
45
# release:
56
# types: [published]
67
workflow_dispatch:
Lines changed: 172 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,172 @@
1+
permissions:
2+
contents: read
3+
name: Build Android Release Archive
4+
5+
on:
6+
workflow_dispatch:
7+
inputs:
8+
version:
9+
description: "Version tag (e.g., v0.7.9)"
10+
required: false
11+
default: "manual-build"
12+
13+
jobs:
14+
build-android:
15+
name: Build Android Release Archive
16+
runs-on: ubuntu-latest
17+
18+
steps:
19+
- name: Set Build Info
20+
run: |
21+
echo "VERSION_TAG=${{ github.event.inputs.version }}" >> $GITHUB_ENV
22+
echo "BUILD_NUMBER=$(date +%s)" >> $GITHUB_ENV
23+
echo "BUILD_DATE=$(date -u +'%Y-%m-%d %H:%M:%S UTC')" >> $GITHUB_ENV
24+
25+
- name: Checkout repository
26+
uses: actions/checkout@v4
27+
28+
- name: Set up JDK 17
29+
uses: actions/setup-java@v4
30+
with:
31+
java-version: "17"
32+
distribution: "temurin"
33+
34+
- name: Setup Android SDK
35+
uses: android-actions/setup-android@v3
36+
37+
- uses: nttld/setup-ndk@v1
38+
id: setup-ndk
39+
with:
40+
ndk-version: r26d
41+
link-to-sdk: true
42+
43+
- name: Setup Flutter
44+
uses: subosito/flutter-action@v2
45+
with:
46+
flutter-version: "3.32.0"
47+
channel: "stable"
48+
49+
- name: Install dependencies
50+
run: |
51+
cd mobile
52+
flutter pub get
53+
54+
- name: Setup Android signing
55+
run: |
56+
cd mobile/android
57+
echo "storePassword=${{ secrets.ANDROID_STORE_PASSWORD }}" > key.properties
58+
echo "keyPassword=${{ secrets.ANDROID_KEY_PASSWORD }}" >> key.properties
59+
echo "keyAlias=${{ secrets.ANDROID_KEY_ALIAS }}" >> key.properties
60+
echo "storeFile=../upload-keystore.jks" >> key.properties
61+
echo "${{ secrets.ANDROID_KEYSTORE_BASE64 }}" | base64 -d > upload-keystore.jks
62+
63+
- name: Update app version
64+
run: |
65+
cd mobile
66+
if [[ "$VERSION_TAG" != "manual-build" && "$VERSION_TAG" != "" ]]; then
67+
# Remove 'v' prefix if present
68+
CLEAN_VERSION=${VERSION_TAG#v}
69+
sed -i "s/^version: .*/version: $CLEAN_VERSION/" pubspec.yaml
70+
echo "Updated version to: $CLEAN_VERSION"
71+
fi
72+
73+
- name: Build signed APK (split per ABI)
74+
run: |
75+
cd mobile
76+
flutter build apk --release --split-per-abi
77+
echo "Split APK build completed"
78+
79+
- name: Build signed APK (universal)
80+
run: |
81+
cd mobile
82+
flutter build apk --release
83+
echo "Universal APK build completed"
84+
85+
- name: Build signed AAB (App Bundle)
86+
run: |
87+
cd mobile
88+
flutter build appbundle --release
89+
echo "AAB build completed"
90+
91+
- name: Prepare release artifacts
92+
run: |
93+
cd mobile
94+
mkdir -p ../release-artifacts/android
95+
96+
# Copy split APKs with descriptive names
97+
cp build/app/outputs/flutter-apk/app-arm64-v8a-release.apk ../release-artifacts/android/PinePods-${VERSION_TAG}-arm64-v8a.apk
98+
cp build/app/outputs/flutter-apk/app-armeabi-v7a-release.apk ../release-artifacts/android/PinePods-${VERSION_TAG}-armeabi-v7a.apk
99+
cp build/app/outputs/flutter-apk/app-x86_64-release.apk ../release-artifacts/android/PinePods-${VERSION_TAG}-x86_64.apk
100+
101+
# Copy universal APK
102+
cp build/app/outputs/flutter-apk/app-release.apk ../release-artifacts/android/PinePods-${VERSION_TAG}-universal.apk
103+
104+
# Copy AAB for Play Store
105+
cp build/app/outputs/bundle/release/app-release.aab ../release-artifacts/android/PinePods-${VERSION_TAG}-playstore.aab
106+
107+
# Create build info file
108+
cat > ../release-artifacts/android/BUILD_INFO.txt << EOF
109+
PinePods Mobile - Android Release Build
110+
=====================================
111+
Version: $VERSION_TAG
112+
Build Date: $BUILD_DATE
113+
Build Number: $BUILD_NUMBER
114+
Flutter Version: 3.32.0
115+
Package: com.gooseberrydevelopment.pinepods
116+
117+
📱 APK FILES:
118+
=============
119+
PinePods-${VERSION_TAG}-arm64-v8a.apk - 64-bit ARM (most modern phones)
120+
PinePods-${VERSION_TAG}-armeabi-v7a.apk - 32-bit ARM (older phones)
121+
PinePods-${VERSION_TAG}-x86_64.apk - 64-bit Intel (emulators/some tablets)
122+
PinePods-${VERSION_TAG}-universal.apk - Works on all devices (larger size)
123+
124+
📦 STORE FILES:
125+
==============
126+
PinePods-${VERSION_TAG}-playstore.aab - Google Play Store upload (.aab format)
127+
128+
🚀 DISTRIBUTION:
129+
================
130+
• Google Play Store: Use the .aab file
131+
• F-Droid: They build from source (no APK needed)
132+
• IzzyOnDroid: Use universal.apk or arm64-v8a.apk
133+
• Direct install: Use arm64-v8a.apk for most users
134+
135+
⚡ QUICK INSTALL:
136+
================
137+
Most users should download: PinePods-${VERSION_TAG}-arm64-v8a.apk
138+
EOF
139+
140+
- name: Upload Android Release Artifacts
141+
uses: actions/upload-artifact@v4
142+
with:
143+
name: android-release-${{ env.VERSION_TAG }}
144+
path: release-artifacts/android/
145+
retention-days: 90
146+
147+
- name: Create Release Summary
148+
run: |
149+
echo "# 🤖 Android Release Build Complete" >> $GITHUB_STEP_SUMMARY
150+
echo "" >> $GITHUB_STEP_SUMMARY
151+
echo "**Version:** ${{ github.event.inputs.version }}" >> $GITHUB_STEP_SUMMARY
152+
echo "**Build Date:** $(date -u +'%Y-%m-%d %H:%M:%S UTC')" >> $GITHUB_STEP_SUMMARY
153+
echo "" >> $GITHUB_STEP_SUMMARY
154+
155+
echo "## 📦 Generated Files" >> $GITHUB_STEP_SUMMARY
156+
echo "- 🎯 **arm64-v8a.apk** - Recommended for most users" >> $GITHUB_STEP_SUMMARY
157+
echo "- 📱 **armeabi-v7a.apk** - For older Android devices" >> $GITHUB_STEP_SUMMARY
158+
echo "- 💻 **x86_64.apk** - For emulators and Intel devices" >> $GITHUB_STEP_SUMMARY
159+
echo "- 🌍 **universal.apk** - Works on all devices (larger file)" >> $GITHUB_STEP_SUMMARY
160+
echo "- 🏪 **playstore.aab** - For Google Play Store upload" >> $GITHUB_STEP_SUMMARY
161+
echo "" >> $GITHUB_STEP_SUMMARY
162+
echo "## 📥 Download Instructions" >> $GITHUB_STEP_SUMMARY
163+
echo "1. Go to **Actions** tab → This workflow run" >> $GITHUB_STEP_SUMMARY
164+
echo "2. Scroll down to **Artifacts** section" >> $GITHUB_STEP_SUMMARY
165+
echo "3. Download \`android-release-${{ github.event.inputs.version }}\`" >> $GITHUB_STEP_SUMMARY
166+
echo "4. Extract the ZIP file" >> $GITHUB_STEP_SUMMARY
167+
echo "" >> $GITHUB_STEP_SUMMARY
168+
echo "## 🚀 Next Steps" >> $GITHUB_STEP_SUMMARY
169+
echo "- Test the APK on your device" >> $GITHUB_STEP_SUMMARY
170+
echo "- Submit \`.aab\` file to Google Play Console" >> $GITHUB_STEP_SUMMARY
171+
echo "- Submit \`universal.apk\` to IzzyOnDroid" >> $GITHUB_STEP_SUMMARY
172+
echo "- Create GitHub release with APKs for direct download" >> $GITHUB_STEP_SUMMARY
Lines changed: 99 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,99 @@
1+
permissions:
2+
contents: read
3+
name: Build Android Flutter App
4+
5+
on:
6+
push:
7+
tags:
8+
- "*"
9+
release:
10+
types: [published]
11+
workflow_dispatch:
12+
inputs:
13+
version:
14+
description: "Manual override version tag (optional)"
15+
required: false
16+
17+
jobs:
18+
build:
19+
name: Build Android Release
20+
runs-on: ubuntu-latest
21+
22+
steps:
23+
- name: Set Image Tag
24+
run: echo "IMAGE_TAG=${{ github.event.release.tag_name || github.event.inputs.version || 'latest' }}" >> $GITHUB_ENV
25+
26+
- name: Checkout repository
27+
uses: actions/checkout@v4
28+
29+
- name: Set up JDK 17
30+
uses: actions/setup-java@v4
31+
with:
32+
java-version: "17"
33+
distribution: "temurin"
34+
35+
- name: Setup Android SDK
36+
uses: android-actions/setup-android@v3
37+
38+
- name: Setup Flutter
39+
uses: subosito/flutter-action@v2
40+
with:
41+
flutter-version: "3.32.0"
42+
channel: "stable"
43+
44+
- name: Install dependencies
45+
run: |
46+
cd mobile
47+
flutter pub get
48+
49+
- name: Setup Android signing
50+
run: |
51+
cd mobile/android
52+
echo "storePassword=${{ secrets.ANDROID_STORE_PASSWORD }}" > key.properties
53+
echo "keyPassword=${{ secrets.ANDROID_KEY_PASSWORD }}" >> key.properties
54+
echo "keyAlias=${{ secrets.ANDROID_KEY_ALIAS }}" >> key.properties
55+
echo "storeFile=../upload-keystore.jks" >> key.properties
56+
echo "${{ secrets.ANDROID_KEYSTORE_BASE64 }}" | base64 -d > upload-keystore.jks
57+
58+
- name: Update app version
59+
run: |
60+
cd mobile
61+
# Update pubspec.yaml version to use Flutter format (version+build)
62+
if [[ "$IMAGE_TAG" != "latest" ]]; then
63+
# Remove 'v' prefix if present and create build number from date
64+
VERSION_NAME=${IMAGE_TAG#v}
65+
BUILD_NUMBER=$(date +%Y%m%d)
66+
sed -i "s/^version: .*/version: ${VERSION_NAME}+${BUILD_NUMBER}/" pubspec.yaml
67+
fi
68+
69+
- name: Build APK
70+
run: |
71+
cd mobile
72+
flutter build apk --release --split-per-abi
73+
74+
# - name: Build AAB
75+
# run: |
76+
# cd mobile
77+
# flutter build appbundle --release
78+
79+
- name: Upload APK artifacts
80+
uses: actions/upload-artifact@v4
81+
with:
82+
name: android-apk-builds
83+
path: mobile/build/app/outputs/flutter-apk/*.apk
84+
85+
# - name: Upload AAB artifact
86+
# uses: actions/upload-artifact@v4
87+
# with:
88+
# name: android-aab-build
89+
# path: mobile/build/app/outputs/bundle/release/app-release.aab
90+
91+
# - name: Upload to Google Play Store
92+
# if: github.event_name == 'release'
93+
# env:
94+
# GOOGLE_PLAY_SERVICE_ACCOUNT_JSON: ${{ secrets.GOOGLE_PLAY_SERVICE_ACCOUNT_JSON }}
95+
# run: |
96+
# echo "$GOOGLE_PLAY_SERVICE_ACCOUNT_JSON" > service-account.json
97+
# # Install fastlane if needed for Play Store upload
98+
# # gem install fastlane
99+
# # fastlane supply --aab mobile/build/app/outputs/bundle/release/app-release.aab --json_key service-account.json --package_name com.gooseberrydevelopment.pinepods --track production

.github/workflows/build-fdroid.yml

Lines changed: 68 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,68 @@
1+
name: Build F-Droid APK
2+
3+
on:
4+
release:
5+
types: [published]
6+
workflow_dispatch:
7+
inputs:
8+
version:
9+
description: "Manual override version tag (optional)"
10+
required: false
11+
12+
jobs:
13+
build:
14+
name: Build F-Droid Release
15+
runs-on: ubuntu-latest
16+
permissions:
17+
contents: read
18+
19+
steps:
20+
- name: Set Image Tag
21+
run: echo "IMAGE_TAG=${{ github.event.release.tag_name || github.event.inputs.version || 'latest' }}" >> $GITHUB_ENV
22+
23+
- name: Checkout repository
24+
uses: actions/checkout@v4
25+
26+
- name: Set up JDK 17
27+
uses: actions/setup-java@v4
28+
with:
29+
java-version: "17"
30+
distribution: "temurin"
31+
32+
- name: Setup Android SDK
33+
uses: android-actions/setup-android@v3
34+
35+
- name: Setup Flutter
36+
uses: subosito/flutter-action@v2
37+
with:
38+
flutter-version: '3.32.0'
39+
channel: 'stable'
40+
41+
- name: Install dependencies
42+
run: |
43+
cd mobile
44+
flutter pub get
45+
46+
- name: Update app version
47+
run: |
48+
cd mobile
49+
# Update pubspec.yaml version
50+
if [[ "$IMAGE_TAG" != "latest" ]]; then
51+
sed -i "s/^version: .*/version: ${IMAGE_TAG#v}/" pubspec.yaml
52+
fi
53+
54+
- name: Build F-Droid APK (unsigned)
55+
run: |
56+
cd mobile
57+
flutter build apk --release
58+
59+
- name: Rename APK for F-Droid
60+
run: |
61+
cd mobile
62+
cp build/app/outputs/flutter-apk/app-release.apk build/app/outputs/flutter-apk/PinePods-fdroid-${IMAGE_TAG#v}.apk
63+
64+
- name: Upload F-Droid APK artifact
65+
uses: actions/upload-artifact@v4
66+
with:
67+
name: fdroid-apk-build
68+
path: mobile/build/app/outputs/flutter-apk/PinePods-fdroid-*.apk

0 commit comments

Comments
 (0)