summaryrefslogtreecommitdiff
AgeCommit message (Collapse)Author
2026-09-24UI calendar: derive weekday labels from ordinal so the Android target ↵Charlie Root
compiles too The first CI run of the calendar frame (buildbot #40, compileDebugKotlinAndroid) failed with: FramesCalendarNoteLive.kt:120:40 Argument type mismatch: actual type is 'java.time.DayOfWeek', but 'kotlinx.datetime.DayOfWeek' was expected kizitonwose/Calendar's daysOfWeek() returns a platform-specific DayOfWeek: on Android it is java.time.DayOfWeek, elsewhere (including WasmJs, where the earlier local compile succeeded) it is kotlinx.datetime.DayOfWeek. A commonMain helper taking one of them therefore cannot typecheck for both. Index by ordinal instead - both enums order MONDAY..SUNDAY identically - and drop the now-unused import. The local verification had only exercised compileKotlinWasmJs, which is why this slipped through: the UI module has an Android target as well, and that is the one the pipeline compiles first.
2026-09-24Worker image: provision the Android SDK the project actually needs, drop the ↵Charlie Root
audio daemon, and pre-create Gradle output dirs Three fixes found by actually building the image and then running the pipeline against it, rather than by reading the Dockerfile: 1. Android SDK levels. apps/android, modules/orgflow-domain, modules/orgflow-ui and modules/zero-bridge-android all set compileSdk/targetSdk = 35, but the image only shipped platform 36 + build-tools 36. The first assemble died with "Failed to install the following SDK components: build-tools;35.0.0, platforms;android-35 / The SDK directory is not writable". Install 35 and 36 both, and chown /opt/android-sdk to the build user, since AGP writes into the SDK itself (it installs missing components and maintains .knownPackages). 2. No audio daemon. The pulseaudio *server* package pulls in systemd, and systemd's postinst blocks forever when the image is built under a runtime without systemd - observed under FreeBSD's podman + Linuxulator, where "systemd.postinst configure" hung the build indefinitely. Only the client libraries (libasound2, libpulse0) are needed so webrtc-java natives can link; the worker never plays media back. start-worker.sh no longer launches the daemon either. 3. prepare-build-dirs.sh (new). Gradle tasks create their output trees at execution time, and on Linuxulator a Gradle-internal directory creation can fail with "Failed to create parent directory X when creating directory X/Y" even though the same mkdir -p from a shell succeeds - and the created parents must be owned by the build user or the next run dies with "Unable to delete directory". Pre-creating the usual build/reports, build/outputs, build/tmp, build/intermediates, ... trees as the build user side-steps both. On a real Linux kernel this script is a harmless no-op. The apt cache-size bump (APT::Cache-Start) is retained from the earlier revision: the default 24MB mmap cache cannot parse the jammy package lists and fails with "Dynamic MMap ran out of room" on hosts where the apt cache is expanded.
2026-09-24UI: implement the five-frame FSMP shell (2.22) with a month calendar, and ↵Charlie Root
add the Calendar CMP library The UI module previously held a single welcome card. It now implements the fixed skeleton from the FSMP front-end design (section 2.22, decided 2026-09-24) as Compose Multiplatform code shared by every target: Home now: TODO chips + today (timetable / same-day notices / deadlines) Timeline flow: posts with answer/confirm badges and contact bubbles Calendar when: month grid -> tap a day -> day timeline (hour-axis rows mixing timetable and auto-source events, per 2.21) Note what remains: notes / tasks / documents / artefacts with WorkType filters and the unsubmitted view Live now-connect: live / scheduled / recordings, teacher start button Chrome follows the decided responsive rules rather than invented layout: the wide form gets the left rail (title + date/period, search, the five frames in the fixed order Home/Timeline/Calendar/Note/Live, spacer, [+][gear][D/L] at the bottom), the narrow form gets a search field on top and a bottom tab bar with the gear at its right end. The pie sits bottom-right on both forms (centre W, four quadrants) and the [+] sits at its left as a pair, swapping under the left-handed flip setting; the contact input bar appears only on wide Timeline and carries no destination chip, because the pie itself shows scope and destination. Frame bodies intentionally hold sample values - the design leaves in-frame placement and visual tuning to this prototype, so only the skeleton is asserted. Calendar dependency: kizitonwose/Calendar (MIT), artifact com.kizitonwose.calendar:compose-multiplatform, which supports Android/iOS/js/ WasmJs/Desktop like the rest of the build. Pinned to 2.7.0 because that is the release whose required Kotlin (2.1.21) matches this project; 2.8.0 needs Kotlin 2.2 and 2.10.x needs Kotlin 2.3 plus Compose 1.10, so either would force a toolchain upgrade well beyond this change. One trap worth recording: the library carries its OWN YearMonth (com.kizitonwose.calendar.core.YearMonth, with its own now()/plusMonths()/ minusMonths() extensions) because kotlinx-datetime 0.6.2 - the version the library declares - has no YearMonth at all. That type only landed in kotlinx-datetime 0.7.0, which is what this project uses. Importing kotlinx.datetime.YearMonth therefore compiles to a type mismatch inside rememberCalendarState; the code must use the library's type. Do not "fix" this by forcing kotlinx-datetime upward - the library's binary is bound to the 0.6.2 shape.
2026-09-24Worker image becomes self-contained: replace FROM jenkins-kotlin:latest with ↵Charlie Root
eclipse-temurin:21-jdk plus an explicit toolchain WHY: the base image the worker used to inherit from (jenkins-kotlin:latest) was built interactively during the Jenkins era and its Dockerfile was never committed. It is now nowhere to be found - verified by searching this repo's full history on both main and backup/full-pre-reset (only *references* to the name appear, never a definition), the cgit server's repository list (no jenkins/docker repo; the name 404s), and the build host's filesystem. The worker therefore could not be rebuilt on any host, which is exactly what blocked rebuilding it here on FreeBSD. WHAT: the toolchain that image provided is now reproduced explicitly so the image builds from source anywhere. Parent is eclipse-temurin:21-jdk-jammy, and everything master.cfg's pipeline needs is installed on top: - JDK 21 (modules target Java 17 via jvmTarget=17, so 21 as the toolchain is correct and matches the master's own comment) - Gradle 8.14.3 arrives through the committed wrapper (services.gradle.org), so no Gradle is baked in - node 20 (NodeSource) for wasmJsNodeTest and the web bundle - Android SDK fully provisioned non-interactively: cmdline-tools 13114758 (verified HTTP 200 before pinning), then sdkmanager installs platform-tools, platforms;android-36 and build-tools;36.0.0 - the same platform/build-tools pair found installed on the known-good Ubuntu host, and the ones AGP 8.13.2 needs - X11/xcb/xext/xrender/xi/xtst + ALSA + PulseAudio for the webrtc-java native library - python3 + buildbot-worker 4.1.0, git/curl/unzip for checkout and deploy Compatibility: the image still runs as user "jenkins" with HOME=/var/jenkins_home and GRADLE_USER_HOME=/var/jenkins_home/.gradle, so the existing run-worker.sh docker run line (including -v jenkins-data:/var/jenkins_home) works unchanged and the Gradle/Konan caches still persist across rebuilds. The one real regression is the loss of the old image's pre-warmed caches, so the first build after this change re-downloads dependencies; that is stated in the file's header comment.
2026-09-03ios: gradle/konan cache in Actions; buildbot waits for the ios run and ships ↵ketsuban
its artifact to lighttpd; run-worker.sh: mount git_pass+github_token
2026-09-03README: real buildbot server layout (/var/lib/buildbot/masters/default) + ↵ketsuban
reconfig procedure
2026-09-03domain: declare static iOS framework (kukuri) so linkDebugFramework* tasks ↵ketsuban
exist for the ios workflow
2026-09-03ios.yml: link debug frameworks + collect klibs from build/classes (artifact ↵ketsuban
was always empty); README: CLI watcher
2026-09-03bundleApk: copy debug apk dir (actual name android-debug.apk); bundleNative: ↵ketsuban
include *.kexe (was silently NO-SOURCE)
2026-09-03fix wasmJs opt-in import (new path), bundleApk rename via local-capture ↵ketsuban
lambda; README: error-log retrieval
2026-09-03bundleApk: config-cache safe rename; README: docker build-test sectionketsuban
2026-09-03drop opencode.json/Jenkinsfile/ci/config; inline desktop launcher, fix ↵ketsuban
bundleApk (config-cache); deploy/README.txt build+deploy guide
2026-09-03apps/android: request kotlin.android without version (already on classpath ↵ketsuban
via KMP)
2026-09-03android app shell + bundleApk artifact (buildbot deploy); ui module gains ↵ketsuban
androidTarget
2026-09-03kukuri reset: welcome-only app shell + bridge/vendor modules + CI infraketsuban
Full pre-reset history preserved on branch backup/full-pre-reset (2ccab79).