LeoColman/Petals
LeoColman/Petals has 135 GitHub stars and 41 forks. Star changes are not measured yet. Last checked 2026-11-13 02:06 UTC. Last push 2026-11-05.
🌻 The Open Source app Petals aims to help its users to either quit weed, reduce usage or simply know how much they're using.
측정된 스타 증가
- in 24h
- 기록 수집 중
- in 7 days
- 기록 수집 중
- in 15 days
- 기록 수집 중
- in 1 month
- 기록 수집 중
서로 겹치는 기간의 순증가량이며 일별 합계가 아닙니다. 측정값이 없으면 비워 둡니다. 스타는 관심도를 나타내며 품질을 보장하지 않습니다.
README.md
OriginalPetals
The Open Source app Petals aims to help its users to either quit weed, reduce usage or simply know how much they're using.
⚠️ The Google Play Store version contains advertisements
For an ad free experience download the app from other release channels.
🌐 Contributing Translations
Petals welcomes community contributions for translations! To contribute translations, please follow these guidelines:
- ✨ New Languages: If you are adding a new language, translations must be 100% complete before submission.
- ⚠️ Minimum Completion: Translations that fall below 60% completion will be removed to maintain quality.
- 🤝 Contribution Methods:
- 🌍 Non-programmers are encouraged to collaborate via Weblate.
- 🖥️ Programmers may contribute translations via pull requests directly on GitHub.
Translations are hosted at Weblate. You can contribute to your language here.
Screenshots
Building
You can assemble both debug and release versions of the app for different variants (F-Droid, Playstore, GitHub) using the corresponding Gradle tasks. Here's how to do that:
Debug Version
- F-Droid:
./gradlew assembleFdroidDebug - PlayStore:
./gradlew assemblePlaystoreDebug - GitHub:
./gradlew assembleGithubDebug
Release Version
For the release version, you must first decrypt secrets using git secret reveal. The release version can be assembled
as follows:
- F-Droid:
./gradlew assembleFdroidRelease - PlayStore:
./gradlew assemblePlaystoreRelease - GitHub:
./gradlew assembleGithubRelease
Quality
Both badges above link to the workflow that produces them. Coverage is measured on every push to
main; mutation testing runs weekly, or on demand from the Actions tab.
Coverage
Kover measures line coverage of the JVM unit tests.
Composables, generated SQLDelight code, BuildConfig and library code Kotlin inlined into our
classes are excluded, since none of them are exercised by unit tests or ours to test.
./gradlew koverHtmlReportwrites a browsable report toapp/build/reports/kover/html./gradlew printLineCoverageprints the single number the badge is built from
Mutation Testing
Coverage says a line ran; it does not say a test would notice if the line were wrong. PIT answers that by changing the compiled bytecode and checking whether the suite fails. A surviving mutant is a line no assertion cares about.
PIT runs the Kotest engine directly through kotest-extensions-pitest and is scoped to the
fdroidDebug variant, with the same exclusions Kover uses.
./gradlew pitestwrites a report toapp/build/reports/pitest/index.html./gradlew printTestStrengthprints the single number the badge is built from./gradlew printMutationScoreprints the same thing counting untested code too
The badge reports test strength, not the raw mutation score: of the mutants a test actually executed, how many did it catch. Mutants in code no test reaches are left out on purpose, because that gap is what the Coverage badge next to it already measures. A low mutation score beside a high test strength means untested code; a low test strength means the tests that exist do not assert enough.
A full run takes around 13 minutes, so it is scheduled weekly rather than run per merge, and is never part of the pull request checks.
Specs must be named *Test: PIT is pointed at that glob, and a spec named anything else would be
skipped without failing anything. verifySpecNaming enforces it as part of the pitest task.
Git Secrets
The Keystore, Keystore Properties, and Google Play deploy json files are included in the repository using git secret. The current secret owners are:
Leonardo Colman Lopes
- Fingerprint
B3A5 9909 9ECC 4DB4 FD40 896F 7706 1922 C587 2792 - Original Author
- Fingerprint
GitHub Actions
- Fingerprint
882E 409C 71F4 565B 1698 B947 A992 5FF4 75B3 5E07 - Auto-publishing signed app to GitHub
- Expires on 2027-04-05
- Available on environment secret
GPG_KEY
- Fingerprint
Releasing
Release to all our channels is made automatically after a tag is released. The workflow responsible for doing this is release.main.kts.
Google Play Store
- Decrypt all git secrets
- Run
./gradlew bundlePlaystoreRelease - Publish to playstore by running
cd fastlane && bundle config path vendor/bundle && bundle install --jobs 4 --retry 3 && bundle exec fastlane playstore
F-Droid
F-Droid builds automatically from the repository whenever a new tag is published. The definitions for how to build the app are in F-Droid's data repository. If modifications are required, the place to change is there.
Releases Page
- Decrypt all git secrets
- Run
./gradlew assembleGithubRelease
관련 프로젝트 살펴보기
trimstray/the-book-of-secret-knowledge
영감을 주는 목록, 매뉴얼, 치트시트, 블로그, 팁, 원라이너, CLI/웹 도구 등을 모은 컬렉션.
258,060 스타Hack-with-Github/Awesome-Hacking
해커, 펜테스터, 보안 연구자를 위한 다양한 Awesome 목록 모음.
125,360 스타swisskyrepo/PayloadsAllTheThings
웹 애플리케이션 보안과 모의 침투 테스트/CTF에 유용한 페이로드 및 우회 방법 목록.
82,623 스타caddyserver/caddy
빠르고 확장 가능한 멀티플랫폼 HTTP/1-2-3 웹 서버이며, 자동 HTTPS를 지원합니다
79,020 스타






