{"id":16953147,"url":"https://github.com/c4milo/whisk","last_synced_at":"2025-03-21T11:28:00.160Z","repository":{"id":248573564,"uuid":"499910405","full_name":"c4milo/whisk","owner":"c4milo","description":"Detects and finds circular dependencies in Chef's cookbooks.","archived":false,"fork":false,"pushed_at":"2022-06-04T19:02:17.000Z","size":14,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":2,"default_branch":"main","last_synced_at":"2025-01-26T07:44:33.082Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"Go","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/c4milo.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"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":"2022-06-04T18:47:03.000Z","updated_at":"2024-07-15T16:58:34.000Z","dependencies_parsed_at":"2024-07-15T22:01:24.409Z","dependency_job_id":null,"html_url":"https://github.com/c4milo/whisk","commit_stats":null,"previous_names":["c4milo/whisk"],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/c4milo%2Fwhisk","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/c4milo%2Fwhisk/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/c4milo%2Fwhisk/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/c4milo%2Fwhisk/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/c4milo","download_url":"https://codeload.github.com/c4milo/whisk/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":244789374,"owners_count":20510539,"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":[],"created_at":"2024-10-13T22:06:25.641Z","updated_at":"2025-03-21T11:28:00.132Z","avatar_url":"https://github.com/c4milo.png","language":"Go","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Whisk\n\nDetects and finds circular dependencies in Chef's cookbooks.\n\n- [Why](#why)\n- [How](#how)\n- [Usage](#usage)\n- [Deployments](#deployments)\n  - [Linux](#linux)\n  - [MacOS](#macos)\n- [Integrations](#integrations)\n\n## Why\n\nWe built this tool to help introduce Chef [Policyfiles](https://docs.chef.io/policyfile/) into our chef-repo, which requires our dependency graph to be a DAG.\n\n## How\n\nA presentation about how this tool was built can be seen [here](https://docs.google.com/presentation/d/113TqRIfvJ6RpIpnwhcFTvZLRmOwS3IIeIL8ztJZ134g/edit#slide=id.g62bc63a727_0_0)\n\n## Usage\n\n```\n$ ./whisk --help\n\nUsage:\n  whisk [flags] \u003crole_path\u003e\n  whisk [command]\n\nAvailable Commands:\n  help        Help about any command\n  lint        Lints all Chef roles dependencies to make sure a minimum quality bar is held\n\nFlags:\n  -c, --cookbook-path string   Comma-separated cookbook paths (default \"./cookbooks\")\n  -h, --help                   help for whisk\n  -o, --output string          Output format, either ascii, json or dot (default \"ascii\")\n\nUse \"whisk [command] --help\" for more information about a command.\n```\n\nExample:\n\n```\n $ ./whisk --cookbook-path=/Users/caguilar/src/chef-repo/site-cookbooks/,/Users/caguilar/src/chef-repo/cookbooks/ /Users/caguilar/src/chef-repo/roles/slack-min.json\n.\n└── slack-min\n    ├── apt-freight\n    │   ├── apt\n    │   └── feature\n    ├── awscli\n    │   └── poise-python\n    ├── chef-client\n    │   ├── bluepill\n    │   │   └── rsyslog\n    │   └── slack-base-runit\n    │       └── slack-runit\n    │           └── runit\n    ├── chef-handlers\n    │   ├── chef_handler\n    │   └── slack-base-helper\n    ├── consul\n    │   ├── aws-ro\n    │   │   └── consul-template\n    │   │       ├── nebula\n    │   │       │   ├── slack-base-check\n    │   │       │   ├── slack-collectd\n    │   │       │   ├── slack-deployable\n    │   │       │   │   ├── prometheus_targets\n    │   │       │   │   │   ├── slack-cron\n    │   │       │   │   │   ├── slack-instance\n    │   │       │   │   │   ├── slackops-tool\n    │   │       │   │   │   │   ├── s3_file\n    │   │       │   │   │   │   ├── slack-base-update-template\n    │   │       │   │   │   │   └── slack-python\n    │   │       │   │   │   └── systemd-service\n    │   │       │   │   ├── sudo\n    │   │       │   │   └── what-happened\n    │   │       │   │       └── slack-base-cron\n    │   │       │   └── slack-go\n    │   │       └── slack-validation\n    │   ├── certs\n    │   ├── credentials\n    │   ├── slack-base-log\n    │   │   ├── murron\n    │   │   ├── slack-monitoring\n    │   │   │   ├── perl\n    │   │   │   │   └── windows\n    │   │   │   └── slack-apache\n    │   │   │       ├── apache2\n    │   │   │       │   └── php\n    │   │   │       ├── misc_env\n    │   │   │       │   └── swap\n    │   │   │       └── slack-git\n    │   │   └── slack-monitoring-client\n    │   └── slack-chef-client\n    │       └── blocklist-node-attrs\n    ├── discover\n    ├── foodcourt\n    ├── go-audit\n    ├── hosts\n    ├── load-balancer\n    ├── ntp\n    ├── slack-base-image\n    │   └── ssh-known-hosts\n    ├── slack-chef-metrics\n    ├── slack-environment-guard\n    ├── slack-logrotate\n    ├── slack-motd\n    ├── slack-nessus-agent\n    ├── slack-rsyslog\n    ├── slack-sysctl\n    │   └── sysctl\n    ├── slack-wrappers\n    ├── sshd\n    ├── ssm-agent\n    ├── trace\n    ├── users\n    └── zsh\n\n\n⚠️  Strongly Connected Components (topologically sorted): 1\n\n1. what-happened, slack-monitoring-client, slack-apache, slackops-tool, prometheus_targets, slack-monitoring, murron, slack-base-log, certs, consul, slack-deployable, slack-collectd, nebula, consul-template, aws-ro, php, apache2\n\n\n🌀 Cycles: 53\n\n1. apache2, php, aws-ro, consul-template, nebula, slack-deployable, consul, slack-base-log, slack-monitoring, slack-apache, apache2\n2. apache2, php, aws-ro, consul-template, nebula, slack-deployable, prometheus_targets, consul, slack-base-log, slack-monitoring, slack-apache, apache2\n3. aws-ro, consul-template, nebula, slack-deployable, consul, aws-ro\n4. aws-ro, consul-template, nebula, slack-deployable, consul, slack-base-log, murron, aws-ro\n5. aws-ro, consul-template, nebula, slack-deployable, consul, slack-base-log, slack-monitoring, prometheus_targets, aws-ro\n6. aws-ro, consul-template, nebula, slack-deployable, consul, slack-base-log, slack-monitoring, slack-apache, php, aws-ro\n7. aws-ro, consul-template, nebula, slack-deployable, consul, slack-base-log, slack-monitoring-client, prometheus_targets, aws-ro\n8. aws-ro, consul-template, nebula, slack-deployable, prometheus_targets, aws-ro\n9. aws-ro, consul-template, nebula, slack-deployable, prometheus_targets, consul, aws-ro\n10. aws-ro, consul-template, nebula, slack-deployable, prometheus_targets, consul, slack-base-log, murron, aws-ro\n11. aws-ro, consul-template, nebula, slack-deployable, prometheus_targets, consul, slack-base-log, slack-monitoring, slack-apache, php, aws-ro\n12. certs, consul-template, nebula, slack-deployable, consul, certs\n13. certs, consul-template, nebula, slack-deployable, consul, slack-base-log, slack-monitoring, certs\n14. certs, consul-template, nebula, slack-deployable, consul, slack-base-log, slack-monitoring, slack-apache, certs\n15. certs, consul-template, nebula, slack-deployable, prometheus_targets, consul, certs\n16. certs, consul-template, nebula, slack-deployable, prometheus_targets, consul, slack-base-log, slack-monitoring, certs\n17. certs, consul-template, nebula, slack-deployable, prometheus_targets, consul, slack-base-log, slack-monitoring, slack-apache, certs\n18. consul, consul-template, nebula, slack-deployable, consul\n19. consul, consul-template, nebula, slack-deployable, prometheus_targets, consul\n20. consul, nebula, slack-deployable, consul\n21. consul, nebula, slack-deployable, prometheus_targets, consul\n22. consul, slack-base-log, murron, consul\n23. consul, slack-base-log, murron, slack-deployable, consul\n24. consul, slack-base-log, murron, slack-deployable, prometheus_targets, consul\n25. consul, slack-base-log, slack-monitoring, consul\n26. consul, slack-base-log, slack-monitoring, prometheus_targets, consul\n27. consul, slack-base-log, slack-monitoring, prometheus_targets, nebula, slack-deployable, consul\n28. consul, slack-base-log, slack-monitoring, prometheus_targets, slackops-tool, consul-template, nebula, slack-deployable, consul\n29. consul, slack-base-log, slack-monitoring, prometheus_targets, slackops-tool, slack-deployable, consul\n30. consul, slack-base-log, slack-monitoring, slack-apache, consul-template, nebula, slack-deployable, consul\n31. consul, slack-base-log, slack-monitoring, slack-apache, consul-template, nebula, slack-deployable, prometheus_targets, consul\n32. consul, slack-base-log, slack-monitoring, slackops-tool, consul-template, nebula, slack-deployable, consul\n33. consul, slack-base-log, slack-monitoring, slackops-tool, consul-template, nebula, slack-deployable, prometheus_targets, consul\n34. consul, slack-base-log, slack-monitoring, slackops-tool, slack-deployable, consul\n35. consul, slack-base-log, slack-monitoring, slackops-tool, slack-deployable, prometheus_targets, consul\n36. consul, slack-base-log, slack-monitoring-client, nebula, slack-deployable, consul\n37. consul, slack-base-log, slack-monitoring-client, nebula, slack-deployable, prometheus_targets, consul\n38. consul, slack-base-log, slack-monitoring-client, prometheus_targets, consul\n39. consul, slack-base-log, slack-monitoring-client, prometheus_targets, nebula, slack-deployable, consul\n40. consul, slack-base-log, slack-monitoring-client, prometheus_targets, slackops-tool, consul-template, nebula, slack-deployable, consul\n41. consul, slack-base-log, slack-monitoring-client, prometheus_targets, slackops-tool, slack-deployable, consul\n42. consul, slackops-tool, consul-template, nebula, slack-deployable, consul\n43. consul, slackops-tool, consul-template, nebula, slack-deployable, prometheus_targets, consul\n44. consul, slackops-tool, slack-deployable, consul\n45. consul, slackops-tool, slack-deployable, prometheus_targets, consul\n46. consul, what-happened, slack-deployable, consul\n47. consul, what-happened, slack-deployable, prometheus_targets, consul\n48. consul-template, nebula, slack-collectd, consul-template\n49. consul-template, nebula, slack-deployable, consul-template\n50. consul-template, nebula, slack-deployable, prometheus_targets, slackops-tool, consul-template\n51. nebula, slack-deployable, prometheus_targets, nebula\n52. prometheus_targets, slackops-tool, slack-deployable, prometheus_targets\n53. slack-deployable, what-happened, slack-deployable\n```\n\n## Deployments\n\nWe are currently using `orchestrated-deploy` for Linux machines and `slack-cli-tools` for MacOS deployments.\n\n### Linux\n\nThe pipeline to publish and promote new versions for Linux is: https://jenkins.tinyspeck.com/job/whisk\n\n### MacOS\n\n1. Run `./build.sh`\n1. Copy the binaries generated in `./build/` to https://slack-github.com/slack/slack-cli-tools/tree/master/bin\n1. Send a PR to `slack-cli-tools`\n\n## Integrations\n### Checkpoint\nWe currently have Whisk configured as a CI check in the following repos: \n* chef-repo: https://slack-github.com/slack/chef-repo/blob/f887f64cc4efebea7980848313ec5baaf3413bd2/slack.json#L115-L117\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fc4milo%2Fwhisk","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fc4milo%2Fwhisk","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fc4milo%2Fwhisk/lists"}