Skip to content

Commit

Permalink
chore(ci): fixed release notification action; (#6063)
Browse files Browse the repository at this point in the history
  • Loading branch information
DigitalBrainJS committed Nov 8, 2023
1 parent f6d2cf9 commit 7144f10
Show file tree
Hide file tree
Showing 7 changed files with 86 additions and 18 deletions.
41 changes: 41 additions & 0 deletions .github/workflows/notify.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,41 @@
name: notify

on:
#workflow_run:
# workflows: ["publish"]
# types:
# - completed
#repository_dispatch:
# types: [ notify ]
release:
types: [ published ]
workflow_dispatch:
inputs:
tag:
required: true
jobs:
notify:
runs-on: ubuntu-latest
#if: ${{ github.event_name == 'workflow_dispatch' || github.event.workflow_run.conclusion == 'success' }}
steps:
#- name: Dump GitHub context
# env:
# GITHUB_CONTEXT: ${{ toJson(github) }}
# run: echo "$GITHUB_CONTEXT"
- uses: actions/checkout@v3
with:
fetch-depth: 0
- name: git config
run: |
git config user.name "${GITHUB_ACTOR}"
git config user.email "${GITHUB_ACTOR}@users.noreply.github.com"
- name: Setup node
uses: actions/setup-node@v3
with:
node-version: 18
cache: npm
- run: npm ci
- name: Notify published PRs
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
run: node ./bin/actions/notify_published.js --tag ${{ github.event.inputs.tag || github.event.release.tag_name }}
5 changes: 0 additions & 5 deletions .github/workflows/publish.yml
Original file line number Diff line number Diff line change
Expand Up @@ -56,8 +56,3 @@ jobs:
run: npm publish --provenance --access public
env:
NODE_AUTH_TOKEN: ${{secrets.npm_token}}
###### NOTIFY & TAG published PRs ######
- name: Notify and tag published PRs
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
run: node ./bin/actions/notify_published.js --tag v${{ steps.package-version.outputs.current-version }}
12 changes: 12 additions & 0 deletions bin/GithubAPI.js
Original file line number Diff line number Diff line change
Expand Up @@ -105,6 +105,18 @@ export default class GithubAPI {
} catch (e) {
}
}

static async getLatestTag() {
try{
const {stdout} = await exec(`git for-each-ref refs/tags --sort=-taggerdate --format='%(refname)' --count=1`);

return stdout.split('/').pop();
} catch (e) {}
}

static normalizeTag(tag){
return tag ? 'v' + tag.replace(/^v/, '') : '';
}
}

const {prototype} = GithubAPI;
Expand Down
24 changes: 18 additions & 6 deletions bin/RepoBot.js
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ import fs from "fs/promises";
import {colorize} from "./helpers/colorize.js";
import {getReleaseInfo} from "./contributors.js";

const normalizeTag = (tag) => tag.replace(/^v/, '');
const normalizeTag = (tag) => tag ? 'v' + tag.replace(/^v/, '') : '';

class RepoBot {
constructor(options) {
Expand All @@ -29,7 +29,17 @@ class RepoBot {
}

async notifyPRPublished(id, tag) {
const pr = await this.github.getPR(id);
let pr;

try {
pr = await this.github.getPR(id);
} catch (err) {
if(err.response?.status === 404) {
throw new Error(`PR #${id} not found (404)`);
}

throw err;
}

tag = normalizeTag(tag);

Expand All @@ -41,7 +51,7 @@ class RepoBot {
return false
}

await this.github.appendLabels(id, ['v' + tag]);
await this.github.appendLabels(id, [tag]);

if (isBot || labels.find(({name}) => name === 'automated pr') || (await this.github.isCollaborator(login))) {
return false;
Expand All @@ -56,14 +66,16 @@ class RepoBot {
author,
release: {
tag,
url: `https://github.com/${this.owner}/${this.repo}/releases/tag/v${tag}`
url: `https://github.com/${this.owner}/${this.repo}/releases/tag/${tag}`
}
});

return await this.addComment(id, message);
}

async notifyPublishedPRs(tag) {
tag = normalizeTag(tag);

const release = await getReleaseInfo(tag);

if (!release) {
Expand All @@ -80,9 +92,9 @@ class RepoBot {
try {
console.log(colorize()`${i++}) Notify PR #${pr.id}`)
const result = await this.notifyPRPublished(pr.id, tag);
console.log(result ? 'OK' : 'Skipped');
console.log('✔️', result ? 'Label, comment' : 'Label');
} catch (err) {
console.warn(colorize('green', 'red')` Failed notify PR ${pr.id}: ${err.message}`);
console.warn(colorize('green', 'red')` Failed notify PR ${pr.id}: ${err.message}`);
}
}
}
Expand Down
18 changes: 12 additions & 6 deletions bin/actions/notify_published.js
Original file line number Diff line number Diff line change
@@ -1,18 +1,24 @@
import minimist from "minimist";
import RepoBot from '../RepoBot.js';
import fs from 'fs/promises';

const argv = minimist(process.argv.slice(2));
console.log(argv);

const tag = argv.tag;
let {tag} = argv;

if (!tag) {
throw new Error('tag must be specified');
}
(async() => {
if (!tag || tag === true) {
const {version} = JSON.parse((await fs.readFile('./package.json')).toString());

const bot = new RepoBot();
tag = 'v' + version;
} else if (typeof tag !== 'string') {

throw new Error('tag must be a string');
}

const bot = new RepoBot();

(async() => {
try {
await bot.notifyPublishedPRs(tag);
} catch (err) {
Expand Down
2 changes: 2 additions & 0 deletions bin/githubAxios.js
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,8 @@ import axios from '../index.js';

const {GITHUB_TOKEN} = process.env;

GITHUB_TOKEN ? console.log(`[GITHUB_TOKEN OK]`) : console.warn(`[GITHUB_TOKEN is not defined]`);

export default axios.create({
headers: {
Authorization: GITHUB_TOKEN ? `token ${GITHUB_TOKEN}` : null
Expand Down
2 changes: 1 addition & 1 deletion package.json
Original file line number Diff line number Diff line change
Expand Up @@ -215,4 +215,4 @@
"@commitlint/config-conventional"
]
}
}
}

0 comments on commit 7144f10

Please sign in to comment.