{"id":22753201,"url":"https://github.com/nebulab/pulsar","last_synced_at":"2026-03-16T01:45:50.865Z","repository":{"id":6086494,"uuid":"7313239","full_name":"nebulab/pulsar","owner":"nebulab","description":"Manage your Capistrano deployments with ease","archived":false,"fork":false,"pushed_at":"2021-04-29T08:01:49.000Z","size":520,"stargazers_count":129,"open_issues_count":3,"forks_count":9,"subscribers_count":8,"default_branch":"master","last_synced_at":"2025-04-14T15:14:39.012Z","etag":null,"topics":["automation","capistrano","deploy","ruby"],"latest_commit_sha":null,"homepage":"http://pulsar.nebulab.it/","language":"Ruby","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/nebulab.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE.txt","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2012-12-25T02:18:26.000Z","updated_at":"2022-10-04T17:55:07.000Z","dependencies_parsed_at":"2022-09-24T01:02:07.665Z","dependency_job_id":null,"html_url":"https://github.com/nebulab/pulsar","commit_stats":null,"previous_names":[],"tags_count":20,"template":false,"template_full_name":null,"purl":"pkg:github/nebulab/pulsar","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/nebulab%2Fpulsar","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/nebulab%2Fpulsar/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/nebulab%2Fpulsar/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/nebulab%2Fpulsar/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/nebulab","download_url":"https://codeload.github.com/nebulab/pulsar/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/nebulab%2Fpulsar/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":261791211,"owners_count":23210111,"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":["automation","capistrano","deploy","ruby"],"created_at":"2024-12-11T06:09:34.909Z","updated_at":"2026-03-16T01:45:45.828Z","avatar_url":"https://github.com/nebulab.png","language":"Ruby","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Pulsar [![Gem Version](https://badge.fury.io/rb/pulsar.svg)](https://badge.fury.io/rb/pulsar) [![CircleCI](https://img.shields.io/circleci/project/github/nebulab/pulsar/master.png)](https://circleci.com/gh/nebulab/pulsar/tree/master) [![Coverage Status](https://coveralls.io/repos/github/nebulab/pulsar/badge.svg?branch=master)](https://coveralls.io/github/nebulab/pulsar?branch=master)\n\nThe easy [Capistrano][cap-gem] deploy and configuration manager.\n\nPulsar allows you to run Capistrano tasks via a separate repository where all\nyour deploy configurations are stored. Once you have your own repository, you\ncan gradually add configurations and recipes so that you never have to duplicate\ncode again.\n\nThe way Pulsar works means that you can deploy without actually having the\napplication on your local machine (and neither have all your application\ndependencies installed). This lets you integrate Pulsar with nearly any deploy\nstrategy you can think of.\n\nSome of the benefits of using Pulsar:\n* No Capistrano configurations in the application code\n* No need to have the application locally to deploy\n* Every recipe can be shared between all applications\n* Can easily be integrated with other tools\n* Write the least possible code to deploy\n\n*DISCLAIMER*: Understanding Capistrano is strongly suggested before using\nPulsar.\n\n## Capistrano support\n\nThis version of Pulsar (version `\u003e= 1.0.0`) only supports Capistrano v3. If\nyou're looking for Capistrano v2 support you can use Pulsar version `0.3.5` but,\ntake care, that version is not maintained anymore.\n\n## Installation\n\nThe most useful way of installing Pulsar is as a system gem:\n\n```bash\n$ gem install pulsar\n```\n\nThis will install the `pulsar` command which will be used to for everything,\nfrom running Capistrano to listing your configurations.\n\n---\n\nThe first thing you'll need to do is to create your own configuration repo:\n\n```bash\n$ pulsar install ~/Desktop/pulsar-conf\n```\n\nThis will create a basic starting point for building your configuration\nrepository. As soon as you're done configuring you should consider transforming\nthis folder to a git repository.\n\nYou can have a look at how your repository should look like by browsing the\n[Pulsar Conf Demo][pulsar-conf-demo].\n\n**NOTE**: Pulsar only supports git.\n\n## Configuration\n\nThis is an example repository configuration layout:\n\n```bash\npulsar-conf/\n  |── Gemfile\n  ├── Gemfile.lock\n  ├── apps\n  │   ├── Capfile\n  │   ├── deploy.rb\n  │   └── my_application\n  │       ├── Capfile\n  │       ├── deploy.rb\n  │       ├── production.rb\n  │       └── staging.rb\n  └── recipes\n      ├── generic\n      │   ├── maintenance_mode.rake\n      │   ├── notify.rake\n      │   └── utils.rake\n      ├── rails\n      │   ├── passenger.rake\n      │   ├── repair_permissions.rake\n      │   ├── symlink_configs.rake\n      │   ├── unicorn.rake\n      │   └── whenever.rake\n      └── spree_1\n          └── symlink_assets.rake\n```\n\nPulsar uses these files to build Capistrano configurations on the fly, depending\non how you invoke the `pulsar` command. Since Pulsar it's basically a Capistrano\nwrapper, the content of these files is plain old Capistrano syntax.\n\n### _apps_ directory\n\nThis directory contains your application configurations. You'll have one\ndirectory per application.\n\n* `Capfile` is the generic Capfile shared by all applications\n* `deploy.rb` has configurations that are shared by all applications\n* `my_application/Capfile` is the Capfile that will be used for this particular\napplication\n* `my_application/deploy.rb` includes configuration shared by every stage of the\napplication\n* `my_application/staging.rb` and `my_application/production.rb` files include\nstage configurations\n\n### _recipes_ directory\n\nThis directory contains your recipes. You can create any number of directories\nto organize your recipes. In Capistrano v3 fashion, all the files are plain old\nrake tasks (make sure to name them with the `.rake` extension).\n\nThe recipes contained in this folder are **always included** in each stage for\neach application.\n\n---\n\nAnother way to include your recipes is by using the `Gemfile`. Many gems already\ninclude custom recipes for Capistrano so you just need to require those. An\nexample with [Whenever][whenever]:\n\n```ruby\n#\n# Inside Gemfile\n#\ngem 'whenever'\n\n#\n# Inside some Capfile (either generic or application specific)\n#\nrequire 'whenever/capistrano'\n\n#\n# Inside some .rb configuration file (either generic or application specific)\n#\nset :whenever_command, \"bundle exec whenever\"\n```\n\n### Loading the repository\n\nOnce the repository is ready, you'll need to tell Pulsar where it is. The\nrepository location can be specified either as a full git path or a GitHub\nrepository path (*i.e.* `gh-user/pulsar-conf`).\n\nSince Pulsar requires the repository for everything, there are multiple ways to\nstore this information so that you don't have to type it every time. You can\nalso use local repository, which is useful while developing your deployment.\n\nYou have three possibilities:\n\n* `-c` command line option\n* `PULSAR_CONF_REPO` environment variable\n* `~/.pulsar/config` configuration file\n\nThe fastest way is probably the `.pulsar/config` file inside your home\ndirectory:\n\n```bash\n#\n# Inside ~/.pulsar/config\n#\nPULSAR_CONF_REPO=\"gh-user/pulsar-conf\"\n\n#\n# Also supported\n#\n# PULSAR_CONF_REPO=\"git://github.com/gh-user/pulsar-conf.git\"\n```\n\nPulsar will read this file and set the environment variables properly.\n\n---\n\nIf you don't want to add another file to your home directory you can export the\nvariables yourself:\n\n```bash\n#\n# Inside ~/.bash_profile or ~/.zshrc\n#\nexport PULSAR_CONF_REPO=\"gh-user/pulsar-conf\"\n```\n\n## Usage\n\nAfter the repository is ready, running Pulsar is straightforward. You can either\nlist your applications or build a configuration and run Capistrano on it.\n\n### Deploy\n\nRunning the `deploy` command really means running Capistrano on a certain\nconfiguration.\n\nTo deploy `my_application` to `production`:\n\n```bash\n$ pulsar deploy my_application production\n```\n\nThe above command will fetch the Pulsar configuration repository, run\n`bundle install`, combine the generic `Capfile` and `deploy.rb` files with the\n`my_application` specific ones and add specific `production.rb` stage\nconfiguration. At last it will run `cap deploy` on it.\n\n### Listing applications\n\nPulsar can fetch your configuration repository and list the application and\nstages you can run deploys on:\n\n```bash\n$ pulsar list\n```\n\nThis will fetch the Pulsar configuration repository and list everything that's\ninside, like this:\n\n```\nmy_application: production, staging\nawesome_startup: dev, production, staging\n```\n\n### Execute arbitrary Capistrano tasks\n\nYou can launch any Capistrano task via task command. You can also pass arguments in Rake style (i.e. via square brackets after task name)\n\n```\n$ pulsar task my_application staging mycustom:task[argumen1,argument2]\n```\n\nor via environment variables.\n\n```\n$ TASK_ARG1=arg1 TASK_ARG2=arg2 pulsar task my_application staging mycustom:task\n```\n\n## Integrations\n\nPulsar is easy to integrate, you just need access to the configurations\nrepository and the ability to run a command.\n\nRight now there are no integrations for Pulsar v1 but there are some built for\nthe old v0.3 version that can be used as an example.\n\n### Chat Bots\n\n- https://gist.github.com/mtylty/5324075: a [hubot][hubot] script that runs\nPulsar via the command line\n- [hubot-pulsar][hubot-pulsar]: a [hubot][hubot] plugin for integrating via\n[Pulsar REST API][pulsar-rest-api]\n- [lita-pulsar][lita-pulsar]: a [Lita][lita] plugin for integrating via the\ncommand line\n\n\n### Pulsar REST API service\n\n[Pulsar REST API][pulsar-rest-api] is a service to provide a REST API for\nexecuting pulsar jobs.\n\nHere is a [real-life example][pulsar-rest-api-blogpost] of how you can integrate\nand simplify your Pulsar workflow.\n\n## About\n\n[![Nebulab][nebulab-logo]][nebulab]\n\nPulsar is funded and maintained by the [Nebulab][nebulab] team.\n\nWe firmly believe in the power of open-source. [Contact us][contact-us] if you\nlike our work and you need help with your project design or development.\n\n[license]: MIT-LICENSE\n[cap-gem]: https://rubygems.org/gems/capistrano\n[nebulab]: http://nebulab.it/\n[nebulab-logo]: http://nebulab.it/assets/images/public/logo.svg\n[contact-us]: http://nebulab.it/contact-us/\n[pulsar-conf-demo]: http://github.com/nebulab/pulsar-conf-demo\n[whenever]: https://github.com/javan/whenever\n[hubot]: https://hubot.github.com\n[hubot-pulsar]: https://github.com/cargomedia/hubot-pulsar\n[pulsar-rest-api]: https://github.com/cargomedia/pulsar-rest-api\n[pulsar-rest-api-blogpost]: http://www.cargomedia.ch/2015/06/23/pulsar-rest-api.html\n[lita]: https://www.lita.io\n[lita-pulsar]: http://github.com/nebulab/lita-pulsar\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fnebulab%2Fpulsar","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fnebulab%2Fpulsar","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fnebulab%2Fpulsar/lists"}