- .github/workflows/ci.yml: vet + go test -race di ubuntu-22.04
- .github/workflows/release.yml: tag vX.Y.Z -> tes, build AppImage dengan versi
dari tag, lalu gh release create dengan aset AppImage + zsync dan catatan
rilis otomatis (--generate-notes)
- README: rilis cukup 'git tag v1.1.0 && git push --tags'
- Catatan rilis ditaruh di tengah Border (VScroll di Fyne punya MinSize kecil,
jadi sebagai 'top' isinya cuma dapat 32px dan terpotong)
- Tombol Back sebelumnya memakai kunci terjemahan yang belum ada di tabel;
ditambah tes yang memastikan semua kunci T() ada dan tidak ada kunci nganggur
- README: bagian Updates + cara publish rilis
- Paket internal/update: ambil rilis terbaru (API GitHub), bandingkan versi
semver sederhana, unduh AppImage ke berkas sementara lalu tukar atomik
(verifikasi magic ELF+AI; kalau gagal, AppImage lama tetap utuh)
- UI: cek otomatis 2 detik setelah aplikasi tampil (hanya kalau jalan sebagai
AppImage), dialog notifikasi versi baru + catatan rilis, tombol Update now /
Halaman rilis / Nanti
- Pemasangan: lewat AppImageUpdate kalau terpasang, kalau tidak unduh sendiri;
setelah selesai ditawarkan Restart (jalankan AppImage baru lalu tutup yang lama)
- Tombol footer Cek Update memakai alur yang sama dan selalu memberi jawaban
- LAZYRUN_UPDATE_API untuk mengarahkan cek update ke server lain (tes/fork)
- Tes: perbandingan versi, parsing rilis, penukaran AppImage, penolakan berkas
bukan AppImage
- Dialog ikon: nama aplikasi -> Iconify; domain (mikrotik.com) -> ikon resmi situs
(manifest 512, apple-touch-icon, favicon) + layanan favicon; URL gambar -> langsung
- Contoh kasus: 'winbox' cuma punya 1 ikon tidak nyambung di Iconify, tapi
'mikrotik.com' memberi ikon resminya (5 pilihan, semuanya PNG)
- Decoder ICO: entri BMP 24/32-bit (favicon.ico lama) ikut didukung, bukan cuma PNG
- FromURL/Fetch selalu mengembalikan PNG; hasil raster/konversi seragam 512px
- Tes: deteksi URL gambar/domain, daftar ikon situs, decode ICO BMP, konversi format
- dialog.NewCustom selalu menambah tombol dismiss walau labelnya kosong;
modal kita pakai baris tombol sendiri, jadi pindah ke NewCustomWithoutButtons
(ditambah tes yang menolak pemakaian dialog.NewCustom lagi)
- Ikon: SVG/webp/gif/bmp/ico/jpeg semuanya dikonversi ke PNG saat dipasang
(desktop environment tidak konsisten membaca format lain), gambar besar
diperkecil ke maksimal 512px
- Filter file picker ikon menambah webp/gif/bmp
- Perbaiki data race pada endpoint pencarian ikon (iconifyBase) yang ditemukan
oleh go test -race; tes UI menunggu goroutine pencarian selesai
- go test -race -count=1 ./... hijau untuk semua paket
- Semua SVG diraster ke PNG lebih dulu (install, sync, thumbnail). SVG dari
internet sebagian memakai fitur yang tidak didukung renderer sehingga ikon
tidak muncul atau proses menggambar berhenti.
- fill="currentColor" diganti warna brand (penyebab tersering ikon Material/
Remix gagal diraster), rasterisasi dibungkus recover
- Thumbnail pencarian: placeholder + cache unduhan + batas 3 unduhan bersamaan
- Kandidat ikon yang gagal dilewati, install tetap lanjut ke ikon default
- Race pada data ikon pilihan diperbaiki (mutex); tes -race hijau
- Baris status modal pencarian dipindah ke barisnya sendiri (tidak bertabrakan
dengan tombol Back/Search di layar berskala besar)
- Tombol X di kanan atas tiap dialog + tombol Back di modal pencarian ikon
- Isi dialog dibungkus scroll: Fyne tidak bisa mengecilkan dialog di bawah MinSize
konten, jadi di layar ber-penskalaan besar tombol bawah tadinya bisa terpotong
- Ukuran dialog dibatasi 90% lebar / 85% tinggi window
- Cari ikon online (Iconify) dari dialog install, plus tombol sync ikon per shortcut
- Auto ikon: file terdekat -> favicon situs (termasuk ikon manifest PWA) -> ikon brand
yang namanya cocok -> ikon default; sumber ikon disimpan di metadata
- Query dibersihkan (web.whatsapp.com -> whatsapp) dan kata <4 huruf tidak dipakai
supaya aplikasi tanpa ikon resmi tidak dapat ikon acak
- Unduhan thumbnail dibatasi 4 bersamaan + retry sekali (rate limit Iconify)
- Cursor: XCURSOR_THEME/XCURSOR_SIZE diambil dari config KDE/GTK/~/.icons default,
dan AppImage tidak lagi membundel libX*/libwayland*/libxkbcommon (dipakai dari host)
- README: bagian ikon + integrasi desktop
- Garis aksen gradien berdenyut terus (indigo <-> cyan)
- Kartu shortcut: transisi warna halus saat disorot mouse (hoverCard)
- Kartu baru berkedip warna brand saat daftar dimuat / setelah install
- Logo LazyRun + brand mark di dialog, footer 'LazyRun vX · oxpoe'
- Thumbnail shortcut bersudut membulat
- Versi logo fade-in dibuang: canvas.Image.Translucency tidak ter-render di Fyne 2.8
- Footer: Check for Updates, GitHub (github.com/oxpoe/lazyrun), Donate (donasi.oxpoe.qzz.io)
- Baris shortcut: tombol play untuk menjalankan (pakai exec_args hasil install)
- metadata shortcut menyimpan exec_args; ada fallback ke binary/URL untuk data lama
- Chip jumlah shortcut di header daftar + garis gradien brand di bawah header
- README: link repo & donasi absolut
- Tema custom (indigo/cyan dari ikon, sudut membulat) mengikuti varian sistem
- Header compact: logo + wordmark, tombol aksi di kanan
- Kartu per shortcut: ikon, nama, meta singkat, chip lokasi, tombol ikon
- Teks satu baris pakai canvas.Text (widget.Label Fyne 2.8 memesan tinggi ~2x)
- Dialog: judul bagian, ikon folder pada Browse, tombol Install primary