mirror of
https://github.com/chmouel/liseur.git
synced 2026-10-19 09:13:36 +00:00
The selection popup grew from four highlight tints to six, and the screenshots script still measured Define at 216dp from the first chip. That offset now lands on Note: every run opened the note editor, found no definition, and fell through to a note about keeping the old 12-dictionary.png. The card in the README has been stale for several releases and the run stayed green throughout. Dictionary lookup is also opt-in and off by default, so even a correct tap would have photographed the "Turn on definitions" prompt. The run now turns the setting on, waits for the card to leave its loading state, checks it is really showing a sense rather than an apology, and dies if it is not. --no-dictionary is the way to say that was expected. Two more steps were quietly photographing the wrong screen. A prefix match on "Book server" reached the "Book servers" help button above the row first, so 09-server was a picture of an explainer dialog. A prefix match on "Sherlock Holmes" matched the "Sherlock Holmes · #5" line an ungrouped shelf writes under every volume, so the Series step could photograph the plain shelf and then open a book; the series card is titled with the series name exactly, so the needle has to be too. Alongside that, five screens that shipped since v0.11.0 get a picture: the reading stats overview and one book's page, the Advanced reading sheet, a long highlight opened out in Navigate, and the sheet listing the kinds of server. The stats screens need a history to be about, so the run seeds reading_sessions -- deterministically, and in proportion to where each book is really open, because a card reading twelve hours against three per cent of a novel is a picture of a bug. The stats overview takes the empty library's place in the F-Droid set, the README keeps three screenshots, and the rest move to docs/SCREENSHOTS.md, which also picks up the upload offer and the tablet captures that were linked from nowhere. |
||
|---|---|---|
| .. | ||
| grimmory | ||
| lib | ||
| e2e-delete | ||
| e2e-open-external | ||
| e2e-upload | ||
| emblem-transparent | ||
| feature-graphic | ||
| generate-release-notes | ||
| grimmory-dev | ||
| icon | ||
| install | ||
| install-release | ||
| README.md | ||
| release | ||
| reset-books | ||
| screenshots | ||
| store-status | ||
| test-fdroid-tags | ||
| verify-fdroid-tags | ||
| verify-reproducible | ||
| verify-wide-content | ||
hack/
Scripts used to build, test, and release Liseur. Most have a make
target wrapping them — run make help for the short list. See
DEVELOPER.md for the full release workflow.
screenshots— Captures the screenshots used by the README,docs/SCREENSHOTS.mdand the F-Droid listing.--setupbuilds a demo shelf first (downloads a set of Standard Ebooks EPUBs, pushes them to the device, grants the library folder, seeds a highlight/note/bookmark and writes six weeks of reading sessions for the stats screens) before capturing; without it, captures from a device already set up.--setup-onlybuilds the shelf and stops, to check it.--no-dictionaryskips the definition card, which is the one capture that needs the device to reach a site.hack/screenshots --helpfor the rest of the flags.reset-books— Wipes the app's storage and the device'sBooksfolder on a connected device/emulator, then reseeds it with the same demo book shelf asscreenshots --setup, without capturing anything. Backsmake reset. Downloaded books are cached undertmp/books, shared withscreenshots.e2e-upload/e2e-delete— End-to-end checks of the two actions that reach a liseur-sync server's disk. Both drive the app through its own screens against a real server and then read that server's folder and the app's database to see what happened, so neither can pass on a mock.e2e-delete -o DIRalso writes screenshots of the sheet and the confirmation, which is where the pictures in a pull request come from.--helpfor the flags.e2e-open-external— End-to-end check that a book handed over by another app lands on the shelf. Pushes an EPUB somewhere nothing watches, opens it through the sameVIEWintent a file manager sends, and then asserts against the app's database that the book was shelved, that the reading position hangs off that shelved row, that a second handover of the same file does not shelve it twice, and that the upload offer can reach it. It runs under the "keep them here" upload policy — which it sets through the settings screen and puts back afterwards — so it also proves that shelving a book and sending it are separate: the book reaches the shelf while not one upload is attempted. Pass-u URLto name the liseur-sync server.--helpfor the flags.lib/demo-books.sh— Library sourced byscreenshots,reset-booksand thee2e-*scripts: the demo book list, the uiautomator-driven UI helpers, and the fetch/push/grant-folder logic. Not meant to be run directly.grimmory-dev— Brings up a throwaway Grimmory server in containers, seeded and ready for Liseur to connect to, so the Grimmory client is developed against the real thing rather than a reading of its source.--upstarts and seeds it,--downdeletes it and everything it held,--resetdoes both,--inforeprints the credentials. Grimmory hides its Komga compatibility shim behind an admin setting and behind a separate set of credentials — an "OPDS user", not the browser login — and the script sets up both, because either one missed fails in a way that does not say so. The image tag inhack/grimmory/docker-compose.ymlis pinned deliberately: a compatibility shim is exactly the thing that moves under you. The seeded shelf is larger than one catalog page on purpose, and holds one CBZ, so paging and the EPUB-only filter both have something real to work on. Everything lives undertmp/. Developer tooling only — nothing in Gradle, CI or the release path may depend on it.grimmory/seed-books.py— Generates the booksgrimmory-devseeds: filler EPUBs, each with a cover, plus one CBZ. Everything is generated, so no downloads and nothing copyrighted. Not meant to be run directly.install— Builds a release-signed APK (key fetched frompass) and installs it in place over the device's existing release install, keeping its data. A debug build can't do this: Android refuses an update whose signature doesn't match.install-release— Builds the release APK, signs it with the release key frompass, and installs it on a device picked viafzf.release— Runs the release process: bumpsversionCode/versionName, checks that F-Droid will see final tags but not test tags, tags, builds, publishes the GitHub release, and submits the F-Droid update. SeeDEVELOPER.mdfor the full workflow and flags.verify-fdroid-tags— Reads the live F-Droid metadata and fails closed unless a plainvX.Y.Ztag is discoverable and the supplied non-final tags are not. The release script runs it before pushing or submitting a tag.test-fdroid-tags— Runs the deterministic fixture-based tests for the tag-policy verifier. It does not contact F-Droid and is part ofmake checkand CI.generate-release-notes— Writes the GitHub release notes for a tag by asking Gemini to turn the commits since the previous tag into prose. It also reads the pull requests associated with those commits, links each described change back to its PR, and carries over a relevant screenshot from the PR body when one is present. It falls back to the F-Droid changelog if generation fails.store-status— Answers "where is Liseur published?" for all three channels at once: the last GitHub releases, what F-Droid has published and how old its index is, what its last build run did with the app, the fdroiddata metadata, any open merge request with its pipeline state, and what sits on each Google Play track. It also says when the closed track that testers are recruited into falls behind internal, and prints the opt-in link they are handed. Everything but the Play section reads public sources; Play has no public answer while the app is in testing, so that one signs a token with the service account frompassand is skipped with a line when it cannot. Backsmake store-status.verify-reproducible— Builds the release APK twice from two independent clean checkouts and diffs them byte for byte, the check F-Droid's reproducible-builds requirement demands before submission.verify-wide-content— Checks that content wider than the page is measured and constrained rather than painted over the page after it (issue #67). The fix is JavaScript that runs inside the book's own document, and none of what it has to get right is visible from the JVM, so the script is lifted straight out ofWideContentFit.kt— never a copy — and run against Readium's own stylesheets in headless Chrome, in a frame the size of a phone. Needs Chrome or Chromium and a prior./gradlew assembleDebug(Readium's CSS is unpacked from the AAR by the build), so it is a check to run by hand when that script changes, not part ofmake check.PORT=picks another port.icon— Renders the adaptive launcher icon (two vector drawables) to a flat PNG for the F-Droid listing and the README.feature-graphic— Renders the 1024x500 store feature graphic from the app's own emblem.
See also tests/, which holds the headless, assertion-shaped end-to-end
scenarios — the ones that measure behaviour rather than walk the screen.
The e2e-* scripts here drive the UI and need a visible device.