{"id":16318616,"url":"https://github.com/vic/pinocchio","last_synced_at":"2025-10-25T18:30:27.606Z","repository":{"id":11898880,"uuid":"14462254","full_name":"vic/pinocchio","owner":"vic","description":"Git based server provisioning.","archived":false,"fork":false,"pushed_at":"2013-11-22T05:28:12.000Z","size":1668,"stargazers_count":6,"open_issues_count":0,"forks_count":1,"subscribers_count":2,"default_branch":"master","last_synced_at":"2025-01-31T10:05:43.132Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"http://vic.github.io/pinocchio/","language":"Shell","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/vic.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2013-11-17T06:18:04.000Z","updated_at":"2020-04-01T13:27:04.000Z","dependencies_parsed_at":"2022-09-14T21:50:28.137Z","dependency_job_id":null,"html_url":"https://github.com/vic/pinocchio","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/vic%2Fpinocchio","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/vic%2Fpinocchio/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/vic%2Fpinocchio/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/vic%2Fpinocchio/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/vic","download_url":"https://codeload.github.com/vic/pinocchio/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":238191675,"owners_count":19431465,"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":[],"created_at":"2024-10-10T22:24:07.288Z","updated_at":"2025-10-25T18:30:22.337Z","avatar_url":"https://github.com/vic.png","language":"Shell","funding_links":[],"categories":[],"sub_categories":[],"readme":"# [Pinocchio] - A git puppet.\n\nA minimalist tool for Git based server provisioning.\n\n![Pinocchio](https://gist.github.com/vic/3494d261c68cb3b591e6/raw/acdbcdeb06606ee8a833e992e135bec6db34ecac/pinocchio.jpg)\n\n### Why?\n\nServer configuration and software provisioning should be damn simple.\n\nThere are lots of tools for helping you install and configure your\nfull software stack at your new and shiny cloud based slice. Just to name\na few, we have [Puppet], [Chef], and the [Capistrano] based [Sprinkle].\nAll of them trying to solve the problem of automating software installation\nand configuration on many servers. Basically you write a _recipe_ file \ncontaining instructions on how to install or configure something, some of\nthese recipes require you to learn their respective mini/dsl language, \nsome of them even require you to host those recipes on a service of their\nown.\nSure these tools all have their own merit and can be useful when managing\nlots of servers, but for me, they were sometimes just like too much complex\nwhen I just wanted to provision a new slice to get more fun at coding a \nnew experiment.\n\nI just wanted to have some dead simple way of uploading a new configuration\nfile or instructions for the server on how to install something. I wanted to\ndeliver these just like I'm used with regular code, by using git. \nI wanted to push and see *only* the new pending instructions being executed\non my remote slices. I wanted to have all of it versioned and under control.\nI wanted these changes to be incremental, something like using rails database\nmigrations but for provisioning my servers.\n\nSo [Pinocchio] was born.\n\n### How it works\n\n[Pinocchio] is just a simple git `update` hook. It works by determining which\nchanges it needs to execute since the last successful update. \nIt does it by leveraging on git to know which *migrations* need to be run, \nand only when _*all*_ of these pending migrations have a successful exit status\nthe git repo is updated.\n\n### Installation\n\nTo use [Pinocchio] on your remote server, all you need is for it to have\ngit installed and the pinocchio's update hook configured at a bare repo.\n\n```shell\n# install git unless you already have it on your remote server\n$ ssh ubuntu@my-new-slice 'sudo apt-get install git'\n\n# create a remote repo for pinocchio and install the update hook\n$ ssh ubuntu@my-new-slice 'git init --bare ~/pinocchio'\n$ scp hooks/pinocchio ubuntu@my-new-slice:~/pinocchio/hooks/update\n```\n\n### Usage\n\nClone [Pinocchio] into a local directory on your computer, and edit\nyour remotes accordingly, for our previous ubuntu example it would be:\n\n```shell\n$ git remote --set-url origin ubuntu@my-new-slice:~/pinocchio\n```\n\nOf course you can create as many remotes as servers you want to provision.\n\nAdjust the [config](https://github.com/vic/pinocchio/blob/master/config) file\nas you see fit, start writing some `migrate/` scripts and `git push`.\n\n\n###### Updating your remote servers\n\n[Pinocchio] lets you manage incremental changes on your server as\na simple git repo. So, after you've written some migration scripts\nat `migrate/` or placed some configuration files under `files/` all\nyou need if to simply make a `git push` and the pinocchio's update\nhook will take care of performing pending actions and updating files.\n\nIf all migrations run successfully, the code is updated and next time only\nnew migrations will be executed.\n\n### Contributing\n\nFeel free to contribute issues, ideas, pull-requests to [http://github.com/vic/pinocchio/issues](http://github.com/vic/pinocchio/issues) \n\n### Testimonials\n\n\u003e Just another puppet who loves using this simple tool to improve their infrastructure and development process:\n\u003e\n![Infraestructur](https://gist.github.com/vic/3494d261c68cb3b591e6/raw/ab4c364f0016fc2f041b86dd842c07515d5dc758/infraestructur.png)\n![Development process](https://gist.github.com/vic/3494d261c68cb3b591e6/raw/505e8b0cc8c3515810d26750da90cd9df11b0e00/development.png)\n\n\n### License\n\nMIT\n\n[Puppet]: http://puppetlabs.com\n[Chef]: http://docs.opscode.com/index.html\n[Capistrano]: http://www.capistranorb.com/\n[Sprinkle]: https://github.com/sprinkle-tool/sprinkle\n[Pinocchio]: http://vic.github.io/pinocchio/\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fvic%2Fpinocchio","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fvic%2Fpinocchio","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fvic%2Fpinocchio/lists"}