{"id":41174847,"url":"https://github.com/sap1ens/syrup","last_synced_at":"2026-01-22T19:51:54.517Z","repository":{"id":65513567,"uuid":"55928139","full_name":"sap1ens/syrup","owner":"sap1ens","description":"Scrum workflow CLI for GitHub with or without Waffle.io. Can also be used with ZenHub.","archived":false,"fork":false,"pushed_at":"2016-10-11T23:46:38.000Z","size":34,"stargazers_count":3,"open_issues_count":0,"forks_count":2,"subscribers_count":1,"default_branch":"master","last_synced_at":"2025-10-19T17:41:49.334Z","etag":null,"topics":["github","nodejs","waffle","zenhub"],"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/sap1ens.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":null,"funding":null,"license":"LICENSE.md","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2016-04-10T23:38:39.000Z","updated_at":"2018-08-28T16:14:26.000Z","dependencies_parsed_at":"2023-01-26T20:45:14.619Z","dependency_job_id":null,"html_url":"https://github.com/sap1ens/syrup","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/sap1ens/syrup","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sap1ens%2Fsyrup","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sap1ens%2Fsyrup/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sap1ens%2Fsyrup/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sap1ens%2Fsyrup/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/sap1ens","download_url":"https://codeload.github.com/sap1ens/syrup/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sap1ens%2Fsyrup/sbom","scorecard":{"id":800219,"data":{"date":"2025-08-11","repo":{"name":"github.com/sap1ens/syrup","commit":"33f8d9012a92b5f51237cda13903a78dc684cc17"},"scorecard":{"version":"v5.2.1-40-gf6ed084d","commit":"f6ed084d17c9236477efd66e5b258b9d4cc7b389"},"score":3,"checks":[{"name":"Code-Review","score":0,"reason":"Found 0/25 approved changesets -- score normalized to 0","details":null,"documentation":{"short":"Determines if the project requires human code review before pull requests (aka merge requests) are merged.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#code-review"}},{"name":"Token-Permissions","score":-1,"reason":"No tokens found","details":null,"documentation":{"short":"Determines if the project's workflows follow the principle of least privilege.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#token-permissions"}},{"name":"Dangerous-Workflow","score":-1,"reason":"no workflows found","details":null,"documentation":{"short":"Determines if the project's GitHub Action workflows avoid dangerous patterns.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#dangerous-workflow"}},{"name":"Maintained","score":0,"reason":"0 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 0","details":null,"documentation":{"short":"Determines if the project is \"actively maintained\".","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#maintained"}},{"name":"Packaging","score":-1,"reason":"packaging workflow not detected","details":["Warn: no GitHub/GitLab publishing workflow detected."],"documentation":{"short":"Determines if the project is published as a package that others can easily download, install, easily update, and uninstall.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#packaging"}},{"name":"Pinned-Dependencies","score":-1,"reason":"no dependencies found","details":null,"documentation":{"short":"Determines if the project has declared and pinned the dependencies of its build process.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#pinned-dependencies"}},{"name":"Binary-Artifacts","score":10,"reason":"no binaries found in the repo","details":null,"documentation":{"short":"Determines if the project has generated executable (binary) artifacts in the source repository.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#binary-artifacts"}},{"name":"CII-Best-Practices","score":0,"reason":"no effort to earn an OpenSSF best practices badge detected","details":null,"documentation":{"short":"Determines if the project has an OpenSSF (formerly CII) Best Practices Badge.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#cii-best-practices"}},{"name":"Security-Policy","score":0,"reason":"security policy file not detected","details":["Warn: no security policy file detected","Warn: no security file to analyze","Warn: no security file to analyze","Warn: no security file to analyze"],"documentation":{"short":"Determines if the project has published a security policy.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#security-policy"}},{"name":"Vulnerabilities","score":10,"reason":"0 existing vulnerabilities detected","details":null,"documentation":{"short":"Determines if the project has open, known unfixed vulnerabilities.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#vulnerabilities"}},{"name":"Fuzzing","score":0,"reason":"project is not fuzzed","details":["Warn: no fuzzer integrations found"],"documentation":{"short":"Determines if the project uses fuzzing.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#fuzzing"}},{"name":"License","score":10,"reason":"license file detected","details":["Info: project has a license file: LICENSE.md:0","Info: FSF or OSI recognized license: MIT License: LICENSE.md:0"],"documentation":{"short":"Determines if the project has defined a license.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#license"}},{"name":"Signed-Releases","score":-1,"reason":"no releases found","details":null,"documentation":{"short":"Determines if the project cryptographically signs release artifacts.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#signed-releases"}},{"name":"Branch-Protection","score":0,"reason":"branch protection not enabled on development/release branches","details":["Warn: branch protection not enabled for branch 'master'"],"documentation":{"short":"Determines if the default and release branches are protected with GitHub's branch protection settings.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#branch-protection"}},{"name":"SAST","score":0,"reason":"SAST tool is not run on all commits -- score normalized to 0","details":["Warn: 0 commits out of 8 are checked with a SAST tool"],"documentation":{"short":"Determines if the project uses static code analysis.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#sast"}}]},"last_synced_at":"2025-08-23T10:14:38.322Z","repository_id":65513567,"created_at":"2025-08-23T10:14:38.322Z","updated_at":"2025-08-23T10:14:38.322Z"},"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":28669763,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-01-22T19:36:09.361Z","status":"ssl_error","status_checked_at":"2026-01-22T19:36:05.567Z","response_time":144,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"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":["github","nodejs","waffle","zenhub"],"created_at":"2026-01-22T19:51:54.456Z","updated_at":"2026-01-22T19:51:54.510Z","avatar_url":"https://github.com/sap1ens.png","language":"JavaScript","readme":"# syrup for your waffles\n\nScrum workflow CLI for GitHub with or without [Waffle.io](https://waffle.io). Can also be used with [ZenHub](https://www.zenhub.com). Currently only supports CLI mode.\n\nFeatures:\n- List all Sprints with associated issues and details\n- Create new Sprint (using labels or milestones)\n- Clone issue (if you decide to move it to the next Sprint)\n\n![](https://db.tt/bxxiKMdK)\n\n## Workflows\n\nYou can use GitHub with or without Waffle.io - in this case your workflow should be similar to what's covered in the **GitHub \u0026 Waffle.io Workflows** section.\n\nIf you use ZenHub you probably already have everything you need, but this app still can help you with milestones, check **ZenHub Workflow** section.\n\nAlso, in both cases `clone-issue` command can be helpful for moving tickets between Sprints.\n\n## GitHub \u0026 Waffle.io Workflows\n\n[Waffle.io](https://waffle.io) is an amazing project management tool based on GitHub. It has two-way synchronization with GitHub and shows\nyour issues for a repo as a Kanban board.\n\nIt's a bit tricky to use Waffle for Sprints when you connect multiple repos to one board (but this is something you'll end up doing anyway). We developed a set of rules to follow, which enables this app to show the Sprint information we need.\n\n### Points\n\nWaffle has its own system for points, but it's a bit weird (points like `1`, `3`, `5`, `8`, `13`...), it doesn't sync with GitHub and all points basically disappear when issue is archived. So instead, every project that participates in a Sprint **must contain** these 5 labels for story points: `1`, `2`, `3`, `4`, `5`. You can create these labels automatically for all repos using `setup` command, check **Usage** section.\n\n### Teams\n\nMultiple teams can work on the same repo. You **must tag** issues with a label that identifies your team. This label must be the same for all projects you track. You can define it using `project:teamLabel` config option. You can create this label automatically for all repos using `setup` command, check **Usage** section.\n\n### Sprints\n\nUnfortunately you can't really use milestones when you have multiple repos for the same Sprint. Also, sometimes you have to move ticket to the next Sprint, in this case you can't keep the information that ticket was initially assigned to previous Sprint.\n\nBut again, you can solve this problem with labels. Have a format like this: `[TEAM_NAME] Sprint [SPRINT_COUNTER]`, for example `Platform Sprint 10`. You can define the initial part with `project:sprintKeywords` config option, for example `Platform Sprint`.\n\n## ZenHub Workflow\n\n[ZenHub](https://www.zenhub.com) has almost everything that's covered here, except one thing - when you create a new Sprint you have to do it through milestones. If you have a board with multiple connected repos you'll have to create milestone manually for each one.\n\nYou can use `new-milestone` command to do it for you, it'll automatically create the same milestone (using title and due date) for all repos, so ZenHub can merge them and use as a single Sprint.\n\n## Installation\n\n```\nnpm install -g syrup-cli\n```\n\nThen create `~/.syrup/config.json` file using `config.json.example`. You need to configure the following options:\n\n- `github:token` your GitHub token. You can use [this page](https://help.github.com/articles/creating-an-access-token-for-command-line-use/) if you don't know how to do it\n- `project:user` GitHub user or organization to use for search\n- `project:teamLabel` GitHub label for your team. Should be the same for all repos\n- `project:sprintKeywords` Keywords for the GitHub label to mark Sprints. Check Workflow section for more info\n- `project:sprintLabelColor` Color of the Sprint label, hex code without `#`\n- `project:teamRepos` Array of repos names for your team (connected repos in the Waffle source settings), without organization/user. For example, specify `syrup` for `https://github.com/sap1ens/syrup` repo.\n\nAll these options can be passed as arguments or environment variables.\n\nHere's an example of the real config I use: https://gist.github.com/sap1ens/4abf84d0726fd7abe5a5f07b17e00dc0.\n\n## Usage\n\n\u003e syrup setup\n\nSetup all team repos, create all required labels.\n\n\u003e syrup list-sprints\n\nList all existing Sprints.\n\n\u003e syrup new-sprint -- --id SPRINT_ID\n\nCreate new Sprint using unique SPRINT_ID, it'll be used for sorting (so simple incremental number should be fine).\n\n\u003e syrup new-milestone --title 'MILESTONE_TITLE' --date 'DUE_DATE'\n\nCreate new milestone in every connected repo using title and due date (YYYY-MM-DD format).\n\n\u003e syrup clone-issue -- --repo REPO_NAME --id ISSUE_ID\n\nClone issue using provided repo name and issue ID.\n\n\u003e syrup -h\n\nHelp page.\n\n## Development\n\nYou can use this command for iterating:\n\n\u003e npm run start [COMMAND] [OPTIONS]\n\n## TODO\n\n- Make all label colors to be configurable\n- Error handling\n- Tests\n","funding_links":[],"categories":[],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsap1ens%2Fsyrup","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fsap1ens%2Fsyrup","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsap1ens%2Fsyrup/lists"}