Implement more functions (#20)

* Send the release title instead of version

& remove the `Release` text

* Ability to use the existing Discord user & avatar

* fix

* Support for adding a footer

* Update index.js

* Update index.js

* Update index.js

* Updated docs

* Support for footer timestamps

* Support for sending normal text above the embed

useful for pings
This commit is contained in:
Shon
2023-09-23 12:18:00 -04:00
committed by GitHub
parent ba06d83352
commit f228faeb5e
3 changed files with 54 additions and 25 deletions
+14 -6
View File
@@ -7,12 +7,16 @@ A GitHub action that parses a GitHub release and posts it to a Discord channel a
## Configuration ## Configuration
| Variable | Required | Default | Description | | Variable | Required | Default | Description |
|------------|----------|----------------------------------------------------------------------------------------------------------------|--------------------------------------------| |-----------------|----------|----------------------------------------------------------------------------------------------------------------|--------------------------------------------|
| webhook_url | ✔ | | Discord's webhook url. Use GH repo secrets. | | webhook_url | ✔ | | Discord's webhook url. Use GH repo secrets.|
| color | ❌ | "2105893" | Decimal color value for embed. | | color | ❌ | "2105893" | Decimal color value for embed. |
| username | ❌ | "Release Changelog" | String username for webhook. | | username | ❌ | | String username for webhook. |
| avatar_url | ❌ | ["Profile Picture"](https://cdn.discordapp.com/avatars/487431320314576937/bd64361e4ba6313d561d54e78c9e7171.png) | String url to webhook avatar picture. | | avatar_url | ❌ | | String url to webhook avatar picture. |
| content | ❌ | | String content for webhook. |
| footer_title | ❌ | | String title for the webhook footer. |
| footer_icon_url | ❌ | | String url for the webhook footer picture. |
| footer_timestamp| ❌ | | Boolean to enable footer timestamp. |
## Example Usage ## Example Usage
@@ -35,6 +39,10 @@ jobs:
color: "2105893" color: "2105893"
username: "Release Changelog" username: "Release Changelog"
avatar_url: "https://cdn.discordapp.com/avatars/487431320314576937/bd64361e4ba6313d561d54e78c9e7171.png" avatar_url: "https://cdn.discordapp.com/avatars/487431320314576937/bd64361e4ba6313d561d54e78c9e7171.png"
content: "||@everyone||"
footer_title: "Changelog"
footer_icon_url: "https://cdn.discordapp.com/avatars/487431320314576937/bd64361e4ba6313d561d54e78c9e7171.png"
footer_timestamp: true
``` ```
## Setup Instructions ## Setup Instructions
+12 -2
View File
@@ -12,11 +12,21 @@ inputs:
username: username:
description: String username for webhook. description: String username for webhook.
required: false required: false
default: 'Release Changelog'
avatar_url: avatar_url:
description: String url to webhook avatar picture. description: String url to webhook avatar picture.
required: false required: false
default: 'https://cdn.discordapp.com/avatars/487431320314576937/bd64361e4ba6313d561d54e78c9e7171.png' content:
description: String content for webhook.
required: false
footer_title:
description: Title for the footer.
required: false
footer_icon_url:
description: Icon url for the footer.
required: false
footer_timestamp:
description: Timestamp for the footer.
required: false
runs: runs:
using: 'node16' using: 'node16'
main: 'index.js' main: 'index.js'
+28 -17
View File
@@ -25,16 +25,16 @@ const formatDescription = (description) => {
/** /**
* Get the context of the action, returns a GitHub Release payload. * Get the context of the action, returns a GitHub Release payload.
* @returns {Promise<{html_url, body: (*|string), version: string}>} * @returns {Promise<{html_url, body: (*|string), name: string}>}
*/ */
async function getContext () { async function getContext () {
const payload = github.context.payload const payload = github.context.payload;
return { return {
body: payload.release.body.length < 1500 body: payload.release.body.length < 1500
? payload.release.body ? payload.release.body
: payload.release.body.substring(0, 1500) + ` ([...](${payload.release.html_url}))`, : payload.release.body.substring(0, 1500) + ` ([...](${payload.release.html_url}))`,
version: payload.release.tag_name, name: payload.release.name,
html_url: payload.release.html_url html_url: payload.release.html_url
} }
} }
@@ -45,31 +45,42 @@ async function getContext () {
* @returns {Promise<void>} * @returns {Promise<void>}
*/ */
async function run () { async function run () {
const webhookUrl = core.getInput('webhook_url') const webhookUrl = core.getInput('webhook_url');
const color = core.getInput('color') const color = core.getInput('color');
const username = core.getInput('username') const username = core.getInput('username');
const avatarUrl = core.getInput('avatar_url') const avatarUrl = core.getInput('avatar_url');
const content = core.getInput('content');
const footerTitle = core.getInput('footer_title');
const footerIconUrl = core.getInput('footer_icon_url');
const footerTimestamp = core.getInput('footer_timestamp');
if (!webhookUrl) return core.setFailed('webhook_url not set. Please set it.') if (!webhookUrl) return core.setFailed('webhook_url not set. Please set it.');
const {body, html_url, version} = await getContext() const {body, html_url, name} = await getContext();
const description = formatDescription(body) const description = formatDescription(body);
const embedMsg = { let embedMsg = {
title: `Release ${version}`, title: name,
url: html_url, url: html_url,
color: color, color: color,
description: description description: description,
footer: {}
} }
const requestBody = { if (footerTitle != '') embedMsg.footer.text = footerTitle;
username: username, if (footerIconUrl != '') embedMsg.footer.icon_url = footerIconUrl;
avatar_url: avatarUrl, if (footerTimestamp == 'true') embedMsg.timestamp = new Date().toISOString();
let requestBody = {
embeds: [embedMsg] embeds: [embedMsg]
} }
const url = `${webhookUrl}?wait=true` if (username != '') requestBody.username = username;
if (avatarUrl != '') requestBody.avatar_url = avatarUrl;
if (content != '') requestBody.content = content;
const url = `${webhookUrl}?wait=true`;
fetch(url, { fetch(url, {
method: 'post', method: 'post',
body: JSON.stringify(requestBody), body: JSON.stringify(requestBody),