{"id":20512566,"url":"https://github.com/jpluscplusm/echinocultural-coding","last_synced_at":"2026-05-27T13:35:44.870Z","repository":{"id":93632582,"uuid":"96872413","full_name":"jpluscplusm/echinocultural-coding","owner":"jpluscplusm","description":"Test-driven development of shell scripts","archived":false,"fork":false,"pushed_at":"2017-07-20T10:21:20.000Z","size":34,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"master","last_synced_at":"2025-03-05T22:47:26.074Z","etag":null,"topics":["shell","shell-script","shell-scripting","shellscript","test-driven-development","test-framework","testing-framework","testing-tools"],"latest_commit_sha":null,"homepage":"","language":"Makefile","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"gpl-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/jpluscplusm.png","metadata":{"files":{"readme":"README.md","changelog":null,"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":"2017-07-11T08:53:26.000Z","updated_at":"2017-07-19T07:41:03.000Z","dependencies_parsed_at":"2023-03-16T02:46:37.957Z","dependency_job_id":null,"html_url":"https://github.com/jpluscplusm/echinocultural-coding","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/jpluscplusm/echinocultural-coding","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jpluscplusm%2Fechinocultural-coding","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jpluscplusm%2Fechinocultural-coding/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jpluscplusm%2Fechinocultural-coding/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jpluscplusm%2Fechinocultural-coding/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/jpluscplusm","download_url":"https://codeload.github.com/jpluscplusm/echinocultural-coding/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jpluscplusm%2Fechinocultural-coding/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":33568857,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-26T15:22:16.424Z","status":"online","status_checked_at":"2026-05-27T02:00:06.184Z","response_time":53,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"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":["shell","shell-script","shell-scripting","shellscript","test-driven-development","test-framework","testing-framework","testing-tools"],"created_at":"2024-11-15T20:41:59.311Z","updated_at":"2026-05-27T13:35:44.853Z","avatar_url":"https://github.com/jpluscplusm.png","language":"Makefile","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Echinocultural coding\n\nSea urchins are covered in a shell, called a \"test\", and their commercial\nfarming is called \"Echinoculture\".  This project helps you to grow tests around\nyour shell scripts, to increase their robustness and value.\n\nBy using this method from the start of developing a shell script, you can\npractise TDD within a shell context, and have confidence a script does what\nit's meant to when you modify it.\n\n## Quickstart\n\n*Don't* check out this repository - you just need the Makefile.\n\nMake a directory for your script to live in: when using this method for\ndeveloping shell scripts, you'll have more than just a single script file\nduring development. (The final distributable artifact can be a single file).\n\nThe Makefile has a built-in bootstrap mode, which creates a test and function\nlibrary directory structure, and some examples of both.\n\nHere's the suggested way to set up your new script in action:\n\n```\n$ mkdir a-new-script.sh\n$ cd a-new-script.sh\n$ wget --quiet https://raw.githubusercontent.com/jpluscplusm/echinocultural-coding/master/Makefile\n$ make bootstrap\nCreating shell\nCreating functions/main\nCreating main\nCreating functions/examples\nCreating tests/examples.mk\nCreating tests/unit/bats/examples\nCreating tests/unit/shell/examples\n$ make test\nfind tests/unit/shell/ -type f -exec {} \\;\nShell tests start\n Numeric test 1 passed\n Numeric test 2 passed\nShell tests passed\nif which bats \u003e/dev/null; then find tests/unit/bats/ -type f -exec bats {} + ; fi\n ✓ seconds_since_epoch returns a number\n ✓ seconds_since_epoch increments over time\n\n2 tests, 0 failures\n$ make script\ncat shell functions/main functions/examples main \u003escript\n$ ./script\nThis is the main function, being run at Unix time 1500448666.\n$ cd ..\n$ ./a-new-script.sh/script\nThis is the main function, being run at Unix time 1500448673.\n```\n\nAll `examples` files can be deleted as soon as you wish, but do remember to\nplace a new Makefile in `tests/` so that your tests are found and run. See the\nsection \"Adding tests\" in this file.\n\n## Development workflow\n\n## Adding tests\n\n## Repackaging the bootstrap archive\n\nNB You don't need to do this. It's for my reference only, or if you want to\ndistribute a version of the Makefile with different bootstrap contents. This\nproject is licensed under the GPLv2, as per `LICENSE`.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjpluscplusm%2Fechinocultural-coding","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fjpluscplusm%2Fechinocultural-coding","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjpluscplusm%2Fechinocultural-coding/lists"}