{"id":29673898,"url":"https://github.com/minhtuannguyen/remote-test-refresh","last_synced_at":"2025-07-22T22:08:33.948Z","repository":{"id":62433651,"uuid":"63810888","full_name":"minhtuannguyen/remote-test-refresh","owner":"minhtuannguyen","description":"synchronize code change between local and remote repository per SSH","archived":false,"fork":false,"pushed_at":"2018-09-05T08:01:25.000Z","size":60,"stargazers_count":2,"open_issues_count":0,"forks_count":1,"subscribers_count":0,"default_branch":"master","last_synced_at":"2025-07-02T12:17:00.728Z","etag":null,"topics":["clojure","code-synchronization","leiningen","remote-access","remote-desktop","remote-work","ssh","test-automation","tool"],"latest_commit_sha":null,"homepage":"https://github.com/minhtuannguyen/remote-test-refresh","language":"Clojure","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"epl-1.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/minhtuannguyen.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2016-07-20T20:05:41.000Z","updated_at":"2025-05-17T11:52:57.000Z","dependencies_parsed_at":"2022-11-01T21:01:54.227Z","dependency_job_id":null,"html_url":"https://github.com/minhtuannguyen/remote-test-refresh","commit_stats":null,"previous_names":[],"tags_count":15,"template":false,"template_full_name":null,"purl":"pkg:github/minhtuannguyen/remote-test-refresh","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/minhtuannguyen%2Fremote-test-refresh","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/minhtuannguyen%2Fremote-test-refresh/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/minhtuannguyen%2Fremote-test-refresh/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/minhtuannguyen%2Fremote-test-refresh/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/minhtuannguyen","download_url":"https://codeload.github.com/minhtuannguyen/remote-test-refresh/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/minhtuannguyen%2Fremote-test-refresh/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":266580928,"owners_count":23951319,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","status":"online","status_checked_at":"2025-07-22T02:00:09.085Z","response_time":66,"last_error":null,"robots_txt_status":null,"robots_txt_updated_at":null,"robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["clojure","code-synchronization","leiningen","remote-access","remote-desktop","remote-work","ssh","test-automation","tool"],"created_at":"2025-07-22T22:08:33.251Z","updated_at":"2025-07-22T22:08:33.930Z","avatar_url":"https://github.com/minhtuannguyen.png","language":"Clojure","funding_links":[],"categories":[],"sub_categories":[],"readme":"# remote-test-refresh\n\n[![Build Status](https://travis-ci.org/minhtuannguyen/remote-test-refresh.svg?branch=master)](https://travis-ci.org/minhtuannguyen/remote-test-refresh)\n[![Coverage Status](https://coveralls.io/repos/github/minhtuannguyen/remote-test-refresh/badge.svg?branch=master)](https://coveralls.io/github/minhtuannguyen/remote-test-refresh?branch=master)\n[![Dependencies Status](https://versions.deps.co/minhtuannguyen/remote-test-refresh/status.svg)](https://versions.deps.co/minhtuannguyen/remote-test-refresh)\n[![Downloads](https://versions.deps.co/minhtuannguyen/remote-test-refresh/downloads.svg)](https://versions.deps.co/minhtuannguyen/remote-test-refresh)\n\n[![Clojars Project](http://clojars.org/minhtuannguyen/remote-test-refresh/latest-version.svg)](https://clojars.org/minhtuannguyen/remote-test-refresh)\n\n## Introduction\n\n`remote-test-refresh` is a leiningen plugin which uses SSH to synchronize code changes between local and remote machine automatically. When running, `remote-test-refresh` will scan code resources in the local project for changes. When detecting change, `remote-test-refresh` will transfer it per ssh and apply it to the remote repository.\n\nIn summary, `remote-test-refresh` offer possibilities:\n   +  to synchronize code change between local and remote repository over ssh.\n   +  to run command (.i.e start application, run tests) in the project on the remote machine and stream its output to local machine. \n   +  to forward port between remote and local machine. It's useful to test application interactively.\n   \nThis picture illustrates how `remote-test-refresh` leverages the SSH for synchronization: \n   \n```ruby\n\n     |----Local Machine----|        remote-test-refresh        |----Remote Machine---|  \n     |                     |     \u003c----------SSH----------\u003e     |                     | \n     | +--parent-folder    |      + transfer code change       | +--parent-folder    | \n     |    +-- project-1    |      + port forwarding            |   +-- project-1     | \n     |    +-- project-2    |      + run command remotely       |   +-- project-2     | \n     |---------------------|                                   |---------------------|  \n\t                                                       \n```\n  \n   \nTo configure `remote-test-refresh`,  you can define `:remote-test` in your `.lein/profiles.clj` or in `project.clj` of the local project repository:\n\n```clojure\n:remote-test {:user              \"your-ssh-user\"                  ;required for ssh connection\n\t      :host              \"host-name-or-ip\"                ;required for ssh connection\n\t      :with-system-agent true                             ;required for ssh connection \n\t      :remote-path       \"parent/folder/path/on/remote\"   ;required for sync code change\n\t      :forwarding-port   9001                             ;optional for port forwarding\n\t      :command           \"lein run\"                       ;optional for running cmd\n\t      :notify-command    [\"terminal-notifier\" \"-title\"] } ;optional for notification\n\t         \n```\n\n\n`remote-path` specifies the  absolute path to the parent folder on remote machine. `remote-test-refresh` must know it, in order to apply code change to the remote repository correctly.\n\nif `:remote-test` can not be found in the project.clj/profiles, `remote-test-refresh` will ask you all those parameters at the runtime. \n\nIf `:with-system-agent` is set to false, `remote-test-refresh`  will use a separated ssh agent to connect to remote machine. In this case, `remote-test-refresh` will ask you for ssh authentication at the runtime.\n\n## Usage\n\nTo start `remote-test-refresh` :\n\n    $ lein remote-test-refresh\n    * Remote-Test-Refresh version: 0.1.8\n    \n    * ==\u003e Which command do you want to run on the repository of remote machine (optional): lein run  \n    * ==\u003e Enter a port \u003e 1023 if you need a port to be forwarded (optional): 8080\n    \n    * Starting with the parameters: {:repo \"repo\", :user \"user\", :auth {:with-system-agent false, :password ***}, :host 1.2.3.4, :remote-path /folder/path/}\n    * Starting session with the parameters: {:username \"user\", :strict-host-key-checking :no, :password ***, :use-system-ssh-agent false}\n    \n    * Change has been transferred successfully\n      Application starting ...\n    ...\n\n\n## Notification\n\nBy defining `:notify-command` you will be notified every time code change has been transferred successfully to remote machine. Currently it's tested for Mac OSX and Ubuntu.\n  \nOn Mac:\n   \n     # install terminal-notifier\n     $ brew install terminal-notifier\n\n```clojure\n:remote-test {:user \"user\"\n              ...\n              :notify-command  [\"terminal-notifier\" \"-title\" \"Tests\" \"-message\"]}\n```\n\nOn Ubuntu:\n\n     # install notify\n     $ sudo apt-get install libnotify-bin\n\n```clojure\n:remote-test {:user \"user\"\n              ...\n              :notify-command  [\"notify-send\" \"Tests\"]}\n```\n\n## Issues\nIf you have this problem under ubuntu when using system agent option:\n\n     java.lang.UnsatisfiedLinkError: Unable to load library 'c': /usr/lib/x86_64-linux-gnu/libc.so: invalid ELF header\n    \nA solution could be:\n\n    $ cd /lib/x86_64-linux-gnu\n    $ sudo ln -s libc.so.6 libc.so\n\n\n## License\n\nCopyright © 2016 Distributed under the Eclipse Public License version 1.0.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fminhtuannguyen%2Fremote-test-refresh","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fminhtuannguyen%2Fremote-test-refresh","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fminhtuannguyen%2Fremote-test-refresh/lists"}