name: pre-push-guard description: Shizuku+ codebase integrity checks. Use before pushing or committing to ensure no common build-breaking issues (CMake versions, missing imports, Java/Kotlin interop) exist.
Pre-Push Guard
This skill automates the verification of common issues that have caused GitHub Action build failures in the Shizuku+ project.
Workflow
- Execute the validation script: Run the bundled bash script to perform all automated checks.
- Review results: Analyze any FAIL or WARN outputs.
- Apply fixes: Correct any identified issues before pushing.
Automated Checks
The scripts/pre_push_check.sh script performs the following:
- CMake Version: Verifies
cmake_minimum_requiredis set to3.22.1(runner standard). - Java/Kotlin Interop: Ensures Java files access Kotlin objects via
.INSTANCE(e.g.,BuildUtils.INSTANCE). - Resource Integrity: Scans
strings.xmlfor duplicate attribute names. - Kotlin Imports: Detects missing
import af.shizuku.manager.RwhenRis used. - Ambiguous Imports: Finds duplicate
android.os.Bundleimports. - Coroutine Contexts: Verifies that
launchandDispatchershave their requiredkotlinx.coroutinesimports, and thatlifecycleScopehas itsandroidx.lifecycleimport. - Syntax Integrity: Detects Kotlin files where
importstatements are accidentally placed below the class definition. - Submodule Sync: Ensures the local
apisubmodule commit actually exists on the remote before allowing a push. - AAPT Errors: Prevents
Android resource linking failedby scanning for hardcoded package names (e.g.,af.shizuku.plus.api:) in XML. - Theme References: Warns if
colorPrimaryis used directly in Kotlin without theR.attr.prefix. - Diagnostic Quality: Flags remaining `` calls.
Usage
bash pre-push-guard/scripts/pre_push_check.sh
Common Outliers to Watch For
- Submodule Desync: Always check
git statusfor "modified content" in theapisubmodule. - Dependency Leakage: Ensure new library features used in
serverare also declared inserver/build.gradle. - Layout Shadowing: In
AppBarActivitysubclasses, ensure localbindingvariables don't shadow parent fields if parent access is needed.