{"id":19048958,"url":"https://github.com/aemengo/snb","last_synced_at":"2025-04-24T01:01:44.146Z","repository":{"id":57581218,"uuid":"136864403","full_name":"aemengo/snb","owner":"aemengo","description":"simple, declarative, build automation tool","archived":false,"fork":false,"pushed_at":"2018-06-24T01:12:08.000Z","size":4231,"stargazers_count":8,"open_issues_count":0,"forks_count":1,"subscribers_count":2,"default_branch":"master","last_synced_at":"2025-04-18T09:34:04.662Z","etag":null,"topics":["build","compile","make"],"latest_commit_sha":null,"homepage":"","language":"Go","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/aemengo.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}},"created_at":"2018-06-11T02:26:09.000Z","updated_at":"2021-04-30T18:27:19.000Z","dependencies_parsed_at":"2022-09-26T19:31:04.710Z","dependency_job_id":null,"html_url":"https://github.com/aemengo/snb","commit_stats":null,"previous_names":[],"tags_count":1,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/aemengo%2Fsnb","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/aemengo%2Fsnb/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/aemengo%2Fsnb/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/aemengo%2Fsnb/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/aemengo","download_url":"https://codeload.github.com/aemengo/snb/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":250540952,"owners_count":21447427,"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","compile","make"],"created_at":"2024-11-08T23:09:17.386Z","updated_at":"2025-04-24T01:01:44.115Z","avatar_url":"https://github.com/aemengo.png","language":"Go","funding_links":[],"categories":[],"sub_categories":[],"readme":"# snb\n\n[![Build Status](https://travis-ci.org/aemengo/snb.svg?branch=master)](https://travis-ci.org/aemengo/snb)\n\n![snb usage](./images/snb-usage.png)\n\nsnb, abbreviation for *\"Shake 'N Bake\"*, is a flexible build automation tool with caching capabilities and straightfoward rules. To use, simply run the executable in the directory containing a **ShakeAndBakeFile** spec or pass the directory as an argument.\n\n## Installation\n\nUsing [Homebrew](https://brew.sh/) (darwin):\n\n```shell\n$ brew tap aemengo/snb https://github.com/aemengo/snb\n$ brew update\n$ brew install snb\n```\n\nUsing [Go](https://golang.org/) (all platforms):\n\n```shell\n$ export PATH=\"$GOPATH/bin:$PATH\"\n$ go get -u github.com/aemengo/snb\n```\n\n## Spec\n\n```shell\n$ cat ShakeAndBakeFile\nRUN ./operation.sh ./build-artifacts\n\nRUN echo \"success!\"\n```\n\nAn example **ShakeAndBakeFile** looks like above. Steps are declared with `RUN` directive and must be terminated with a completely blank line or the end of the file. Multi-line statements are supported.\n\n## Implementation\n\nEach step is scanned for referenced files and directories. A sha1 checksum is taken after each is executed, for the aforementioned files and directories, and stored in a sqlite database in `.snb/snb.db`. When snb is invoked again, the step definition and checksums of referenced files and directories are compared: opting to skip any steps that completely match.\n\n\u003e A best practice is to document the input and output artifacts of every step that you'd wish snb to track for changes.\n\n\n### Step Details\n \n* Each step is executed in its own `bash` shell, so declared environment variables and directory changes will not carry over. \n* Each step is executed relative to the directory of the ShakeAndBakeFile.\n* Each step is executed with all environment variables of the shell that snb is invoked in.\n* Each step without any referenced files or directories will not be cached.\n\n\n## Building\n\n### Prerequisites\n\n* [Golang](https://golang.org/): 1.10+\n\n1. `cd` into the root directory of the project.\n\n2. Compile the snb library.\n\n\t```shell\n\t$ go build .\n\t```\n\n## Testing\n   \n1. Install the [ginkgo](https://github.com/onsi/ginkgo) test runner cli\n   \n\t```shell\n\t$ go get -u github.com/onsi/ginkgo/ginkgo\n\t```\n\n2. Execute tests\n\n\t```shell\n\t$ ginkgo -r\n\t```\n\n## License\n\n[Apache 2.0](LICENSE).\n\nCopyright (c) 2018 Anthony Emengo","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Faemengo%2Fsnb","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Faemengo%2Fsnb","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Faemengo%2Fsnb/lists"}