1-
21# ===================================================================
32# Reusable : Can build all ABI/build-type and upload APK + mapping
4- # Read $INFO_FILE and get params:
5- # - VER_NAME (Required)
6- # - TITLE / BRANCH / PRERELEASE / NOTES (Only read when publish)
3+ # NO LONGER reads $INFO_FILE —— all params come from caller inputs
74# ===================================================================
85
9-
10-
116name : --- Reusable Action ---
127
138on :
149 workflow_call :
15-
1610 inputs :
17-
1811 abi_type :
1912 description : ' e.g. arm64-v8a'
2013 required : true
2316 description : ' debug or release'
2417 required : true
2518 type : string
26-
19+
2720 # Optional input parameters (has default value)
28-
29- override_IsPublish :
21+ override_releaseOrBuild :
3022 description : ' whether is publishing'
3123 required : false
3224 default : " false"
3325 type : string
3426 override_info_file :
35- description : ' path to $INFO_FILE (repo root relative)'
27+ description : ' path to $INFO_FILE (repo root relative) – kept for compatibility, NOT read '
3628 required : false
3729 default : ' RELEASE_INFO'
3830 type : string
39-
31+
4032 # Optional input parameters (no default value)
41-
4233 override_ver_name :
4334 description : ' '
4435 required : false
4536 type : string
46- override_short_sha :
47- description : ' '
48- required : false
49- type : string
5037 override_title :
5138 description : ' '
5239 required : false
5946 description : ' '
6047 required : false
6148 type : string
62-
63- outputs :
64- ver_name :
65- description : ' parsed or overridden VER_NAME'
66- value : ${{ jobs.build.outputs.ver_name }}
67- short_sha :
68- description : ' short SHA of the run'
69- value : ${{ jobs.build.outputs.short_sha }}
70- title :
71- description : ' parsed or overridden TITLE (Publish only)'
72- value : ${{ jobs.build.outputs.title }}
73- branch :
74- description : ' parsed BRANCH (release only)'
75- value : ${{ jobs.build.outputs.branch }}
76- prerelease :
77- description : ' parsed or overridden PRERELEASE (Publish only)'
78- value : ${{ jobs.build.outputs.prerelease }}
79- notes :
80- description : ' parsed NOTES (Publish only)'
81- value : ${{ jobs.build.outputs.notes }}
49+ override_notes :
50+ description : ' release notes body (publish only)'
51+ required : false
52+ type : string
8253
8354env :
8455 # Output configuration
@@ -90,135 +61,69 @@ env:
9061 IDE_SIGNING_KEY_PASS : android
9162 IDE_SIGNING_STORE_PASS : android
9263
93-
94- # IDE_SIGNING_AUTH_PASS: ${{ secrets.IDE_SIGNING_AUTH_PASS }}
95- # IDE_SIGNING_AUTH_USER: ${{ secrets.IDE_SIGNING_AUTH_USER }}
96- # IDE_SIGNING_URL: ${{ secrets.IDE_SIGNING_URL }}
97- # IDE_SIGNING_KEY_BIN: ${{ secrets.IDE_SIGNING_KEY_BIN }}
98- # ## Publishing credentials
99- # ORG_GRADLE_PROJECT_mavenCentralUsername: ${{ secrets.MVN_USERNAME }}
100- # ORG_GRADLE_PROJECT_mavenCentralPassword: ${{ secrets.MVN_PASSWORD }}
101- # ORG_GRADLE_PROJECT_signingInMemoryKey: ${{ secrets.MVN_SIGNING_KEY }}
102- # ORG_GRADLE_PROJECT_signingInMemoryKeyId: ${{ secrets.MVN_SIGNING_KEY_ID }}
103- # ORG_GRADLE_PROJECT_signingInMemoryKeyPassword: ${{ secrets.MVN_SIGNING_KEY_PASSWORD }}
104- # ## Build configuration
105- # BUILD_IS_RELEASE: ${{ github.ref == 'refs/heads/main' || github.ref == 'refs/heads/release/**' }}
106- # ReleaseAndroidIDE: ${{ github.ref == 'refs/heads/main' }}
107-
10864jobs :
10965 build :
11066 name : Build APK (${{ inputs.abi_type }},${{ inputs.build_type }})
11167 # runs-on: ubuntu-latest
11268 runs-on : ${{ fromJSON('["ubuntu-latest", "self-hosted"]')[github.repository == 'github/docs-internal'] }}
11369 outputs :
114- ver_name : ${{ steps.info .outputs.ver_name }}
115- short_sha : ${{ steps.info .outputs.short_sha }}
116- title : ${{ steps.info .outputs.title }}
117- branch : ${{ steps.info .outputs.branch }}
118- prerelease : ${{ steps.info .outputs.prerelease }}
119- notes : ${{ steps.info .outputs.notes }}
70+ ver_name : ${{ steps.params .outputs.ver_name }}
71+ short_sha : ${{ steps.params .outputs.short_sha }}
72+ title : ${{ steps.params .outputs.title }}
73+ branch : ${{ steps.params .outputs.branch }}
74+ prerelease : ${{ steps.params .outputs.prerelease }}
75+ notes : ${{ steps.params .outputs.notes }}
12076
12177 steps :
122-
123- - name : Checkout Code
124- uses : actions/checkout@v4
125- with :
126- submodules : recursive
127- # Only Read The Last 1 Commit
128- fetch-depth : 1
129-
130- - name : Read & Parse INFO_FILE
131- id : info
78+ # ---------- 0. get caller inputs ----------
79+ - name : Export caller inputs
80+ id : params
13281 shell : bash
13382 run : |
134- set -euo pipefail
135- INFO_FILE="${{ inputs.override_info_file }}"
136-
137- SHA="${{ inputs.override_short_sha }}"
138- if [ -z "$SHA" ]; then
139- SHA="${GITHUB_SHA::7}"
140- fi
141- echo "short_sha=$SHA" >> $GITHUB_OUTPUT
142-
143- # Read file
144- CONTENT=$(sed "s/shortSHA/${GITHUB_SHA::7}/g" "$INFO_FILE")
83+ # ---- Common ----
84+ VER_NAME='${{ inputs.override_ver_name }}'
85+ #[ -z "$VER_NAME" ] && { echo "$VER_NAME missing or empty"; exit 1; }
86+ SHA="${GITHUB_SHA::7}"
87+ echo "ver_name=$VER_NAME" >> $GITHUB_OUTPUT
88+ echo "short_sha=$SHA" >> $GITHUB_OUTPUT
14589
146- # --------------- Common ---------------
147-
148- VER_NAME="${{ inputs.override_ver_name }}"
149- if [ -z "$VER_NAME" ]; then
150- VER_NAME=$(echo "$CONTENT" | grep '^VER_NAME=' | cut -d= -f2- | tr -d '[:space:]')
151- if [ -z "$VER_NAME" ]; then
152- echo "VER_NAME missing or empty"
153- exit 1
154- fi
155- fi
156- echo "ver_name=$VER_NAME" >> $GITHUB_OUTPUT
157-
158- if [ "${{ inputs.override_IsPublish }}" == "true" ]; then
90+ PRERELEASE='${{ inputs.override_prerelease }}'
91+ echo "prerelease=$PRERELEASE" >> $GITHUB_OUTPUT
92+
93+ if [ "$PRERELEASE" = "false" ]; then
15994 VER_SUFFIX=""
160- elif [ " ${{ inputs.build_type }}" = = "release" ]; then
161- VER_SUFFIX=-dev-" $SHA"
95+ elif [ ' ${{ inputs.build_type }}' = "release" ]; then
96+ VER_SUFFIX=" -dev-$SHA"
16297 else
163- VER_SUFFIX=-devDebug-" $SHA"
98+ VER_SUFFIX=" -devDebug-$SHA"
16499 fi
165100 echo "ver_suffix=$VER_SUFFIX" >> $GITHUB_OUTPUT
166-
167- # --------------- Publish Only ---------------
168- if [ "${{ inputs.override_IsPublish }}" == "true" ]; then
169-
170- TITLE_SUFFIX=" $SHA"
171- TITLE="${{ inputs.override_title }}"
172- if [ -z "$TITLE" ]; then
173- TITLE=$(echo "$CONTENT" | grep '^TITLE=' | cut -d= -f2- | tr -d '[:space:]')
174- if [ -z "$TITLE" ]; then
175- TITLE="${VER_NAME}${TITLE_SUFFIX}"
176- fi
177- fi
178- echo "title=$TITLE" >> $GITHUB_OUTPUT
179-
180- BRANCH="${{ inputs.override_branch }}"
181- if [ -z "$BRANCH" ]; then
182- BRANCH=$(echo "$CONTENT" | grep '^BRANCH=' | cut -d= -f2- | tr -d '[:space:]')
183- if [ -z "$BRANCH" ]; then
184- echo "BRANCH missing or empty"
185- exit 1
186- fi
187- fi
188- echo "branch=$BRANCH" >> $GITHUB_OUTPUT
189101
190- PRERELEASE="${{ inputs.override_prerelease }}"
191- if [ -z "$PRERELEASE" ]; then
192- PRERELEASE=$(echo "$CONTENT" | grep '^PRERELEASE=' | cut -d= -f2- | tr -d '[:space:]')
193- if [ -z "$PRERELEASE" ]; then
194- PRERELEASE="true"
195- fi
196- fi
197- echo "prerelease=$PRERELEASE" >> $GITHUB_OUTPUT
198-
199- NOTES=$(echo "$CONTENT" | awk 'BEGIN{f=0} /^NOTES=/{f=1; sub(/^NOTES=/,""); print; next} f' || true)
200- [ -z "$NOTES" ] && { echo "NOTES missing or empty"; exit 1; }
201-
202- # Write File Safely
102+ # ---- Publish Only ----
103+ if [ '${{ inputs.override_releaseOrBuild }}' = "true" ]; then
104+ TITLE='${{ inputs.override_title }}'
105+ #[ -z "$TITLE" ] && TITLE="${VER_NAME} dev$(date +%Y%m%d)"
106+ echo "title=$TITLE" >> $GITHUB_OUTPUT
107+
108+ BRANCH='${{ inputs.override_branch }}'
109+ #[ -z "$BRANCH" ] && { echo "BRANCH missing or empty"; exit 1; }
110+ echo "branch=$BRANCH" >> $GITHUB_OUTPUT
111+
112+ NOTES='${{ inputs.override_notes }}'
113+ #[ -z "$NOTES" ] && { echo "NOTES missing or empty"; exit 1; }
203114 echo "notes<<EOF" >> $GITHUB_OUTPUT
204115 echo "$NOTES" >> $GITHUB_OUTPUT
205116 echo "EOF" >> $GITHUB_OUTPUT
206117 fi
207118
208- # ---------- Print Params ----------
209- echo ">>>> $INFO_FILE parsed:"
210- echo " ver_name : $VER_NAME"
211- echo " ver_suffix: $VER_SUFFIX"
212- echo " short_sha: $SHA"
213-
214- if [ "${{ inputs.override_IsPublish }}" == "true" ]; then
215- echo " title : $TITLE"
216- echo " branch : $BRANCH"
217- echo " prerelease: $PRERELEASE"
218- echo " notes len : $(echo -n "$NOTES" | wc -c)"
219- fi
220-
221- # ---------- JDK & Gradle ----------
119+ # ---------- 1. checkout ----------
120+ - name : Checkout Code
121+ uses : actions/checkout@v4
122+ with :
123+ submodules : recursive
124+ fetch-depth : 1
125+
126+ # ---------- 2. JDK & Gradle ----------
222127 - name : Set Up JDK
223128 uses : actions/setup-java@v4
224129 with :
@@ -239,39 +144,40 @@ jobs:
239144 restore-keys : |
240145 ${{ runner.os }}-gradle-
241146
242- # ---------- Build APK ----------
147+ # ---------- 3. build ----------
243148 - name : Build ${{ inputs.build_type }} APK
244149 run : |
245150 ./gradlew :core:app:assemble${{ inputs.build_type }} \
246- -PversionSuffix="${{ steps.info .outputs.ver_suffix }}" \
247- -PbaseVersion="${{ steps.info .outputs.ver_name }}"
151+ -PversionSuffix="${{ steps.params .outputs.ver_suffix }}" \
152+ -PbaseVersion="${{ steps.params .outputs.ver_name }}"
248153
249154 - name : Show APK_OUTPUT_DIR
250155 run : ls -laR ${{ env.APK_OUTPUT_DIR }}
251156
252- # ---------- Copy & Rename Files ----------
157+ # ---------- 4. get artifact ----------
253158 - name : Copy & Rename APK
254159 run : |
255160 mkdir -p ${{ env.ARTIFACT_OUTPUT_DIR }}${{ inputs.abi_type }}
256- SRC=${{ env.APK_OUTPUT_DIR }}${{ inputs.build_type }}/app-${{ inputs.abi_type }}-${{ inputs.build_type }}.apk
257- DST=${{ env.ARTIFACT_OUTPUT_DIR }}${{ inputs.abi_type }}/AndroIDE-${{ inputs.abi_type }}-${{ steps.info.outputs.ver_name }}${{ steps.info.outputs.ver_suffix }}.apk
161+ SRC=$(find "$APK_OUTPUT_DIR" -name "app-${{ inputs.abi_type }}-${{ inputs.build_type }}.apk" | head -n 1)
162+ [ -z "$SRC" ] && { echo "APK file not found (abi: ${{ inputs.abi_type }}, build: ${{ inputs.build_type }}) at path:$APK_OUTPUT_DIR"; exit 1; }
163+ #SRC=${{ env.APK_OUTPUT_DIR }}${{ inputs.build_type }}/app-${{ inputs.abi_type }}-${{ inputs.build_type }}.apk
164+ DST=${{ env.ARTIFACT_OUTPUT_DIR }}${{ inputs.abi_type }}/AndroIDE-${{ inputs.abi_type }}-${{ steps.params.outputs.ver_name }}${{ steps.params.outputs.ver_suffix }}.apk
258165 cp "$SRC" "$DST"
259166 sha256sum "$DST" > "$DST.sha256"
260167
261168 - name : Show Artifact Tree
262169 run : ls -laR ${{ env.ARTIFACT_OUTPUT_DIR }}
263170
264- # ---------- Upload Files ----------
171+ # ---------- 5. upload ----------
265172 - name : Upload APK Artifact
266173 uses : actions/upload-artifact@v4
267174 with :
268- name : AndroIDE-${{ inputs.abi_type }}-${{ steps.info .outputs.ver_name }}${{ steps.info .outputs.ver_suffix }}
175+ name : AndroIDE-${{ inputs.abi_type }}-${{ steps.params .outputs.ver_name }}${{ steps.params .outputs.ver_suffix }}
269176 path : ${{ env.ARTIFACT_OUTPUT_DIR }}${{ inputs.abi_type }}/*
270177
271- - name : Upload Mapping (release only, not debug )
178+ - name : Upload Mapping (release only)
272179 if : ${{ inputs.build_type == 'release' }}
273180 uses : actions/upload-artifact@v4
274181 with :
275- name : release-mappings-${{ steps.info .outputs.short_sha }}
182+ name : release-mappings-${{ steps.params .outputs.short_sha }}
276183 path : ' **/build/outputs/mapping'
277-
0 commit comments