Compare commits

...
11 Commits
Author SHA1 Message Date
SethCohen c811a53b57 chore(master): release 1.13.0 (#19) 2022-08-24 20:56:59 -04:00
SethCohen e67e0f9064 refactor: added JSDocs, created more descriptive functions 2022-08-24 20:51:13 -04:00
SethCohen d76d7aafe4 feat: created test action 2022-08-24 20:05:42 -04:00
SethCohen a809bb6f0e Merge pull request #18 from iCiaran/rename-context-variables
refactor: rename variables returned from getContext
2022-08-24 16:27:50 -04:00
Ciaran Moran 998060befe refactor: rename variables returned from getContext 2022-08-24 21:19:37 +01:00
SethCohen 27e9acb517 chore: updated README.md 2022-08-24 02:26:40 -04:00
SethCohen d019e5acd9 Merge pull request #17 from SethCohen/release-please--branches--master--components--release-please-action
chore(master): release 1.12.1
2022-08-24 01:50:47 -04:00
SethCohen 9e0e0c94da chore(master): release 1.12.1 2022-08-24 01:50:33 -04:00
SethCohen 6aea64bf70 chore: release 1.12.1
Release-As: 1.12.1
2022-08-24 01:50:08 -04:00
SethCohen 234bc3b25f chore: updated workflow actions 2022-08-24 01:46:57 -04:00
SethCohen 6df64644c1 chore: updated README.md 2022-08-24 01:46:50 -04:00
8 changed files with 118 additions and 74 deletions
-18
View File
@@ -1,18 +0,0 @@
on:
release:
types: [published]
name: github-release-to-discord
jobs:
github-release-to-discord:
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v3
- name: Handle Release
uses: ./ # Uses an action in the root directory
id: release
with:
webhook_url: ${{ secrets.WEBHOOK_URL }}
color: "2105893"
username: "Release Changelog"
avatar_url: "https://cdn.discordapp.com/avatars/487431320314576937/bd64361e4ba6313d561d54e78c9e7171.png"
+14
View File
@@ -0,0 +1,14 @@
on:
release:
types: [published]
name: test-action
jobs:
github-release-to-discord:
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v3
- name: Github Releases To Discord
uses: ./ # Uses an action in the root directory
with:
webhook_url: ${{ secrets.WEBHOOK_URL }}
+14
View File
@@ -1,5 +1,19 @@
# Changelog
## [1.13.0](https://github.com/SethCohen/github-release-to-discord/compare/v1.12.1...v1.13.0) (2022-08-25)
### Features
* created test action ([d76d7aa](https://github.com/SethCohen/github-release-to-discord/commit/d76d7aafe49eadfc8d388bef38a8d3fb0230041b))
## [1.12.1](https://github.com/SethCohen/github-release-to-discord/compare/v1.12.0...v1.12.1) (2022-08-24)
### Miscellaneous Chores
* release 1.12.1 ([6aea64b](https://github.com/SethCohen/github-release-to-discord/commit/6aea64bf70aca011417fed5000ff080269024a93))
## [1.12.0](https://github.com/SethCohen/github-release-to-discord/compare/v1.11.1...v1.12.0) (2022-08-24)
+24 -10
View File
@@ -1,7 +1,12 @@
# GitHub Release To Discord Action
A GitHub action that parses a GitHub release and posts it to a Discord channel as a stylized Discord webhook.
---
## Output
![output](https://i.imgur.com/Zf3TXtb.png)
This action parses a GitHub release and posts it to a Discord channel via a Discord webhook.
## Configuration
| Variable | Required | Default | Description |
|------------|----------|----------------------------------------------------------------------------------------------------------------|--------------------------------------------|
| webhook_url | ✔ | | Discord's webhook url. Use GH repo secrets. |
@@ -9,12 +14,9 @@ This action parses a GitHub release and posts it to a Discord channel via a Disc
| username | ❌ | "Release Changelog" | String username for webhook. |
| avatar_url | ❌ | ["Profile Picture"](https://cdn.discordapp.com/avatars/487431320314576937/bd64361e4ba6313d561d54e78c9e7171.png) | String url to webhook avatar picture. |
## Example Usage
## Output
![output](https://i.imgur.com/Zf3TXtb.png)
## Example usage
`.github/workflows/github-release-to-discord.yml`
```yaml
on:
release:
@@ -26,12 +28,24 @@ jobs:
steps:
- name: Checkout
uses: actions/checkout@v3
- name: Handle Release
uses: ./ # Uses an action in the root directory
id: release
- name: Github Releases To Discord
uses: SethCohen/github-release-to-discord@v1.12.0
with:
webhook_url: ${{ secrets.WEBHOOK_URL }}
color: "2105893"
username: "Release Changelog"
avatar_url: "https://cdn.discordapp.com/avatars/487431320314576937/bd64361e4ba6313d561d54e78c9e7171.png"
```
```
## Setup Instructions
1. Open your **Server Settings** and head into the **Integrations** tab:
2. Click the "**Create Webhook**" button to create a new webhook!
![](https://support.discord.com/hc/article_attachments/1500000463501/Screen_Shot_2020-12-15_at_4.41.53_PM.png)
![](https://support.discord.com/hc/article_attachments/360101553853/Screen_Shot_2020-12-15_at_4.51.38_PM.png)
3. Copy the webhook url
4. Create a new Github repository secret called WEBHOOK_URL and paste the webhook url into it.
![](https://i.imgur.com/hAaNOds.png)
5. Save the secret.
6. Add the secret to your action configuration.
And you're done! Whenever you create a new release, the workflow should run and, if properly setup, post to your specified Discord channel.
+61 -41
View File
@@ -2,6 +2,31 @@ import core from '@actions/core';
import github from '@actions/github';
import fetch from 'node-fetch';
/**
* Stylizes a markdown body into an appropriate embed message style.
* H3s converted to bold and underlined.
* H2s converted to bold.
* Redundant whitespace and newlines removed.
* @param description
* @returns {*}
*/
const formatDescription = (description) => {
return description
.replace(/### (.*?)\n/g,function (substring) {
const newString = substring.slice(4).replace(/(\r\n|\n|\r)/gm, "")
return `**__${newString}__**`
})
.replace(/## (.*?)\n/g,function (substring) {
const newString = substring.slice(3).replace(/(\r\n|\n|\r)/gm, "")
return `**${newString}**`
})
.replace(/\n\s*\n/g, '\n')
}
/**
* Get the context of the action, returns a GitHub Release payload.
* @returns {Promise<{html_url, body: (*|string), version: string}>}
*/
async function getContext () {
const payload = github.context.payload
@@ -14,52 +39,47 @@ async function getContext () {
}
}
/**
* Handles the action.
* Get inputs, creates a stylized response webhook, and sends it to the channel.
* @returns {Promise<void>}
*/
async function run () {
try {
const webhookUrl = core.getInput('webhook_url')
const color = core.getInput('color')
const username = core.getInput('username')
const avatarUrl = core.getInput('avatar_url')
const webhookUrl = core.getInput('webhook_url')
const color = core.getInput('color')
const username = core.getInput('username')
const avatarUrl = core.getInput('avatar_url')
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 content = await getContext()
const {body, html_url, version} = await getContext()
const description = content.body
.replace(/### (.*?)\n/g,function (substring) {
const newString = substring.slice(4).replace(/(\r\n|\n|\r)/gm, "")
return `**__${newString}__**`
})
.replace(/## (.*?)\n/g,function (substring) {
const newString = substring.slice(3).replace(/(\r\n|\n|\r)/gm, "")
return `**${newString}**`
})
.replace(/\n\s*\n/g, '\n')
const description = formatDescription(body)
const embedMsg = {
title: `Release ${content.version}`,
url: content.html_url,
color: color,
description: description,
}
const body = { username: username, avatar_url: avatarUrl, embeds: [embedMsg], }
const url = `${webhookUrl}?wait=true`
fetch(url, {
method: 'post',
body: JSON.stringify(body),
headers: { 'Content-Type': 'application/json' }
})
.then(res => res.json())
.then(data => core.info(JSON.stringify(data)))
.catch(err => core.info(err))
} catch (error) {
core.setFailed(error.message)
const embedMsg = {
title: `Release ${version}`,
url: html_url,
color: color,
description: description
}
const requestBody = {
username: username,
avatar_url: avatarUrl,
embeds: [embedMsg]
}
const url = `${webhookUrl}?wait=true`
fetch(url, {
method: 'post',
body: JSON.stringify(requestBody),
headers: { 'Content-Type': 'application/json' }
})
.then(res => res.json())
.then(data => core.info(JSON.stringify(data)))
.catch(err => core.info(err))
}
run()
run()
.then(() => {core.info('Action completed successfully')})
.catch(err => {core.setFailed(err.message)})
+1 -1
View File
@@ -1,6 +1,6 @@
{
"name": "github-release-to-discord",
"version": "1.9.0",
"version": "1.12.1",
"lockfileVersion": 2,
"requires": true,
"packages": {
+3 -3
View File
@@ -1,13 +1,13 @@
{
"name": "github-release-to-discord",
"version": "1.12.0",
"version": "1.13.0",
"lockfileVersion": 2,
"requires": true,
"packages": {
"": {
"name": "github-release-to-discord",
"version": "1.12.0",
"license": "ISC",
"version": "1.13.0",
"license": "MIT",
"dependencies": {
"@actions/core": "^1.9.1",
"@actions/github": "^5.0.3",
+1 -1
View File
@@ -1,6 +1,6 @@
{
"name": "github-release-to-discord",
"version": "1.12.0",
"version": "1.13.0",
"description": "Github Action that parses a release and sends it to a Discord channel",
"type": "module",
"main": "index.js",