{"id":45310349,"url":"https://github.com/voxpupuli/webhook-go","last_synced_at":"2026-03-11T04:05:58.246Z","repository":{"id":39884053,"uuid":"368284546","full_name":"voxpupuli/webhook-go","owner":"voxpupuli","description":"Puppet Webhook port in Golang","archived":false,"fork":false,"pushed_at":"2026-02-21T05:02:16.000Z","size":371,"stargazers_count":17,"open_issues_count":13,"forks_count":18,"subscribers_count":37,"default_branch":"master","last_synced_at":"2026-02-21T12:03:52.239Z","etag":null,"topics":["api","api-rest","golang","hacktoberfest","puppet","r10k"],"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/voxpupuli.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,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null},"funding":{"open_collective":"vox-pupuli","github":"voxpupuli"}},"created_at":"2021-05-17T18:27:10.000Z","updated_at":"2026-02-21T05:02:19.000Z","dependencies_parsed_at":"2026-02-21T07:01:08.879Z","dependency_job_id":null,"html_url":"https://github.com/voxpupuli/webhook-go","commit_stats":{"total_commits":181,"total_committers":13,"mean_commits":"13.923076923076923","dds":0.574585635359116,"last_synced_commit":"484def1319d5f5e3574511499aac0a5746a91a83"},"previous_names":[],"tags_count":37,"template":false,"template_full_name":null,"purl":"pkg:github/voxpupuli/webhook-go","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/voxpupuli%2Fwebhook-go","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/voxpupuli%2Fwebhook-go/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/voxpupuli%2Fwebhook-go/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/voxpupuli%2Fwebhook-go/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/voxpupuli","download_url":"https://codeload.github.com/voxpupuli/webhook-go/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/voxpupuli%2Fwebhook-go/sbom","scorecard":{"id":403989,"data":{"date":"2025-08-11","repo":{"name":"github.com/voxpupuli/webhook-go","commit":"25b18da1a9ae08f593dfe009e22f5e56feab7d1d"},"scorecard":{"version":"v5.2.1-40-gf6ed084d","commit":"f6ed084d17c9236477efd66e5b258b9d4cc7b389"},"score":6.1,"checks":[{"name":"Dangerous-Workflow","score":10,"reason":"no dangerous workflow patterns detected","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":"Code-Review","score":10,"reason":"all changesets reviewed","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":"Maintained","score":8,"reason":"9 commit(s) and 1 issue activity found in the last 90 days -- score normalized to 8","details":null,"documentation":{"short":"Determines if the project is \"actively maintained\".","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#maintained"}},{"name":"Token-Permissions","score":0,"reason":"detected GitHub workflow tokens with excessive permissions","details":["Info: jobLevel 'actions' permission set to 'read': .github/workflows/codeql-analysis.yml:28","Info: jobLevel 'contents' permission set to 'read': .github/workflows/codeql-analysis.yml:29","Warn: no topLevel permission defined: .github/workflows/codeql-analysis.yml:1","Warn: no topLevel permission defined: .github/workflows/go.yml:1","Warn: topLevel 'contents' permission set to 'write': .github/workflows/release.yml:8","Warn: topLevel 'packages' permission set to 'write': .github/workflows/release.yml:9","Info: no jobLevel write permissions found"],"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":"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":"Pinned-Dependencies","score":0,"reason":"dependency not pinned by hash detected -- score normalized to 0","details":["Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/codeql-analysis.yml:41: update your workflow using https://app.stepsecurity.io/secureworkflow/voxpupuli/webhook-go/codeql-analysis.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/codeql-analysis.yml:45: update your workflow using https://app.stepsecurity.io/secureworkflow/voxpupuli/webhook-go/codeql-analysis.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/codeql-analysis.yml:56: update your workflow using https://app.stepsecurity.io/secureworkflow/voxpupuli/webhook-go/codeql-analysis.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/codeql-analysis.yml:70: update your workflow using https://app.stepsecurity.io/secureworkflow/voxpupuli/webhook-go/codeql-analysis.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/go.yml:15: update your workflow using https://app.stepsecurity.io/secureworkflow/voxpupuli/webhook-go/go.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/go.yml:20: update your workflow using https://app.stepsecurity.io/secureworkflow/voxpupuli/webhook-go/go.yml/master?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/go.yml:25: update your workflow using https://app.stepsecurity.io/secureworkflow/voxpupuli/webhook-go/go.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/release.yml:16: update your workflow using https://app.stepsecurity.io/secureworkflow/voxpupuli/webhook-go/release.yml/master?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/release.yml:21: update your workflow using https://app.stepsecurity.io/secureworkflow/voxpupuli/webhook-go/release.yml/master?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/release.yml:24: update your workflow using https://app.stepsecurity.io/secureworkflow/voxpupuli/webhook-go/release.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/release.yml:31: update your workflow using https://app.stepsecurity.io/secureworkflow/voxpupuli/webhook-go/release.yml/master?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/release.yml:36: update your workflow using https://app.stepsecurity.io/secureworkflow/voxpupuli/webhook-go/release.yml/master?enable=pin","Info:   0 out of   8 GitHub-owned GitHubAction dependencies pinned","Info:   0 out of   4 third-party GitHubAction dependencies pinned"],"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":"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":"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:0","Info: FSF or OSI recognized license: Apache License 2.0: LICENSE:0"],"documentation":{"short":"Determines if the project has defined a license.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#license"}},{"name":"Branch-Protection","score":-1,"reason":"internal error: error during branchesHandler.setup: internal error: githubv4.Query: Resource not accessible by integration","details":null,"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":"Signed-Releases","score":0,"reason":"Project has not signed or included provenance with any releases.","details":["Warn: release artifact v2.11.0 not signed: https://api.github.com/repos/voxpupuli/webhook-go/releases/232926959","Warn: release artifact v2.10.0 not signed: https://api.github.com/repos/voxpupuli/webhook-go/releases/212638461","Warn: release artifact v2.9.0 not signed: https://api.github.com/repos/voxpupuli/webhook-go/releases/198389622","Warn: release artifact v2.8.2 not signed: https://api.github.com/repos/voxpupuli/webhook-go/releases/195497353","Warn: release artifact v2.8.1 not signed: https://api.github.com/repos/voxpupuli/webhook-go/releases/190477650","Warn: release artifact v2.11.0 does not have provenance: https://api.github.com/repos/voxpupuli/webhook-go/releases/232926959","Warn: release artifact v2.10.0 does not have provenance: https://api.github.com/repos/voxpupuli/webhook-go/releases/212638461","Warn: release artifact v2.9.0 does not have provenance: https://api.github.com/repos/voxpupuli/webhook-go/releases/198389622","Warn: release artifact v2.8.2 does not have provenance: https://api.github.com/repos/voxpupuli/webhook-go/releases/195497353","Warn: release artifact v2.8.1 does not have provenance: https://api.github.com/repos/voxpupuli/webhook-go/releases/190477650"],"documentation":{"short":"Determines if the project cryptographically signs release artifacts.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#signed-releases"}},{"name":"Security-Policy","score":9,"reason":"security policy file detected","details":["Info: security policy file detected: github.com/voxpupuli/.github/SECURITY.md:1","Info: Found linked content: github.com/voxpupuli/.github/SECURITY.md:1","Warn: One or no descriptive hints of disclosure, vulnerability, and/or timelines in security policy","Info: Found text in security policy: github.com/voxpupuli/.github/SECURITY.md:1"],"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":"Packaging","score":10,"reason":"packaging workflow detected","details":["Info: Project packages its releases by way of GitHub Actions.: .github/workflows/go.yml:11"],"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":"SAST","score":9,"reason":"SAST tool detected but not run on all commits","details":["Info: SAST configuration detected: CodeQL","Warn: 29 commits out of 30 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"}},{"name":"Vulnerabilities","score":6,"reason":"4 existing vulnerabilities detected","details":["Warn: Project is vulnerable to: GO-2025-3787 / GHSA-fv92-fjc5-jj9h","Warn: Project is vulnerable to: GO-2025-3487 / GHSA-hcg3-q754-cr77","Warn: Project is vulnerable to: GO-2025-3503 / GHSA-qxp5-gwg8-xv66","Warn: Project is vulnerable to: GO-2025-3595 / GHSA-vvgc-356p-c3xw"],"documentation":{"short":"Determines if the project has open, known unfixed vulnerabilities.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#vulnerabilities"}}]},"last_synced_at":"2025-08-18T20:44:34.778Z","repository_id":39884053,"created_at":"2025-08-18T20:44:34.778Z","updated_at":"2025-08-18T20:44:34.778Z"},"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":30370397,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-03-10T21:41:54.280Z","status":"online","status_checked_at":"2026-03-11T02:00:07.027Z","response_time":84,"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":["api","api-rest","golang","hacktoberfest","puppet","r10k"],"created_at":"2026-02-21T07:00:53.930Z","updated_at":"2026-03-11T04:05:58.231Z","avatar_url":"https://github.com/voxpupuli.png","language":"Go","funding_links":["https://opencollective.com/vox-pupuli","https://github.com/sponsors/voxpupuli"],"categories":[],"sub_categories":[],"readme":"# Webhook Go\n\nWebhook Go is a port of the [puppet_webhook](https://github.com/voxpupuli/puppet_webhook) Sinatra API server to Go.\nThis is designed to be more streamlined, performant, and easier to ship for users than the Sinatra/Ruby API server.\n\nThis server is a REST API server designed to accept Webhooks from version control systems, such as GitHub or GitLab, and execute actions based on those webhooks. Specifically, the following tasks:\n\n* Trigger r10k environment and module deploys onto Puppet Servers\n* Send notifications to ChatOps systems, such as Slack and RocketChat\n\n## Prerequisites\n\nWhile there are no prerequisites for running the webhook server itself, for it to be useful, you will need the following installed on the same server or another server for this tool to be useful:\n\n* Puppet Server\n* [r10k](https://github.com/puppetlabs/r10k) \u003e= 3.9.0\n* Puppet Bolt (optional)\n* Windows or Linux server to run the server on. MacOS is not supported.\n\n## Installation\n\nDownload a Pre-release Binary from the [Releases](https://github.com/voxpupuli/webhook-go/releases) page, make it executable, and run the server.\n\n## Configuration\n\nThe Webhook API server uses a configuration file called `webhook.yml` to configure the server. Several of the required options have defaults pre-defined so that a configuration file isn't needed for basic function.\n\n`webhook.yaml.example`:\n\n```yaml\nserver:\n  protected: false\n  user: puppet\n  password: puppet\n  port: 4000\n  tls:\n    enabled: false\n    certificate: \"/path/to/tls/certificate\"\n    key: \"/path/to/tls/key\"\n  queue:\n    enabled: true\n    max_concurrent_jobs: 10\n    max_history_items: 20\nchatops:\n  enabled: false\n  service: slack\n  channel: \"#general\"\n  user: r10kbot\n  auth_token: 12345\n  server_uri: \"https://rocketchat.local\"\nr10k:\n  config_path: /etc/puppetlabs/r10k/r10k.yaml\n  default_branch: main\n  allow_uppercase: false\n  verbose: true\nmappings:\n  long-repo-name: lrp\n```\n\n### Microsoft Teams notifications\n\nCreate an \"Incoming Webhook\" connector in Teams at the designated channel as described in the documentation: [Create Incoming Webhooks at learn.microsoft.com](https://learn.microsoft.com/en-us/microsoftteams/platform/webhooks-and-connectors/how-to/add-incoming-webhook). Keep the URL confidential!\n\nConfigure the service in the `webhook.yaml`:\n```yaml\nchatops:\n  enabled: true\n  service: teams\n  server_uri: \"\u003cTeams Webhook URI\u003e\"\n```\n\nNotifications are colored, according to their status.\ngreen: Success\nred: Failure\norange: Warning\n\nPress the `Details` button to get more information.\n\nIf the queue is enabled in the `server` part of `webhook.yaml`, then two notifications are emitted: First, when the request is added to the queue and second, when the request was processed.\n\n### Bolt authentication\n\nDue to the inherent security risk associated with passing plain text passwords to the Bolt CLI tool, all ability to set it within the application have been removed.\n\nInstead, it is recommended to instead utilize the Bolt [Transport configuration options](https://puppet.com/docs/bolt/latest/bolt_transports_reference.html) and place them within the `bolt-defaults.yaml` file.\n\nIf you want to utilize an `inventory.yaml` and place the targets and auth config within that file, you can. Just be sure to remember to add the target name containing the nodes you need to the `webhook.yml` file\n\n### Server options\n\n#### `protected`\n\nType: bool\nDescription: Enforces authentication via basic Authentication\nDefault: `false`\n\n#### `user`\n\nType: string\nDescription: Username to use for Basic Authentication. Optional.\nDefault: `nil`\n\n#### `password`\n\nType: string\nDescription: Password to use for Basic Authentication. Optional.\nDefault: `nil`\n\n#### `port`\n\nType: int64\nDescription: Port to run the server on. Optional.\nDefault: `4000`\n\n#### `deploy_on_success_only`\n\nType: bool\nDescription: Only run a deploy if checks pass\nDefault: `false`\n\n#### `tls`\n\nType: struct\nDescription: Struct containing server TLS options\n\n##### `enabled`\n\nType: bool\nDescription: Enforces TLS with http server\nDefault: `false`\n\n##### `certificate`\n\nType: string\nDescription: Full path to certificate file. Optional.\nDefault: `nil`\n\n##### `key`\n\nType: string\nDescription: Full path to key file. Optional.\nDefault: `nil`\n\n#### `queue`\n\nType: struct\nDescription: Struct containing Queue options\n\n##### `enabled`\n\nType: bool\nDescription: Should queuing be used\nDefault: `false`\n\n##### `max_concurrent_jobs`\n\nType: int\nDescription: How many jobs could be stored in queue\nDefault: `10`\n\n##### `max_history_items`\nType: int\nDescription: How many queue items should be stored in the history\nDefault: `50`\n\n### ChatOps options\n\n#### `enabled`\n\nType: boolean\nDescription: Enable/Disable chatops support\nDefault: false\n\n#### `service`\n\nType: string\nDescription: Which service to use. Supported options: [`slack`, `rocketchat`, `teams`]\nDefault: nil\n\n#### `channel`\n\nType: string\nDescription: ChatOps communication channel to post to.\nDefault: nil\n\n#### `user`\n\nType: string\nDescription: ChatOps user to post as\nDefault: nil\n\n#### `auth_token`\n\nType: string\nDescription: The authentication token needed to post as the ChatOps user in the chosen, supported ChatOps service\nDefault: nil\n\n#### `server_uri`\n\nType: string\nDescription: The ChatOps service API URI to send the message to. For MS Teams, this is the Webhook URL created at the channel connectors.\nDefault: nil\n\n### r10k options\n\n#### `config_path`\n\nType: string\nDescription: Full path to the r10k configuration file. Optional.\nDefault: `/etc/puppetlabs/r10k/r10k.yaml`\n\n#### `default_branch`\n\nType: string\nDescription: Name of the default branch for r10k to pull from. Optional.\nDefault: `main`\n\n#### `prefix`\n\nType: string\nDescription: An r10k prefix to apply to the module or environment being deployed. Optional.\nDefault: `nil`\n\n#### `allow_uppercase`\n\nType: bool\nDescription: Allow Uppercase letters in the module, branch, or environment name. Optional.\nDefault: `false`\n\n#### `verbose`\n\nType: bool\nDescription: Log verbose output when running the r10k command\nDefault: `true`\n\n#### `deploy_modules`\n\nType: bool\nDescription: Deploy modules in environments.\nDefault: `true`\n\n#### `use_legacy_puppetfile_flag`\n\nType: bool\nDescription: Use the legacy `--puppetfile` flag instead of `--modules`. This should only be used when your version of r10k doesn't support the newer flag.\nDefault: `false`\n\n#### `generate_types`\n\nType: bool\nDescription: Run `puppet generate types` after updating an environment\nDefault: `true`\n\n#### `env_incremental`\n\nType: bool\nDescription: Use `--incremental` flag when updating an environment\nDefault: `false`\n\n#### `command_path`\n\nType: `string`\nDescription: Allow overriding the default path to r10k.\nDefault: `/opt/puppetlabs/puppetserver/bin/r10k`\n\n#### `blocked_branches`\n\nType: `array of strings`\nDescription: A list of branches to not allow deployments to.\nDefault: `[]`\n\n### `mappings`\n\nType: `map`\nDescription: A map of long repository names to short names. This is useful for repositories that have long names that are not suitable for use in the URL. This is useful for multi tenant environments where you also want to use a shorter prefix for the environment.\nDefault: `{}`\n\n\n### `use_g10k_commands`\n\nType: `boolean`\nDescription: Use g10k commands instead of r10k (parameters are a little bit different)\nDefault: `false`\n\n## Usage\n\nWebhook API provides following paths\n\n### GET /health\n\nGet health assessment about the Webhook API server\n\n### GET /api/v1/queue\n\nGet current queue status of the Webhook API server\n\n### POST /api/v1/r10k/environment\n\nUpdates a given puppet environment, ie. `r10k deploy environment`. This only updates a specific environment governed by the branch name.\n\nAvailable URL arguments (`?argument=value`):\n\n* `no_mods=(true|false)` - If set, this will only update an environment with no modules (no flags `--modules` or `--puppetfile`). This option is usefull when you need to update only files (for example [separate hiera data](https://github.com/puppetlabs/r10k/blob/main/doc/dynamic-environments/configuration.mkd#separate-hiera-data))\n\n### POST /api/v1/r10k/module\n\nUpdates a puppet module, ie. `r10k deploy module`. The default behavior of r10k is to update the module in all environments that have it. Module name defaults to the git repository name.\n\nAvailable URL arguments (`?argument=value`):\n\n* `branch_only=(true|false)` - If set, this will only update the module in an environment set by the branch, as opposed to all environments. This is equivalent to the `--environment` r10k option. DEFAULT: `false`\n* `module_name=name` - Sometimes git repository and module name cannot have the same name due to arbitrary naming restrictions. This option forces the module name to be the given value instead of repository name.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fvoxpupuli%2Fwebhook-go","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fvoxpupuli%2Fwebhook-go","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fvoxpupuli%2Fwebhook-go/lists"}