Skip to content

Handle repository applications building, packaging and watch through gulp and a minimal configuration

License

Notifications You must be signed in to change notification settings

atomictech/milkshake

Repository files navigation

Build Status Coverage Status Maintainability David Known Vulnerabilities

Downloads FOSSA Status

MilkshakeJS NPM version

Milkshake provide an easy way to define and implement a unified task logic among a set of different applications (or packages) in a mono-repository.

Website: https://milkshake.io Documentation: https://milkshake.io/docs

Why ?

As in a real milkshake (my favorite mix: vanilla, strawberry, banana), you can mix different technical flavors (node.js app, react app, cordova app, aurelia app) in one repository and still have one delicious task workflow at the end!

The existing

Mono repos are more and more common among teams, and tools like lerna allow you to easly manage dependencies between packages. Also, npm scripts (based on gulp or other task system) allow you to easly execute tasks on those packages / apps.

The problems

  • Some of those tasks can be identical and duplicated in different folders. In that case, those tasks can be anoying to keep in sync when modifications occur in one of them.
  • Packages or apps of a mono repository can use different technologies and require different actions for a common objective. For example all the packages of a mono repos will probably need a build task, but how each package is built is dependent of the tech it uses.
  • On mono repos, developer ownership of pacakges can differ from one package to another and so the tasks or script needed for it. global task name coherency is needed to be able to bulkly apply a task on all the repository.
  • Tools like Lerna allow to run npm scripts on all its packages, but does not allow executing tasks on a subset of the packages. And what about the mono repos not managed by lerna?

Milkshake mainly aims to solve those problems and provide a default set of tasks that cover common actions in the mainly used web frameworks out of the box. But if you want some custom task naming or logic, you can also define your own set of tasks that are applicable to your repository and implement them to handle each technology your repository package or application use.

To be or not to be

What milkshake is

  • Modular (milkshake-core, and milkshake-* for each type of supported app stack)
  • In early development stage, milkshake-core not reached v1 yet
  • Built on top of gulp
  • Written in es6, transpiled with babel

what milkshake is NOT

  • Widely used (yet hopefully).
  • A replacement or alternative to lerna
  • A potato

Installation

To help manage your milkshake tasks we provide a CLI, install it globally

$ npm install milkshake-cli -g

or

$ yarn global add milkshake-cli

Add Milkshake to your project

Use the Milkshake CLI tool to manage your project tasks

  1. Initialize milkshake in your project directory (that should already contain a package.json)

    $ mk init 

    Follow the interactive milkshake configuration

  2. Add application of packages to your project

    $ mk add ApplicationName

    Follow the interactive application configuration

  3. List the tasks available for your project

    $ mk help
  4. List the applications / or package of your project

    $ mk list

🎉**Congratulations! Your first Milkshake task based project is ready.

Default task workflow

mk build

mk watch

mk test

mk release

mk export

Changelog

See CHANGELOG.md.

Contributions

We welcome you to join to the development of Milkshake.

License

Milkshake is available under the MIT license.

Contact

Copyright (c) 2018 MilkshakeJS

About

Handle repository applications building, packaging and watch through gulp and a minimal configuration

Resources

License

Stars

Watchers

Forks

Packages

No packages published