Skip to main content

Pangembangan


Pandhuan Pangembangan

Sunting mung Inggris; terjemahan bakal sumebar

Nganyari dokumentasi mung ing website/docs (Inggris). Terjemahan ing website/i18n/<locale>/… digawé lan ora kena disunting manual. Gunakna tugas terjemahan (umpamane, make translate_web_docs_batch) kanggo nyegeraké isi lokal.

Prasyarat

  • Node.js 22+ lan npm (wis dites nganggo Node 22)
  • Thunderbird 128 ESR utawa luwih anyar (kanggo testing manual)

Tata Letak Proyèk (tingkat dhuwur)

  • Root: skrip packaging distribution_zip_packer.sh, dokumèn, screenshot
  • sources/: kode add-on utama (latar mburi, UI opsi/popup, manifest, ikon)
  • tests/: Vitest suite
  • website/: dokumèn Docusaurus (kanthi i18n ing website/i18n/de/...)

Instalasi & Piranti

  • Pasang dependensi root: npm ci
  • Dokumèn (opsional): cd website && npm ci
  • Ndelok target: make help

Panggembangan Langsung (web‑ext run)

  • Siklus cepet ing Firefox Desktop (mung smoke-test UI):
  • npx web-ext run --source-dir sources --target=firefox-desktop
  • Mbukak ing Thunderbird (luwih dianjuraké kanggo MailExtensions):
  • npx web-ext run --source-dir sources --start-url about:addons --firefox-binary "$(command -v thunderbird || echo /path/to/thunderbird)"
  • Tips:
  • Tansah bukak Error Console‑né Thunderbird (Tools → Developer Tools → Error Console).
  • Kaca acara MV3 digantung nalika nganggur; muat manèh add‑on sawisé owah‑owahan kode, utawa tinggalna web‑ext auto‑reload.
  • Sawetara prilaku khusus Firefox béda; tansah verifikasi ing Thunderbird kanggo paritas API.
  • Dalan binary Thunderbird (conto):
  • Linux: thunderbird (umpamane, /usr/bin/thunderbird)
  • macOS: /Applications/Thunderbird.app/Contents/MacOS/thunderbird
  • Windows: "C:\\Program Files\\Mozilla Thunderbird\\thunderbird.exe"
  • Isolasi profil: Gunakna profil Thunderbird kapisah kanggo pangembangan supaya ora mengaruhi setelan saben dina.

Target Make (urut abjad)

Makefile nyeragamaké alur dev umum. Lakokna make help kapan waé kanggo ringkesan sakbaris saben target.

Tips: mbukak make tanpa target bakal mbukak menu Whiptail prasaja kanggo milih target.

TargetKatrangan sakbaris
cleanMbusak artefak build/preview lokal (tmp/, web-local-preview/, website/build/).
commitMformat, mbukak test (kalebu i18n), nganyari changelog, commit & push.
eslintMbukak ESLint liwat flat config (npm run -s lint:eslint).
helpDhaptar kabèh target karo dokumèn sakbaris (urut).
lintweb‑ext lint ing sources/ (manifest samentara; nglirwakaké ZIP; ora fatal).
menuMenu interaktif kanggo milih target lan argumèn opsional.
packMbangún ATN & LOCAL ZIP (mbukak linter; nelpon skrip packer).
prettierMformat repositori ing panggonan (nulis owah‑owahan).
prettier_checkPrettier ing mode priksa (tanpa nulis); gagal yen butuh reformat.
prettier_writeAlias kanggo prettier.
testPrettier (nulis), ESLint, banjur Vitest (coverage yen dikonfigurasi).
test_i18nTes khusus i18n: placeholder/paritas add‑on + paritas situs web.
translate_appAlias kanggo translation_app.
translation_appNerjemahaké string UI app saka sources/_locales/en/messages.json.
translate_web_docs_batchNerjemahaké dokumèn situs liwat OpenAI Batch API (diutamaké).
translate_web_docs_syncNerjemahaké dokumèn situs sacara sinkron (warisan, non‑batch).
translate_web_indexAlias kanggo translation_web_index.
translation_web_indexNerjemahaké UI homepage/navbar/footer (website/i18n/en/code.json → .../<lang>/code.json).
web_buildMbangún dokumèn menyang website/build (ndhukung --locales / BUILD_LOCALES).
web_build_linkcheckPriksa pranala sing aman offline (ngliwati HTTP[S] remot).
web_build_local_previewPratayang gh‑pages lokal; auto‑serve ing 8080–8090; test/priksa pranala opsional.
web_push_githubPush website/build menyang cabang gh-pages.

