{"id":13846874,"url":"https://github.com/momocow/semantic-release-gitmoji","last_synced_at":"2025-10-04T06:52:33.457Z","repository":{"id":33456614,"uuid":"157805360","full_name":"momocow/semantic-release-gitmoji","owner":"momocow","description":"✨🐛💥 A semantic-release plugin for gitmojis. Different from conventional changelog, Gitmoji commits are used to determine a release type and generate release notes.","archived":false,"fork":false,"pushed_at":"2024-07-30T03:39:24.000Z","size":1554,"stargazers_count":100,"open_issues_count":16,"forks_count":19,"subscribers_count":2,"default_branch":"main","last_synced_at":"2025-09-14T03:29:33.405Z","etag":null,"topics":["changelog","changelog-generator","commit-analyzer","emoji","github","gitmoji","publish","release","release-notes","semantic-release","semantic-release-plugin"],"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/momocow.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":".github/FUNDING.yml","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},"funding":{"custom":["https://www.buymeacoffee.com/momocow"]}},"created_at":"2018-11-16T03:06:12.000Z","updated_at":"2025-07-15T06:43:55.000Z","dependencies_parsed_at":"2023-10-16T17:04:17.902Z","dependency_job_id":"4f806606-9d3a-434b-93d4-20dbf4d503ee","html_url":"https://github.com/momocow/semantic-release-gitmoji","commit_stats":{"total_commits":120,"total_committers":14,"mean_commits":8.571428571428571,"dds":0.6916666666666667,"last_synced_commit":"bbba196dfdc62743bf74fbbd1002e624217c87a6"},"previous_names":[],"tags_count":26,"template":false,"template_full_name":null,"purl":"pkg:github/momocow/semantic-release-gitmoji","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/momocow%2Fsemantic-release-gitmoji","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/momocow%2Fsemantic-release-gitmoji/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/momocow%2Fsemantic-release-gitmoji/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/momocow%2Fsemantic-release-gitmoji/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/momocow","download_url":"https://codeload.github.com/momocow/semantic-release-gitmoji/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/momocow%2Fsemantic-release-gitmoji/sbom","scorecard":{"id":657979,"data":{"date":"2025-08-11","repo":{"name":"github.com/momocow/semantic-release-gitmoji","commit":"bbba196dfdc62743bf74fbbd1002e624217c87a6"},"scorecard":{"version":"v5.2.1-40-gf6ed084d","commit":"f6ed084d17c9236477efd66e5b258b9d4cc7b389"},"score":3.1,"checks":[{"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":"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":"Code-Review","score":1,"reason":"Found 4/25 approved changesets -- score normalized to 1","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":"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":"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":"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":"Pinned-Dependencies","score":3,"reason":"dependency not pinned by hash detected -- score normalized to 3","details":["Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/release.yaml:14: update your workflow using https://app.stepsecurity.io/secureworkflow/momocow/semantic-release-gitmoji/release.yaml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/release.yaml:18: update your workflow using https://app.stepsecurity.io/secureworkflow/momocow/semantic-release-gitmoji/release.yaml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/test.yaml:16: update your workflow using https://app.stepsecurity.io/secureworkflow/momocow/semantic-release-gitmoji/test.yaml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/test.yaml:18: update your workflow using https://app.stepsecurity.io/secureworkflow/momocow/semantic-release-gitmoji/test.yaml/main?enable=pin","Info:   0 out of   4 GitHub-owned GitHubAction dependencies pinned","Info:   2 out of   2 npmCommand 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":"Token-Permissions","score":0,"reason":"detected GitHub workflow tokens with excessive permissions","details":["Warn: no topLevel permission defined: .github/workflows/release.yaml:1","Warn: no topLevel permission defined: .github/workflows/test.yaml:1","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":"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":"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":"License","score":10,"reason":"license file detected","details":["Info: project has a license file: LICENSE:0","Info: FSF or OSI recognized license: MIT License: 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":"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":-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":"SAST","score":0,"reason":"SAST tool is not run on all commits -- score normalized to 0","details":["Warn: 0 commits out of 20 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":0,"reason":"10 existing vulnerabilities detected","details":["Warn: Project is vulnerable to: GHSA-x4c5-c7rf-jjgv","Warn: Project is vulnerable to: GHSA-h5c3-5r3r-rr8q","Warn: Project is vulnerable to: GHSA-rmvr-2pp2-xj38","Warn: Project is vulnerable to: GHSA-xx4v-prfh-6cgc","Warn: Project is vulnerable to: GHSA-v6h2-p8h4-qcjw","Warn: Project is vulnerable to: GHSA-3xgq-45jj-v275","Warn: Project is vulnerable to: GHSA-p6mc-m468-83gw","Warn: Project is vulnerable to: GHSA-952p-6rrq-rcjv","Warn: Project is vulnerable to: GHSA-9wv6-86v2-598j","Warn: Project is vulnerable to: GHSA-52f5-9888-hmc6"],"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-21T15:12:16.557Z","repository_id":33456614,"created_at":"2025-08-21T15:12:16.557Z","updated_at":"2025-08-21T15:12:16.557Z"},"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":278277871,"owners_count":25960430,"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","status":"online","status_checked_at":"2025-10-04T02:00:05.491Z","response_time":63,"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":["changelog","changelog-generator","commit-analyzer","emoji","github","gitmoji","publish","release","release-notes","semantic-release","semantic-release-plugin"],"created_at":"2024-08-04T18:00:49.363Z","updated_at":"2025-10-04T06:52:33.422Z","avatar_url":"https://github.com/momocow.png","language":"JavaScript","funding_links":["https://www.buymeacoffee.com/momocow"],"categories":["JavaScript"],"sub_categories":[],"readme":"# semantic-release-gitmoji\n[![Test Status](https://github.com/momocow/semantic-release-gitmoji/actions/workflows/test.yaml/badge.svg?branch=main)](https://github.com/momocow/semantic-release-gitmoji/actions/workflows/test.yaml)\n[![Release Status](https://github.com/momocow/semantic-release-gitmoji/actions/workflows/release.yaml/badge.svg?branch=main)](https://github.com/momocow/semantic-release-gitmoji/actions/workflows/release.yaml)\n[![npm](https://img.shields.io/npm/v/semantic-release-gitmoji.svg)](https://www.npmjs.com/semantic-release-gitmoji)\n[![semantic-release](https://img.shields.io/badge/%20%20%F0%9F%93%A6%F0%9F%9A%80-semantic--release-e10079.svg)](https://github.com/semantic-release/semantic-release)\n[![Gitmoji](https://img.shields.io/badge/gitmoji-%20😜%20😍-FFDD67.svg?style=flat-square)](https://gitmoji.carloscuesta.me/)\n\n✨🐛💥 A [semantic-release](https://github.com/semantic-release/semantic-release) plugin for gitmojis.\n\nDifferent from [conventional changelog](https://github.com/conventional-changelog/conventional-changelog), [Gitmoji](https://github.com/carloscuesta/gitmoji) commits are used to **determine a release type** and **generate release notes**.\n\n| Step             | Description                                                                                                                  |\n|------------------|------------------------------------------------------------------------------------------------------------------------------|\n| `analyzeCommits` | Determine the type of release by analyzing commits with [Gitmoji](https://github.com/carloscuesta/gitmoji).                  |\n| `generateNotes`  | Generate release notes for the commits added since the last release with [Gitmoji](https://github.com/carloscuesta/gitmoji). |\n\n- [semantic-release-gitmoji](#semantic-release-gitmoji)\n  - [Features](#features)\n  - [Install](#install)\n  - [Usage](#usage)\n  - [Configuration](#configuration)\n    - [ReleaseRules](#releaserules)\n      - [Emoji](#emoji)\n      - [EmojiArrayModifier](#emojiarraymodifier)\n    - [ReleaseNotesOptions](#releasenotesoptions)\n      - [TemplateContent](#templatecontent)\n  - [Templates](#templates)\n    - [Context](#context)\n    - [CommitContext](#commitcontext)\n    - [IssueLink](#issuelink)\n  - [Progressive commits](#progressive-commits)\n    - [Commit Syntax](#commit-syntax)\n  - [Contribution](#contribution)\n\n## Features\n- Categorize commits according to Gitmojis\n- Progressive commits composed of a final commit and several WIP (🚧) commits\n\n## Install\n```\nnpm install semantic-release-gitmoji -D\n```\n\n## Usage\nThe plugin can be configured in the [**semantic-release** configuration file](https://semantic-release.gitbook.io/semantic-release/usage/configuration):\n\n```js\n// in \".releaserc.js\" or \"release.config.js\"\n\nconst { promisify } = require('util')\nconst dateFormat = require('dateformat')\nconst readFileAsync = promisify(require('fs').readFile)\n\n// Given a `const` variable `TEMPLATE_DIR` which points to \"\u003csemantic-release-gitmoji\u003e/lib/assets/templates\"\n\n// the *.hbs template and partials should be passed as strings of contents\nconst template = readFileAsync(path.join(TEMPLATE_DIR, 'default-template.hbs'))\nconst commitTemplate = readFileAsync(path.join(TEMPLATE_DIR, 'commit-template.hbs'))\n\nmodule.exports = {\n  plugins: [\n    [\n      'semantic-release-gitmoji', {\n        releaseRules: {\n          major: [ ':boom:' ],\n          minor: [ ':sparkles:' ],\n          patch: [\n            ':bug:',\n            ':ambulance:',\n            ':lock:'\n          ]\n        },\n        releaseNotes: {\n          template,\n          partials: { commitTemplate },\n          helpers: {\n            datetime: function (format = 'UTC:yyyy-mm-dd') {\n              return dateFormat(new Date(), format)\n            }\n          },\n          issueResolution: {\n            template: '{baseUrl}/{owner}/{repo}/issues/{ref}',\n            baseUrl: 'https://github.com',\n            source: 'github.com',\n            removeFromCommit: false,\n            regex: /#\\d+/g\n          }\n        }\n      }\n    ],\n    '@semantic-release/github',\n    '@semantic-release/npm'\n  ]\n}\n```\n\nThis configuration is the same semantic as the default configuration of `semantic-release-gitmoji`.\n\n`semantic-release-gitmoji` should be used in place of both [`@semantic-release/commit-analyzer`](https://github.com/semantic-release/commit-analyzer) and [`@semantic-release/release-notes-generator`](https://github.com/semantic-release/release-notes-generator) since the both plugins parse commits following the [conventional changelog](https://github.com/conventional-changelog/conventional-changelog) while this plugin requires [Gitmoji](https://github.com/carloscuesta/gitmoji) commits.\n\n## Configuration\nIt is recommended to write the configuration in a **javascript** file since templates are required to be `string`s of their contents.\n\n```ts\ninterface SemanticReleaseGitmojiOptions {\n  releaseRules?: ReleaseRules\n  releaseNotes?: ReleaseNotesOptions\n}\n```\n### ReleaseRules\nThe `ReleaseRules` is a map from a [release type](./lib/assets/release-types.json) to a set of emojis.\n\n```ts\ninterface ReleaseRules {\n  major?:      Array\u003cEmoji\u003e | EmojiArrayModifier\n  premajor?:   Array\u003cEmoji\u003e | EmojiArrayModifier\n  minor?:      Array\u003cEmoji\u003e | EmojiArrayModifier\n  preminor?:   Array\u003cEmoji\u003e | EmojiArrayModifier\n  patch?:      Array\u003cEmoji\u003e | EmojiArrayModifier\n  prepatch?:   Array\u003cEmoji\u003e | EmojiArrayModifier\n  prerelease?: Array\u003cEmoji\u003e | EmojiArrayModifier\n}\n```\n\n#### Emoji\n`Emoji` is a string of valid **GitHub emoji markup** (e.g. `\":boom:\"`, `\":collision:\"`) or **raw emoji characters** (e.g. `\"💥\"`).\n\n\u003e No need to worry about which format to use since this plugin handles it for you!\n\n\u003e See https://github.com/omnidan/node-emoji for more information about emojis.\n\n```ts\ntype Emoji = string\n```\n\n#### EmojiArrayModifier\n\n```ts\ninterface EmojiArrayModifier {\n  include?: Array\u003cEmoji\u003e\n  exclude?: Array\u003cEmoji\u003e\n}\n```\n\n### ReleaseNotesOptions\n`ReleaseNotesOptions` defines how to render the release notes from a given set of Gitmoji commits.\n\nAll templates file are compiled and renderered by [`handlebars`](http://handlebarsjs.com/), therefore you may need to get familiar with the `.hbs` format before starting to customize your own templates.\n\n`semver` is a boolean to define if releaseNotes should be based on Gitmoji only or on key semver associated to gitmoji used in commit to determine the next release tag.\n\n`partials` is a map from the partial name to the content of the partial template.\n\n`helpers` is a map from the helper name to the helper function. There is already a default helper `datetime` which takes a format string as the first argument and return a formatted current timestamp. See [npm/dateformat](https://www.npmjs.com/package/dateformat) for more information about how to format a timestamp and see [the default template](https://github.com/momocow/semantic-release-gitmoji/blob/master/lib/assets/templates/default-template.hbs#L2) as an example.\n\nBesides, You are allowed to provide helpers with the same names to override default helpers.\n\n`issueResolution` defines how issues are resolved to. The default and the only supported source currently is `github.com`, or you can provide your own `issueResolution.template` to override the default resolution to GitHub.\n\nThere are five variables that can be used in `issueResolution.template`:\n- `baseUrl`\n- `owner`\n- `repo`\n- `ref`, which is the numeric ID of issue\n- `issue`, which is the full issue\n\n```ts\ninterface ReleaseNotesOptions {\n  template?: TemplateContent\n  semver?: Boolean\n  partials?: Record\u003cstring, TemplateContent\u003e\n  helpers?: Record\u003cstring, Function\u003e\n  issueResolution?: {\n    template?: string\n    baseUrl?: string\n    source?: 'github.com' | null // currently only GitHub is supported, PR welcome :)\n    regex?: RegExp, // regex to match the issue(s). If not provided, will find issues thanks to [issue-regex](https://www.npmjs.com/package/issue-regex)\n    removeFromCommit?: boolean // if true, will remove found issue(s) from commit name\n  }\n}\n```\n\n#### TemplateContent\n```ts\ntype TemplateContent = string | Buffer | Promise\u003cstring\u003e | Promise\u003cBuffer\u003e\n```\n\n## Templates\n\n### Context\nThe context for templates is inherited from [`semantic-release` context](https://github.com/semantic-release/semantic-release/blob/caribou/docs/developer-guide/js-api.md#result) with some modifications such as `owner`, `repo` and `compareUrl`.\n\n`commits` is a map from [`Emoji`](#emoji) *(don't worry about the format)* to a list of extended commits.\nValues of `commits` are extended to contain more information related to Gitmoji. See [CommitContext](#commitcontext)\n\n```ts\ninterface TemplateContext {\n  owner: string\n  repo: string\n  source: string\n  commits: Record\u003cstring, Array\u003cCommitContext\u003e\u003e\n  lastRelease: {\n    gitHead: string\n    version: string\n    gitTag: string\n  }\n  nextRelease: {\n    type: string\n    gitHead: string\n    version: string\n    gitTag: string\n  }\n  compareUrl: string\n}\n```\n\n### CommitContext\n`CommitContext` is extended from [`SemanticReleaseCommitObj`](https://github.com/semantic-release/semantic-release/blob/caribou/docs/developer-guide/js-api.md#commits).\n\nNote that emojis at the beginning of `message` and `subject` are trimmed, which are the same emoji in `gitmoji`.\n\n`gitmoji` is a raw emoji since an emoji may have more than one GitHub emoji markup representation, e.g. `\":boom:\"` and `\":collision:\"` both represent for th emoji, `\"💥\"`.\n\n```ts\ninterface CommitContext extends SemanticReleaseCommitObj {\n  message: string\n  subject: string\n  owner: string\n  repo: string\n  source: string\n  gitmoji: string\n  issues: Array\u003cIssueLink\u003e\n  wip: Array\u003cCommitContext\u003e\n}\n```\n\n### IssueLink\n```ts\ninterface IssueLink {\n  text: string\n  link: string\n}\n```\n\n## Progressive commits\nAssume you file an issue (e.g. `#1`) to implement a new feature, then you make 3 commits as belows (the toppest is the latest).\n- `✨ Add a new feature.\\n\\n#1`\n- `🚧 Implement part B.\\n\\n#1`\n- `🚧 Implement part A.\\n\\n#1`\n\nThe ✨ commit will be the final commit composed of two 🚧 commits. They are linked together via `#1` in the commit message.\n\nTherefore the `commits` of the [template context](#context) will be as follows.\n```json\n{\n  \"commits\": {\n\n    \"sparkles\": [\n      {\n        \"message\": \"Add a new feature.\\n\\n#1\",\n        \"subject\": \"Add a new feature.\",\n        \"body\": \"#1\",\n        \"gitmoji\": \"✨\",\n        \"// repo\": \"\",\n        \"// owner\": \"\",\n        \"source\": \"github.com\",\n        \"issues\": [{\n          \"text\": \"#1\",\n          \"// link\": \"\"\n        }],\n\n        \"wip\": [\n          {\n            \"message\": \"Implement part B.\\n\\n#1\",\n            \"subject\": \"Implement part B.\",\n            \"body\": \"#1\",\n            \"gitmoji\": \"🚧\",\n            \"// repo\": \"\",\n            \"// owner\": \"\",\n            \"source\": \"github.com\",\n            \"issues\": [{\n              \"text\": \"#1\",\n              \"// link\": \"\"\n            }]\n          },\n          {\n            \"message\": \"Implement part A.\\n\\n#1\",\n            \"subject\": \"Implement part A.\",\n            \"body\": \"#1\",\n            \"gitmoji\": \"🚧\",\n            \"// repo\": \"\",\n            \"// owner\": \"\",\n            \"source\": \"github.com\",\n            \"issues\": [{\n              \"text\": \"#1\",\n              \"// link\": \"\"\n            }]\n          }\n        ]\n      }\n    ],\n\n    \"// other gitmojis\": \"\"\n  }\n}\n```\n### Commit Syntax\nBeside using issue number to link commits, the following syntax is also available to link commits together.\n```\nwip#{target_name}\n```\n\nWhile `target_name` is an identifier for those progressive commits, for example, `wip#feature-A`.\n- `target_name` can contain **numbers**, **letters** (both cases), `_` or `-`.\n- `target_name` should not start with `_` or `-`.\n\n## Contribution\nPRs are welcome.\n\nBefore sending PRs, please follow the steps below.\n- Fork the branch `dev`.\n- Make commits.\n- Run `npm run lint` and ensure you pass the linter.\n- Run `npm test` and ensure nothing broken.\n  - If you introduce new features in the PR, ensure tests have been written for each feature.\n- Send your PR to branch `dev` and wait for reviews.\n\nThanks for all lovers and contributers of this project!\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmomocow%2Fsemantic-release-gitmoji","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fmomocow%2Fsemantic-release-gitmoji","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmomocow%2Fsemantic-release-gitmoji/lists"}