// A test project for Dev Updater, not a real app. See ../README.md. // // Two independent Android clients in one checkout, each with its own `cwd` // and its own package. That is the shape tdep-survey has, and the one no // other fixture here covers: `service-and-app` also has two components, but // only one of them produces an APK, so everything that goes wrong when // *two* do is invisible to it. // // Three things it exists to keep honest, all of which were real bugs: // // - Each component's builds are found under its own directory. // `APK_PATTERNS` is anchored at `project.join(cwd)`; anchored at the // project root instead, its two-level pattern reaches both clients' // outputs and whichever matched first was reported as *every* // component's package, size, variants and mtime. Two clients installing // over different packages is what makes that wrong rather than merely // redundant -- the card would check one app's installed state and // report it as the other's. // // - "Never built at all" is asked per component. Because the // root-anchored scan sees both, building either client once made the // whole project read as "something is built here", and the other one -- // never built -- silently stopped being offered its own first build. // // - Building one component instead of every one. `tablet` is slow on // purpose so that `?component=` is *visible*: pressing Update on // `phone` finishes in about two seconds, and paying for the tablet's // build to get it is the whole complaint that scoping exists to answer. label: "Test: Two Clients", components: [ Apk( name: "phone", // The command resolves against the project root while `cwd` says // where to run it, so this is not `./build.sh` -- same split as // Dev Updater's own declaration. build: "phone/build.sh", cwd: "phone", ), Apk( name: "tablet", build: "tablet/build.sh", cwd: "tablet", ), ],