{"id":13624936,"url":"https://github.com/cliffano/bob","last_synced_at":"2025-05-07T17:01:54.197Z","repository":{"id":498355,"uuid":"1131939","full_name":"cliffano/bob","owner":"cliffano","description":"Minimalist-omakase build tool for node.js projects","archived":false,"fork":false,"pushed_at":"2024-09-29T06:58:50.000Z","size":14562,"stargazers_count":39,"open_issues_count":1,"forks_count":5,"subscribers_count":4,"default_branch":"main","last_synced_at":"2025-05-02T05:48:12.095Z","etag":null,"topics":["build","cli","nodejs"],"latest_commit_sha":null,"homepage":"","language":"JavaScript","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/cliffano.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","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":"2010-12-02T13:22:39.000Z","updated_at":"2025-02-03T00:44:39.000Z","dependencies_parsed_at":"2023-01-11T15:27:39.055Z","dependency_job_id":"f996bfd0-0a42-4100-a6df-5a49f7f6382e","html_url":"https://github.com/cliffano/bob","commit_stats":{"total_commits":835,"total_committers":6,"mean_commits":"139.16666666666666","dds":0.02035928143712573,"last_synced_commit":"67e3c0d7864936c956b342bccd82063bba394530"},"previous_names":[],"tags_count":73,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/cliffano%2Fbob","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/cliffano%2Fbob/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/cliffano%2Fbob/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/cliffano%2Fbob/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/cliffano","download_url":"https://codeload.github.com/cliffano/bob/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":252922043,"owners_count":21825633,"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":["build","cli","nodejs"],"created_at":"2024-08-01T21:01:48.396Z","updated_at":"2025-05-07T17:01:54.076Z","avatar_url":"https://github.com/cliffano.png","language":"JavaScript","funding_links":[],"categories":["JavaScript"],"sub_categories":[],"readme":"\u003cimg align=\"right\" src=\"https://raw.github.com/cliffano/bob/master/avatar.jpg\" alt=\"Avatar\"/\u003e\n\n[![Build Status](https://github.com/cliffano/bob/workflows/CI/badge.svg)](https://github.com/cliffano/bob/actions?query=workflow%3ACI)\n[![Security Status](https://snyk.io/test/github/cliffano/bob/badge.svg)](https://snyk.io/test/github/cliffano/bob)\n[![Dependencies Status](https://img.shields.io/librariesio/release/npm/bob)](https://libraries.io/github/cliffano/bob)\n[![Coverage Status](https://img.shields.io/coveralls/cliffano/bob.svg)](https://coveralls.io/r/cliffano/bob?branch=master)\n[![Published Version](https://img.shields.io/npm/v/bob.svg)](http://www.npmjs.com/package/bob)\n\u003cbr/\u003e\n\nBob\n---\n\nConvention-based build tool for node.js projects.\n\nBob provides a set of build-related tasks that work cross-platform and simple to use by following a few convention.\n\nIt works with zero configuration and allows minimal customisation when you don't want to use the default type of a particular task.\n\nIt only installs the default tools, while alternative tools will be lazy-installed as required.\n\nIt doesn't have plugins. It uses various CLI tools and configure their usage in task configuration files.\n\nInstallation\n------------\n\n    npm install -g bob\n\nProject Convention\n------------------\n\nA project must have:\n\n* package.json file, with at least name and version info\n* lib/ directory, where you put your source code\n* test/ directory, where you put your test code\n\nUsage\n-----\n\nRun Bob: (from your project directory, where package.json is located)\n\n    bob clean lint test coverage\n\nRun Bob in robot mode: (generate machine-parsable output when possible)\n\n    BOB_MODE=robot bob clean lint test coverage\n\nRun Bob quietly: (only lists tasks, without each task's output)\n\n    bob --quiet clean lint test coverage\n\nTasks\n-----\n\nIn alphabetical order.\n\n\u003ctable\u003e\n  \u003ctr\u003e\n    \u003cth\u003eTask\u003c/th\u003e\n    \u003cth\u003eDescription\u003c/th\u003e\n    \u003cth\u003eDefault Type\u003c/th\u003e\n    \u003cth\u003eAlternative Type(s)\u003c/th\u003e\n  \u003c/tr\u003e\n  \u003ctr\u003e\n    \u003ctd\u003eclean\u003c/td\u003e\n    \u003ctd\u003eDelete .bob directory\u003c/td\u003e\n    \u003ctd\u003e\u003ca href=\"https://github.com/isaacs/rimraf\"\u003erimraf\u003c/a\u003e\u003c/td\u003e\n    \u003ctd\u003e-\u003c/td\u003e\n  \u003c/tr\u003e\n  \u003ctr\u003e\n    \u003ctd\u003ecomplexity\u003c/td\u003e\n    \u003ctd\u003eRun code complexity checker against *.js files in lib/ directory\u003c/td\u003e\n    \u003ctd\u003e\u003ca href=\"http://github.com/jsoverson/plato\"\u003eplato\u003c/a\u003e\u003c/td\u003e\n    \u003ctd\u003e\u003ca href=\"http://github.com/nomiddlename/jscheckstyle\"\u003ejscheckstyle\u003c/a\u003e\u003c/td\u003e\n  \u003c/tr\u003e\n  \u003ctr\u003e\n    \u003ctd\u003ecoverage\u003c/td\u003e\n    \u003ctd\u003eCheck code coverage\u003c/td\u003e\n    \u003ctd\u003e\u003ca href=\"http://github.com/arikon/mocha-istanbul\"\u003emocha-istanbul\u003c/a\u003e\u003c/td\u003e\n    \u003ctd\u003e\u003ca href=\"http://github.com/kates/buster-istanbul\"\u003ebuster-istanbul\u003c/a\u003e\u003c/td\u003e\n  \u003c/tr\u003e\n  \u003ctr\u003e\n    \u003ctd\u003edep\u003c/td\u003e\n    \u003ctd\u003eInstall dependencies specified in package.json\u003c/td\u003e\n    \u003ctd\u003enpm\u003c/td\u003e\n    \u003ctd\u003e-\u003c/td\u003e\n  \u003c/tr\u003e\n  \u003ctr\u003e\n    \u003ctd\u003edepgraph\u003c/td\u003e\n    \u003ctd\u003eGenerate module dependencies graph\u003c/td\u003e\n    \u003ctd\u003e\u003ca href=\"http://github.com/pahen/node-madge\"\u003emadge\u003c/a\u003e\u003c/td\u003e\n    \u003ctd\u003e-\u003c/td\u003e\n  \u003c/tr\u003e\n  \u003ctr\u003e\n    \u003ctd\u003edoc\u003c/td\u003e\n    \u003ctd\u003eGenerate code documentation\u003c/td\u003e\n    \u003ctd\u003e\u003ca href=\"http://github.com/jsdoc3/jsdoc\"\u003ejsdoc\u003c/a\u003e\u003c/td\u003e\n    \u003ctd\u003e\u003ca href=\"http://github.com/punkave/dox-foundation\"\u003edox-foundation\u003c/a\u003e\u003c/td\u003e\n  \u003c/tr\u003e\n  \u003ctr\u003e\n    \u003ctd\u003elint\u003c/td\u003e\n    \u003ctd\u003eLint *.js files in lib/ and test/ directories\u003c/td\u003e\n    \u003ctd\u003e\u003ca href=\"http://github.com/jshint/node-jshint\"\u003ejshint\u003c/a\u003e\u003c/td\u003e\n    \u003ctd\u003e\u003ca href=\"http://github.com/tav/nodelint\"\u003enodelint\u003c/a\u003e\u003c/td\u003e\n  \u003c/tr\u003e\n  \u003ctr\u003e\n    \u003ctd\u003enuke \u003csup\u003eTODO\u003c/sup\u003e\u003c/td\u003e\n    \u003ctd\u003eKill all processes with command containing the string 'node'\u003c/td\u003e\n    \u003ctd\u003e-\u003c/td\u003e\n    \u003ctd\u003e-\u003c/td\u003e\n  \u003c/tr\u003e\n  \u003ctr\u003e\n    \u003ctd\u003epackage\u003c/td\u003e\n    \u003ctd\u003eCreate an artifact file in .bob/artifact/ directory\u003c/td\u003e\n    \u003ctd\u003e\u003ca href=\"https://github.com/cranic/node-tar.gz\"\u003etar.gz\u003c/a\u003e\u003c/td\u003e\n    \u003ctd\u003e-\u003c/td\u003e\n  \u003c/tr\u003e\n  \u003ctr\u003e\n    \u003ctd\u003epublish\u003c/td\u003e\n    \u003ctd\u003ePublish artifact file to a repository\u003c/td\u003e\n    \u003ctd\u003e\u003ca href=\"http://www.npmjs.org\"\u003enpm\u003c/a\u003e\u003c/td\u003e\n    \u003ctd\u003e-\u003c/td\u003e\n  \u003c/tr\u003e\n  \u003ctr\u003e\n    \u003ctd\u003erestart\u003c/td\u003e\n    \u003ctd\u003eRestart application\u003c/td\u003e\n    \u003ctd\u003e\u003ca href=\"http://www.npmjs.org\"\u003enpm\u003c/a\u003e\u003c/td\u003e\n    \u003ctd\u003e-\u003c/td\u003e\n  \u003c/tr\u003e\n  \u003ctr\u003e\n    \u003ctd\u003ermdep\u003c/td\u003e\n    \u003ctd\u003eRemove node_modules directory.\u003c/td\u003e\n    \u003ctd\u003e\u003ca href=\"https://github.com/isaacs/rimraf\"\u003erimraf\u003c/a\u003e\u003c/td\u003e\n    \u003ctd\u003e-\u003c/td\u003e\n  \u003c/tr\u003e\n  \u003ctr\u003e\n    \u003ctd\u003esend \u003csup\u003eTODO\u003c/sup\u003e\u003c/td\u003e\n    \u003ctd\u003eSend artifact file to a remote server.\u003c/td\u003e\n    \u003ctd\u003escp\u003c/td\u003e\n    \u003ctd\u003e\u003ca href=\"https://github.com/cliffano/sendman\"\u003esendman\u003c/a\u003e\u003c/td\u003e\n  \u003c/tr\u003e\n  \u003ctr\u003e\n    \u003ctd\u003esite\u003c/td\u003e\n    \u003ctd\u003eGenerate web site.\u003c/td\u003e\n    \u003ctd\u003e\u003ca href=\"https://github.com/cliffano/ae86\"\u003eae86\u003c/a\u003e\u003c/td\u003e\n    \u003ctd\u003e\u003ca href=\"https://github.com/nfroidure/buildbranch\"\u003ebuildbranch\u003c/a\u003e\u003c/td\u003e\n  \u003c/tr\u003e\n  \u003ctr\u003e\n    \u003ctd\u003estart\u003c/td\u003e\n    \u003ctd\u003eStart application\u003c/td\u003e\n    \u003ctd\u003e\u003ca href=\"http://www.npmjs.org\"\u003enpm\u003c/a\u003e\u003c/td\u003e\n    \u003ctd\u003e-\u003c/td\u003e\n  \u003c/tr\u003e\n  \u003ctr\u003e\n    \u003ctd\u003estatus\u003c/td\u003e\n    \u003ctd\u003eStatus application\u003c/td\u003e\n    \u003ctd\u003e\u003ca href=\"http://www.npmjs.org\"\u003enpm\u003c/a\u003e\u003c/td\u003e\n    \u003ctd\u003e-\u003c/td\u003e\n  \u003c/tr\u003e\n  \u003ctr\u003e\n    \u003ctd\u003estop\u003c/td\u003e\n    \u003ctd\u003eStop application\u003c/td\u003e\n    \u003ctd\u003e\u003ca href=\"http://www.npmjs.org\"\u003enpm\u003c/a\u003e\u003c/td\u003e\n    \u003ctd\u003e-\u003c/td\u003e\n  \u003c/tr\u003e\n  \u003ctr\u003e\n    \u003ctd\u003etest\u003c/td\u003e\n    \u003ctd\u003eExecute unit test files in test/ directory\u003c/td\u003e\n    \u003ctd\u003e\u003ca href=\"http://github.com/visionmedia/mocha\"\u003emocha\u003c/a\u003e\u003c/td\u003e\n    \u003ctd\u003e\u003ca href=\"http://github.com/busterjs/buster\"\u003ebuster\u003c/a\u003e, \u003ca href=\"http://github.com/caolan/nodeunit\"\u003enodeunit\u003c/a\u003e, \u003ca href=\"http://github.com/cloudhead/vows\"\u003evows\u003c/a\u003e\u003c/td\u003e\n  \u003c/tr\u003e\n  \u003ctr\u003e\n    \u003ctd\u003etest-acceptance\u003c/td\u003e\n    \u003ctd\u003eExecute acceptance test files in test-acceptance/ directory\u003c/td\u003e\n    \u003ctd\u003e\u003ca href=\"http://github.com/visionmedia/mocha\"\u003emocha\u003c/a\u003e\u003c/td\u003e\n    \u003ctd\u003e\u003ca href=\"http://github.com/cucumber/cucumber-js\"\u003ecucumber\u003c/a\u003e\u003c/td\u003e\n  \u003c/tr\u003e\n  \u003ctr\u003e\n    \u003ctd\u003etest-integration\u003c/td\u003e\n    \u003ctd\u003eExecute integration test files in test-integration/ directory\u003c/td\u003e\n    \u003ctd\u003e\u003ca href=\"http://github.com/visionmedia/mocha\"\u003emocha\u003c/a\u003e\u003c/td\u003e\n    \u003ctd\u003e\u003ca href=\"http://github.com/busterjs/buster\"\u003ebuster\u003c/a\u003e, \u003ca href=\"http://github.com/cliffano/cmdt\"\u003ecmdt\u003c/a\u003e\u003c/td\u003e\n  \u003c/tr\u003e\n  \u003ctr\u003e\n    \u003ctd\u003etest-performance\u003c/td\u003e\n    \u003ctd\u003eExecute performance test files in test-performance/ directory\u003c/td\u003e\n    \u003ctd\u003e\u003ca href=\"http://github.com/visionmedia/mocha\"\u003emocha\u003c/a\u003e\u003c/td\u003e\n    \u003ctd\u003e-\u003c/td\u003e\n  \u003c/tr\u003e\n  \u003ctr\u003e\n    \u003ctd\u003eupdep\u003c/td\u003e\n    \u003ctd\u003eUpgrade all dependencies to latest version\u003c/td\u003e\n    \u003ctd\u003e\u003ca href=\"http://github.com/cliffano/pkjutil\"\u003epkjutil\u003c/a\u003e\u003c/td\u003e\n    \u003ctd\u003e-\u003c/td\u003e\n  \u003c/tr\u003e\n  \u003ctr\u003e\n    \u003ctd\u003eversionup\u003c/td\u003e\n    \u003ctd\u003eUpgrade patch version number in package.json file\u003c/td\u003e\n    \u003ctd\u003e\u003ca href=\"http://github.com/cliffano/pkjutil\"\u003epkjutil\u003c/a\u003e\u003c/td\u003e\n    \u003ctd\u003e-\u003c/td\u003e\n  \u003c/tr\u003e\n\u003c/table\u003e\n\nConfig\n------\n\nTo customise Bob for your project, create a .bob.json file in your project directory, where package.json is located.\n\nTo use nodelint instead of default jshint when running `bob lint`:\n\n    {\n      \"lint\": {\n        \"type\": \"nodelint\"\n      }\n    }\n\nTo add an alias task (called build) which executes clean lint test coverage tasks:\n\n    {\n      \"build\": \"clean lint test coverage\"\n    }\n\nContinuous Integration\n----------------------\n\n###Travis CI\n\nConfigure Bob in .travis.yml file:\n\n    before_install: \"npm install -g bob\"\n    script: \"bob clean lint test coverage\"\n\n###Jenkins CI\n\nConfigure Bob in a Jenkins job with shell script build step:\n\n    npm install -g bob\n    bob clean lint test coverage\n\nColophon\n--------\n\n[Developer's Guide](https://cliffano.github.io/developers_guide.html#nodejs)\n\nBuild reports:\n\n* [Code complexity report](https://cliffano.github.io/bob/complexity/plato/index.html)\n* [Unit tests report](https://cliffano.github.io/bob/test/mocha.txt)\n* [Test coverage report](https://cliffano.github.io/bob/coverage/c8/index.html)\n* [Integration tests report](https://cliffano.github.io/bob/test-integration/cmdt.txt)\n* [API Documentation](https://cliffano.github.io/bob/doc/jsdoc/index.html)\n\nVideos:\n\n* [Evolution of bob (Gource Vizualisation)](https://www.youtube.com/watch?v=xc-qqky2a1w) by Landon Wilkins\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fcliffano%2Fbob","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fcliffano%2Fbob","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fcliffano%2Fbob/lists"}