Skip to content

rolldone/make-sync

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

111 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

make-sync

CLI untuk sinkronisasi file/devsync via SSH, dengan mode aman (safe pull/push), menu interaktif, dan dukungan manual sync berbasis path terdaftar serta ignore per-item di devsync.manual_transfer.

PERINGATAN: Fitur "Pipeline System" telah dihapus dari rilis saat ini. Bagian pipeline di README ini dipertahankan sebagai arsip/dokumentasi lama saja — fitur tidak lagi didukung. Untuk migrasi atau akses arsip, lihat dokumentasi internal atau hubungi tim.

Fitur Utama

  • Safe Pull/Push: indeks remote (SQLite) dibuat dulu, lalu bandingkan hash untuk unduh/unggah yang berubah saja.
  • Manual/Single Sync Menu:
    • Download/Upload
    • Pilih folder: salah satu path terdaftar atau semua yang terdaftar
    • Ignore per folder ditentukan di devsync.manual_transfer (string = path saja, object = path + ignores)
    • Mode: Soft (tanpa delete) atau Force (dengan delete terbatas scope)
    • Catatan: opsi "Bypass" telah dihapus dari menu top-level Pull/Push. Opsi bypass-ignore masih tersedia sebagai flag CLI/agent untuk pengguna lanjutan, tetapi tidak ditampilkan pada menu interaktif utama untuk mencegah penghapusan tak sengaja.
  • Force Mode (Rsync-like delete):
    • Download Force: hapus file lokal yang tidak ada di DB remote dalam scope pilihan
    • Upload Force: hapus file remote yang tidak ada di lokal (gunakan kolom checked di DB bila ada)
    • Global .sync_ignore cerdas: menghormati .sync_temp dan pola wildcard (termasuk **) untuk flow global; Single/Manual Sync memakai ignore per-item di devsync.manual_transfer.
  • SSH Agent Remote: otomatis build atau pakai fallback binary, jalankan indexing di remote, unduh DB.

Instalasi & Build

  • Butuh Go 1.24+.
  • Jalankan:
go build ./...

Jika ingin menjalankan seluruh test (yang ada):

## Troubleshooting

Use Cases

# Review output after execution
# make-sync

CLI untuk sinkronisasi file/devsync via SSH, dengan mode aman (safe pull/push), menu interaktif, dan dukungan manual sync berbasis path terdaftar serta ignore per-item di `devsync.manual_transfer`.

**PERINGATAN:** Fitur "Pipeline System" telah dihapus dari rilis saat ini. Jika Anda mencari dokumentasi lama tentang pipeline, silakan lihat arsip internal atau hubungi tim — fitur tersebut tidak lagi didukung.

## Fitur Utama
- Safe Pull/Push: indeks remote (SQLite) dibuat dulu, lalu bandingkan hash untuk unduh/unggah yang berubah saja.
- Manual/Single Sync Menu:
  - Download/Upload
  - Pilih folder: salah satu path terdaftar atau semua yang terdaftar
  - Ignore per folder ditentukan di `devsync.manual_transfer` (string = path saja, object = path + ignores)
  - Mode: Soft (tanpa delete) atau Force (dengan delete terbatas scope)
  - Catatan: opsi "Bypass" telah dihapus dari menu top-level Pull/Push. Opsi bypass-ignore masih tersedia sebagai flag CLI/agent untuk pengguna lanjutan, tetapi tidak ditampilkan pada menu interaktif utama untuk mencegah penghapusan tak sengaja.
- Force Mode (Rsync-like delete):
  - Download Force: hapus file lokal yang tidak ada di DB remote dalam scope pilihan
  - Upload Force: hapus file remote yang tidak ada di lokal (gunakan kolom `checked` di DB bila ada)
  - Global `.sync_ignore` cerdas: menghormati `.sync_temp` dan pola wildcard (termasuk `**`) untuk flow global; Single/Manual Sync memakai ignore per-item di `devsync.manual_transfer`.
- SSH Agent Remote: otomatis build atau pakai fallback binary, jalankan indexing di remote, unduh DB.

## Instalasi & Build
- Butuh Go 1.24+.
- Jalankan:

