1- name : " Build signed release APK on material "
1+ name : Build signed release APK
22
33on :
44 workflow_dispatch :
@@ -22,57 +22,90 @@ permissions:
2222jobs :
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 }}
0 commit comments