Skip to content

Commit 6d511f2

Browse files
committed
Reform release building
1 parent 92cdfc2 commit 6d511f2

3 files changed

Lines changed: 58 additions & 27 deletions

File tree

.github/workflows/build-release-apk.yml

Lines changed: 55 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
name: "Build signed release APK on material"
1+
name: Build signed release APK
22

33
on:
44
workflow_dispatch:
@@ -22,57 +22,90 @@ permissions:
2222
jobs:
2323
release:
2424
runs-on: ubuntu-latest
25+
2526
steps:
2627
- uses: actions/checkout@v6
2728

28-
- name: Checkout PipePipeExtractor source
29+
- name: Checkout latest PipePipeExtractor source
2930
run: |
3031
set -euo pipefail
31-
# Temporary experiment: keep the checkout path stable while sourcing PipePipeExtractor.
3232
mkdir -p external
3333
if [ ! -d external/NewPipeExtractor/.git ]; then
3434
rm -rf external/NewPipeExtractor
3535
git init external/NewPipeExtractor
3636
git -C external/NewPipeExtractor remote add origin https://github.com/wizdom13/PipePipeExtractor
3737
fi
38-
git -C external/NewPipeExtractor fetch --depth 1 origin 3b2af63f1f53e87292247ce6603be1e642c1a1aa
38+
git -C external/NewPipeExtractor fetch --depth 1 origin main
3939
git -C external/NewPipeExtractor checkout --detach FETCH_HEAD
4040
4141
- name: Verify PipePipeExtractor source
4242
run: |
43+
set -euo pipefail
4344
git -C external/NewPipeExtractor remote -v
44-
test "$(git -C external/NewPipeExtractor rev-parse HEAD)" = "3b2af63f1f53e87292247ce6603be1e642c1a1aa"
4545
git -C external/NewPipeExtractor remote get-url origin | grep -q "github.com/wizdom13/PipePipeExtractor"
46+
git -C external/NewPipeExtractor rev-parse HEAD
4647
test -d external/NewPipeExtractor/extractor
48+
grep -n "JavaLanguageVersion.of(21)" external/NewPipeExtractor/build.gradle
49+
grep -n "options.release = 21" external/NewPipeExtractor/build.gradle
50+
51+
- name: Clean PipePipeExtractor outputs
52+
run: |
53+
set -euo pipefail
54+
rm -rf external/NewPipeExtractor/build
55+
rm -rf external/NewPipeExtractor/extractor/build
56+
rm -rf external/NewPipeExtractor/timeago-parser/build
4757
48-
- uses: actions/setup-java@v5
58+
- uses: gradle/actions/wrapper-validation@v6
59+
60+
- name: Set up JDK 21
61+
uses: actions/setup-java@v5
4962
with:
50-
distribution: "temurin"
51-
java-version: "21"
52-
cache: "gradle"
63+
java-version: 21
64+
distribution: temurin
65+
cache: gradle
66+
67+
- name: Verify PipePipeExtractor Java bytecode
68+
run: |
69+
set -euo pipefail
70+
./gradlew -p external/NewPipeExtractor :extractor:clean :extractor:compileJava --stacktrace
71+
javap -verbose -classpath external/NewPipeExtractor/extractor/build/classes/java/main org.schabi.newpipe.extractor.NewPipe | grep "major version: 65"
5372
54-
- name: "Prepare release keystore"
73+
- name: Write release keystore
5574
env:
5675
RELEASE_KEYSTORE_BASE64: ${{ secrets.NEWPIPE_MATERIAL_RELEASE_KEYSTORE_BASE64 }}
5776
run: |
58-
test -n "$RELEASE_KEYSTORE_BASE64"
59-
mkdir -p "$RUNNER_TEMP/keystore"
60-
printf '%s' "$RELEASE_KEYSTORE_BASE64" | base64 --decode > "$RUNNER_TEMP/keystore/newpipe-material-release.jks"
77+
set -euo pipefail
78+
if [ -z "${RELEASE_KEYSTORE_BASE64}" ]; then
79+
echo "Missing NEWPIPE_MATERIAL_RELEASE_KEYSTORE_BASE64 secret" >&2
80+
exit 1
81+
fi
82+
printf '%s' "${RELEASE_KEYSTORE_BASE64}" | base64 -d > "$RUNNER_TEMP/newpipe-material-release.keystore"
6183
62-
- name: "Build signed release APK"
84+
- name: Build signed release APK
6385
env:
64-
NEWPIPE_MATERIAL_RELEASE_STORE_FILE: ${{ runner.temp }}/keystore/newpipe-material-release.jks
86+
NEWPIPE_MATERIAL_RELEASE_STORE_FILE: ${{ runner.temp }}/newpipe-material-release.keystore
6587
NEWPIPE_MATERIAL_RELEASE_STORE_PASSWORD: ${{ secrets.NEWPIPE_MATERIAL_RELEASE_STORE_PASSWORD }}
6688
NEWPIPE_MATERIAL_RELEASE_KEY_ALIAS: ${{ secrets.NEWPIPE_MATERIAL_RELEASE_KEY_ALIAS }}
6789
NEWPIPE_MATERIAL_RELEASE_KEY_PASSWORD: ${{ secrets.NEWPIPE_MATERIAL_RELEASE_KEY_PASSWORD }}
68-
run: ./gradlew assembleRelease --stacktrace
90+
run: |
91+
set -euo pipefail
92+
if [ -z "${NEWPIPE_MATERIAL_RELEASE_STORE_PASSWORD}" ] || \
93+
[ -z "${NEWPIPE_MATERIAL_RELEASE_KEY_ALIAS}" ] || \
94+
[ -z "${NEWPIPE_MATERIAL_RELEASE_KEY_PASSWORD}" ]; then
95+
echo "Missing one or more NewPipe Material release signing secrets" >&2
96+
exit 1
97+
fi
98+
./gradlew clean assembleRelease --stacktrace
6999
70-
- name: "Verify APK signature"
100+
- name: Verify release APK identity
71101
run: |
102+
set -euo pipefail
72103
APK_PATH="$(find app/build/outputs/apk/release -name '*.apk' | head -n 1)"
73104
test -n "$APK_PATH"
74-
APKSIGNER="$ANDROID_HOME/build-tools/$(ls "$ANDROID_HOME/build-tools" | sort -V | tail -n 1)/apksigner"
75-
"$APKSIGNER" verify --verbose --print-certs "$APK_PATH"
105+
AAPT="$ANDROID_HOME/build-tools/$(ls "$ANDROID_HOME/build-tools" | sort -V | tail -n 1)/aapt"
106+
"$AAPT" dump badging "$APK_PATH" | tee "$RUNNER_TEMP/release-apk-badging.txt"
107+
grep -q "package: name='org.wisso.newpipematerial'" "$RUNNER_TEMP/release-apk-badging.txt"
108+
grep -q "application-label:'NewPipe Material'" "$RUNNER_TEMP/release-apk-badging.txt"
76109
77110
- name: "Rename APK"
78111
id: release_info
@@ -112,16 +145,16 @@ jobs:
112145
path: ${{ steps.release_info.outputs.apk_path }}
113146

