npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2024 – Pkg Stats / Ryan Hefner

generator-puppetmaster

v0.4.4

Published

'puppetmaster' allows you to cast your recurring development tasks into code for easy reuse.

Downloads

22

Readme

generator-puppetmaster

This Yeoman generator is a tool that manages software projects existing of multiple sub-projects. The idea is to have all sub-projects stored in (currently git-base) repositories and to have one project that is the 'parent' project, holding together the sub-projects. The parent project holds a configuration file ('package.json') that describes which sub-projects contribute to the whole project and how they are configured (e.g. name, repository location).

Sub-projects can be separated into so called 'workspaces'. This allows for a flexible management of projects in a team, where there are different responsibilities within the team. For instance, if you project consists of a data backend server and a web-based frontend there could be two workspaces called 'backend' and 'frontend', containing different sub-projects each. The database developers only need to cope with the 'backend' workspace, the frontend developers will work with the 'frontend' workspace. This separation allows for a clean separation between responsibilities in the project.

The current version of 'puppetmaster' takes care of

  • fetching and
  • updating

git-based workspaces (see below for concrete examples). In future versions 'puppetmaster' will be capable of

  • generating a single release out of all sub-projects,
  • easy creation (via the command line) of new projects on different platforms (e.g. github, gitlab, etc.)
  • integrating custom task that you need for your workflow (e.g. resetting a database, deploy to heroku, etc.)

If you have ideas for useful operations 'puppetmaster' should support, feel free to open an issue or fork the repository and implement a new feature. It's really easy, have a look at [Yeoman Generator Documentation] (http://yeoman.io/generators.html).

Installation

To setup 'puppetmaster' you need to have a working installation of 'Yeoman'. Have a look at the [installation instructions and dependencies here] (https://github.com/yeoman/yeoman/wiki/Getting-Started).

After that it's quite simple, type

yo install -g generator-puppetmaster

to install the generator.

Example Usage

Creating a new project

Create a new 'parent' folder and execute

npm init

within that folder. This will create a 'package.json' file in the folder with the provided information. We will use this 'package.json' file to configure our 'multi-workspace' environment. Open the file and add a section 'puppetmaster' to it. Within this section we add our first workspace (for more information on workspaces see the following sections). Your result will look very similar to this content, which is a fully working project named 'my-puppetmaster-project' with two sub-projects 'generator-puppetmaster' and 'tomato':

{
    "name": "my-puppetmaster-project",
    "version": "0.1.0",
    "description": "Project description",
    "main": "index.js",
    "devDependencies": {},
    "scripts": {
        "test": "echo \"Error: no test specified\" && exit 1"
    },
    "repository": {
        "type": "git",
        "url": "[email protected]:myname/mytestproject.git"
    },
    "author": "Martin Hecher",
    "license": "MIT",
    "puppetmaster": {
        "globalSettings": {
            "localRoot": "projects"
        },
        "workspaces": [{
            "id": "default",
            "settings": {
                "defaultNamespace": "[email protected]:martinhecher"
            },
            "projects": [
                "generator-puppetmaster",
                "tomato"
            ]
        }]
    }
}

With this configuration in place you can do a

yo puppetmaster:fetch

inside the project folder and it will create the folder 'projects' and clone the two repositories

into the 'projects' folder.

Configuration options

All the configuration takes place below the 'puppetmaster' property of your 'package.json' file. This section describes the two possible configuration groups currently available: 'globalSettings' and 'workspaces'.

globalSettings

Here you can configure the project globally and set some sane defaults. Currently supported are:

"localRoot": the folder into which the sub-projects will get cloned into. If the folder does not exist it will be created.

workspaces

For projects with multiple developers it turned out to be helpful to provide so called 'workspaces'. With this feature each developer can customize her own 'workspace', consisting of a sub-set of the sub-projects that are making up the whole project. There should be one 'workspace' configuration that has the id 'default', because this workspace will be used when you type

yo puppetmaster:fetch

on the commandline. You can provide one or more names of the workspace(s) you want to fetch, e.g.:

you puppetmaster:fetch main testing

will fetch the 'main' workspace and the 'testing' workspace, if available in the configuration. If not, an error message is given. Specifying no workspace configuration on the command line automatically selects the 'default' configuration.

The 'package.json' example in the 'Creating a new project' section is one supported format of how to configure 'puppetmaster'. Under the hood the workspace configuration is more flexible, to (hopefully) catch many use cases of today's webdevelopment. The configuration below shows a more elaborated example on how to configure a project:

{ "workspaces": [{
        "id": "default",
        "settings": {
            "defaultNamespace": "[email protected]:martin.hecher",
            "localRoot": "projects"
        },
        "projects": [
            "app-standalone",
            "app-framework"
        ]
    }, {
        "id": "myfeature",
        "settings": {
            "localRoot": "projects/myfeature"
        },
        "projects": [{
            "id": "app-standalone",
            "url": "[email protected]:martinhecher/app-standalone.git"
        },{
            "id": "app-framework",
            "url": "[email protected]:martinhecher/app-framework.git"
        }]
    }, {
        "id": "external-libs",
        "projects": [{
            "id": "generator-puppetmaster",
            "url": "[email protected]:martinhecher/generator-puppetmaster.git",
            "localRoot": "external-libs"
        }]
    }]
}

The above example uses the most general form of a sub-project configuration in the 'myfeature' and the 'external-libs' workspace:

{
    "id": "external-libs",
    "projects": [{
        "id": "generator-puppetmaster",
        "url": "[email protected]:martinhecher/generator-puppetmaster.git",
        "localRoot": "external-libs"
    }]
}

Here the 'projects' array consists of objects, each with an 'id', 'url', and 'localRoot' property. In the 'default' workspace configuration those options are automatically derived from the 'settings' object, in the 'external-libs' workspace those options are explicitly given. Local configuration overrides global configuration.

Updating workspaces

Since v0.4.0 'puppetmaster' can update workspace projects (if they are git-based). To update a specific workspace simply type

yo puppetmaster:pull workspace_id

For each project in the workspace a

git pull

will be triggered.

The workspace selection for updating works the same as for fetching projects:

yo puppetmaster:pull

with no workspace name given will update the 'default' workspace.

yo puppetmaster:pull all

will update all configured workspaces.

License

MIT