-
Notifications
You must be signed in to change notification settings - Fork 9
127 lines (113 loc) Β· 4.65 KB
/
deploy-google-play.yml
File metadata and controls
127 lines (113 loc) Β· 4.65 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
name: Deploy to Google Play
# Bypasses broken Google Play Console UI by using the Developer API directly.
# Requires a Google Play service account JSON added as repository secret
# GOOGLE_PLAY_SERVICE_ACCOUNT_JSON (see setup instructions below).
#
# Setup:
# 1. Play Console β Setup β API access β Link Google Cloud project
# 2. Create service account β Grant "Release Manager" role in Play Console
# 3. Download JSON key β add as GitHub secret GOOGLE_PLAY_SERVICE_ACCOUNT_JSON
on:
workflow_dispatch:
inputs:
track:
description: 'Release track'
required: true
default: 'internal'
type: choice
options:
- internal
- alpha
- beta
- production
rollout_percentage:
description: 'Rollout % for production track (1-100, ignored for other tracks)'
required: false
default: '10'
status:
description: 'Release status'
required: true
default: 'completed'
type: choice
options:
- completed
- draft
permissions:
contents: read
jobs:
deploy:
name: Build AAB & Deploy (${{ inputs.track }})
runs-on: ubuntu-latest
steps:
- name: Checkout code
uses: actions/checkout@v4
- name: Setup Java
uses: actions/setup-java@v4
with:
distribution: 'temurin'
java-version: '17'
- name: Setup Gradle
uses: gradle/actions/setup-gradle@v4
- name: Extract version info
id: version
run: |
VERSION_NAME=$(grep 'versionName = ' android/app/build.gradle.kts | sed 's/.*versionName = "\(.*\)".*/\1/')
VERSION_CODE=$(grep 'versionCode = ' android/app/build.gradle.kts | sed 's/.*versionCode = \([0-9]*\).*/\1/')
echo "VERSION_NAME=$VERSION_NAME" >> $GITHUB_OUTPUT
echo "VERSION_CODE=$VERSION_CODE" >> $GITHUB_OUTPUT
echo "Building v$VERSION_NAME (Code: $VERSION_CODE) β track: ${{ inputs.track }}"
- name: Calculate rollout fraction (production only)
id: rollout
run: |
if [ "${{ inputs.track }}" = "production" ]; then
FRACTION=$(echo "scale=4; ${{ inputs.rollout_percentage }} / 100" | bc)
echo "USER_FRACTION=$FRACTION" >> $GITHUB_OUTPUT
echo "Production rollout: ${{ inputs.rollout_percentage }}% β fraction $FRACTION"
else
echo "USER_FRACTION=" >> $GITHUB_OUTPUT
echo "Non-production track: no rollout fraction"
fi
- name: Configure Android signing
run: |
echo "${{ secrets.KEYSTORE_BASE64 }}" | base64 -d > android/app/simple-notes-release.jks
echo "storePassword=${{ secrets.KEYSTORE_PASSWORD }}" > android/key.properties
echo "keyPassword=${{ secrets.KEY_PASSWORD }}" >> android/key.properties
echo "keyAlias=${{ secrets.KEY_ALIAS }}" >> android/key.properties
echo "storeFile=simple-notes-release.jks" >> android/key.properties
- name: Build release AAB (standard flavor)
run: |
cd android
./gradlew bundleStandardRelease --no-daemon --stacktrace
- name: Locate AAB
id: aab
run: |
AAB_PATH=$(find android/app/build/outputs/bundle/standardRelease -name "*.aab" | head -1)
echo "AAB_PATH=$AAB_PATH" >> $GITHUB_OUTPUT
echo "Found AAB: $AAB_PATH ($(du -sh "$AAB_PATH" | cut -f1))"
- name: Upload to Google Play
uses: r0adkll/upload-google-play@v1
with:
serviceAccountJsonPlainText: ${{ secrets.GOOGLE_PLAY_SERVICE_ACCOUNT_JSON }}
packageName: dev.dettmer.simplenotes
releaseFiles: ${{ steps.aab.outputs.AAB_PATH }}
track: ${{ inputs.track }}
status: ${{ inputs.status }}
inAppUpdatePriority: 0
userFraction: ${{ steps.rollout.outputs.USER_FRACTION }}
whatsNewDirectory: fastlane/metadata/android
mappingFile: android/app/build/outputs/mapping/standardRelease/mapping.txt
- name: Summary
run: |
{
echo "### Deployment successful"
echo ""
echo "| | |"
echo "|---|---|"
echo "| Package | \`dev.dettmer.simplenotes\` |"
echo "| Version | ${{ steps.version.outputs.VERSION_NAME }} (Code ${{ steps.version.outputs.VERSION_CODE }}) |"
echo "| Track | ${{ inputs.track }} |"
echo "| Status | ${{ inputs.status }} |"
if [ "${{ inputs.track }}" = "production" ]; then
echo "| Rollout | ${{ inputs.rollout_percentage }}% |"
fi
} >> $GITHUB_STEP_SUMMARY