Desktop апп — build, гарын үсэг, татах суваг (ops)¶
macOS ба Windows desktop клиентийг build хийж, гарын үсэглэж, /download/-д
нийтлэх дэд бүтэц. Кодын танилцуулга: macOS desktop,
Windows desktop.
Build дэд бүтэц — self-hosted runner-ууд¶
WinUI/MSIX нь macOS дээр, Xcode нь Windows дээр build хийгддэггүй тул платформ бүрд тусдаа self-hosted GitHub Actions runner ажилладаг:
| Runner | Хост | Labels | Workflow |
|---|---|---|---|
win11-build |
Windows 11 Pro (38.180.136.249) |
self-hosted, Windows, X64, windows-signing |
.github/workflows/windows-app.yml (selfhosted job) |
imacpro-macos |
iMac Pro (macOS 14, Intel) | self-hosted, macOS |
.github/workflows/macos-app.yml |
Runner-ууд service байдлаар ажилладаг (reboot-д автомат асна). deploy
хэрэглэгчээр гүйдэг. Хэрэгслүүд (.NET 8, git, Xcode, xcodegen) хостод
суулгаастай; MSIX-ийн makeappx/signtool нь NuGet (Microsoft.Windows.SDK.
BuildTools[.MSIX])-ээс ирдэг тул системийн Windows SDK шаардлагагүй.
Runner offline
Dispatch хийсэн job тухайн runner online байхыг шаарддаг — offline бол
job өлгөгдөнө. Runner-ийн status: gh api repos/OWNER/REPO/actions/runners.
Татах суваг — /download/¶
Deploy нь forced-command SSH (зөвхөн ci-deploy.sh) тул serverт scp
хийх боломжгүй. Иймд бинарь файл git repo (deploy/downloads/)-оор л серверт
хүрдэг:
runner: build + sign → deploy/downloads/{eid-mongolia.dmg, eid-mongolia-setup.msix, *.cer}
→ git commit + push (main)
staging ci-deploy: git reset --hard origin/main → nginx force-recreate
nginx (deploy/nginx/staging.conf, location ^~ /download/) → /srv/download (mount)
Веб татах товч: web/src/components/landing/DesktopAppSection.tsx,
web/src/app/solutions/page.tsx.
Git хэмжээ
.msix (~37MB) publish бүрт git түүхэнд ордог. Байнга publish хийвэл
Git LFS (.gitattributes: deploy/downloads/*.msix,*.dmg filter=lfs)
руу шилжүүл. Server дээр git-lfs суулгасан байх шаардлагатай (эс бөгөөс
nginx pointer файл үйлчилнэ).
Дахин publish хийх¶
Windows: GitHub → Actions → "Windows desktop" → Run workflow (эсвэл
gh workflow run windows-app.yml). selfhosted job build+sign+publish хийнэ.
macOS: GitHub → Actions → "macOS desktop" → Run workflow (эсвэл
gh workflow run macos-app.yml). workflow_dispatch үед .dmg-ийг publish хийнэ.
Production гарын үсэг¶
Одоо: macOS .dmg — adhoc (гарын үсэггүй), Windows .msix — self-signed
dev-cert. Хоёулаа суулгагдана ч OS анхааруулна. Нийтэд цэвэр тарахад:
macOS — Apple Developer ID + notarization¶
Apple Team: CQTHTD6YJQ (Gerege Systems LLC) — iOS-той нэг. Дараах GitHub
secret-үүдийг нэмбэл macos-app.yml автоматаар sign + notarize хийнэ:
| Secret | Утга |
|---|---|
MACOS_SIGN_IDENTITY |
Developer ID Application: Gerege Systems LLC (CQTHTD6YJQ) |
MACOS_CERT_P12_BASE64 |
Developer ID Application .p12-ийн base64 (base64 -i cert.p12) |
MACOS_CERT_PASSWORD |
.p12 нууц үг |
MACOS_NOTARY_KEY_BASE64 |
App Store Connect API key .p8-ийн base64 |
MACOS_NOTARY_KEY_ID |
API key ID |
MACOS_NOTARY_ISSUER_ID |
Issuer ID |
Cert авах: developer.apple.com → Certificates → Developer ID Application →
Keychain-аас .p12 export. API key: App Store Connect → Users and Access → Keys.
Windows — EV/OV code-signing cert¶
tools/pack-msix.ps1-ийн -PfxPath-д жинхэнэ cert-ийг зааж (эсвэл Azure
Trusted Signing), windows-app.yml-ийн New-DevCert алхмыг орлуулна. Cert-ийн
subject DN нь Package.appxmanifest-ийн Publisher
(CN=Gerege Systems LLC, O=Gerege Systems LLC, C=MN)-тэй яг таарах ёстой.
2023 оноос cert нь hardware token/HSM-д байх ёстой тул CI-д Azure Trusted
Signing (~$10/сар) хамгийн тохиромжтой.
Auto-update (одоо тохируулаагүй)¶
- macOS: Sparkle (
SUFeedURL: e-id.mn/download/appcast.xml) —scripts/ gen_appcast.sh+ EdDSA түлхүүр (SPARKLE_ED_PRIVATE_KEY) шаардана. - Windows:
.appinstaller(tools/publish-appinstaller.ps1) — signed.msix .appinstaller-ийг/download/-д хамт байршуулна.