```bash
go build ./...

Jika ingin menjalankan seluruh test (yang ada):

go test ./...

Konfigurasi

Konfigurasi utama di make-sync.yaml. Contoh minimal:

local_path: .
remote_path: /home/user/project

devsync:
  os_target: linux  # atau windows
  auth:
    host: 1.2.3.4
    port: "22"
    username: youruser
    private_key: C:\\Users\\you\\.ssh\\id_rsa
    remote_path: /home/user/project
    local_path: .
  ignores:
    - .sync_temp
  manual_transfer:
    - src
    - path: assets/images
      ignores:
        - "*"
        - "!test/kokok.txt"

Catatan:

  • devsync.auth.remote_path adalah root project di remote.
  • devsync.manual_transfer bisa berisi string path sederhana atau object { path, ignores }.
  • manual_transfer object memakai ignores lokal ke path tersebut; pattern negasi !pattern sebaiknya di-quote di YAML, misalnya "!test/kokok.txt".
  • .sync_ignore di root tetap dipakai oleh flow global, tetapi Manual/Single Sync memakai ignore dari devsync.manual_transfer.

Konfigurasi Direct Access (SSH Config)

make-sync mendukung pembuatan file SSH config otomatis untuk akses langsung ke remote server. Konfigurasi ini memungkinkan koneksi SSH yang lebih mudah tanpa perlu mengetik kredensial berulang.

RemoteCommand Berdasarkan Target OS

RemoteCommand di direct_access.ssh_configs harus disesuaikan dengan target OS:

Untuk Windows Target:

RemoteCommand: cmd /K cd =remotePath
  • Menggunakan cmd /K untuk menjaga command prompt tetap terbuka
  • cd =remotePath untuk berpindah ke direktori project

Untuk Linux/Unix Target:

RemoteCommand: cd =remotePath && bash -l
  • Menggunakan bash -l untuk login shell
  • cd =remotePath untuk berpindah ke direktori project

Cara Kerja:

  1. Jalankan make-sync direct_access untuk generate SSH config
  2. File config akan dibuat di .sync_temp/.ssh/config
  3. Gunakan ssh my-server untuk koneksi langsung
  4. RemoteCommand akan otomatis menjalankan command sesuai target OS

Cara Pakai (Menu Interaktif)

  1. Jalankan binary make-sync.exe (Windows) atau make-sync (Unix).
  2. Di menu utama pilih DevSync → Single/Manual Sync.
  3. Pilih Download atau Upload.
  4. Pilih scope:
    • Salah satu path terdaftar (dari devsync.manual_transfer)
    • "All data registered in manual_sync only" (semua path terdaftar)
  • Jika entry manual_transfer bertipe object, ignore mengikuti rules di entry itu
  1. Pilih mode:
  • Soft Mode: hanya transfer file yang berubah, tanpa penghapusan
  • Force Mode: selain transfer, juga melakukan penghapusan file yang tidak ada pada sisi lain, terbatas pada scope pilihan, dan tetap menghormati ignore per-item manual_transfer
  • Catatan: Mode Force sekarang dilindungi dengan konfirmasi captcha untuk operasi destruktif. Ini mencegah eksekusi Force oleh kelalaian. Jika Anda perlu menggunakan bypass-ignore, gunakan flag CLI/agent dengan kehati-hatian.

Selama Download/Upload:

  • Sistem akan menjalankan indexing di remote terlebih dahulu (mirroring safe pull/push) agar DB up-to-date.

Navigasi Keyboard di TUI

  • Back bertahap: gunakan item menu "Back" untuk naik satu level.
  • Keluar cepat: Esc, q, atau Ctrl+C akan keluar dari seluruh flow Single/Manual Sync.
  • Catatan: Mode Force sekarang dilindungi konfirmasi captcha untuk operasi destruktif; opsi bypass dihilangkan dari menu top-level. Jika Anda memerlukan bypass, gunakan flag CLI/agent secara eksplisit (akan meminta kehati-hatian).

Detail Perilaku

  • Download Soft: unduh file remote yang belum ada atau hash berbeda, dalam scope.
  • Download Force: setelah unduh, hapus file lokal yang match scope namun tidak ada di DB remote.
  • Upload Soft: unggah file lokal yang belum ada atau hash berbeda, dalam scope.
  • Upload Force: tandai setiap file lokal yang diproses sebagai checked (di DB bila tersedia), lalu hapus file remote match scope yang tidak checked.
  • Scope manual_transfer ignores:
    • Entry string berarti path saja, tanpa ignore tambahan.
    • Entry object mendukung ignores lokal ke path tersebut.
    • ignores mendukung wildcard (*, **) dan negation !pattern.
    • .sync_temp selalu diabaikan.
    • Untuk include satu file di subtree yang di-ignore, pakai pattern negasi yang di-quote di YAML, misalnya "!test/kokok.txt".

Tips & Batasan

  • Pastikan devsync.auth terisi benar untuk koneksi SSH.
  • Jika build agent gagal, sistem akan mencoba fallback binary di folder .sync_temp sesuai target OS.
  • Mode Force sekarang menggunakan konfirmasi captcha untuk operasi destruktif; opsi bypass dihilangkan dari menu top-level. Jika Anda memerlukan bypass, gunakan flag CLI/agent secara eksplisit (akan meminta kehati-hatian).
  • Untuk Windows remote, penghapusan file menggunakan cmd.exe /C del /f /q.

Catatan tentang .sync_temp dan ignore

  • .sync_temp selalu dikecualikan dari sinkronisasi.
  • .sync_ignore tetap dipakai oleh flow global, tetapi Manual/Single Sync mengikuti ignore rules per-item di devsync.manual_transfer.

Eksekusi Perintah Remote (exec)

Jalankan perintah langsung di host remote tanpa PTY. Output di-stream real-time; proses akan mengembalikan exit status remote.

Penggunaan:

make-sync exec <command...>

Perubahan perilaku penting (2025):

  • Perintah non-interactive sekarang dikirim ke remote dengan cara yang lebih andal untuk menghindari masalah quoting/escaping. Semua argumen setelah exec digabung menjadi satu command string lalu di-encode dengan base64. Di remote, payload didecode dan dijalankan oleh shell (bash -s) sehingga Anda tidak perlu menambah escape ekstra pada kutipan atau karakter khusus.

Perilaku detil:

  • Bekerja dari direktori kerja remote: devsync.auth.remote_path (fallback remote_path). Jika diisi, client akan menjalankan cd <remotePath> && <decoded payload> di remote.
  • Non-interactive only: pendekatan ini tidak mendukung TTY/interactive sessions (gunakan SSH langsung untuk itu).
  • Eksekusi POSIX: default mencoba menjalankan payload di bash via echo '<BASE64>' | base64 -d | bash -s.
  • Fallback Windows: jika remote tidak menyediakan POSIX shell, client mencoba menjalankan perintah dengan cmd.exe /C sebagai fallback.
  • Tidak ada parsing flag lokal untuk exec; semua token setelah exec dianggap bagian dari perintah remote.

Kelebihan:

  • Anda dapat menulis perintah natural tanpa menambahkan escape ekstra, contoh:
make-sync exec docker compose exec app bash -c "ping google.co.id"

Keterbatasan & Prasyarat:

  • Remote harus menyediakan base64 dan bash/sh untuk jalur POSIX agar metode ini bekerja (umum pada Linux hosts). Jika tidak ada, client akan mencoba fallback Windows cmd.exe style.
  • Tidak untuk perintah interaktif atau yang memerlukan TTY.
  • Jika Anda butuh behavior lain (mis. bypass quoting rules), saat ini tidak ada flag --raw; silakan gunakan SSH langsung.

Contoh penggunaan:

  • Tampilkan file tersembunyi (Linux/Unix):
    • make-sync exec ls -a -l
  • Docker compose restart (tanpa perlu escaping tambahan):
    • make-sync exec docker compose down && docker compose up
  • Menjalankan perintah dengan kutipan dan spasi:
    • make-sync exec bash -c "printf 'line1\\nline2'"

Tips quoting:

  • Windows: operator seperti &&, |, atau path dengan spasi tetap didukung karena dibungkus cmd.exe /C. Jika ada karakter kutip ganda di command, pertimbangkan untuk mengutip ulang bagian terkait.
  • Linux/Unix: command dibungkus ke bash -lc '...'. Jika Anda perlu menyertakan ' di dalam command, gunakan escape \\'\\'\\' atau beralih ke kutip ganda dengan hati-hati.

Troubleshooting:

  • "command not found": pastikan perintah tersedia di PATH remote, atau gunakan path absolut/bin yang tepat.
  • Salah direktori kerja: set devsync.auth.remote_path (atau remote_path) pada config agar cd otomatis ke root project di remote.

Troubleshooting

  • Tidak ada file yang tertransfer:
    • Cek apakah hash sama atau scope/pola tidak match.
  • Gagal indexing remote:
    • Periksa kredensial SSH, jalur remote_path, dan izin eksekusi pada binary agent (Unix: chmod +x).
  • Pola !pattern pada manual_transfer object tidak bekerja:
    • Pastikan ignores ditulis sebagai array string dan pattern negasi di-quote jika diawali !, misalnya "!test/kokok.txt".

Lisensi

Proyek ini mengikuti lisensi yang ditentukan oleh pemilik repositori.

About

make-sync — alat devops kecil untuk sinkronisasi file & deployment via SSH; mendukung safe pull/push, multi-file uploads.

Topics

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages