{"id":25946986,"url":"https://github.com/spring-financial-group/peacock","last_synced_at":"2026-02-16T23:28:59.427Z","repository":{"id":60186683,"uuid":"531013458","full_name":"spring-financial-group/peacock","owner":"spring-financial-group","description":"Show off with minimal effort","archived":false,"fork":false,"pushed_at":"2024-09-13T23:53:33.000Z","size":1117,"stargazers_count":3,"open_issues_count":4,"forks_count":0,"subscribers_count":2,"default_branch":"main","last_synced_at":"2024-09-14T13:54:34.398Z","etag":null,"topics":["cicd","gitops","helm","notifications","production","release-notes","release-notes-generator","slack"],"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/spring-financial-group.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":"2022-08-31T09:20:26.000Z","updated_at":"2024-01-12T18:36:25.000Z","dependencies_parsed_at":"2023-02-19T07:35:21.844Z","dependency_job_id":"8637481b-7611-4dee-a261-3ab09bd67c02","html_url":"https://github.com/spring-financial-group/peacock","commit_stats":{"total_commits":138,"total_committers":6,"mean_commits":23.0,"dds":"0.32608695652173914","last_synced_commit":"05bd79642a2f7030061123d1e3b08d4ad5f4a52c"},"previous_names":[],"tags_count":114,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/spring-financial-group%2Fpeacock","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/spring-financial-group%2Fpeacock/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/spring-financial-group%2Fpeacock/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/spring-financial-group%2Fpeacock/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/spring-financial-group","download_url":"https://codeload.github.com/spring-financial-group/peacock/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":241827168,"owners_count":20026601,"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":["cicd","gitops","helm","notifications","production","release-notes","release-notes-generator","slack"],"created_at":"2025-03-04T10:17:45.312Z","updated_at":"2026-02-16T23:28:59.367Z","avatar_url":"https://github.com/spring-financial-group.png","language":"Go","funding_links":[],"categories":[],"sub_categories":[],"readme":"\u003cp align=\"center\"\u003e\n  \u003cimg alt=\"peacock logo\" src=\"images/peacock.png\" height=\"300\" /\u003e\n  \u003ch1 align=\"center\"\u003ePeacock\u003c/h1\u003e\n  \u003cp align=\"center\"\u003e\u003cB\u003eShow off with minimal effort\u003c/B\u003e\u003c/p\u003e\n\u003c/p\u003e\n\n`peacock` is a simple CI/CD tool for telling your users what you're up to. It integrates with existing pipelines to\nfire out notifications to your users without having to collate and write release notes.\n\n# Overview\nPeacock works by parsing the contents of the description of a Pull Request and converting that into notifications to\nbe sent to users - making it easy for developers to communicate release information. Peacock supports sending multiple\nmessages to different teams allowing you to curate your release notes based on the audience.\n\n* Easy to set up and integrate\n* Supports multiple methods of communications\n* Can send multiple messages to multiple teams all from one PR\n\n# Installation\n## Local\nTo run Peacock on your local machine:\n```bash\ngit clone https://github.com/spring-financial-group/peacock.git\nmake install\n```\n## CI/CD\n\nTo run Peacock in a CI/CD pipeline:\n```yaml\n- image: mqubeoss.azurecr.io/spring-financial-group/peacock:latest\n```\nCheckout [our pipeline definitions](https://github.com/spring-financial-group/peacock/tree/main/.lighthouse/jenkins-x/peacock)\nfor an example of how it can be used.\n\n## Configuration\n### Feathers\nPeacock's feathers are each way that you'd like to communicate with your users. These are stored in `.peacock/feathers.yaml`\nin the repository that you'd like Peacock to run in.\n\nEach team in the feathers needs to have a `contactType` and some `addresses` which define how your users will be contacted.\nSee [Communication Methods](#communication-methods) for all the methods supported by Peacock.\n\n```yaml\nteams:\n  - name: QA\n    contactType: slack\n    addresses:\n    - C56H7G209DF\n  - name: FrontEnd\n    contactType: webhook\n    addresses:\n      - john.smith@google.com\n      - tom.allen@github.com\n  - name: BackEnd\n    contactType: slack\n    addresses:\n      - C56H7G209DF\n  - name: Business\n    contactType: slack\n    addresses:\n      - C56H7G209DF\n```\n\n### Environment Variables\nEnvironment variables are used configure Peacock in a pipeline. For integrating into different CI/CD tools the keys for\nthese variables can be overridden using flags for each command.\n\n| Variable         | Description                                     | Required                                                              | Overwrite Flag            |\n|------------------|-------------------------------------------------|-----------------------------------------------------------------------|---------------------------|\n| `PR_NUMBER`      | The number of the Pull Request.                 | Required when using `--dry-run`                                       | `pr-number-key`           |\n| `GITHUB_TOKEN`   | The token to use for authentication with GitHub | Always                                                                | `git-token-key`           |\n| `REPO_OWNER`     | The owner of the repository                     | If not passed then value is retrieved from the local git instance     | `git-owner-key`           |\n| `REPO_NAME`      | The name of the repository                      | If not passed then value is retrieved from the local git instance     | `git-repo-key`            |\n| `GIT_SERVER`     | The domain of the git server                    | Default is https://github.com                                         | `git-server-key`          |\n| `SLACK_TOKEN`    | The token used to authenticate with Slack       | Only if the `slack` communication method is defined in the feathers   | `slack-token-key`         |\n| `WEBHOOK_URL`    | The URL that Peacock will post to               | Only if the `webhook` communication method is defined in the feathers | `webhook-URL-key`         |\n| `WEBHOOK_SECRET` | The secret used to authenticate Peacock         | Only if the `webhook` communication method is defined in the feathers | `webhook-HMAC-secret-key` |\n\n## Communication Methods\n### Slack\nTo use Slack as a method of communication a Slack app will need to be setup for your organisation with the minimum\nscope of `chat:write`. It's important to remember that for private channels your app will need to be invited for Peacock\nto post messages.\n\nAlthough Peacock does convert Markdown to Slack's implementation, due to Slack only supporting a mild version of Markdown\nthis conversion is limited.\n\n### Webhook\nPeacock offers a webhook so that it can be intergrated with your own communication method. When a notification is sent\npeacock will send an HTTP POST request to the configured webhook URL with the following JSON body:\n```json\n{\n   \"body\": \"string\",\n   \"subject\": \"string\",\n   \"addresses\": [\n      \"string\"\n   ]\n}\n```\nTo authenticate the request Peacock sends a `X-Signature-256` header with the request. This is a HMAC digest of the request\nbody using the SHA-256 hash function and the webhook secret as the key.\n\nPeacock converts the GitHub markdown to HTML before sending the request.\n\n# Usage\nPeacock uses Notify headers (`### Notify`) in the description of a PR to identify messages and teams to contact.\nAdditional information about the PR can be added as long as it is above the first Notify header - otherwise it will be\nincluded in one of the messages.\n\nExample PR description:\n```markdown\n# Production Release PR\nHere is some text that won't be sent in any of the messages.\n\n### Notify QA, FrontEnd, BackEnd\n# Service Promotions\n\n**Services Being Promoted**\n* Peacock\n\n**What functionality is being released?**\n* A really cool dev tool that lets you communicate release notes to your users more easily\n\n**Risk Of Release**\nLow\n\n### Notify Business\n# New Software Release\nWe have just promoted a new tool that will let us more easily inform you of any future releases that we make.\n\nWe will be using this from now on to communicate any really cool features that we add to the platform.\n```\n\n**Pre-submission**\n\nUse the command `peacock run --dry-run` pre-submission to validate the messages and check that all the right\ninformation was supplied for Peacock to run. Adding the `--comment-validation` flag means that Peacock will post a breakdown of the\nmessages back to the PR as a comment.\n\nThe Pull Request number needs to be provided for Peacock to run pre-submission.\n\n**Post-submission**\n\nUse the command `peacock run` post-submission to actually send the messages to the different teams.\n\n## User Guide\n1. Open a PR in repository as normal and add a Notify header to the PR description containing the teams you would like\n   to notify (comma separated). The teams you can choose from, and their method of contact, are stored in\n   `.peacock/feathers.yaml` in the repository.\n2. Underneath the Notify header add the content of the message you would like to send. Keep in mind that some methods\n   of contact support only a limited form of markdown - Slack.\n3. Once opened, the peacock dry run pipeline will run. This parses and validates the teams \u0026 messages, posting an\n   explanation back to the PR if it fails.\n4. Once the PR merges the peacock release pipeline starts. This is the pipeline that actually sends the notifications.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fspring-financial-group%2Fpeacock","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fspring-financial-group%2Fpeacock","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fspring-financial-group%2Fpeacock/lists"}