Skip to content

Commit 748af5f

Browse files
authored
optimized github actions (#33)
* 更新 README.md * increased version code * optimized version control * optimized github action(s) * optimized github action(s) * optimized github action(s)
1 parent 1ba2e85 commit 748af5f

6 files changed

Lines changed: 123 additions & 200 deletions

File tree

Lines changed: 63 additions & 157 deletions
Original file line numberDiff line numberDiff line change
@@ -1,20 +1,13 @@
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-
116
name: --- Reusable Action ---
127

138
on:
149
workflow_call:
15-
1610
inputs:
17-
1811
abi_type:
1912
description: 'e.g. arm64-v8a'
2013
required: true
@@ -23,30 +16,24 @@ on:
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
@@ -59,26 +46,10 @@ on:
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

8354
env:
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-
10864
jobs:
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-

.github/workflows/build.yml

Lines changed: 22 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -16,16 +16,36 @@ concurrency:
1616
cancel-in-progress: true
1717

1818
jobs:
19+
read_info:
20+
#runs-on: ubuntu-latest
21+
runs-on: ${{ fromJSON('["ubuntu-latest", "self-hosted"]')[github.repository == 'github/docs-internal'] }}
22+
outputs:
23+
ver_name: ${{ steps.info.outputs.ver_name }}
24+
steps:
25+
26+
- name: Checkout
27+
uses: actions/checkout@v4
28+
29+
- name: Extract VER_NAME
30+
id: info
31+
run: |
32+
VER_NAME=$(grep '^VER_NAME=' RELEASE_INFO | cut -d= -f2- | tr -d '[:space:]')
33+
[ -z "$VER_NAME" ] && { echo "$VER_NAME missing or empty"; exit 1; }
34+
echo "ver_name=$VER_NAME" >> $GITHUB_OUTPUT
35+
1936
build_matrix:
37+
needs: read_info
2038
strategy:
2139
fail-fast: false
2240
matrix:
2341
abi_type: ['arm64-v8a']
2442
#abi_type: ['arm64-v8a', 'armeabi-v7a', 'x86_64']
25-
build_type: ['release']
26-
#build_type: ['release', 'debug']
43+
#build_type: ['release']
44+
build_type: ['release', 'debug']
2745
uses: ./.github/workflows/_build-apk-reusable.yml
2846
with:
2947
abi_type: ${{ matrix.abi_type }}
3048
build_type: ${{ matrix.build_type }}
49+
override_ver_name: ${{ needs.read_info.outputs.ver_name }}
50+
override_releaseOrBuild: false
3151

0 commit comments

Comments
 (0)