Skip to content

Bump NewPipe Material release to m9 and add changelog #39

Bump NewPipe Material release to m9 and add changelog

Bump NewPipe Material release to m9 and add changelog #39

name: Build signed release APK
on:
workflow_dispatch:
inputs:
release_target:
description: "What to do with the signed release APK"
required: false
default: "artifacts"
type: choice
options:
- artifacts
- release
- all
push:
tags:
- "v*-m*"
permissions:
contents: write
jobs:
release:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v6
- name: Checkout latest PipePipeExtractor source
run: |
set -euo pipefail
mkdir -p external
if [ ! -d external/NewPipeExtractor/.git ]; then
rm -rf external/NewPipeExtractor
git init external/NewPipeExtractor
git -C external/NewPipeExtractor remote add origin https://github.com/wizdom13/PipePipeExtractor
fi
git -C external/NewPipeExtractor fetch --depth 1 origin main
git -C external/NewPipeExtractor checkout --detach FETCH_HEAD
- name: Verify PipePipeExtractor source
run: |
set -euo pipefail
git -C external/NewPipeExtractor remote -v
git -C external/NewPipeExtractor remote get-url origin | grep -q "github.com/wizdom13/PipePipeExtractor"
git -C external/NewPipeExtractor rev-parse HEAD
test -d external/NewPipeExtractor/extractor
grep -n "JavaLanguageVersion.of(21)" external/NewPipeExtractor/build.gradle
grep -n "options.release = 21" external/NewPipeExtractor/build.gradle
- name: Clean PipePipeExtractor outputs
run: |
set -euo pipefail
rm -rf external/NewPipeExtractor/build
rm -rf external/NewPipeExtractor/extractor/build
rm -rf external/NewPipeExtractor/timeago-parser/build
- uses: gradle/actions/wrapper-validation@v6
- name: Set up JDK 21
uses: actions/setup-java@v5
with:
java-version: 21
distribution: temurin
cache: gradle
- name: Verify PipePipeExtractor Java bytecode
run: |
set -euo pipefail
./gradlew -p external/NewPipeExtractor :extractor:clean :extractor:compileJava --stacktrace
javap -verbose -classpath external/NewPipeExtractor/extractor/build/classes/java/main org.schabi.newpipe.extractor.NewPipe | grep "major version: 65"
- name: Write release keystore
env:
RELEASE_KEYSTORE_BASE64: ${{ secrets.NEWPIPE_MATERIAL_RELEASE_KEYSTORE_BASE64 }}
run: |
set -euo pipefail
if [ -z "${RELEASE_KEYSTORE_BASE64}" ]; then
echo "Missing NEWPIPE_MATERIAL_RELEASE_KEYSTORE_BASE64 secret" >&2
exit 1
fi
printf '%s' "${RELEASE_KEYSTORE_BASE64}" | base64 -d > "$RUNNER_TEMP/newpipe-material-release.keystore"
- name: Build signed release APK
env:
NEWPIPE_MATERIAL_RELEASE_STORE_FILE: ${{ runner.temp }}/newpipe-material-release.keystore
NEWPIPE_MATERIAL_RELEASE_STORE_PASSWORD: ${{ secrets.NEWPIPE_MATERIAL_RELEASE_STORE_PASSWORD }}
NEWPIPE_MATERIAL_RELEASE_KEY_ALIAS: ${{ secrets.NEWPIPE_MATERIAL_RELEASE_KEY_ALIAS }}
NEWPIPE_MATERIAL_RELEASE_KEY_PASSWORD: ${{ secrets.NEWPIPE_MATERIAL_RELEASE_KEY_PASSWORD }}
run: |
set -euo pipefail
if [ -z "${NEWPIPE_MATERIAL_RELEASE_STORE_PASSWORD}" ] || \
[ -z "${NEWPIPE_MATERIAL_RELEASE_KEY_ALIAS}" ] || \
[ -z "${NEWPIPE_MATERIAL_RELEASE_KEY_PASSWORD}" ]; then
echo "Missing one or more NewPipe Material release signing secrets" >&2
exit 1
fi
./gradlew clean assembleRelease --stacktrace
- name: Verify release APK identity
run: |
set -euo pipefail
APK_PATH="$(find app/build/outputs/apk/release -name '*.apk' | head -n 1)"
test -n "$APK_PATH"
AAPT="$ANDROID_HOME/build-tools/$(ls "$ANDROID_HOME/build-tools" | sort -V | tail -n 1)/aapt"
"$AAPT" dump badging "$APK_PATH" | tee "$RUNNER_TEMP/release-apk-badging.txt"
grep -q "package: name='org.wisso.newpipematerial'" "$RUNNER_TEMP/release-apk-badging.txt"
grep -q "application-label:'NewPipe Material'" "$RUNNER_TEMP/release-apk-badging.txt"
- name: "Rename APK"
id: release_info
run: |
VERSION_NAME="$(jq -r ".elements[0].versionName" "app/build/outputs/apk/release/output-metadata.json")"
VERSION_CODE="$(jq -r ".elements[0].versionCode" "app/build/outputs/apk/release/output-metadata.json")"
RELEASE_TAG="v${VERSION_NAME}"
if [ "$GITHUB_EVENT_NAME" = "push" ] && [ "$GITHUB_REF_NAME" != "$RELEASE_TAG" ]; then
echo "Tag mismatch: pushed tag is '$GITHUB_REF_NAME' but Gradle versionName is '$VERSION_NAME' and expects tag '$RELEASE_TAG'"
exit 1
fi
APK_NAME="NewPipeMaterial_v${VERSION_NAME}.apk"
APK_PATH="app/build/outputs/apk/release/${APK_NAME}"
CHANGELOG_PATH="fastlane/metadata/android/en-US/changelogs/${VERSION_CODE}.txt"
mv app/build/outputs/apk/release/*.apk "$APK_PATH"
echo "version_name=$VERSION_NAME" >> "$GITHUB_OUTPUT"
echo "version_code=$VERSION_CODE" >> "$GITHUB_OUTPUT"
echo "release_tag=$RELEASE_TAG" >> "$GITHUB_OUTPUT"
echo "apk_name=$APK_NAME" >> "$GITHUB_OUTPUT"
echo "apk_path=$APK_PATH" >> "$GITHUB_OUTPUT"
echo "changelog_path=$CHANGELOG_PATH" >> "$GITHUB_OUTPUT"
echo "Version name: $VERSION_NAME" >> "$GITHUB_STEP_SUMMARY"
echo "Version code: $VERSION_CODE" >> "$GITHUB_STEP_SUMMARY"
echo "Release tag: $RELEASE_TAG" >> "$GITHUB_STEP_SUMMARY"
echo "Changelog: $CHANGELOG_PATH" >> "$GITHUB_STEP_SUMMARY"
- name: "Upload APK"
if: ${{ github.event_name == 'workflow_dispatch' && (inputs.release_target == 'artifacts' || inputs.release_target == 'all') }}
uses: actions/upload-artifact@v7
with:
name: newpipe-material-signed-release-apk
path: ${{ steps.release_info.outputs.apk_path }}
- name: "Validate changelog"
if: ${{ github.event_name == 'push' || (github.event_name == 'workflow_dispatch' && (inputs.release_target == 'release' || inputs.release_target == 'all')) }}
run: |
test -s "${{ steps.release_info.outputs.changelog_path }}"
- name: "Create release"
if: ${{ github.event_name == 'push' || (github.event_name == 'workflow_dispatch' && (inputs.release_target == 'release' || inputs.release_target == 'all')) }}
uses: softprops/action-gh-release@v3
with:
tag_name: ${{ github.event_name == 'push' && github.ref_name || steps.release_info.outputs.release_tag }}
target_commitish: pipe
name: NewPipe Material ${{ steps.release_info.outputs.version_name }}
body_path: ${{ steps.release_info.outputs.changelog_path }}
files: ${{ steps.release_info.outputs.apk_path }}
fail_on_unmatched_files: true
make_latest: true