Skip to content

feat: Android gesture pill, AAB signing, Fastlane metadata, target-scoped assets#134

Merged
gfauredev merged 2 commits intomainfrom
copilot/add-aab-sign-script-and-metadata
Apr 6, 2026
Merged

feat: Android gesture pill, AAB signing, Fastlane metadata, target-scoped assets#134
gfauredev merged 2 commits intomainfrom
copilot/add-aab-sign-script-and-metadata

Conversation

Copy link
Copy Markdown
Contributor

Copilot AI commented Apr 6, 2026

Four loosely-coupled improvements to the Android release pipeline and Nix build hygiene.

Changes

assets/_unique.scss — gesture navigation pill

#main > nav is sticky at bottom: 0; without bottom padding it overlaps the Android / iOS gesture bar. Added:

padding-bottom: env(safe-area-inset-bottom, 0);

Viewport already carries viewport-fit=cover.

.script/aab-sign.sh — App Bundle signing

New script parallel to apk-sign.sh. Key difference: apksigner only handles APKs; AABs require jarsigner (available via openjdk, already in androidNativeBuildInputs). Signs with SHA256withRSA / SHA-256 digest as required by Google Play upload-key policy. Identical env-var interface (ANDROID_KEYSTORE_PATH, ANDROID_KEYSTORE_PASS, ANDROID_KEY_PASSWORD, ANDROID_KEY_ALIAS).

fastlane/metadata/android/{en-US,fr-FR,es-ES}/

Standard Fastlane supply layout (title, short_description, full_description, changelogs/default) in all three app languages. Consumed by both Google Play (fastlane supply) and IzzyOnDroid (same F-Droid/Fastlane metadata convention).

flake.nix — target-scoped asset bundling

