Агуулгыг алгасах

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 .dmgadhoc (гарын үсэггүй), Windows .msixself-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/-д хамт байршуулна.