mirror of
https://github.com/SethCohen/github-releases-to-discord
synced 2026-09-14 20:13:23 +00:00
Compare commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
c811a53b57 | ||
|
|
e67e0f9064 | ||
|
|
d76d7aafe4 | ||
|
|
a809bb6f0e | ||
|
|
998060befe | ||
|
|
27e9acb517 | ||
|
|
d019e5acd9 | ||
|
|
9e0e0c94da | ||
|
|
6aea64bf70 | ||
|
|
234bc3b25f | ||
|
|
6df64644c1 | ||
|
|
a5abfa09d3 | ||
|
|
a49a5347be | ||
|
|
a0914f433a | ||
|
|
7f6cee8772 | ||
|
|
6382bf4bfb | ||
|
|
3a1a5b68a2 | ||
|
|
6a018ddca1 | ||
|
|
8c4da10759 | ||
|
|
8ebec0c4c4 | ||
|
|
8212a24dfa | ||
|
|
233db9c33f | ||
|
|
5001ed03b7 | ||
|
|
f7e8576166 | ||
|
|
baa4c82901 | ||
|
|
aea0a60ccd | ||
|
|
e49c674890 |
@@ -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 }}
|
|
||||||
colour: "7766090"
|
|
||||||
username: "tes"
|
|
||||||
avatar_url: "https://i.imgur.com/UPbV3Nx.png"
|
|
||||||
@@ -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 }}
|
||||||
+36
-2
@@ -1,11 +1,45 @@
|
|||||||
# Changelog
|
# Changelog
|
||||||
|
|
||||||
## [1.10.1](https://github.com/SethCohen/github-release-to-discord/compare/v1.10.0...v1.10.1) (2022-08-24)
|
## [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)
|
||||||
|
|
||||||
|
|
||||||
|
### Features
|
||||||
|
|
||||||
|
* renamed all `colour`>`color` ([a0914f4](https://github.com/SethCohen/github-release-to-discord/commit/a0914f433a5c2a2626ca39637851235fd4f7adea))
|
||||||
|
|
||||||
|
## [1.11.1](https://github.com/SethCohen/github-release-to-discord/compare/v1.11.0...v1.11.1) (2022-08-24)
|
||||||
|
|
||||||
|
|
||||||
### Bug Fixes
|
### Bug Fixes
|
||||||
|
|
||||||
* fixed `fetch` import ([0e4e0d8](https://github.com/SethCohen/github-release-to-discord/commit/0e4e0d83ffff90cef7bfae09cee4eb03aa1623d7))
|
* fixed ReferenceError on require vs import ([233db9c](https://github.com/SethCohen/github-release-to-discord/commit/233db9c33f9059cbe008e61acf7f321e671f352c))
|
||||||
|
|
||||||
|
## [1.11.0](https://github.com/SethCohen/github-release-to-discord/compare/v1.10.1...v1.11.0) (2022-08-24)
|
||||||
|
|
||||||
|
|
||||||
|
### Features
|
||||||
|
|
||||||
|
* updated `action.yml` ([e49c674](https://github.com/SethCohen/github-release-to-discord/commit/e49c674890cd5309d63bf570a550ffa0361c9ebc))
|
||||||
|
* updated `package.json` ([aea0a60](https://github.com/SethCohen/github-release-to-discord/commit/aea0a60ccd2456ae24e6ce7f21c1622a1b3ee18f))
|
||||||
|
|
||||||
|
|
||||||
|
### Bug Fixes
|
||||||
|
|
||||||
|
* fixed version tag ([baa4c82](https://github.com/SethCohen/github-release-to-discord/commit/baa4c82901455b2fbc18187cfa8f74f2a171f033))
|
||||||
|
|
||||||
## [1.10.0](https://github.com/SethCohen/github-release-to-discord/compare/v1.9.0...v1.10.0) (2022-08-24)
|
## [1.10.0](https://github.com/SethCohen/github-release-to-discord/compare/v1.9.0...v1.10.0) (2022-08-24)
|
||||||
|
|
||||||
|
|||||||
@@ -0,0 +1,21 @@
|
|||||||
|
MIT License
|
||||||
|
|
||||||
|
Copyright (c) 2022 SethCohen
|
||||||
|
|
||||||
|
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||||
|
of this software and associated documentation files (the "Software"), to deal
|
||||||
|
in the Software without restriction, including without limitation the rights
|
||||||
|
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||||
|
copies of the Software, and to permit persons to whom the Software is
|
||||||
|
furnished to do so, subject to the following conditions:
|
||||||
|
|
||||||
|
The above copyright notice and this permission notice shall be included in all
|
||||||
|
copies or substantial portions of the Software.
|
||||||
|
|
||||||
|
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||||
|
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||||
|
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||||
|
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||||
|
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||||
|
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||||
|
SOFTWARE.
|
||||||
@@ -1,20 +1,22 @@
|
|||||||
# Github Release To Discord Action
|
# 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.
|
||||||
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. |
|
|
||||||
| colour | ❌ | "2105893" | Decimal colour value for embed. |
|
|
||||||
| 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. |
|
|
||||||
|
|
||||||
|
|
||||||
|
---
|
||||||
## Output
|
## Output
|
||||||

|

|
||||||
|
|
||||||
## Example usage
|
## Configuration
|
||||||
|
|
||||||
|
| Variable | Required | Default | Description |
|
||||||
|
|------------|----------|----------------------------------------------------------------------------------------------------------------|--------------------------------------------|
|
||||||
|
| webhook_url | ✔ | | Discord's webhook url. Use GH repo secrets. |
|
||||||
|
| color | ❌ | "2105893" | Decimal color value for embed. |
|
||||||
|
| 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
|
||||||
|
|
||||||
|
`.github/workflows/github-release-to-discord.yml`
|
||||||
```yaml
|
```yaml
|
||||||
on:
|
on:
|
||||||
release:
|
release:
|
||||||
@@ -26,9 +28,24 @@ jobs:
|
|||||||
steps:
|
steps:
|
||||||
- name: Checkout
|
- name: Checkout
|
||||||
uses: actions/checkout@v3
|
uses: actions/checkout@v3
|
||||||
- name: Handle Release
|
- name: Github Releases To Discord
|
||||||
uses: ./ # Uses an action in the root directory
|
uses: SethCohen/github-release-to-discord@v1.12.0
|
||||||
id: release
|
|
||||||
with:
|
with:
|
||||||
webhook_url: ${{ secrets.WEBHOOK_URL }}
|
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!
|
||||||
|

|
||||||
|

|
||||||
|
3. Copy the webhook url
|
||||||
|
4. Create a new Github repository secret called WEBHOOK_URL and paste the webhook url into it.
|
||||||
|

|
||||||
|
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.
|
||||||
|
|||||||
+6
-2
@@ -1,11 +1,12 @@
|
|||||||
name: Github Releases To Discord
|
name: Github Releases To Discord
|
||||||
|
author: SethCohen
|
||||||
description: Send automatic styled releases to Discord.
|
description: Send automatic styled releases to Discord.
|
||||||
inputs:
|
inputs:
|
||||||
webhook_url:
|
webhook_url:
|
||||||
description: Discord's webhook url. Use GH repo secrets.
|
description: Discord's webhook url. Use GH repo secrets.
|
||||||
required: true
|
required: true
|
||||||
colour:
|
color:
|
||||||
description: Decimal colour value for embed.
|
description: Decimal color value for embed.
|
||||||
required: false
|
required: false
|
||||||
default: '2105893'
|
default: '2105893'
|
||||||
username:
|
username:
|
||||||
@@ -19,3 +20,6 @@ inputs:
|
|||||||
runs:
|
runs:
|
||||||
using: 'node16'
|
using: 'node16'
|
||||||
main: 'index.js'
|
main: 'index.js'
|
||||||
|
branding:
|
||||||
|
icon: file-text
|
||||||
|
color: gray-dark
|
||||||
@@ -1,7 +1,32 @@
|
|||||||
const core = require('@actions/core');
|
import core from '@actions/core';
|
||||||
const github = require('@actions/github');
|
import github from '@actions/github';
|
||||||
import fetch from 'node-fetch'
|
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 () {
|
async function getContext () {
|
||||||
const payload = github.context.payload
|
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 () {
|
async function run () {
|
||||||
try {
|
const webhookUrl = core.getInput('webhook_url')
|
||||||
const webhookUrl = core.getInput('webhook_url')
|
const color = core.getInput('color')
|
||||||
const colour = core.getInput('colour')
|
const username = core.getInput('username')
|
||||||
const username = core.getInput('username')
|
const avatarUrl = core.getInput('avatar_url')
|
||||||
const avatarUrl = core.getInput('avatar_url')
|
|
||||||
|
|
||||||
if (!webhookUrl) {
|
if (!webhookUrl) return core.setFailed('webhook_url not set. Please set it.')
|
||||||
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
|
const description = formatDescription(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 embedMsg = {
|
const embedMsg = {
|
||||||
title: `Release ${content.version}`,
|
title: `Release ${version}`,
|
||||||
url: content.html_url,
|
url: html_url,
|
||||||
color: colour,
|
color: color,
|
||||||
description: description,
|
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 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
@@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "github-release-to-discord",
|
"name": "github-release-to-discord",
|
||||||
"version": "1.9.0",
|
"version": "1.12.1",
|
||||||
"lockfileVersion": 2,
|
"lockfileVersion": 2,
|
||||||
"requires": true,
|
"requires": true,
|
||||||
"packages": {
|
"packages": {
|
||||||
|
|||||||
Generated
+3
-3
@@ -1,13 +1,13 @@
|
|||||||
{
|
{
|
||||||
"name": "github-release-to-discord",
|
"name": "github-release-to-discord",
|
||||||
"version": "1.10.1",
|
"version": "1.13.0",
|
||||||
"lockfileVersion": 2,
|
"lockfileVersion": 2,
|
||||||
"requires": true,
|
"requires": true,
|
||||||
"packages": {
|
"packages": {
|
||||||
"": {
|
"": {
|
||||||
"name": "github-release-to-discord",
|
"name": "github-release-to-discord",
|
||||||
"version": "1.10.1",
|
"version": "1.13.0",
|
||||||
"license": "ISC",
|
"license": "MIT",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@actions/core": "^1.9.1",
|
"@actions/core": "^1.9.1",
|
||||||
"@actions/github": "^5.0.3",
|
"@actions/github": "^5.0.3",
|
||||||
|
|||||||
+20
-5
@@ -1,14 +1,29 @@
|
|||||||
{
|
{
|
||||||
"name": "github-release-to-discord",
|
"name": "github-release-to-discord",
|
||||||
"version": "1.10.1",
|
"version": "1.13.0",
|
||||||
"description": "",
|
"description": "Github Action that parses a release and sends it to a Discord channel",
|
||||||
|
"type": "module",
|
||||||
"main": "index.js",
|
"main": "index.js",
|
||||||
"scripts": {
|
"scripts": {
|
||||||
"test": "echo \"Error: no test specified\" && exit 1"
|
"test": "echo \"Error: no test specified\" && exit 1"
|
||||||
},
|
},
|
||||||
"keywords": [],
|
"keywords": [
|
||||||
"author": "",
|
"discord",
|
||||||
"license": "ISC",
|
"github",
|
||||||
|
"release",
|
||||||
|
"action",
|
||||||
|
"release-to-discord",
|
||||||
|
"github-release-to-discord",
|
||||||
|
"webhook",
|
||||||
|
"github-action",
|
||||||
|
"changelog"
|
||||||
|
],
|
||||||
|
"author": "SethCohen",
|
||||||
|
"bugs": {
|
||||||
|
"url": "https://github.com/SethCohen/github-release-to-discord/issues"
|
||||||
|
},
|
||||||
|
"homepage": "https://github.com/SethCohen/github-release-to-discord#readme",
|
||||||
|
"license": "MIT",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@actions/core": "^1.9.1",
|
"@actions/core": "^1.9.1",
|
||||||
"@actions/github": "^5.0.3",
|
"@actions/github": "^5.0.3",
|
||||||
|
|||||||
Reference in New Issue
Block a user