Sintaks kanggo opsi

  • Gunakna make <command> OPTS="…" kanggo ngirim opsi (disaranaké nganggo tanda petik). Saben target ing ngisor nuduhaké conto panggunaan.

--

Tips build locale

  • Mbangún subset locale: setel BUILD_LOCALES="en de" utawa pass OPTS="--locales en,de" menyang target web.
  • Pratayang locale tartamtu: http://localhost:<port>/Thunderbird-Reply-with-Attachments/de/.

Mbangún & Paket

  • Gawe ZIP: make pack
  • Ngasilaké ZIP ATN lan LOCAL ing root repo (aja nyunting artefak kanthi manual)
  • Tips: nganyari versi ing loro‑loroné sources/manifest_ATN.json lan sources/manifest_LOCAL.json sadurungé ngepak
  • Instal manual (dev): Thunderbird → Tools → Add‑ons and Themes → roda gigi → Install Add‑on From File… → pilih ZIP sing wis dibangun

Tes

  • Suite lengkap: make test (Vitest)
  • Coverage (opsional):
  • npm i -D @vitest/coverage-v8
  • Mbukak make test; bukak coverage/index.html kanggo laporan HTML
  • Mung i18n: make test_i18n (tombol UI/placeholder/judhul + paritas situs per‑locale per‑dok karo priksa id/title/sidebar_label)

Debugging & Log

  • Error Console: Tools → Developer Tools → Error Console
  • Ganti log verbose nalika mlaku:
  • Nguripaké: messenger.storage.local.set({ debug: true })
  • Matèni: messenger.storage.local.set({ debug: false })
  • Log katon nalika nyusun/ngirim wangsulan

