Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
472 changes: 72 additions & 400 deletions README.md

Large diffs are not rendered by default.

6 changes: 0 additions & 6 deletions app/src/test/java/com/papi/nova/NovaReleaseMetadataTest.kt
Original file line number Diff line number Diff line change
@@ -1,7 +1,6 @@
package com.papi.nova

import java.io.File
import org.junit.Assert.assertFalse
import org.junit.Assert.assertTrue
import org.junit.Test

Expand All @@ -16,7 +15,6 @@ class NovaReleaseMetadataTest {
val root = repoRoot()
val build = File(root, "app/build.gradle").readText()
val changelog = File(root, "CHANGELOG.md").readText()
val readme = File(root, "README.md").readText()
val releaseScript = File(root, "bin/release.sh").readText()
val storeNotes = File(
root,
Expand All @@ -27,10 +25,6 @@ class NovaReleaseMetadataTest {
assertTrue(build.contains("versionName \"1.3.6\""))
assertTrue(build.contains("versionCode = 38"))
assertTrue(changelog.contains("## 1.3.6 - 2026-08-12"))
assertTrue(readme.contains("[Latest Release](#latest-release-v136)"))
assertTrue(readme.contains("## Latest release: v1.3.6"))
assertTrue(readme.contains("VersionCode 38"))
assertFalse(readme.contains("## Latest release: v1.3.5"))
assertTrue(releaseScript.contains("-PnovaAbis=arm64-v8a,armeabi-v7a,x86_64"))
for (asset in listOf(
"Nova-Android-arm64-v8a.apk",
Expand Down
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
38 changes: 31 additions & 7 deletions scripts/check-public-docs.sh
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,30 @@ root = Path.cwd()
readme = root / "README.md"
text = readme.read_text(encoding="utf-8")

if len(re.findall(r"\b[\w'-]+\b", text)) >= 1800:
print("README must remain below 1,800 words", file=sys.stderr)
sys.exit(1)
if re.search(r"(?im)^#{1,6}\s+.*(?:what(?:'s| is) new|latest release|release)\s*:?.*v\d", text):
print("README must not duplicate a version-specific release section", file=sys.stderr)
sys.exit(1)

required_links = (
"https://papi-ux.com/nova/",
"https://papi-ux.com/nova/#themes",
"https://papi-ux.com/docs/nova/",
"https://papi-ux.com/docs/nova/quickstart/",
"https://papi-ux.com/docs/nova/compatibility/",
"https://papi-ux.com/docs/roadmap/",
"https://github.com/papi-ux/nova/releases/latest",
"CHANGELOG.md",
"SECURITY.md",
".github/CONTRIBUTING.md",
)
for link in required_links:
if link not in text:
print(f"README is missing canonical link: {link}", file=sys.stderr)
sys.exit(1)

targets = set()

for match in re.finditer(r'\]\(([^)]+)\)', text):
Expand All @@ -37,6 +61,12 @@ if missing:
for path in missing:
print(f" - {path}", file=sys.stderr)
sys.exit(1)

media = [root / target for target in targets if (root / target).suffix.lower() in {".gif", ".png", ".webp", ".webm", ".mp4"}]
media_bytes = sum(path.stat().st_size for path in media)
if media_bytes >= 1_000_000:
print(f"README embedded media must remain below 1 MB; found {media_bytes} bytes", file=sys.stderr)
sys.exit(1)
PY

expected_arm64_asset="Nova-Android-arm64-v8a.apk"
Expand All @@ -45,24 +75,18 @@ expected_x86_asset="Nova-Android-x86_64.apk"
expected_latest_arm64_url="https://github.com/papi-ux/nova/releases/latest/download/Nova-Android-arm64-v8a.apk"
expected_latest_armv7_url="https://github.com/papi-ux/nova/releases/latest/download/Nova-Android-armeabi-v7a.apk"
expected_latest_x86_url="https://github.com/papi-ux/nova/releases/latest/download/Nova-Android-x86_64.apk"
expected_github_store_url="https://github-store.org/app?repo=papi-ux/nova"
expected_obtainium_version_regex="versionExtractionRegEx%5C%22%3A%5C%22v%28.%2B%29"
expected_obtainium_apk_regex="Nova-Android-arm64-v8a%5C%5C%5C%5C.apk%24"

grep -Fq "$expected_arm64_asset" README.md
grep -Fq "$expected_armv7_asset" README.md
grep -Fq "$expected_x86_asset" README.md
grep -Fq "$expected_latest_arm64_url" README.md
grep -Fq "$expected_latest_armv7_url" README.md
grep -Fq "$expected_latest_x86_url" README.md
grep -Fq "$expected_github_store_url" README.md
grep -Fq "$expected_obtainium_version_regex" README.md
grep -Fq "$expected_obtainium_apk_regex" README.md
grep -Fq "arm64-v8a,armeabi-v7a,x86_64" app/build.gradle
grep -Fq "unsigned_apks=(\"\${APK_DIR}\"/*release-unsigned.apk)" .github/workflows/build.yml
grep -Fq 'gh release upload "${GITHUB_REF_NAME}" "${release_assets[@]}" --clobber' .github/workflows/build.yml
grep -Fq "Nova-Android-\${abi}.apk" .github/workflows/build.yml
grep -Fq "F-Droid and IzzyOnDroid packaging notes" README.md
grep -Fq "F-Droid and IzzyOnDroid Packaging Notes" docs/fdroid.md
grep -Fq 'buildConfigField "boolean", "FDROID_BUILD"' app/build.gradle
grep -Fq "BuildConfig.FDROID_BUILD" app/src/main/java/com/papi/nova/preferences/StreamSettings.kt

Expand Down
2 changes: 1 addition & 1 deletion tools/test_native_submodule_preflight.py
Original file line number Diff line number Diff line change
Expand Up @@ -46,7 +46,7 @@ def test_docs_describe_clone_recovery_ndk_and_prebuilt_scope(self):
self.assertIn("git submodule update --init --recursive", combined_docs)
self.assertIn("27.0.12077973", combined_docs)
self.assertIn("moonlight-common-c", combined_docs)
self.assertIn("prebuilt native artifacts", combined_docs)
self.assertIn("prebuilt native artifacts", combined_docs.lower())
self.assertIn("separate release-engineering decision", combined_docs)


Expand Down
Loading