114147
- name: "Validate changelog"
115-
if: ${{ github.event_name == 'push' || inputs.release_target == 'release' || inputs.release_target == 'all' }}
148+
if: ${{ github.event_name == 'push' || (github.event_name == 'workflow_dispatch' && (inputs.release_target == 'release' || inputs.release_target == 'all')) }}
116149
run: |
117150
test -s "${{ steps.release_info.outputs.changelog_path }}"
118151
119152
- name: "Create release"
120-
if: ${{ github.event_name == 'push' || inputs.release_target == 'release' || inputs.release_target == 'all' }}
153+
if: ${{ github.event_name == 'push' || (github.event_name == 'workflow_dispatch' && (inputs.release_target == 'release' || inputs.release_target == 'all')) }}
121154
uses: softprops/action-gh-release@v3
122155
with:
123156
tag_name: ${{ github.event_name == 'push' && github.ref_name || steps.release_info.outputs.release_tag }}
124-
target_commitish: material
157+
target_commitish: pipe
125158
name: NewPipe Material ${{ steps.release_info.outputs.version_name }}
126159
body_path: ${{ steps.release_info.outputs.changelog_path }}
127160
files: ${{ steps.release_info.outputs.apk_path }}

.github/workflows/ci.yml

Lines changed: 0 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -90,11 +90,6 @@ jobs:
9090
./gradlew -p external/NewPipeExtractor :extractor:clean :extractor:compileJava --stacktrace
9191
javap -verbose -classpath external/NewPipeExtractor/extractor/build/classes/java/main org.schabi.newpipe.extractor.NewPipe | grep "major version: 65"
9292
93-
- name: Verify TabsJsonHelper nanojson compatibility
94-
run: |
95-
! grep -R "has(JSON_TABS_ARRAY_KEY)" app/src/main/java app/src/test/java
96-
grep -R "containsKey(JSON_TABS_ARRAY_KEY)" app/src/main/java/org/schabi/newpipe/settings/tabs/TabsJsonHelper.java
97-
9893
- name: Build debug APK and run jvm tests
9994
run: ./gradlew clean assembleDebug lintDebug testDebugUnitTest --stacktrace -DskipFormatKtlint
10095

app/proguard-rules.pro

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,9 @@
2424
-dontwarn okhttp3.**
2525
-dontwarn okio.**
2626

27+
## SLF4J looks for an optional runtime binding class. The app does not ship one.
28+
-dontwarn org.slf4j.impl.StaticLoggerBinder
29+
2730
## See https://github.com/TeamNewPipe/NewPipe/pull/1441
2831
-keepclassmembers class * implements java.io.Serializable {
2932
static final long serialVersionUID;

0 commit comments

Comments
 (0)