Asset web server android
sw.js, 404.html, icon-*.png
database.example/
  • serverAssetFilter / filteredSrcServer: extends assetFilter to include database.example/**; used only by the .#server derivation, which now copies the directory into $out/bin/ alongside the binary.
  • mkAndroidBuilder: stashes web-only public files before dx build --android and restores them unconditionally via trap EXIT. Uses shopt -s nullglob to avoid iterating over unexpanded globs.

Engineering Principles

  • PR only contains changes strictly related to the requested feature or fix,
    scope is focused (no unrelated dependency updates or formatting)
  • This code totally respects README's Engineering Principles

CI/CD Readiness

  • Branch follows Conventional Branch: feat/…, fix/…, refactor/…, …
  • Code is formatted with dx fmt; cargo fmt
  • All checks pass, nix flake checks succeeds without warnings
    • Code compiles, dx build with necessary platform flags succeeds
    • cargo clippy -- -D warnings -W clippy::all -W clippy::pedantic
      produces zero warnings
    • All unit tests pass without warnings
      cargo llvm-cov nextest --ignore-filename-regex '(src/components/|\.cargo/registry/|nix/store)'
    • End-to-end tests pass maestro test --headless maestro/web
      maestro test --headless maestro/android

Copilot AI and others added 2 commits April 6, 2026 12:02
@github-actions
Copy link
Copy Markdown

github-actions bot commented Apr 6, 2026

📊 Coverage Report

Lines: 3751/4953 (75.73187966888756%)

⏱️ Tests: 255 tests in 0.659s

FilenameFunction CoverageLine CoverageRegion CoverageBranch Coverage
main.rs
  23.40% (11/47)
  60.08% (155/258)
  61.76% (218/353)
- (0/0)
models/analytics.rs
   0.00% (0/6)
   0.00% (0/34)
   0.00% (0/46)
- (0/0)
models/enums.rs
 100.00% (28/28)
 100.00% (147/147)
 100.00% (337/337)
- (0/0)
models/exercise.rs
  92.00% (46/50)
  92.10% (548/595)
  91.01% (749/823)
- (0/0)
models/log.rs
 100.00% (12/12)
 100.00% (118/118)
 100.00% (144/144)
- (0/0)
models/mod.rs
 100.00% (11/11)
 100.00% (68/68)
 100.00% (98/98)
- (0/0)
models/session.rs
  72.22% (13/18)
  84.36% (151/179)
  83.33% (210/252)
- (0/0)
models/units.rs
 100.00% (28/28)
 100.00% (167/167)
  98.88% (353/357)
- (0/0)
services/app_state.rs
   1.89% (1/53)
   2.54% (11/433)
   2.32% (15/646)
- (0/0)
services/exercise_db.rs
  88.81% (127/143)
  90.84% (1210/1332)
  90.24% (1924/2132)
- (0/0)
services/exercise_loader.rs
   0.00% (0/14)
   0.00% (0/100)
   0.00% (0/135)
- (0/0)
services/native_queue.rs
   0.00% (0/15)
   0.00% (0/145)
   0.00% (0/197)
- (0/0)
services/notifications.rs
   0.00% (0/2)
   0.00% (0/6)
   0.00% (0/7)
- (0/0)
services/service_worker.rs
 100.00% (2/2)
 100.00% (6/6)
 100.00% (6/6)
- (0/0)
services/storage.rs
  63.77% (88/138)
  80.91% (763/943)
  83.56% (1184/1417)
- (0/0)
services/wake_lock.rs
 100.00% (2/2)
 100.00% (5/5)
 100.00% (5/5)
- (0/0)
utils.rs
  92.00% (69/75)
  96.40% (402/417)
  96.97% (640/660)
- (0/0)
Totals
  68.01% (438/644)
  75.73% (3751/4953)
  77.26% (5883/7615)
- (0/0)

@github-actions
Copy link
Copy Markdown

github-actions bot commented Apr 6, 2026

❌ Maestro Web E2E Failures

📜 Maestro Console Output (Last 100 lines)
copying path '/nix/store/0w9wqd9awzhg2vm7j43mjz5i83ss81ij-wildmidi-0.4.6' from 'https://cache.nixos.org'...
copying path '/nix/store/n65wyik0k61m8m169had4gcw7n8fb4rm-sratom-0.6.20' from 'https://cache.nixos.org'...
copying path '/nix/store/kn9lwgvdaa94nl9nsxx5p198gry21n03-librsvg-2.61.4' from 'https://cache.nixos.org'...
copying path '/nix/store/g6mlwdvpg92rchq352ll7jbi0pz7h43r-xz-5.8.2-bin' from 'https://cache.nixos.org'...
copying path '/nix/store/8cc8cdqa54bahfi5n5glkm8d252zkkjn-zstd-1.5.7-bin' from 'https://cache.nixos.org'...
copying path '/nix/store/ik8a7b32nqv2q5p4g86hmp65jklmrp3g-systemd-259.3' from 'https://cache.nixos.org'...
copying path '/nix/store/q3xfaw0xw291byfii8784q43xvs3bd36-libsoup-3.6.6' from 'https://cache.nixos.org'...
copying path '/nix/store/3nk9r14756spfafgji1prgxf9qhixxf6-nss-3.112.3' from 'https://cache.nixos.org'...
copying path '/nix/store/pzdalg368npikvpq4ncz2saxnz19v53k-python3-3.13.12' from 'https://cache.nixos.org'...
copying path '/nix/store/iqxriv7vl5xzsk86rjy7v72f3dgpaxb5-lilv-0.26.2' from 'https://cache.nixos.org'...
copying path '/nix/store/s2grcjv8pklvkajk3mkh75aja5dppx6z-stdenv-linux' from 'https://cache.nixos.org'...
copying path '/nix/store/q4v09bffjy5i0f2kdwnbbwmhqv6i3pjs-zstd-1.5.7-dev' from 'https://cache.nixos.org'...
copying path '/nix/store/4yb9bqdx98ycqajvkk13dmx9nz9ya80x-gssdp-1.6.4' from 'https://cache.nixos.org'...
copying path '/nix/store/xv2cv8hv0blhlkqhcp4psblcqci9qfx6-chromedriver-unwrapped-146.0.7680.177' from 'https://cache.nixos.org'...
copying path '/nix/store/axzfvd6f655hnp92c3fv0n571avg1yb6-gupnp-1.6.9' from 'https://cache.nixos.org'...
copying path '/nix/store/mx745sg11i2na27igmmgnlf450h9dl65-dbus-1.16.2-lib' from 'https://cache.nixos.org'...
copying path '/nix/store/67yaxggsvwhd5x7ffqj8bcq3hvs136ph-gupnp-igd-1.6.0' from 'https://cache.nixos.org'...
copying path '/nix/store/8nqw35icyjsvqk32n0i6132vk3l1x1qg-at-spi2-core-2.58.3' from 'https://cache.nixos.org'...
copying path '/nix/store/asmzi65xzpjdnjvlyn39xlarp2x6cpj3-libjack2-1.9.22' from 'https://cache.nixos.org'...
copying path '/nix/store/51z2kgz91wjy629fs3hcph0iajvm7s1w-avahi-0.8' from 'https://cache.nixos.org'...
copying path '/nix/store/5gln2rkcjx93cr5x0rr3wqrxjdmshd2f-dbus-1.16.2' from 'https://cache.nixos.org'...
copying path '/nix/store/h62im4mqizh3smv2n532jncaz47819w4-bluez-5.84' from 'https://cache.nixos.org'...
copying path '/nix/store/8qs5mhyg6abqy924s1g07wddyjjddxiv-libpulseaudio-17.0' from 'https://cache.nixos.org'...
copying path '/nix/store/qk1d0xniardydr9rkhnnivz2ccmznw2q-cups-2.4.16-lib' from 'https://cache.nixos.org'...
copying path '/nix/store/1m4n4g1y9q24vi5bhy53k98rbxyfs2f5-tinysparql-3.10.1' from 'https://cache.nixos.org'...
copying path '/nix/store/xq5xj979jbifdbnck57nci15xjmx08ny-perl5.42.0-libwww-perl-6.72' from 'https://cache.nixos.org'...
copying path '/nix/store/ihbk8s7b58dd63z7x573zcp38hcvxfh2-perl5.42.0-X11-Protocol-0.56' from 'https://cache.nixos.org'...
copying path '/nix/store/p41sp77l8hv57iklz8gazdvr34bjvhd9-perl5.42.0-File-MimeInfo-0.33' from 'https://cache.nixos.org'...
copying path '/nix/store/7qzvqi0niqsgnxbc8w8pbfm0qqhfm14n-flite-2.2-lib' from 'https://cache.nixos.org'...
copying path '/nix/store/i5ya73idqgmxpki1h0cq4j13jx9vl4kn-fluidsynth-2.5.3' from 'https://cache.nixos.org'...
copying path '/nix/store/2vfrbgr72f60dc66mf6bpyxmhglkgaby-libao-1.2.2' from 'https://cache.nixos.org'...
copying path '/nix/store/lpc21304lsg3mwr4bz84d2fnr947mmhz-mpg123-1.33.4' from 'https://cache.nixos.org'...
copying path '/nix/store/ca9p0l36x7zw9742ak8vy70phmsng1ns-cups-2.4.16' from 'https://cache.nixos.org'...
copying path '/nix/store/vz6zpxygfjy3vsjxs3ly32c5ynn10f2b-ungoogled-chromium-unwrapped-146.0.7680.164' from 'https://cache.nixos.org'...
copying path '/nix/store/z01j5ypjq5lsl2xhbiw9yf2w0p16ygwk-perl5.42.0-XML-Parser-2.46' from 'https://cache.nixos.org'...
copying path '/nix/store/yl5yl395iqx88kd1m7lx7p7b65n0jfx9-gtk+3-3.24.51' from 'https://cache.nixos.org'...
copying path '/nix/store/kdfxyngq84c0rbqd40jhgv5j4dmwv6l0-sox-unstable-2021-05-09-lib' from 'https://cache.nixos.org'...
copying path '/nix/store/hh5xqz1aj82wp3p7ncr0ipjwl6ylb28v-libopenmpt-0.8.4' from 'https://cache.nixos.org'...
copying path '/nix/store/bbv0vprkcppy60mbpaqrxmid6xl6fqlv-perl5.42.0-XML-Twig-3.52' from 'https://cache.nixos.org'...
copying path '/nix/store/z5p8cy7zsrz85hcf5i0pggx2gg5rcgg3-roc-toolkit-0.4.0' from 'https://cache.nixos.org'...
copying path '/nix/store/6296bwxad0yr896x9vqxjzy6s3yyjy7z-perl5.42.0-Net-DBus-1.2.0' from 'https://cache.nixos.org'...
copying path '/nix/store/m5c6wbkiqh753s3v6wnk9l0ad7sl9y1y-ffmpeg-headless-8.0.1-lib' from 'https://cache.nixos.org'...
copying path '/nix/store/l6lwzgj70lwmhf1nkdbrcli7sn530lpg-xdg-utils-1.2.1' from 'https://cache.nixos.org'...
copying path '/nix/store/lccknd7yjw6bbnnmvz0vq5vra4w4z4dz-chromaprint-1.6.0' from 'https://cache.nixos.org'...
copying path '/nix/store/s8w14kgj50iqw1w0jdwn9s1m0k4plzgs-gstreamer-1.26.5' from 'https://cache.nixos.org'...
copying path '/nix/store/2q0snh31cxlr09nsb1qp2yna2ql29k4p-libcanberra-0.30' from 'https://cache.nixos.org'...
copying path '/nix/store/zyh3vyl2k8j9x1wbw02zk1glp5d5i963-gst-plugins-base-1.26.5' from 'https://cache.nixos.org'...
copying path '/nix/store/0pikx4f2448sc0cgikw9yvfxq6grxdpq-libnice-0.1.22' from 'https://cache.nixos.org'...
copying path '/nix/store/f3nqnwrza03hf9l4vndjg3r4lbknf4n4-libcamera-0.7.0' from 'https://cache.nixos.org'...
copying path '/nix/store/nn129jwsznqv7k888wb05m5whpyndqrf-pipewire-1.6.2' from 'https://cache.nixos.org'...
copying path '/nix/store/ahfz4q9z487796nf71bmgsdl3703ksj7-openal-soft-1.24.3' from 'https://cache.nixos.org'...
copying path '/nix/store/v5qy1399hlrnk8z6mhlzg5jz08rw3l0j-gst-plugins-bad-1.26.5' from 'https://cache.nixos.org'...
copying path '/nix/store/hb2bs5fg5wkm04x565737qd5nh2hy5nk-gcc-wrapper-15.2.0' from 'https://cache.nixos.org'...
copying path '/nix/store/hjp25ksf3axb4czp7sllvzl1bkpfwsyg-gtk4-4.20.3' from 'https://cache.nixos.org'...
copying path '/nix/store/gvq9hvvnmkvrk27mba0jjjppj068z55x-stdenv-linux' from 'https://cache.nixos.org'...
copying path '/nix/store/l5ax073f4k5f6mbnl9fdpfiwldyxli7a-clippy-preview-1.94.1-x86_64-unknown-linux-gnu' from 'https://gfauredev.cachix.org'...
copying path '/nix/store/157hw9f81x6523chpb4fis99b3x2zq27-rust-analyzer-preview-1.94.1-x86_64-unknown-linux-gnu' from 'https://gfauredev.cachix.org'...
copying path '/nix/store/9993qmj4n54mz6mnmzzc72px36mirqa5-rustfmt-preview-1.94.1-x86_64-unknown-linux-gnu' from 'https://gfauredev.cachix.org'...
copying path '/nix/store/8l7m6nswqrmfx6bxblsci8sgmgwrh5w6-rust-default-1.94.1' from 'https://gfauredev.cachix.org'...
copying path '/nix/store/hal3i0mcgsrkpharzpdjz6m10hxnxnvr-clang-21.1.8-lib' from 'https://cache.nixos.org'...
copying path '/nix/store/5n58fciczf6bld98mzpgawkvs7jzwbqy-wasm-bindgen-cli-0.2.117' from 'https://gfauredev.cachix.org'...
copying path '/nix/store/3rvfqwn4g23599vpl66lk533d9y3db8w-ungoogled-chromium-146.0.7680.164' from 'https://cache.nixos.org'...
copying path '/nix/store/i1k0ay79xdxmn9qvnyfqmvk3ih0ch2d3-google-chrome' from 'https://gfauredev.cachix.org'...
copying path '/nix/store/jh6qssswq7assbhby478d8gli8ksnf2p-maestro-2.3.0' from 'https://cache.nixos.org'...
copying path '/nix/store/zb8py6p8qq01nygnnf8jrnkps9nna189-clang-21.1.8' from 'https://cache.nixos.org'...
copying path '/nix/store/hh6y3s72d21whp6q98h4dh0valxiaw69-clang-wrapper-21.1.8' from 'https://cache.nixos.org'...
building '/nix/store/7c8s47dhxypfhgi5b0a6ixfgql6sm3b6-logout-deps-0.4.3.drv'...
building '/nix/store/dwb2lpclya4gpan441z80jh4s87jj3cx-logout-server-0.4.3.drv'...
building '/nix/store/psp8ggifx0a7rnfsb4x9z502jwvr0acg-logout-web-e2e-test-0.4.3.drv'...
2026-04-06T13:31:39.763076Z  WARN dioxus_server::config: No index.html found in public directory, using default index.html
Anonymous analytics enabled. To opt out, set MAESTRO_CLI_NO_ANALYTICS environment variable to any value before running Maestro.


Web support is in Beta. We would appreciate your feedback!


Waiting for flows to complete...
[Passed] 03_navigate_to_credits (4s)
[Passed] 06_navigate_to_exercise_list (3s)
[Passed] 04_clean_state_credits (3s)
[Failed] 11_edit_cloned_exercise (20s) (Assertion is false: "Ring Dip" is visible)
[Failed] 07_clean_state_exercise_list (20s) (Assertion is false: "Ring Dip" is visible)
[Failed] 20_be_astonished_by_progress (18s) (Assertion is false: "Today" is visible)
[Failed] 01_start (18s) (Assertion is false: "No past sessions yet" is visible)
[Failed] 16_cancel_empty_session (18s) (Assertion is false: "No past sessions yet" is visible)
[Passed] 05_change_exercises_database (15s)
[Failed] 17_repeat_session (19s) (Assertion is false: "Today" is visible)
[Failed] 18_delete_past_session (19s) (Assertion is false: "Today" is visible)
[Passed] 12_navigate_to_analytics (3s)
[Failed] 02_allow_notifications (18s) (Assertion is false: "⚠️ Tap here to enable notifications" is visible)
[Failed] 09_learn_about_exercise (20s) (Assertion is false: "Ring Dip" is visible)
[Passed] 13_clean_state_analytics (3s)
[Passed] 14_navigate_back_to_home (4s)
[Failed] 08_search_exercises (20s) (Assertion is false: "Ring Dip" is visible)
[Failed] 10_add_custom_exercise (20s) (Assertion is false: "Ring Dip" is visible)
[Failed] 19_lookup_past_exercise (19s) (Assertion is false: "Today" is visible)
[Failed] 15_full_workout_session (20s) (Assertion is false: "⏱️ Active Session" is visible)

13/20 Flows Failed

📸 Screenshots

  • Screenshot
  • Screenshot
  • Screenshot
  • Screenshot
  • Screenshot
  • Screenshot
  • Screenshot
  • Screenshot
  • Screenshot
  • Screenshot
  • Screenshot
  • Screenshot
  • Screenshot

@gfauredev gfauredev merged commit a6bc477 into main Apr 6, 2026
9 of 10 checks passed
@gfauredev gfauredev deleted the copilot/add-aab-sign-script-and-metadata branch April 6, 2026 13:49
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants