Skip to content

Commit 55830ce

Browse files
ci(android): publish installable PR artifacts
1 parent 93d22f8 commit 55830ce

4 files changed

Lines changed: 72 additions & 6 deletions

File tree

.github/workflows/android.yml

Lines changed: 53 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -93,27 +93,74 @@ jobs:
9393
test -n "${VERSION_NAME}"
9494
test "v${VERSION_NAME}" = "${GITHUB_REF_NAME}"
9595
96+
- name: Select APK variant and artifact identity
97+
id: apk
98+
shell: bash
99+
env:
100+
PR_NUMBER: ${{ github.event.pull_request.number }}
101+
PR_HEAD_SHA: ${{ github.event.pull_request.head.sha }}
102+
run: |
103+
if [[ "${GITHUB_REF}" == refs/tags/v* ]]; then
104+
VARIANT="release"
105+
LINT_TASK="lintRelease"
106+
ASSEMBLE_TASK="assembleRelease"
107+
APK_PATH="app/build/outputs/apk/release/app-release.apk"
108+
ARTIFACT_NAME="udroid-${GITHUB_REF_NAME}-prerelease"
109+
elif [[ "${GITHUB_EVENT_NAME}" == "pull_request" ]]; then
110+
test -n "${PR_NUMBER}"
111+
test -n "${PR_HEAD_SHA}"
112+
VARIANT="dev"
113+
LINT_TASK="lintDev"
114+
ASSEMBLE_TASK="assembleDev"
115+
APK_PATH="app/build/outputs/apk/dev/app-dev.apk"
116+
ARTIFACT_NAME="udroid-pr-${PR_NUMBER}-${PR_HEAD_SHA:0:7}-dev"
117+
else
118+
VARIANT="dev"
119+
LINT_TASK="lintDev"
120+
ASSEMBLE_TASK="assembleDev"
121+
APK_PATH="app/build/outputs/apk/dev/app-dev.apk"
122+
ARTIFACT_NAME="udroid-${GITHUB_REF_NAME//\//-}-${GITHUB_SHA:0:7}-dev"
123+
fi
124+
125+
if [[ ! "${ARTIFACT_NAME}" =~ ^[A-Za-z0-9._-]+$ ]]; then
126+
echo "Unsafe artifact name: ${ARTIFACT_NAME}" >&2
127+
exit 1
128+
fi
129+
130+
echo "variant=${VARIANT}" >> "${GITHUB_OUTPUT}"
131+
echo "lint_task=${LINT_TASK}" >> "${GITHUB_OUTPUT}"
132+
echo "assemble_task=${ASSEMBLE_TASK}" >> "${GITHUB_OUTPUT}"
133+
echo "apk_path=${APK_PATH}" >> "${GITHUB_OUTPUT}"
134+
echo "artifact_name=${ARTIFACT_NAME}" >> "${GITHUB_OUTPUT}"
135+
echo "asset_name=${ARTIFACT_NAME}.apk" >> "${GITHUB_OUTPUT}"
136+
96137
- name: Test, lint, and assemble optimized APK
97-
run: ./gradlew --no-daemon testDebugUnitTest lintDebug assembleRelease
138+
run: >-
139+
./gradlew --no-daemon
140+
testDebugUnitTest
141+
${{ steps.apk.outputs.lint_task }}
142+
${{ steps.apk.outputs.assemble_task }}
98143
99144
- name: Verify embedded X11 release JNI contract
100-
run: tools/verify-release-jni-contract.sh app/build/outputs/apk/release/app-release.apk
145+
run: tools/verify-release-jni-contract.sh "${{ steps.apk.outputs.apk_path }}"
101146

102147
- name: Package release assets
103148
shell: bash
149+
env:
150+
APK_PATH: ${{ steps.apk.outputs.apk_path }}
151+
ASSET_NAME: ${{ steps.apk.outputs.asset_name }}
104152
run: |
105153
mkdir -p release-assets
106-
cp app/build/outputs/apk/release/app-release.apk \
107-
"release-assets/udroid-${GITHUB_REF_NAME}-prerelease.apk"
154+
cp "${APK_PATH}" "release-assets/${ASSET_NAME}"
108155
(
109156
cd release-assets
110-
sha256sum "udroid-${GITHUB_REF_NAME}-prerelease.apk" > SHA256SUMS
157+
sha256sum "${ASSET_NAME}" > SHA256SUMS
111158
)
112159
113160
- name: Upload APK artifact
114161
uses: actions/upload-artifact@v7
115162
with:
116-
name: udroid-${{ github.ref_name }}-prerelease
163+
name: ${{ steps.apk.outputs.artifact_name }}
117164
path: release-assets/*
118165
if-no-files-found: error
119166
retention-days: 30

README.md

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -72,6 +72,14 @@ contains:
7272
- GitHub's source archives, including the vendored Termux terminal components
7373
and the corresponding third-party notices.
7474

75+
Pull requests and non-tag workflow runs publish a separate optimized
76+
`uDroid Dev` APK for 30 days. It uses the `org.randomcoder.udroid.dev`
77+
application ID and the Android debug key, so it can be installed beside the
78+
update-signed app without replacing it. PR artifacts are named with the pull
79+
request number and head commit, for example `udroid-pr-24-cf9c1ed-dev.apk`.
80+
They are test artifacts and cannot update either the official app or another
81+
machine's debug build.
82+
7583
The published `v0.0.2` APK predates stable update signing and retains its
7684
original debug asset name. It is a development build, not a Play Store or
7785
production-signed release:

app/build.gradle.kts

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -80,6 +80,13 @@ android {
8080
"proguard-rules.pro",
8181
)
8282
}
83+
create("dev") {
84+
initWith(getByName("release"))
85+
applicationIdSuffix = ".dev"
86+
versionNameSuffix = "+dev"
87+
signingConfig = signingConfigs.getByName("debug")
88+
matchingFallbacks += "release"
89+
}
8390
create("probe") {
8491
initWith(getByName("debug"))
8592
applicationIdSuffix = ".ociprobe"

app/src/dev/res/values/strings.xml

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
<?xml version="1.0" encoding="utf-8"?>
2+
<resources>
3+
<string name="app_name">uDroid Dev</string>
4+
</resources>

0 commit comments

Comments
 (0)