Build / Desktop, server and tools (push) Successful in 1m7s
The first screen (online or not, a Check button, every language with a draft notice), the desktop and Android heads, the server's /api/info and /api/ip, a release tool that builds deb, rpm, a Windows exe, macOS zips, a signed APK and the server, and the Gitea workflows that run it. Rules adapted from passolo; AGPL-3.0. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_012CzABvBkbcFqoHdmi8b9WB
2.9 KiB
2.9 KiB
CLAUDE.md — MeWeb quick reference
Read AGENT.md first and cite PATTERNS.md for code rules. This file holds commands, the map and the pitfalls.
Commands
dotnet build src/MeWeb.Desktop/MeWeb.Desktop.csproj
dotnet run --project src/MeWeb.Desktop
dotnet run --project src/MeWeb.Server # ASPNETCORE_URLS=http://127.0.0.1:5481
dotnet run tools/setup.cs -- --group jdk # pinned JDK 21 into tools/jdk
dotnet run tools/setup.cs -- --group packaging # pinned nfpm into tools/packaging
dotnet build src/MeWeb.Android/MeWeb.Android.csproj \
-p:JavaSdkDirectory=$PWD/tools/jdk/linux-x64/jdk-21.0.12+8 -p:AndroidSdkDirectory=$HOME/Android/Sdk
dotnet run --project tools/Screenshots -- dist/screenshots [en,it,...]
dotnet publish src/MeWeb.Desktop -c Release -r win-x64 --self-contained -p:PublishSingleFile=true \
-p:IncludeNativeLibrariesForSelfExtract=true -p:EnableCompressionInSingleFile=true
dotnet publish src/MeWeb.Desktop -c Release -r osx-arm64 --self-contained
The Android workload installs into the user SDK (dotnet workload install android); the system SDK in /opt/dotnet
is root-owned, so CI uses the runner user's own ~/.dotnet (passolo's tools/release.sh pattern).
Map
| Path | What |
|---|---|
src/MeWeb.Shared |
Endpoints.cs (routes and hosts), wire contracts, MeWebJsonContext, generated BuildInfo |
src/MeWeb.App |
Avalonia views and view models, Services/Localizer.cs (+ {s:Tr Key}), Strings/*.resx, Resources/Colors.axaml |
src/MeWeb.Desktop |
desktop head (meweb executable), Windows manifest |
src/MeWeb.Android |
Android head (software.arasaka.meweb), resources, manifest |
src/MeWeb.Server |
meweb.arasaka.software: /api/info, /api/ip |
data/languages.json |
every language with reviewed or draft |
tools/setup.cs + setup.json |
pinned build tools |
tools/Screenshots |
headless renders of every view in every language |
branding/ |
the icon (SVG source, PNG, ICO) |
Pitfalls
- Avalonia 12 Android head:
[Application] MainApplication : AvaloniaAndroidApplication<App>plus a non-genericAvaloniaMainActivity; the main view comes throughIActivityApplicationLifetime.MainViewFactory, checked beforeISingleViewApplicationLifetime. ApplicationVersionmust be an integer: computed fromVersionthrough separateVersionMajor/Minor/Patchproperties; one nested property function left it unevaluated (XA0003).- A headless Avalonia session does not end on its own while the pulse animation runs: the screenshot tool calls
Environment.Exit(0)after dispatching. - The macOS apphost is ad-hoc signed by the .NET 10 SDK even on Linux (
LC_CODE_SIGNATUREpresent); Apple Silicon refuses unsigned arm64 code, so never strip it. - The Windows single-file publish drops native
.pdbfiles beside the exe; onlymeweb.exeships.