Dokumèn (situs web)

  • Server dev: cd website && npm run start
  • Mbangún situs statis: cd website && npm run build
  • Padanan Make (urut abjad): make web_build, make web_build_linkcheck, make web_build_local_preview, make web_push_github
  • Conto panggunaan:
  • Mung EN, ngliwati tes/priksa pranala, ora ana push: make web_build_local_preview OPTS="--locales en --no-test --no-link-check --dry-run"
  • Kabèh locale, karo tes/priksa pranala, banjur push: make web_build_local_preview && make web_push_github
  • Sadurungé nerbitaké, lakokna priksa pranala aman offline: make web_build_linkcheck.
  • i18n: Inggris ana ing website/docs/*.md; terjemahan Jerman ana ing website/i18n/de/docusaurus-plugin-content-docs/current/*.md
  • Panelusuran: Yen variabel lingkungan Algolia DocSearch wis disetel ing CI (DOCSEARCH_APP_ID, DOCSEARCH_API_KEY, DOCSEARCH_INDEX_NAME), situs migunakaké panelusuran Algolia; yen ora, bali menyang panelusuran lokal. Ing kaca ngarep, penet / utawa Ctrl+K kanggo mbukak kothak panelusuran.

  • website/src/pages/donate.js
  • Rute: /donate (lan /<locale>/donate)
  • Prilaku:
  • Yèn rute saiki nduwé locale (contone, /de/donate), gunakna kuwi
  • Yèn ora, pilih cocog sing paling apik saka navigator.languages marang locale sing dikonfigurasi; bali menyang locale baku
  • Ngalihaké menyang:
  • en/docs/donation
  • liyane → /<locale>/docs/donation
  • Migunakaké useBaseUrl kanggo nangani baseUrl kanthi bener
  • Kalebu meta refresh + pranala noscript minangka cadangan


Tips Pratayang

  • Mungkasi pratayang Node kanthi resik: bukak http://localhost:<port>/__stop (dicithak sawisé Local server started).
  • Yèn gambar ora memuat ing MDX/JSX, gunakna useBaseUrl('/img/...') supaya ngajèni baseUrl situs.
  • Pratayang diwiwit dhisik; priksa pranala mlaku sawisé kuwi lan ora mbloker (pranala eksternal rusak ora bakal nyetop pratayang).
  • Conto URL pratayang: http://localhost:<port>/Thunderbird-Reply-with-Attachments/ (dicithak sawisé “Local server started”).
  • Pranala eksternal ing link‑check: Sawetara situs eksternal (umpamane, addons.thunderbird.net) mblokir crawler otomatis lan bisa nuduhaké 403 nalika dipriksa. Pratayang tetep mlaku; iki aman kanggo diabaikan.

Nerjemahaké Situs Web

Sing bisa sampeyan terjemahaké

  • Mung UI situs web: homepage, navbar, footer, lan string UI liyané. Isi dokumèn saiki tetep mung Inggris.

Ngendi kudu nyunting

  • Sunting website/i18n/<locale>/code.json (gunakna en minangka referènsi). Tansah jaga placeholder kaya {year}, {slash}, {ctrl}, {k}, {code1} supaya ora owah.

Gawe utawa segerna file

  • Gawe stub sing durung ana kanggo kabèh locale: npm --prefix website run i18n:stubs
  • Nimpa stub saka Inggris (sawisé nambah string anyar): npm --prefix website run i18n:stubs:force
  • Alternatif kanggo siji locale: npx --prefix website docusaurus write-translations --locale <locale>

Nerjemahaké string UI homepage/navbar/footer (OpenAI)

  • Setel kredensial sepisan (shell utawa .env):
  • export OPENAI_API_KEY=sk-...
  • Opsional: export OPENAI_MODEL=gpt-4o-mini
  • Sak‑cethoke (kabèh locale, ngliwati en): make translate_web_index
  • Watesi menyang locale tartamtu: make translate_web_index OPTS="--locales de,fr"
  • Nimpa nilai sing wis ana: make translate_web_index OPTS="--force"

Validasi & nyoba maneh

  • Skrip terjemahan mvalidasi wangun JSON, njaga placeholder kurung kurawal, lan mesthèkaké URL tetep ora owah.
  • Yèn validasi gagal, bakal nyoba maneh kanthi umpan balik nganti 2 kaping sadurungé njaga nilai sing wis ana.

Pratayang lokalemu

  • Server dev: npm --prefix website run start
  • Bukak http://localhost:3000/<locale>/Thunderbird-Reply-with-Attachments/

Ngirim

  • Bukak PR karo file code.json sing wis disunting. Jaga owah‑owahan supaya tetep fokus lan lebokna screenshot cekak yen bisa.

Tips Keamanan & Konfigurasi

  • Aja nge‑commit sources/manifest.json (digawe samentara déning build)
  • Tansah browser_specific_settings.gecko.id tetep stabil kanggo njaga saluran update

Ketetapan Setélan

  • Panyimpenan: Kabèh setélan pangguna ana ing storage.local lan lestari ing sak ndawane update add‑on.
  • Instal: Default mung diterapaké nalika tombol kunci (key) pancèn ora ana (undefined).
  • Update: Migrasi mung ngisi key sing ilang; nilai sing wis ana ora tau ditimpa.
  • Tandha skéma: settingsVersion (saiki 1).
  • Key lan default:
  • blacklistPatterns: string[]['*intern*', '*secret*', '*passwor*']
  • confirmBeforeAdd: booleanfalse
  • confirmDefaultChoice: 'yes'|'no''yes'
  • warnOnBlacklistExcluded: booleantrue
  • Kode: delengen sources/background.jsinitializeOrMigrateSettings() lan SCHEMA_VERSION.

Alur dev (nambah setélan anyar)

  • Tambahaké SCHEMA_VERSION ing sources/background.js.
  • Tambahaké key anyar + default menyang obyek DEFAULTS ing initializeOrMigrateSettings().
  • Gunakna aturan "mung yen undefined" nalika nyemai default; aja nimpakake nilai sing wis ana.
  • Yèn setélan katon déning pangguna, sambungna ing sources/options.js lan tambahna string lokal.
  • Tambah/selarasna tes (delengen tests/background.settings.migration.test.js).

Tips testing manual

  • Niru instal anyar: resikna dir data ékstènsi utawa wiwiti nganggo profil anyar.
  • Niru update: setel settingsVersion dadi 0 ing storage.local lan muat manèh; pastèkna nilai sing wis ana tetep ora owah lan mung key sing ilang sing ditambah.

Ngatasi Masalah

  • Pastèkna Thunderbird 128 ESR utawa luwih anyar
  • Gunakna Error Console kanggo masalah runtime
  • Yèn setélan sing disimpen katon ora nerap kanthi bener, wiwiti manèh Thunderbird banjur cobanen maneh. (Thunderbird bisa nyimpen cache kahanan antar sesi; miwiti manèh njamin setélan seger dimuat.)

CI & Cakupan

  • GitHub Actions (CI — Tests) mbukak vitest nganggo ambang cakupan (85% baris/fungsi/cabang/pernyataan). Yen ambang ora ketekan, pakaryan bakal gagal.
  • Alur kerja ngunggah artefak coverage-html karo laporan HTML; undhuh saka kaca run (Actions → latest run → Artifacts).

Nyumbang

  • Delengen CONTRIBUTING.md kanggo pedoman branch/commit/PR
  • Tips: Gawé profil pangembangan Thunderbird kapisah kanggo testing supaya ora mengaruhi profil saben dina.

Terjemahan

  • Mbukak tugas terjemahan gedhé “kabèh → kabèh” bisa alon lan larang. Wiwiti saka subset (umpamane, sawetara dokumèn lan 1–2 locale), tinjau asilé, banjur dikembangna.

  • Kebijakan retry: tugas terjemahan bakal nyoba nganti 3 kaping nganggo exponential backoff nalika ana kesalahan API; delengen scripts/translate_web_docs_batch.js lan scripts/translate_web_docs_sync.js.

Screenshot kanggo dokumèn

  • Simpen gambar ing website/static/img/.

  • Rujuk ing MD/MDX liwat useBaseUrl('/img/<filename>') supaya path cocog karo baseUrl situs.

  • Sawisé nambah utawa ganti jeneng gambar ing website/static/img/, pastèkna kabèh rujukan isih nganggo useBaseUrl('/img/…') lan bisa dirender ing pratayang lokal. Favicons

  • File multi‑ukuran favicon.ico digawé otomatis ing kabèh dalan build (Make + skrip) liwat website/scripts/build-favicon.mjs.

  • Ora butuh langkah manual; nganyari icon-*.png wis cukup. Tips review

  • Tansah front‑matter id ora owah ing dokumèn terjemahan; terjemahna mung title lan sidebar_label yen ana.

clean

  • Tujuan: mbusak artefak build/preview lokal.
  • Panggunaan: make clean
  • Mbusak (yen ana):
  • tmp/
  • web-local-preview/
  • website/build/

commit

  • Tujuan: mformat, ngetès, nganyari changelog, commit, lan push.
  • Panggunaan: make commit
  • Rinciyan: mbukak Prettier (nulis), make test, make test_i18n; nambahaké cathetan ing changelog nalika ana bedha sing wis distage; push menyang origin/<branch>.

eslint

  • Tujuan: mbukak ESLint liwat flat config.
  • Panggunaan: make eslint

help

  • Tujuan: ndhaptar kabèh target karo dokumèn sakbaris.
  • Panggunaan: make help

lint

  • Tujuan: nglint MailExtension nganggo web-ext.
  • Panggunaan: make lint
  • Cathetan: nyalin samentara sources/manifest_LOCAL.jsonsources/manifest.json; nglirwakaké ZIP sing wis dibangun; peringatan ora nggagalké pipeline.

menu

  • Tujuan: menu interaktif kanggo milih target Make lan argumèn opsional.
  • Panggunaan: mbukak make tanpa argumèn.
  • Cathetan: yen whiptail ora kasedhiya, menu bakal bali menyang make help.

pack

  • Tujuan: mbangun ATN lan LOCAL ZIP (gumantung marang lint).
  • Panggunaan: make pack
  • Tips: tambahaké versi ing loro‑loroné sources/manifest_*.json sadurungé ngepak.

prettier

  • Tujuan: mformat repo ing panggonan.
  • Panggunaan: make prettier

prettier_check

  • Tujuan: mriksa format (tanpa nulis).
  • Panggunaan: make prettier_check

prettier_write

  • Tujuan: alias kanggo prettier.
  • Panggunaan: make prettier_write

test

  • Tujuan: mbukak Prettier (nulis), ESLint, banjur Vitest (coverage yen diinstal).
  • Panggunaan: make test

test_i18n

  • Tujuan: tes fokus i18n kanggo string add‑on lan dokumèn situs.
  • Panggunaan: make test_i18n
  • Mbukak: npm run test:i18n lan npm run -s test:website-i18n.

translate_app / translation_app

  • Tujuan: nerjemahaké string UI add‑on saka EN menyang locale liyané.
  • Panggunaan: make translation_app OPTS="--locales all|de,fr"
  • Cathetan: njaga struktur key lan placeholder; nulis log menyang translation_app.log. Wujud skrip: node scripts/translate_app.js --locales ….

translate_web_docs_batch / translate_web_docs_sync

  • Tujuan: nerjemahaké dokumèn situs saka website/docs/*.md dadi website/i18n/<locale>/....
  • Diutamaké: translate_web_docs_batch (OpenAI Batch API)
    • Panggunaan (flag): make translate_web_docs_batch OPTS="--files <doc1,doc2|all> --locales <lang1,lang2|all>"
    • Posisi warisan isih ditrima: OPTS="<doc|all> <lang|all>"
  • Prilaku: mbangun JSONL, ngunggah, mriksa saben 30s, ngundhuh asil, nulis file.
  • Cathetan: pakaryan batch bisa nganti 24 jam rampung (miturut jendhela batch OpenAI). Konsol nuduhaké wektu lumaku saben pol.
  • Lingkungan: OPENAI_API_KEY (dibutuhaké), opsional OPENAI_MODEL, OPENAI_TEMPERATURE, OPENAI_BATCH_WINDOW (gawan 24 jam), BATCH_POLL_INTERVAL_MS.
  • Warisan: translate_web_docs_sync
    • Panggunaan (flag): make translate_web_docs_sync OPTS="--files <doc1,doc2|all> --locales <lang1,lang2|all>"
    • Posisi warisan isih ditrima: OPTS="<doc|all> <lang|all>"
  • Prilaku: panyuwunan per‑pasangan sinkron (tanpa agregasi batch).
  • Cathetan: Ana prompt interaktif nalika OPTS ora diwènèhaké. Kaloro mode njaga blok kode/kode inline lan njaga front‑matter id tetep; nulis log menyang translation_web_batch.log (batch) utawa translation_web_sync.log (sinkron).

translate_web_index / translation_web_index

  • Tujuan: nerjemahaké string UI situs (homepage, navbar, footer) saka website/i18n/en/code.json menyang kabèh locale ing website/i18n/<locale>/code.json (kajaba en).
  • Panggunaan: make translate_web_index utawa make translate_web_index OPTS="--locales de,fr [--force]"
  • Syárat: export OPENAI_API_KEY (opsional: OPENAI_MODEL=gpt-4o-mini).
  • Prilaku: mvalidasi struktur JSON, njaga placeholder kurung kurawal, njaga URL ora owah, lan nyoba maneh karo umpan balik nalika ana kesalahan validasi.

web_build

  • Tujuan: mbangun situs dokumèn menyang website/build.
  • Panggunaan: make web_build OPTS="--locales en|de,en|all" (utawa setel BUILD_LOCALES="en de")
  • Internal: node ./node_modules/@docusaurus/core/bin/docusaurus.mjs build [--locale …].
  • Ketergantungan: mbukak npm ci ing website/ mung yen website/node_modules/@docusaurus ora ana.

web_build_linkcheck

  • Tujuan: priksa pranala aman offline.
  • Panggunaan: make web_build_linkcheck OPTS="--locales en|all"
  • Cathetan: mbangun menyang tmp_linkcheck_web_pages; nulis ulang GH Pages baseUrl dadi /; ngliwati pranala HTTP(S) remot.

web_build_local_preview

  • Tujuan: pratayang gh‑pages lokal karo tes/priksa pranala opsional.
  • Panggunaan: make web_build_local_preview OPTS="--locales en|all [--no-test] [--no-link-check] [--dry-run] [--no-serve]"
  • Prilaku: nyoba server pratayang Node dhisik (scripts/preview-server.mjs, ndhukung /__stop), banjur bali menyang python3 -m http.server; nyedhiyakake ing 8080–8090; PID ana ing web-local-preview/.server.pid.

web_push_github

  • Tujuan: push website/build menyang cabang gh-pages.
  • Panggunaan: make web_push_github

Tips: setel NPM=… kanggo ngluwihi manager paket sing digunakaké Makefile (gawané npm).