{"id":18783712,"url":"https://github.com/tomkyle/tuplo","last_synced_at":"2025-10-20T08:19:20.538Z","repository":{"id":59835894,"uuid":"538564319","full_name":"tomkyle/tuplo","owner":"tomkyle","description":"tuplo is a CLI upload tool. It uses YAML files to describe upload targets and methods. ","archived":false,"fork":false,"pushed_at":"2023-06-12T06:19:44.000Z","size":310,"stargazers_count":0,"open_issues_count":3,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2024-12-29T11:45:40.042Z","etag":null,"topics":["cli","upload"],"latest_commit_sha":null,"homepage":"","language":"PHP","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/tomkyle.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,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2022-09-19T15:17:08.000Z","updated_at":"2022-09-21T11:51:47.000Z","dependencies_parsed_at":"2024-11-07T20:43:05.296Z","dependency_job_id":"559cab14-f8f8-4c20-ae27-1881cb08d5b8","html_url":"https://github.com/tomkyle/tuplo","commit_stats":{"total_commits":48,"total_committers":1,"mean_commits":48.0,"dds":0.0,"last_synced_commit":"d9a710243ee19415c8a59ddba6758dfad3f2625f"},"previous_names":[],"tags_count":9,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tomkyle%2Ftuplo","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tomkyle%2Ftuplo/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tomkyle%2Ftuplo/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tomkyle%2Ftuplo/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/tomkyle","download_url":"https://codeload.github.com/tomkyle/tuplo/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":239699579,"owners_count":19682574,"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","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":["cli","upload"],"created_at":"2024-11-07T20:40:23.307Z","updated_at":"2025-10-20T08:19:15.488Z","avatar_url":"https://github.com/tomkyle.png","language":"PHP","readme":"# tuplo\n\n[![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT) [![Tests passing](https://github.com/tomkyle/tuplo/actions/workflows/php.yml/badge.svg)](https://github.com/tomkyle/tuplo/actions/workflows/php.yml)\n\n**tuplo is a CLI upload tool. It can be configured with YAML files. Currently, these upload methods are supported:**\n\n- FTP\n- SFTP with username/password\n- SFTP with SSH key\n\n---\n\n## Installation \n\n### Using Composer\n\nInstall *tuplo* as global command:\n\n```bash\n$ composer global require tomkyle/tuplo\n```\n\nDo not forget to make sure Composer’s global commands are available in `$PATH`:\n\n```bash\n# Unix, Linux, et al.\nexport PATH=\"/home/username/.config/composer/vendor/bin:${PATH}\"\n# MacOS\nexport PATH=\"/Users/you/.composer/vendor/bin:${PATH}\"\n```\n\n### Linux, Unix et.al.\n\nGrab repo content and install dependencies. You may want to symlink it in your `~/bin` directory:\n\n```bash\n$ git clone git@github.com:tomkyle/tuplo.git\n$ cd tuplo\n\n# Symlink if needed\n$ ln -s \"${PWD}/bin/tuplo\" ~/bin/tuplo\n```\n\n### MacOS\n\n**To be done, I'm working on it.**\n\n---\n\n## Configuration\n\nUpload configurations can be stored in a  `.tuplo.yaml` file, either in `$HOME` directory or in current work directory; with the latter preceding the first. See **[tuplo.dist.yaml](./tuplo.dist.yaml)** for examples – here an example for a plain old FTP upload. In this example, “typora” is the name of a single upload configuration, it is used as CLI parameter.\n\n```yaml\ntypora:\n\tdescription : Just a plain FTP example\n    method      : ftp\n    downloadUrl : \"https://test.com/typora\"\n    host        : 'ftp.test.com'\n    port        : 21\n    ssl         : false\n    root        : 'path/to/typora'\n    username    : 'ftp-username'\n    password    : 'ftp-password'\n```\n\n---\n\n## Usage\n\nAccording to the above configuration sample, CLI usage goes like this. \n\n```bash\n$ tuplo typora \u003cfile\u003e [file] ...\n```\n\n---\n\n## Development and testing\n\nThis repo contains **custom Git hooks** to automate *composer installs* after *composer.lock* has changed after *git pull*. Read more [here.](./git-hooks/README.md)\n\n### Bugs and issues\n\nAny hints are welcome and appreciated! Open a ticket on GitHub’s [issue tracker.](https://github.com/tomkyle/tuplo/issues)\n\n### Unit tests\n\nDefault configuration is **[phpunit.xml.dist](./phpunit.xml.dist).** If you like, create a custom **phpunit.xml** to apply your own settings. \nAlso visit [phpunit.readthedocs.io](https://phpunit.readthedocs.io/) · [Packagist](https://packagist.org/packages/phpunit/phpunit)\n\n```bash\n$ composer phpunit\n# ... or\n$ vendor/bin/phpunit\n```\n\n### PhpStan\n\nDefault configuration is **[phpstan.neon.dist](./phpstan.neon.dist).** If you like, create a custom **phpstan.neon** to apply your own settings. \nAlso visit [phpstan.org](https://phpstan.org/) · [GitHub](https://github.com/phpstan/phpstan) · [Packagist](https://packagist.org/packages/phpstan/phpstan)\n\n```bash\n$ composer phpstan\n# ... which includes\n$ vendor/bin/phpstan analyse\n```\n\n### PhpCS\n\nDefault configuration is **[.php-cs-fixer.dist.php](./.php-cs-fixer.dist.php).** If you like, create a custom **.php-cs-fixer.php** to apply your own settings. Also visit [cs.symfony.com](https://cs.symfony.com/) ·  [GitHub](https://github.com/FriendsOfPHP/PHP-CS-Fixer) · [Packagist](https://packagist.org/packages/friendsofphp/php-cs-fixer)\n\n```bash\n$ composer phpcs\n# ... which aliases\n$ vendor/bin/php-cs-fixer fix --verbose --diff --dry-run\n```\n\nApply all CS fixes:\n\n```bash\n$ composer phpcs:apply\n# ... which aliases \n$ vendor/bin/php-cs-fixer fix --verbose --diff\n```\n\n\n\n","funding_links":[],"categories":[],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ftomkyle%2Ftuplo","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Ftomkyle%2Ftuplo","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ftomkyle%2Ftuplo/lists"}