Compare commits

..
5 Commits
5 changed files with 56 additions and 34 deletions
+19
View File
@@ -1,5 +1,24 @@
# Changelog # Changelog
## [1.16.2](https://github.com/SethCohen/github-releases-to-discord/compare/v1.16.1...v1.16.2) (2024-10-18)
### Documentation
* update README output example ([6aa0dd9](https://github.com/SethCohen/github-releases-to-discord/commit/6aa0dd988c547f3b3a73463bc6e69d944621c613))
## [1.16.1](https://github.com/SethCohen/github-releases-to-discord/compare/v1.16.0...v1.16.1) (2024-10-18)
### Bug Fixes
* correct conversion of standalone PR, issue, and changelog URLs to markdown format ([4786949](https://github.com/SethCohen/github-releases-to-discord/commit/47869497ed80cf0d6188692d82d71dff7a55dffe)), closes [#38](https://github.com/SethCohen/github-releases-to-discord/issues/38)
### Documentation
* update README with details on markdown link conversion and other features ([9737dc9](https://github.com/SethCohen/github-releases-to-discord/commit/9737dc900274be227db48f8e23c715aa00b4af59))
## [1.16.0](https://github.com/SethCohen/github-releases-to-discord/compare/v1.15.3...v1.16.0) (2024-10-18) ## [1.16.0](https://github.com/SethCohen/github-releases-to-discord/compare/v1.15.3...v1.16.0) (2024-10-18)
+20 -13
View File
@@ -4,22 +4,30 @@ A GitHub Action that sends a stylized Discord webhook containing the description
## Features ## Features
- Formats release descriptions by: - **Text Cleanup:**
- Removing carriage returns and HTML comments. - **Carriage Return Removal:** Automatically removes carriage return characters for clean formatting.
- Styling headers for better readability in Discord (optional). - **HTML Comment Stripping:** Eliminates HTML comments to remove unnecessary information.
- Cleaning up redundant whitespace and newlines. - **Whitespace Optimization:** Reduces redundant newlines and excess spaces while preserving proper paragraph spacing.
- Converting common GitHub links (e.g., PRs, Issues) into clickable URLs. - **Mention Conversion:** Converts GitHub mentions (e.g., `@username`) into clickable GitHub profile links for easy navigation.
- Limits description length to avoid exceeding Discord's character limits. - **Markdown Link Conversion:**
- Provides customization for the Discord message, including: - **PR Links:** Converts pull request URLs into Markdown links (e.g., `[PR #1](https://github.com/OWNER/REPO/pull/1)`).
- Webhook URL, message color, footer text/icon, and timestamp. - **Issue Links:** Converts issue URLs into Markdown links (e.g., `[Issue #1](https://github.com/OWNER/REPO/issues/1)`).
- Username and avatar for the webhook. - **Changelog Links:** Converts changelog comparison URLs into concise Markdown links (e.g., `[v1.0.0...v1.1.0](https://github.com/OWNER/REPO/compare/v1.0.0...v1.1.0)`).
- Optional message content outside the embed. - **Heading Reduction (Optional):** If enabled, it reduces heading sizes for a cleaner, more compact display:
- H3 headings are converted to bold and underlined.
- H2 headings are converted to bold.
- **Description Length Management:** Ensures the release description fits within Discord's embed message limits (default 4096 characters), trimming excess text by cutting at newlines when possible or adding a continuation link.
- **Custom Embed Appearance:**
- Set a custom color for the Discord embed message.
- Optionally include a custom footer with a title, icon, and a timestamp to make the notification more informative.
- **Error Handling:** Provides clear error messages for any invalid or missing inputs, ensuring that the webhook action does not fail silently.
- **Webhook Delivery:** Sends the formatted message to the specified Discord channel via webhook, ensuring your release notifications are promptly delivered with the correct details.
--- ---
## Output ## Output
![output](https://i.imgur.com/Zf3TXtb.png) ![output](https://i.imgur.com/ovr0gTL.png)
## Configuration ## Configuration
@@ -107,7 +115,6 @@ If you have suggestions for how GitHub Releases To Discord Action could be impro
This file will be used to test the action locally and simulate a real release event webhook payload. Refer to the [GitHub Webhook documentation](https://docs.github.com/en/webhooks/webhook-events-and-payloads?actionType=published#release) and the [Github API Documentation](https://docs.github.com/en/rest/releases/releases?apiVersion=2022-11-28#get-a-release) for more information on the webhook payload structure. This file will be used to test the action locally and simulate a real release event webhook payload. Refer to the [GitHub Webhook documentation](https://docs.github.com/en/webhooks/webhook-events-and-payloads?actionType=published#release) and the [Github API Documentation](https://docs.github.com/en/rest/releases/releases?apiVersion=2022-11-28#get-a-release) for more information on the webhook payload structure.
6. Fill the test json file with the necessary fields to simulate a release event. 6. Fill the test json file with the necessary fields to simulate a release event.
5. Create a test file called `.env` in the main root of the project with the following environmental variables: 5. Create a test file called `.env` in the main root of the project with the following environmental variables:
```bash ```bash
@@ -125,7 +132,7 @@ This file will be used to test the action locally and simulate a real release ev
8. Fill the `.env` file with your chosen environmental variables values. 8. Fill the `.env` file with your chosen environmental variables values.
9. Create a Discord webhook in your server, making sure to add the webhook url to the `.env` file under `INPUT_WEBHOOK_URL=`. 9. Create a Discord webhook in your server, making sure to add the webhook url to the `.env` file under `INPUT_WEBHOOK_URL=`.
10. Run the action locally with `act release -e <your.json>` (e.g. `act release -e tests/sample-test-release.json`) and check the output in your Discord server. 10. Run the action locally with `act release -e <your.json>` (e.g., `act release -e tests/sample-test-release.json`) and check the output in your Discord server.
11. Confirm that the action works as expected. 11. Confirm that the action works as expected.
12. Make your changes and commit them: `git commit -m '<commit_message>'`. Please follow [Conventional Commits](https://www.conventionalcommits.org/en/v1.0.0/). 12. Make your changes and commit them: `git commit -m '<commit_message>'`. Please follow [Conventional Commits](https://www.conventionalcommits.org/en/v1.0.0/).
13. Create the pull request. 13. Create the pull request.
+14 -18
View File
@@ -48,7 +48,7 @@ const reduceHeadings = (text) => text
.replace(/^##\s+(.+)$/gm, '**$1**'); // Convert H2 to bold .replace(/^##\s+(.+)$/gm, '**$1**'); // Convert H2 to bold
/** /**
* Converts PR links, issue links, and changelog links to markdown format. * Converts PR, issue, and changelog links to markdown format, ignoring existing markdown links.
* - PR links: `https://github.com/OWNER/REPO/pull/1` -> `[PR #1](https://github.com/OWNER/REPO/pull/1)` * - PR links: `https://github.com/OWNER/REPO/pull/1` -> `[PR #1](https://github.com/OWNER/REPO/pull/1)`
* - Issue links: `https://github.com/OWNER/REPO/issues/1` -> `[Issue #30](https://github.com/OWNER/REPO/issues/1)` * - Issue links: `https://github.com/OWNER/REPO/issues/1` -> `[Issue #30](https://github.com/OWNER/REPO/issues/1)`
* - Changelog links: `https://github.com/OWNER/REPO/compare/v1.0.0...v1.1.0` -> `[v1.0.0...v1.1.0](https://github.com/OWNER/REPO/compare/v1.0.0...v1.1.0)` * - Changelog links: `https://github.com/OWNER/REPO/compare/v1.0.0...v1.1.0` -> `[v1.0.0...v1.1.0](https://github.com/OWNER/REPO/compare/v1.0.0...v1.1.0)`
@@ -56,25 +56,21 @@ const reduceHeadings = (text) => text
* @returns {string} The text with links converted to markdown format. * @returns {string} The text with links converted to markdown format.
*/ */
const convertLinksToMarkdown = (text) => { const convertLinksToMarkdown = (text) => {
// Convert PR links // Extract existing markdown links and replace them with placeholders
text = text.replace( const markdownLinks = [];
/https:\/\/github\.com\/([\w-]+)\/([\w-]+)\/pull\/(\d+)/g, const textWithoutMarkdownLinks = text.replace(/\[.*?\]\(.*?\)/g, (link) => {
(match, owner, repo, prNumber) => `[PR #${prNumber}](${match})` markdownLinks.push(link);
); return `__MARKDOWN_LINK_PLACEHOLDER_${markdownLinks.length - 1}__`;
});
// Convert issue links // Convert standalone PR, issue, and changelog URLs to markdown format
text = text.replace( let processedText = textWithoutMarkdownLinks
/https:\/\/github\.com\/([\w-]+)\/([\w-]+)\/issues\/(\d+)/g, .replace(/https:\/\/github\.com\/([\w-]+)\/([\w-]+)\/pull\/(\d+)/g, (match, owner, repo, prNumber) => `[PR #${prNumber}](${match})`)
(match, owner, repo, issueNumber) => `[Issue #${issueNumber}](${match})` .replace(/https:\/\/github\.com\/([\w-]+)\/([\w-]+)\/issues\/(\d+)/g, (match, owner, repo, issueNumber) => `[Issue #${issueNumber}](${match})`)
); .replace(/https:\/\/github\.com\/([\w-]+)\/([\w-]+)\/compare\/([v\w.-]+)\.\.\.([v\w.-]+)/g, (match, owner, repo, fromVersion, toVersion) => `[${fromVersion}...${toVersion}](${match})`);
// Convert changelog comparison links // Reinsert the original markdown links
text = text.replace( return processedText.replace(/__MARKDOWN_LINK_PLACEHOLDER_(\d+)__/g, (match, index) => markdownLinks[parseInt(index, 10)]);
/https:\/\/github\.com\/([\w-]+)\/([\w-]+)\/compare\/([v\w.-]+)\.\.\.([v\w.-]+)/g,
(match, owner, repo, fromVersion, toVersion) => `[${fromVersion}...${toVersion}](${match})`
);
return text;
}; };
/** /**
+2 -2
View File
@@ -1,12 +1,12 @@
{ {
"name": "github-releases-to-discord", "name": "github-releases-to-discord",
"version": "1.16.0", "version": "1.16.2",
"lockfileVersion": 2, "lockfileVersion": 2,
"requires": true, "requires": true,
"packages": { "packages": {
"": { "": {
"name": "github-releases-to-discord", "name": "github-releases-to-discord",
"version": "1.16.0", "version": "1.16.2",
"license": "MIT", "license": "MIT",
"dependencies": { "dependencies": {
"@actions/core": "^1.10.1", "@actions/core": "^1.10.1",
+1 -1
View File
@@ -1,6 +1,6 @@
{ {
"name": "github-releases-to-discord", "name": "github-releases-to-discord",
"version": "1.16.0", "version": "1.16.2",
"description": "A GitHub Action that automatically sends a stylized Discord webhook of a GitHub Release description to a specified Discord channel.", "description": "A GitHub Action that automatically sends a stylized Discord webhook of a GitHub Release description to a specified Discord channel.",
"type": "module", "type": "module",
"main": "index.js", "main": "index.js",