mirror of
https://github.com/TheBinaryNinja/tvapp2.git
synced 2026-06-04 09:15:41 -04:00
ci: update workflow issues-new
This commit is contained in:
531
.github/workflows/issues-new.yml
vendored
531
.github/workflows/issues-new.yml
vendored
@@ -17,15 +17,15 @@
|
|||||||
# secrets.PYPI_API_TOKEN self Pypi API token (production site) - https://pypi.org/
|
# secrets.PYPI_API_TOKEN self Pypi API token (production site) - https://pypi.org/
|
||||||
# secrets.PYPI_API_TEST_TOKEN self Pypi API token (test site) - https://test.pypi.org/
|
# secrets.PYPI_API_TEST_TOKEN self Pypi API token (test site) - https://test.pypi.org/
|
||||||
# secrets.SELF_DOCKERHUB_TOKEN self Dockerhub token
|
# secrets.SELF_DOCKERHUB_TOKEN self Dockerhub token
|
||||||
# secrets.ORG_BINARYNINJA_TOKEN org github personal access token (fine-grained)
|
# secrets.ORG_TOKEN org github personal access token (fine-grained)
|
||||||
# secrets.ORG_BINARYNINJA_TOKEN_CL org github personal access token (classic)
|
# secrets.ORG_TOKEN_CL org github personal access token (classic)
|
||||||
# secrets.ORG_BINARYNINJA_DOCKERHUB_TOKEN org dockerhub secret
|
# secrets.ORG_DOCKERHUB_TOKEN org dockerhub secret
|
||||||
# secrets.ORG_BINARYNINJA_GITEA_TOKEN org gitea personal access token (classic) with package:write permission
|
# secrets.ORG_GITEA_TOKEN org gitea personal access token (classic) with package:write permission
|
||||||
# secrets.BINARYSERV_GPG_KEY_ASC bot gpg private key (armored) | BEGIN PGP PRIVATE KEY BLOCK
|
# secrets.BOT_GPG_KEY_ASC bot gpg private key (armored) | BEGIN PGP PRIVATE KEY BLOCK
|
||||||
# secrets.BINARYSERV_GPG_PASSPHRASE bot gpg private key passphrase
|
# secrets.BOT_GPG_PASSPHRASE bot gpg private key passphrase
|
||||||
# secrets.DISCORD_WEBHOOK_CHAN_GITHUB_TVAPP2_RELEASES discord webhook to report release notifications from github to discord
|
# secrets.DISCORD_WEBHOOK_CHAN_GITHUB_RELEASES discord webhook to report release notifications from github to discord
|
||||||
# secrets.DISCORD_WEBHOOK_CHAN_GITHUB_TVAPP2_WORKFLOWS discord webhook to report workflow notifications from github to discord
|
# secrets.DISCORD_WEBHOOK_CHAN_GITHUB_WORKFLOWS discord webhook to report workflow notifications from github to discord
|
||||||
# secrets.DISCORD_WEBHOOK_CHAN_GITHUB_TVAPP2_UPDATES discord webhook to report activity notifications from github to discord
|
# secrets.DISCORD_WEBHOOK_CHAN_GITHUB_UPDATES discord webhook to report activity notifications from github to discord
|
||||||
#
|
#
|
||||||
# @local these workflows can be tested locally through the use of `act`
|
# @local these workflows can be tested locally through the use of `act`
|
||||||
# https://github.com/nektos/act
|
# https://github.com/nektos/act
|
||||||
@@ -37,8 +37,8 @@
|
|||||||
# act -W .github/workflows/issues-new.yml -s TOKEN_CL=XXXXXXXXXX --pull=false
|
# act -W .github/workflows/issues-new.yml -s TOKEN_CL=XXXXXXXXXX --pull=false
|
||||||
# #
|
# #
|
||||||
|
|
||||||
name: "🎫 Issue › New"
|
name: '🎫 Issue › New'
|
||||||
run-name: "🎫 Issue › New › ${{ github.event.issue.number }}: ${{ github.event.issue.title }}"
|
run-name: '🎫 Issue › New › ${{ github.event.issue.number }}: ${{ github.event.issue.title }}'
|
||||||
|
|
||||||
# #
|
# #
|
||||||
# triggers
|
# triggers
|
||||||
@@ -65,14 +65,14 @@ env:
|
|||||||
PREFIX_INTERNAL: "Internal"
|
PREFIX_INTERNAL: "Internal"
|
||||||
PREFIX_URGENT: "⚠ Urgent"
|
PREFIX_URGENT: "⚠ Urgent"
|
||||||
|
|
||||||
LABEL_BUG: "Type ◦ Bug"
|
LABEL_BUG: "Type › Bug"
|
||||||
LABEL_DEPENDENCY: "Type ◦ Dependency"
|
LABEL_DEPENDENCY: "Type › Dependency"
|
||||||
LABEL_DOCS: "Type ◦ Docs"
|
LABEL_DOCS: "Type › Docs"
|
||||||
LABEL_FEATURE: "Type ◦ Feature"
|
LABEL_FEATURE: "Type › Feature"
|
||||||
LABEL_GIT: "Type ◦ Git Action"
|
LABEL_GIT: "Type › Git Action"
|
||||||
LABEL_PR: "Type ◦ Pull Request"
|
LABEL_PR: "Type › Pull Request"
|
||||||
LABEL_ROADMAP: "Type ◦ Roadmap"
|
LABEL_ROADMAP: "Type › Roadmap"
|
||||||
LABEL_INTERNAL: "Type ◦ Internal"
|
LABEL_INTERNAL: "Type › Internal"
|
||||||
LABEL_URGENT: "⚠ Urgent"
|
LABEL_URGENT: "⚠ Urgent"
|
||||||
|
|
||||||
ASSIGN_USER: Aetherinox
|
ASSIGN_USER: Aetherinox
|
||||||
@@ -91,32 +91,32 @@ env:
|
|||||||
{ "name": "AC › Review Required", "color": "8F1784", "description": "PR needs to be reviewed by another person, after the requested changes have been made" },
|
{ "name": "AC › Review Required", "color": "8F1784", "description": "PR needs to be reviewed by another person, after the requested changes have been made" },
|
||||||
{ "name": "AC › Security Warning", "color": "761620", "description": "Does not conform to developer policies, or includes potentially dangerous code" },
|
{ "name": "AC › Security Warning", "color": "761620", "description": "Does not conform to developer policies, or includes potentially dangerous code" },
|
||||||
{ "name": "AC › Skipped Scan", "color": "8F1784", "description": "Author has skipped code scan" },
|
{ "name": "AC › Skipped Scan", "color": "8F1784", "description": "Author has skipped code scan" },
|
||||||
{ "name": "Status 𐄂 Duplicate", "color": "75536b", "description": "Issue or pull request already exists" },
|
{ "name": "Status › Duplicate", "color": "75536b", "description": "Issue or pull request already exists" },
|
||||||
{ "name": "Status 𐄂 Accepted", "color": "2e7539", "description": "This pull request has been accepted" },
|
{ "name": "Status › Accepted", "color": "2e7539", "description": "This pull request has been accepted" },
|
||||||
{ "name": "Status 𐄂 Autoclosed", "color": "3E0915", "description": "Originally stale and was autoclosed for no activity" },
|
{ "name": "Status › Autoclosed", "color": "3E0915", "description": "Originally stale and was autoclosed for no activity" },
|
||||||
{ "name": "Status 𐄂 Denied", "color": "ba4058", "description": "Pull request has been denied" },
|
{ "name": "Status › Denied", "color": "ba4058", "description": "Pull request has been denied" },
|
||||||
{ "name": "Status 𐄂 Locked", "color": "550F45", "description": "Automatically locked by AdminServ for a prolonged period of inactivity" },
|
{ "name": "Status › Locked", "color": "550F45", "description": "Automatically locked by AdminServ for a prolonged period of inactivity" },
|
||||||
{ "name": "Status 𐄂 Need Info", "color": "2E3C4C", "description": "Not enough information to resolve" },
|
{ "name": "Status › Need Info", "color": "2E3C4C", "description": "Not enough information to resolve" },
|
||||||
{ "name": "Status 𐄂 No Action", "color": "030406", "description": "Closed without any action being taken" },
|
{ "name": "Status › No Action", "color": "030406", "description": "Closed without any action being taken" },
|
||||||
{ "name": "Status 𐄂 Pending", "color": "984b12", "description": "Pending pull request" },
|
{ "name": "Status › Pending", "color": "984b12", "description": "Pending pull request" },
|
||||||
{ "name": "Status 𐄂 Released", "color": "1b6626", "description": "Issues or PR has been implemented and is now live" },
|
{ "name": "Status › Released", "color": "1b6626", "description": "Issues or PR has been implemented and is now live" },
|
||||||
{ "name": "Status 𐄂 Reopened", "color": "8a6f14", "description": "A previously closed PR which has been re-opened" },
|
{ "name": "Status › Reopened", "color": "8a6f14", "description": "A previously closed PR which has been re-opened" },
|
||||||
{ "name": "Status 𐄂 Review", "color": "9e1451", "description": "Currently pending review" },
|
{ "name": "Status › Review", "color": "9e1451", "description": "Currently pending review" },
|
||||||
{ "name": "Status 𐄂 Stale", "color": "928282", "description": "Has not had any activity in over 30 days" },
|
{ "name": "Status › Stale", "color": "928282", "description": "Has not had any activity in over 30 days" },
|
||||||
{ "name": "Type ◦ Bug", "color": "9a2c2c", "description": "Something isn't working" },
|
{ "name": "Type › Bug", "color": "9a2c2c", "description": "Something isn't working" },
|
||||||
{ "name": "Type ◦ Dependency", "color": "243759", "description": "Item is associated to dependency" },
|
{ "name": "Type › Dependency", "color": "243759", "description": "Item is associated to dependency" },
|
||||||
{ "name": "Type ◦ Docs", "color": "0e588d", "description": "Improvements or modifications to docs" },
|
{ "name": "Type › Docs", "color": "0e588d", "description": "Improvements or modifications to docs" },
|
||||||
{ "name": "Type ◦ Feature", "color": "3c4e93", "description": "Feature request" },
|
{ "name": "Type › Feature", "color": "3c4e93", "description": "Feature request" },
|
||||||
{ "name": "Type ◦ Git Action", "color": "030406", "description": "GitHub Action / workflow" },
|
{ "name": "Type › Git Action", "color": "030406", "description": "GitHub Action / workflow" },
|
||||||
{ "name": "Type ◦ Pull Request", "color": "8F1784", "description": "Normal pull request" },
|
{ "name": "Type › Pull Request", "color": "8F1784", "description": "Normal pull request" },
|
||||||
{ "name": "Type ◦ Roadmap", "color": "8F1784", "description": "Feature or bug currently planned for implementation" },
|
{ "name": "Type › Roadmap", "color": "8F1784", "description": "Feature or bug currently planned for implementation" },
|
||||||
{ "name": "Type ◦ Internal", "color": "A51994", "description": "Assigned items are for internal developer use" },
|
{ "name": "Type › Internal", "color": "A51994", "description": "Assigned items are for internal developer use" },
|
||||||
{ "name": "Build ◦ Desktop", "color": "c7ca4a", "description": "Specific to desktop" },
|
{ "name": "Build › Desktop", "color": "c7ca4a", "description": "Specific to desktop" },
|
||||||
{ "name": "Build ◦ Linux", "color": "c7ca4a", "description": "Specific to Linux" },
|
{ "name": "Build › Linux", "color": "c7ca4a", "description": "Specific to Linux" },
|
||||||
{ "name": "Build ◦ MacOS", "color": "c7ca4a", "description": "Specific to MacOS" },
|
{ "name": "Build › MacOS", "color": "c7ca4a", "description": "Specific to MacOS" },
|
||||||
{ "name": "Build ◦ Mobile", "color": "c7ca4a", "description": "Specific to mobile" },
|
{ "name": "Build › Mobile", "color": "c7ca4a", "description": "Specific to mobile" },
|
||||||
{ "name": "Build ◦ Web", "color": "c7ca4a", "description": "Specific to web" },
|
{ "name": "Build › Web", "color": "c7ca4a", "description": "Specific to web" },
|
||||||
{ "name": "Build ◦ Windows", "color": "c7ca4a", "description": "Specific to Windows" },
|
{ "name": "Build › Windows", "color": "c7ca4a", "description": "Specific to Windows" },
|
||||||
{ "name": "› API", "color": "F99B50", "description": "Plugin API, CLI, browser JS API" },
|
{ "name": "› API", "color": "F99B50", "description": "Plugin API, CLI, browser JS API" },
|
||||||
{ "name": "› Auto-type", "color": "9141E0", "description": "Auto-type functionality in desktop apps" },
|
{ "name": "› Auto-type", "color": "9141E0", "description": "Auto-type functionality in desktop apps" },
|
||||||
{ "name": "› Browser", "color": "9141E0", "description": "Browser plugins and passing data to <=> from app" },
|
{ "name": "› Browser", "color": "9141E0", "description": "Browser plugins and passing data to <=> from app" },
|
||||||
@@ -159,10 +159,25 @@ jobs:
|
|||||||
job-labels-create:
|
job-labels-create:
|
||||||
name: >-
|
name: >-
|
||||||
🎫 Labels › Verify Existing
|
🎫 Labels › Verify Existing
|
||||||
runs-on: ubuntu-latest
|
# runs-on: ubuntu-latest
|
||||||
timeout-minutes: 4
|
runs-on: apollo-x64
|
||||||
|
timeout-minutes: 5
|
||||||
steps:
|
steps:
|
||||||
|
|
||||||
|
# #
|
||||||
|
# Ping › Developer › Set TImestamps
|
||||||
|
# #
|
||||||
|
|
||||||
|
- name: >-
|
||||||
|
🕛 Get Timestamp
|
||||||
|
id: task_label_set_timestamp
|
||||||
|
run: |
|
||||||
|
echo "YEAR=$(date +'%Y')" >> $GITHUB_ENV
|
||||||
|
echo "NOW=$(date +'%m-%d-%Y %H:%M:%S')" >> $GITHUB_ENV
|
||||||
|
echo "NOW_SHORT=$(date +'%m-%d-%Y')" >> $GITHUB_ENV
|
||||||
|
echo "NOW_LONG=$(date +'%m-%d-%Y %H:%M')" >> $GITHUB_ENV
|
||||||
|
echo "NOW_DOCKER_LABEL=$(date +'%Y%m%d')" >> $GITHUB_ENV
|
||||||
|
|
||||||
# #
|
# #
|
||||||
# [ Create Labels ] Start
|
# [ Create Labels ] Start
|
||||||
# #
|
# #
|
||||||
@@ -193,7 +208,7 @@ jobs:
|
|||||||
id: task_label_create_verify
|
id: task_label_create_verify
|
||||||
uses: actions/github-script@v7
|
uses: actions/github-script@v7
|
||||||
with:
|
with:
|
||||||
github-token: ${{ secrets.ADMINSERV_TOKEN_CL }}
|
github-token: ${{ secrets.ADMINSERV_TOKEN_CL || github.token }}
|
||||||
script: |
|
script: |
|
||||||
const labels = JSON.parse( process.env.LABELS_JSON );
|
const labels = JSON.parse( process.env.LABELS_JSON );
|
||||||
for ( const label of labels )
|
for ( const label of labels )
|
||||||
@@ -205,7 +220,7 @@ jobs:
|
|||||||
owner: context.repo.owner,
|
owner: context.repo.owner,
|
||||||
repo: context.repo.repo,
|
repo: context.repo.repo,
|
||||||
name: label.name,
|
name: label.name,
|
||||||
description: label.description || '',
|
description: label.description || 'No Description',
|
||||||
color: label.color
|
color: label.color
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
@@ -231,8 +246,9 @@ jobs:
|
|||||||
🏷️ Labels › Assign
|
🏷️ Labels › Assign
|
||||||
needs:
|
needs:
|
||||||
- job-labels-create
|
- job-labels-create
|
||||||
runs-on: ubuntu-latest
|
# runs-on: ubuntu-latest
|
||||||
timeout-minutes: 4
|
runs-on: apollo-x64
|
||||||
|
timeout-minutes: 5
|
||||||
permissions:
|
permissions:
|
||||||
contents: 'read'
|
contents: 'read'
|
||||||
id-token: 'write'
|
id-token: 'write'
|
||||||
@@ -241,6 +257,8 @@ jobs:
|
|||||||
|
|
||||||
# #
|
# #
|
||||||
# Assign > Get Issue Title
|
# Assign > Get Issue Title
|
||||||
|
#
|
||||||
|
# this step simply gets the title set for a new issue created by a user and sets it as an env
|
||||||
# #
|
# #
|
||||||
|
|
||||||
- name: >-
|
- name: >-
|
||||||
@@ -248,7 +266,7 @@ jobs:
|
|||||||
uses: actions/github-script@v7
|
uses: actions/github-script@v7
|
||||||
id: task_get_title
|
id: task_get_title
|
||||||
with:
|
with:
|
||||||
github-token: ${{ secrets.ADMINSERV_TOKEN_CL }}
|
github-token: ${{ secrets.ADMINSERV_TOKEN_CL || github.token }}
|
||||||
script: |
|
script: |
|
||||||
let iss_title = `${ context.payload.issue.title }`;
|
let iss_title = `${ context.payload.issue.title }`;
|
||||||
|
|
||||||
@@ -260,7 +278,22 @@ jobs:
|
|||||||
# #
|
# #
|
||||||
# Labels > Bugs
|
# Labels > Bugs
|
||||||
#
|
#
|
||||||
# Title of issue is carried over from the previous step.
|
# this step scans the title and body of a new submitted issue for certain keywords.
|
||||||
|
# this step will then re-name the issue with a title which contains the type of issue at the front
|
||||||
|
# with whatever label is set for PREFIX_BUG; title change will look like the following:
|
||||||
|
# - EuropaServ changed the title
|
||||||
|
# [-] test issue found bug here
|
||||||
|
# [+] 🐛 Bug: test issue found bug here
|
||||||
|
# - EuropaServ added [ Type › Bug ]
|
||||||
|
#
|
||||||
|
# There are four main types of tickets:
|
||||||
|
# 1. 🐛 Bug
|
||||||
|
# 2. 💡 Feature
|
||||||
|
# 3. 🗺️ Roadmap
|
||||||
|
# 4. ⚠ Urgent
|
||||||
|
#
|
||||||
|
# If the ticket is classified as a "Bug", the title of the ticket will be re-named to include `🐛 Bug` at the beginning
|
||||||
|
# of the issue name, but then that title will be carried over to the next type of ticket to check the title again.
|
||||||
# #
|
# #
|
||||||
|
|
||||||
- name: >-
|
- name: >-
|
||||||
@@ -268,9 +301,8 @@ jobs:
|
|||||||
uses: actions/github-script@v7
|
uses: actions/github-script@v7
|
||||||
id: task_issues_bugs
|
id: task_issues_bugs
|
||||||
with:
|
with:
|
||||||
github-token: ${{ secrets.ADMINSERV_TOKEN_CL }}
|
github-token: ${{ secrets.ADMINSERV_TOKEN_CL || github.token }}
|
||||||
script: |
|
script: |
|
||||||
|
|
||||||
const issueLabels = await github.rest.issues.listLabelsOnIssue(
|
const issueLabels = await github.rest.issues.listLabelsOnIssue(
|
||||||
{
|
{
|
||||||
owner: context.repo.owner,
|
owner: context.repo.owner,
|
||||||
@@ -305,18 +337,16 @@ jobs:
|
|||||||
|
|
||||||
/*
|
/*
|
||||||
Bugs
|
Bugs
|
||||||
*/
|
|
||||||
|
|
||||||
const words = [ "bug", "broke", "issue", "fail" ];
|
|
||||||
const bTriggerWordInTitle = words.some( s => s.includes( iss_title_lc ) || iss_title_lc.includes( s ) );
|
|
||||||
|
|
||||||
/*
|
|
||||||
Find regex based phrases
|
Find regex based phrases
|
||||||
|
|
||||||
Regex:
|
Regex:
|
||||||
https://regex101.com/r/Z99Gnq/2
|
https://regex101.com/r/Z99Gnq/2
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
const words = [ "bug", "broke", "issue", "fail", "wont work" ];
|
||||||
|
const bTriggerWordInTitle = words.some( s => s.includes( iss_title_lc ) || iss_title_lc.includes( s ) );
|
||||||
|
|
||||||
const findWordList = /^\b(?:I?\s*have\s*(?:a|an)\s*(?:issue|problem|bug))|(?:problem\swith)|(?:will\s*not\s*work)|(?:it\s*is\s*(?:broken|broke|stuck))|(?:found\s*(?:an?|the)\s*(?:bug|issue))|(?:can\s*I\s*fix\s*the\s*(?:bug|issue))|(?:(?:does not|doesn'?t|don'?t|won'?t|can'?t|can\s?not|will\s*not)\s*(?:work|load|function))|(?:it\s*(?:will\s?not|won'?t|can\s?not|can'?t))\s*(?:get|find)\s*the\s*(?:website|site|webpage|page)|(?:the\s*(?:window|frame)\s*is\s*(?:blank|white|empty|missing))\b$/igm;
|
const findWordList = /^\b(?:I?\s*have\s*(?:a|an)\s*(?:issue|problem|bug))|(?:problem\swith)|(?:will\s*not\s*work)|(?:it\s*is\s*(?:broken|broke|stuck))|(?:found\s*(?:an?|the)\s*(?:bug|issue))|(?:can\s*I\s*fix\s*the\s*(?:bug|issue))|(?:(?:does not|doesn'?t|don'?t|won'?t|can'?t|can\s?not|will\s*not)\s*(?:work|load|function))|(?:it\s*(?:will\s?not|won'?t|can\s?not|can'?t))\s*(?:get|find)\s*the\s*(?:website|site|webpage|page)|(?:the\s*(?:window|frame)\s*is\s*(?:blank|white|empty|missing))\b$/igm;
|
||||||
const bFoundMatchTitle = Boolean( findWordList.test( iss_title ) );
|
const bFoundMatchTitle = Boolean( findWordList.test( iss_title ) );
|
||||||
const bFoundMatchBody = Boolean( findWordList.test( iss_body ) );
|
const bFoundMatchBody = Boolean( findWordList.test( iss_body ) );
|
||||||
@@ -352,6 +382,7 @@ jobs:
|
|||||||
console.log( "Already starts with " + urgn_tag + " ...... " + iss_title_lc.startsWith( urgn_tag.toLowerCase( ) ) )
|
console.log( "Already starts with " + urgn_tag + " ...... " + iss_title_lc.startsWith( urgn_tag.toLowerCase( ) ) )
|
||||||
console.log( "Already starts with " + road_tag + " ..... " + iss_title_lc.startsWith( road_tag.toLowerCase( ) ) )
|
console.log( "Already starts with " + road_tag + " ..... " + iss_title_lc.startsWith( road_tag.toLowerCase( ) ) )
|
||||||
|
|
||||||
|
// change LBL per category
|
||||||
add_labels.push( `${ bug_lbl }` );
|
add_labels.push( `${ bug_lbl }` );
|
||||||
|
|
||||||
console.log( `Adding Tag ....................... ${ bug_lbl }` )
|
console.log( `Adding Tag ....................... ${ bug_lbl }` )
|
||||||
@@ -360,6 +391,9 @@ jobs:
|
|||||||
if ( iss_author === `${{ env.BOT_NAME_DEPENDABOT }}` )
|
if ( iss_author === `${{ env.BOT_NAME_DEPENDABOT }}` )
|
||||||
core.info( `Skipping: Detected ${ iss_author }` )
|
core.info( `Skipping: Detected ${ iss_author }` )
|
||||||
|
|
||||||
|
if ( iss_author === `${{ env.BOT_NAME_RENOVATE }}` )
|
||||||
|
core.info( `Skipping: Detected ${ iss_author }` )
|
||||||
|
|
||||||
// Rename title to contain Bug:
|
// Rename title to contain Bug:
|
||||||
// Make sure issue / pr title doesnt already contain a beginning title tag
|
// Make sure issue / pr title doesnt already contain a beginning title tag
|
||||||
|
|
||||||
@@ -390,7 +424,22 @@ jobs:
|
|||||||
# #
|
# #
|
||||||
# Labels > Features
|
# Labels > Features
|
||||||
#
|
#
|
||||||
# Title of issue is carried over from the previous step.
|
# this step scans the title and body of a new submitted issue for certain keywords.
|
||||||
|
# this step will then re-name the issue with a title which contains the type of issue at the front
|
||||||
|
# with whatever label is set for PREFIX_FEATURE; title change will look like the following:
|
||||||
|
# - EuropaServ changed the title
|
||||||
|
# [-] Add ability to create X
|
||||||
|
# [+] 💡 Feature: Add ability to create X
|
||||||
|
# - EuropaServ added [ Type › Feature ]
|
||||||
|
#
|
||||||
|
# There are four main types of tickets:
|
||||||
|
# 1. 🐛 Bug
|
||||||
|
# 2. 💡 Feature
|
||||||
|
# 3. 🗺️ Roadmap
|
||||||
|
# 4. ⚠ Urgent
|
||||||
|
#
|
||||||
|
# If the ticket is classified as a "Feature", the title of the ticket will be re-named to include `💡 Feature` at the beginning
|
||||||
|
# of the issue name, but then that title will be carried over to the next type of ticket to check the title again.
|
||||||
# #
|
# #
|
||||||
|
|
||||||
- name: >-
|
- name: >-
|
||||||
@@ -398,9 +447,8 @@ jobs:
|
|||||||
uses: actions/github-script@v7
|
uses: actions/github-script@v7
|
||||||
id: task_issues_features
|
id: task_issues_features
|
||||||
with:
|
with:
|
||||||
github-token: ${{ secrets.ADMINSERV_TOKEN_CL }}
|
github-token: ${{ secrets.ADMINSERV_TOKEN_CL || github.token }}
|
||||||
script: |
|
script: |
|
||||||
|
|
||||||
const issueLabels = await github.rest.issues.listLabelsOnIssue(
|
const issueLabels = await github.rest.issues.listLabelsOnIssue(
|
||||||
{
|
{
|
||||||
owner: context.repo.owner,
|
owner: context.repo.owner,
|
||||||
@@ -412,6 +460,7 @@ jobs:
|
|||||||
|
|
||||||
let iss_title = `${{ steps.task_issues_bugs.outputs.issue_title }}` || `${ context.payload.issue.title }`;
|
let iss_title = `${{ steps.task_issues_bugs.outputs.issue_title }}` || `${ context.payload.issue.title }`;
|
||||||
let iss_body = `${ context.payload.issue.body }`;
|
let iss_body = `${ context.payload.issue.body }`;
|
||||||
|
let iss_author = `${ context.payload.issue.user.login }`;
|
||||||
|
|
||||||
const iss_title_lc = iss_title.toLowerCase( );
|
const iss_title_lc = iss_title.toLowerCase( );
|
||||||
|
|
||||||
@@ -434,19 +483,16 @@ jobs:
|
|||||||
|
|
||||||
/*
|
/*
|
||||||
Features
|
Features
|
||||||
*/
|
|
||||||
|
|
||||||
const words = [ "feature", "request", "add support" ];
|
|
||||||
const bTriggerWordInTitle = words.some( s => s.includes( iss_title_lc ) || iss_title_lc.includes( s ) );
|
|
||||||
|
|
||||||
/*
|
|
||||||
Find regex based phrases
|
Find regex based phrases
|
||||||
|
|
||||||
Regex:
|
Regex:
|
||||||
https://regex101.com/r/fR1Hm6/1
|
https://regex101.com/r/fR1Hm6/3
|
||||||
*/
|
*/
|
||||||
|
|
||||||
const findWordList = /^(?:(?:request|include|see)\s*(?:an?|the?)\s*(?:feature|addon|addition|plugin))|(?:(?:add|see|get)\s*support\s*(?:for|with|of))|(?:can\s*we\s*get\s*(?:the|a)\s*(?:ability|feature))|(?:💡 Feature:)$/igm;
|
const words = [ "feature", "request", "add", "addition", "enhance", "create" ];
|
||||||
|
const bTriggerWordInTitle = words.some( s => s.includes( iss_title_lc ) || iss_title_lc.includes( s ) );
|
||||||
|
const findWordList = /(?:(?:add|enjoy|would|like|can|request|include|see|could|have)\s*?(?:the|liked?|i|we|an?|the|you?)\s*?(?:to|have|an|get|ability|request|add|feature|functionality|addon|addition|plugin|create))|(?:(?:add|see|get)\s*?support\s*?(?:for|with|of))|(?:can\s*we\s*get\s*?(?:the|a)\s*?(?:ability|feature))|(?:💡 Feature:)$/igm;
|
||||||
const bFoundMatchTitle = Boolean( findWordList.test( iss_title ) );
|
const bFoundMatchTitle = Boolean( findWordList.test( iss_title ) );
|
||||||
const bFoundMatchBody = Boolean( findWordList.test( iss_body ) );
|
const bFoundMatchBody = Boolean( findWordList.test( iss_body ) );
|
||||||
|
|
||||||
@@ -491,6 +537,9 @@ jobs:
|
|||||||
if ( iss_author === `${{ env.BOT_NAME_DEPENDABOT }}` )
|
if ( iss_author === `${{ env.BOT_NAME_DEPENDABOT }}` )
|
||||||
core.info( `Skipping: Detected ${ iss_author }` )
|
core.info( `Skipping: Detected ${ iss_author }` )
|
||||||
|
|
||||||
|
if ( iss_author === `${{ env.BOT_NAME_RENOVATE }}` )
|
||||||
|
core.info( `Skipping: Detected ${ iss_author }` )
|
||||||
|
|
||||||
// Rename title to contain Feature:
|
// Rename title to contain Feature:
|
||||||
// Make sure issue / pr title doesnt already contain a beginning title tag
|
// Make sure issue / pr title doesnt already contain a beginning title tag
|
||||||
|
|
||||||
@@ -520,17 +569,32 @@ jobs:
|
|||||||
console.log( "\n\n" )
|
console.log( "\n\n" )
|
||||||
|
|
||||||
# #
|
# #
|
||||||
# Labels > Urgent
|
# Labels > Roadmap
|
||||||
#
|
#
|
||||||
# Title of issue is carried over from the previous step.
|
# this step scans the title and body of a new submitted issue for certain keywords.
|
||||||
|
# this step will then re-name the issue with a title which contains the type of issue at the front
|
||||||
|
# with whatever label is set for PREFIX_ROADMAP; title change will look like the following:
|
||||||
|
# - EuropaServ changed the title
|
||||||
|
# [-] roadmap new feature
|
||||||
|
# [+] 🗺️ Roadmap: new feature
|
||||||
|
# - EuropaServ added [ Type › Roadmap ]
|
||||||
|
#
|
||||||
|
# There are four main types of tickets:
|
||||||
|
# 1. 🐛 Bug
|
||||||
|
# 2. 💡 Feature
|
||||||
|
# 3. 🗺️ Roadmap
|
||||||
|
# 4. ⚠ Urgent
|
||||||
|
#
|
||||||
|
# If the ticket is classified as a "Roadmap", the title of the ticket will be re-named to include `🗺️ Roadmap` at the beginning
|
||||||
|
# of the issue name, but then that title will be carried over to the next type of ticket to check the title again.
|
||||||
# #
|
# #
|
||||||
|
|
||||||
- name: >-
|
- name: >-
|
||||||
🏷️ ${{ env.PREFIX_URGENT }} › Assignment
|
🏷️ ${{ env.PREFIX_ROADMAP }} › Assignment
|
||||||
uses: actions/github-script@v7
|
uses: actions/github-script@v7
|
||||||
id: task_issues_urgent
|
id: task_issues_roadmap
|
||||||
with:
|
with:
|
||||||
github-token: ${{ secrets.ADMINSERV_TOKEN_CL }}
|
github-token: ${{ secrets.ADMINSERV_TOKEN_CL || github.token }}
|
||||||
script: |
|
script: |
|
||||||
const issueLabels = await github.rest.issues.listLabelsOnIssue(
|
const issueLabels = await github.rest.issues.listLabelsOnIssue(
|
||||||
{
|
{
|
||||||
@@ -543,11 +607,165 @@ jobs:
|
|||||||
|
|
||||||
let iss_title = `${{ steps.task_issues_features.outputs.issue_title }}` || `${ context.payload.issue.title }`;
|
let iss_title = `${{ steps.task_issues_features.outputs.issue_title }}` || `${ context.payload.issue.title }`;
|
||||||
let iss_body = `${ context.payload.issue.body }`;
|
let iss_body = `${ context.payload.issue.body }`;
|
||||||
|
let iss_author = `${ context.payload.issue.user.login }`;
|
||||||
|
|
||||||
|
const iss_title_lc = iss_title.toLowerCase( );
|
||||||
|
|
||||||
|
console.log( "Road Title .................... " + iss_title )
|
||||||
|
console.log( "Road Output ................... " + `${{ steps.task_issues_features.outputs.issue_title }}` )
|
||||||
|
console.log( "Road Payload .................. " + `${ context.payload.issue.title }` )
|
||||||
|
|
||||||
|
/*
|
||||||
|
Tags
|
||||||
|
*/
|
||||||
|
|
||||||
|
const bug_tag = `${{ env.PREFIX_BUG }}:`;
|
||||||
|
const bug_lbl = `${{ env.LABEL_BUG }}`;
|
||||||
|
const feat_tag = `${{ env.PREFIX_FEATURE }}:`;
|
||||||
|
const feat_lbl = `${{ env.LABEL_FEATURE }}`;
|
||||||
|
const urgn_tag = `${{ env.PREFIX_URGENT }}:`;
|
||||||
|
const urgn_lbl = `${{ env.LABEL_URGENT }}`;
|
||||||
|
const road_tag = `${{ env.PREFIX_ROADMAP }}:`;
|
||||||
|
const road_lbl = `${{ env.LABEL_ROADMAP }}`;
|
||||||
|
|
||||||
|
/*
|
||||||
|
Roadmap
|
||||||
|
|
||||||
|
Find regex based phrases
|
||||||
|
Roadmap requires headers #Summary and #Proposal | #Objective
|
||||||
|
|
||||||
|
Regex:
|
||||||
|
https://regex101.com/r/ucajBZ/1
|
||||||
|
*/
|
||||||
|
|
||||||
|
const words = [ "roadmap", "road map", "planned" ];
|
||||||
|
const bTriggerWordInTitle = words.some( s => s.includes( iss_title_lc ) || iss_title_lc.includes( s ) );
|
||||||
|
const findWordList = /#\s*Summary[\S\s]+#\s*(?:Proposal|Objective)[^\]]+/igm;
|
||||||
|
const bFoundMatchTitle = Boolean( findWordList.test( iss_title ) );
|
||||||
|
const bFoundMatchBody = Boolean( findWordList.test( iss_body ) );
|
||||||
|
|
||||||
|
/*
|
||||||
|
Do not change a title if the item starts with a PR: #
|
||||||
|
|
||||||
|
Regex:
|
||||||
|
https://regex101.com/r/JOrqbN/1
|
||||||
|
*/
|
||||||
|
|
||||||
|
const road_findPRTitle = /^PR\s?#?(?:[0-9]*:)/igm;
|
||||||
|
const road_bFoundPRTitle = Boolean( road_findPRTitle.test( iss_title ) );
|
||||||
|
|
||||||
|
console.log( "Title Lowercase ............... " + iss_title_lc )
|
||||||
|
console.log( "Startswith " + road_tag.toLowerCase( ) + "............ " + iss_title_lc.startsWith( road_tag.toLowerCase( ) ) )
|
||||||
|
console.log( "Title Includes Keyword ........ " + bTriggerWordInTitle )
|
||||||
|
console.log( "Title Includes Regex .......... " + bFoundMatchTitle )
|
||||||
|
console.log( "Body Includes Regex ........... " + bFoundMatchBody )
|
||||||
|
console.log( "\n" )
|
||||||
|
|
||||||
|
/*
|
||||||
|
- Check if issue title matches the issue label "Roadmap:"
|
||||||
|
- Check if title contains word in words
|
||||||
|
*/
|
||||||
|
|
||||||
|
// change TAG per category
|
||||||
|
if ( iss_title_lc.startsWith( road_tag.toLowerCase( ) ) || bTriggerWordInTitle || bFoundMatchTitle || bFoundMatchBody )
|
||||||
|
{
|
||||||
|
|
||||||
|
console.log( "⚠️ " + road_tag + " ---------------------------------------" )
|
||||||
|
console.log( "Already starts with " + bug_tag + " ......... " + iss_title_lc.startsWith( bug_tag.toLowerCase( ) ) )
|
||||||
|
console.log( "Already starts with " + feat_tag + " ..... " + iss_title_lc.startsWith( feat_tag.toLowerCase( ) ) )
|
||||||
|
console.log( "Already starts with " + urgn_tag + " ...... " + iss_title_lc.startsWith( urgn_tag.toLowerCase( ) ) )
|
||||||
|
console.log( "Already starts with " + road_tag + " ..... " + iss_title_lc.startsWith( road_tag.toLowerCase( ) ) )
|
||||||
|
|
||||||
|
// change LBL per category
|
||||||
|
add_labels.push( `${ road_lbl }` );
|
||||||
|
|
||||||
|
console.log( `Adding Tag ....................... ${ road_lbl }` )
|
||||||
|
console.log( "\n" )
|
||||||
|
|
||||||
|
if ( iss_author === `${{ env.BOT_NAME_DEPENDABOT }}` )
|
||||||
|
core.info( `Skipping: Detected ${ iss_author }` )
|
||||||
|
|
||||||
|
if ( iss_author === `${{ env.BOT_NAME_RENOVATE }}` )
|
||||||
|
core.info( `Skipping: Detected ${ iss_author }` )
|
||||||
|
|
||||||
|
// Rename title to contain Roadmap:
|
||||||
|
// Make sure issue / pr title doesnt already contain a beginning title tag
|
||||||
|
|
||||||
|
if ( iss_author !== `${{ env.BOT_NAME_DEPENDABOT }}` && !road_bFoundPRTitle && !iss_title_lc.startsWith( bug_tag.toLowerCase( ) ) && !iss_title_lc.startsWith( feat_tag.toLowerCase( ) ) && !iss_title_lc.startsWith( urgn_tag.toLowerCase( ) ) && !iss_title_lc.startsWith( road_tag.toLowerCase( ) ) )
|
||||||
|
{
|
||||||
|
console.log( "Renaming Title" )
|
||||||
|
console.log( `Old Title: .................. ${ iss_title }` )
|
||||||
|
|
||||||
|
const title = context.payload.issue.title
|
||||||
|
let title_new = title.replace( /^\s?broad(.*?)\s?map\s*(.*?)\b/gi, '' );
|
||||||
|
title_new = title.replace( /^\s?planned\s*(.*?)\b/gi, '' );
|
||||||
|
title_new = title.replace( /^\s?broadmap\s*(.*?)\b/gi, '' );
|
||||||
|
iss_title = `${ road_tag } ${ title_new }`; // change TAG per category
|
||||||
|
}
|
||||||
|
|
||||||
|
console.log( `New Title: .................... ${ iss_title }` )
|
||||||
|
|
||||||
|
await github.rest.issues.update(
|
||||||
|
{
|
||||||
|
owner: context.repo.owner, repo: context.repo.repo, issue_number: context.issue.number,
|
||||||
|
title: `${ iss_title }`, labels: add_labels
|
||||||
|
} );
|
||||||
|
}
|
||||||
|
|
||||||
|
core.setOutput( 'issue_title', iss_title )
|
||||||
|
console.log( "\n\n" )
|
||||||
|
|
||||||
|
# #
|
||||||
|
# Labels > Urgent
|
||||||
|
#
|
||||||
|
# this step scans the title and body of a new submitted issue for certain keywords.
|
||||||
|
# this step will then re-name the issue with a title which contains the type of issue at the front
|
||||||
|
# with whatever label is set for PREFIX_URGENT; title change will look like the following:
|
||||||
|
# - EuropaServ changed the title
|
||||||
|
# [-] emergency
|
||||||
|
# [+] ⚠ Urgent: emergency
|
||||||
|
# - EuropaServ added [ Type › Urgent ]
|
||||||
|
#
|
||||||
|
# this tag can be mixed with 🐛 Bug so that a ticket gets both tags
|
||||||
|
# - EuropaServ changed the title
|
||||||
|
# [-] emergency
|
||||||
|
# [+] 🐛 Bug: urgent issue
|
||||||
|
# - EuropaServ added [ Type › Bug ], [ Type › Urgent ]
|
||||||
|
#
|
||||||
|
# There are four main types of tickets:
|
||||||
|
# 1. 🐛 Bug
|
||||||
|
# 2. 💡 Feature
|
||||||
|
# 3. 🗺️ Roadmap
|
||||||
|
# 4. ⚠ Urgent
|
||||||
|
#
|
||||||
|
# If the ticket is classified as a "Urgent", the title of the ticket will be re-named to include `⚠ Urgent` at the beginning
|
||||||
|
# of the issue name, but then that title will be carried over to the next type of ticket to check the title again.
|
||||||
|
# #
|
||||||
|
|
||||||
|
- name: >-
|
||||||
|
🏷️ ${{ env.PREFIX_URGENT }} › Assignment
|
||||||
|
uses: actions/github-script@v7
|
||||||
|
id: task_issues_urgent
|
||||||
|
with:
|
||||||
|
github-token: ${{ secrets.ADMINSERV_TOKEN_CL || github.token }}
|
||||||
|
script: |
|
||||||
|
const issueLabels = await github.rest.issues.listLabelsOnIssue(
|
||||||
|
{
|
||||||
|
owner: context.repo.owner,
|
||||||
|
repo: context.repo.repo,
|
||||||
|
issue_number: context.issue.number
|
||||||
|
});
|
||||||
|
|
||||||
|
let add_labels = issueLabels.data.map( label => label.name );
|
||||||
|
|
||||||
|
let iss_title = `${{ steps.task_issues_urgent.outputs.issue_title }}` || `${ context.payload.issue.title }`;
|
||||||
|
let iss_body = `${ context.payload.issue.body }`;
|
||||||
|
let iss_author = `${ context.payload.issue.user.login }`;
|
||||||
|
|
||||||
const iss_title_lc = iss_title.toLowerCase( );
|
const iss_title_lc = iss_title.toLowerCase( );
|
||||||
|
|
||||||
console.log( "Urgn Title .................... " + iss_title )
|
console.log( "Urgn Title .................... " + iss_title )
|
||||||
console.log( "Urgn Output ................... " + `${{ steps.task_issues_features.outputs.issue_title }}` )
|
console.log( "Urgn Output ................... " + `${{ steps.task_issues_urgent.outputs.issue_title }}` )
|
||||||
console.log( "Urgn Payload .................. " + `${ context.payload.issue.title }` )
|
console.log( "Urgn Payload .................. " + `${ context.payload.issue.title }` )
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@@ -565,18 +783,15 @@ jobs:
|
|||||||
|
|
||||||
/*
|
/*
|
||||||
Urgent
|
Urgent
|
||||||
*/
|
|
||||||
|
|
||||||
const words = [ "urgent", "urgency", "emergency", "important", "critical" ];
|
|
||||||
const bTriggerWordInTitle = words.some( s => s.includes( iss_title_lc ) || iss_title_lc.includes( s ) );
|
|
||||||
|
|
||||||
/*
|
|
||||||
Find regex based phrases
|
Find regex based phrases
|
||||||
|
|
||||||
Regex:
|
Regex:
|
||||||
https://regex101.com/r/eE9tJX/2
|
https://regex101.com/r/eE9tJX/2
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
const words = [ "urgent", "urgency", "emergency", "important", "critical" ];
|
||||||
|
const bTriggerWordInTitle = words.some( s => s.includes( iss_title_lc ) || iss_title_lc.includes( s ) );
|
||||||
const findWordList = /(?:(?:this)?is\s*a?n?\s*?(?:emergency|urgent|important|vital|acute|crucial|grave|pressing|serious|top.?priority|high.?priority))|(?:reply|respond|answer|write|address)\s*(?:immediate|quick|asap|urgent|now|fast|(?:as)?\s*(?:soon|quick|immediate|fast))(?:ly)?|(?:need\s*(?:help|support|fixed|answer|reply|response)!)|(?:emergency|critical|urgen(?:t|cy)|high.?priority)/igm;
|
const findWordList = /(?:(?:this)?is\s*a?n?\s*?(?:emergency|urgent|important|vital|acute|crucial|grave|pressing|serious|top.?priority|high.?priority))|(?:reply|respond|answer|write|address)\s*(?:immediate|quick|asap|urgent|now|fast|(?:as)?\s*(?:soon|quick|immediate|fast))(?:ly)?|(?:need\s*(?:help|support|fixed|answer|reply|response)!)|(?:emergency|critical|urgen(?:t|cy)|high.?priority)/igm;
|
||||||
const bFoundMatchTitle = Boolean( findWordList.test( iss_title ) );
|
const bFoundMatchTitle = Boolean( findWordList.test( iss_title ) );
|
||||||
const bFoundMatchBody = Boolean( findWordList.test( iss_body ) );
|
const bFoundMatchBody = Boolean( findWordList.test( iss_body ) );
|
||||||
@@ -622,6 +837,9 @@ jobs:
|
|||||||
if ( iss_author === `${{ env.BOT_NAME_DEPENDABOT }}` )
|
if ( iss_author === `${{ env.BOT_NAME_DEPENDABOT }}` )
|
||||||
core.info( `Skipping: Detected ${ iss_author }` )
|
core.info( `Skipping: Detected ${ iss_author }` )
|
||||||
|
|
||||||
|
if ( iss_author === `${{ env.BOT_NAME_RENOVATE }}` )
|
||||||
|
core.info( `Skipping: Detected ${ iss_author }` )
|
||||||
|
|
||||||
// Rename title to contain Urgent:
|
// Rename title to contain Urgent:
|
||||||
// Make sure issue / pr title doesnt already contain a beginning title tag
|
// Make sure issue / pr title doesnt already contain a beginning title tag
|
||||||
|
|
||||||
@@ -651,137 +869,6 @@ jobs:
|
|||||||
core.setOutput( 'issue_title', iss_title )
|
core.setOutput( 'issue_title', iss_title )
|
||||||
console.log( "\n\n" )
|
console.log( "\n\n" )
|
||||||
|
|
||||||
# #
|
|
||||||
# Labels > Roadmap
|
|
||||||
#
|
|
||||||
# Title of issue is carried over from the previous step.
|
|
||||||
# #
|
|
||||||
|
|
||||||
- name: >-
|
|
||||||
🏷️ ${{ env.PREFIX_ROADMAP }} › Assignment
|
|
||||||
uses: actions/github-script@v7
|
|
||||||
id: task_issues_roadmap
|
|
||||||
with:
|
|
||||||
github-token: ${{ secrets.ADMINSERV_TOKEN_CL }}
|
|
||||||
script: |
|
|
||||||
const issueLabels = await github.rest.issues.listLabelsOnIssue(
|
|
||||||
{
|
|
||||||
owner: context.repo.owner,
|
|
||||||
repo: context.repo.repo,
|
|
||||||
issue_number: context.issue.number
|
|
||||||
});
|
|
||||||
|
|
||||||
let add_labels = issueLabels.data.map( label => label.name );
|
|
||||||
|
|
||||||
let iss_title = `${{ steps.task_issues_urgent.outputs.issue_title }}` || `${ context.payload.issue.title }`;
|
|
||||||
let iss_body = `${ context.payload.issue.body }`;
|
|
||||||
|
|
||||||
const iss_title_lc = iss_title.toLowerCase( );
|
|
||||||
|
|
||||||
console.log( "Road Title .................... " + iss_title )
|
|
||||||
console.log( "Road Output ................... " + `${{ steps.task_issues_urgent.outputs.issue_title }}` )
|
|
||||||
console.log( "Road Payload .................. " + `${ context.payload.issue.title }` )
|
|
||||||
|
|
||||||
/*
|
|
||||||
Tags
|
|
||||||
*/
|
|
||||||
|
|
||||||
const bug_tag = `${{ env.PREFIX_BUG }}:`;
|
|
||||||
const bug_lbl = `${{ env.LABEL_BUG }}`;
|
|
||||||
const feat_tag = `${{ env.PREFIX_FEATURE }}:`;
|
|
||||||
const feat_lbl = `${{ env.LABEL_FEATURE }}`;
|
|
||||||
const urgn_tag = `${{ env.PREFIX_URGENT }}:`;
|
|
||||||
const urgn_lbl = `${{ env.LABEL_URGENT }}`;
|
|
||||||
const road_tag = `${{ env.PREFIX_ROADMAP }}:`;
|
|
||||||
const road_lbl = `${{ env.LABEL_ROADMAP }}`;
|
|
||||||
|
|
||||||
/*
|
|
||||||
Roadmap
|
|
||||||
*/
|
|
||||||
|
|
||||||
const words = [ "roadmap", "road map", "planned" ];
|
|
||||||
const bTriggerWordInTitle = words.some( s => s.includes( iss_title_lc ) || iss_title_lc.includes( s ) );
|
|
||||||
|
|
||||||
/*
|
|
||||||
Find regex based phrases
|
|
||||||
Roadmap requires headers #Summary and #Proposal | #Objective
|
|
||||||
|
|
||||||
Regex:
|
|
||||||
https://regex101.com/r/ucajBZ/1
|
|
||||||
*/
|
|
||||||
|
|
||||||
const findWordList = /#\s*Summary[\S\s]+#\s*(?:Proposal|Objective)[^\]]+/igm;
|
|
||||||
const bFoundMatchTitle = Boolean( findWordList.test( iss_title ) );
|
|
||||||
const bFoundMatchBody = Boolean( findWordList.test( iss_body ) );
|
|
||||||
|
|
||||||
/*
|
|
||||||
Do not change a title if the item starts with a PR: #
|
|
||||||
|
|
||||||
Regex:
|
|
||||||
https://regex101.com/r/JOrqbN/1
|
|
||||||
*/
|
|
||||||
|
|
||||||
const road_findPRTitle = /^PR\s?#?(?:[0-9]*:)/igm;
|
|
||||||
const road_bFoundPRTitle = Boolean( road_findPRTitle.test( iss_title ) );
|
|
||||||
|
|
||||||
console.log( "Title Lowercase ............... " + iss_title_lc )
|
|
||||||
console.log( "Startswith " + road_tag.toLowerCase( ) + "............ " + iss_title_lc.startsWith( road_tag.toLowerCase( ) ) )
|
|
||||||
console.log( "Title Includes Keyword ........ " + bTriggerWordInTitle )
|
|
||||||
console.log( "Title Includes Regex .......... " + bFoundMatchTitle )
|
|
||||||
console.log( "Body Includes Regex ........... " + bFoundMatchBody )
|
|
||||||
console.log( "\n" )
|
|
||||||
|
|
||||||
/*
|
|
||||||
- Check if issue title matches the issue label "Roadmap:"
|
|
||||||
- Check if title contains word in words
|
|
||||||
*/
|
|
||||||
|
|
||||||
// change TAG per category
|
|
||||||
if ( iss_title_lc.startsWith( road_tag.toLowerCase( ) ) || bTriggerWordInTitle || bFoundMatchTitle || bFoundMatchBody )
|
|
||||||
{
|
|
||||||
|
|
||||||
console.log( "⚠️ " + road_tag + " ---------------------------------------" )
|
|
||||||
console.log( "Already starts with " + bug_tag + " ...... " + iss_title_lc.startsWith( bug_tag.toLowerCase( ) ) )
|
|
||||||
console.log( "Already starts with " + feat_tag + " .. " + iss_title_lc.startsWith( feat_tag.toLowerCase( ) ) )
|
|
||||||
console.log( "Already starts with " + urgn_tag + " ... " + iss_title_lc.startsWith( urgn_tag.toLowerCase( ) ) )
|
|
||||||
console.log( "Already starts with " + road_tag + " .. " + iss_title_lc.startsWith( road_tag.toLowerCase( ) ) )
|
|
||||||
|
|
||||||
// change LBL per category
|
|
||||||
add_labels.push( `${ road_lbl }` );
|
|
||||||
|
|
||||||
console.log( `Adding Tag .................... ${ road_lbl }` )
|
|
||||||
console.log( "\n" )
|
|
||||||
|
|
||||||
if ( iss_author === `${{ env.BOT_NAME_DEPENDABOT }}` )
|
|
||||||
core.info( `Skipping: Detected ${ iss_author }` )
|
|
||||||
|
|
||||||
// Rename title to contain Roadmap:
|
|
||||||
// Make sure issue / pr title doesnt already contain a beginning title tag
|
|
||||||
|
|
||||||
if ( iss_author !== `${{ env.BOT_NAME_DEPENDABOT }}` && !road_bFoundPRTitle && !iss_title_lc.startsWith( bug_tag.toLowerCase( ) ) && !iss_title_lc.startsWith( feat_tag.toLowerCase( ) ) && !iss_title_lc.startsWith( urgn_tag.toLowerCase( ) ) && !iss_title_lc.startsWith( road_tag.toLowerCase( ) ) )
|
|
||||||
{
|
|
||||||
console.log( "Renaming Title" )
|
|
||||||
console.log( `Old Title: .................. ${ iss_title }` )
|
|
||||||
|
|
||||||
const title = context.payload.issue.title
|
|
||||||
let title_new = title.replace( /^\s?broad(.*?)\s?map\s*(.*?)\b/gi, '' );
|
|
||||||
title_new = title.replace( /^\s?planned\s*(.*?)\b/gi, '' );
|
|
||||||
title_new = title.replace( /^\s?broadmap\s*(.*?)\b/gi, '' );
|
|
||||||
iss_title = `${ road_tag } ${ title_new }`; // change TAG per category
|
|
||||||
}
|
|
||||||
|
|
||||||
console.log( `New Title: .................... ${ iss_title }` )
|
|
||||||
|
|
||||||
await github.rest.issues.update(
|
|
||||||
{
|
|
||||||
owner: context.repo.owner, repo: context.repo.repo, issue_number: context.issue.number,
|
|
||||||
title: `${ iss_title }`, labels: add_labels
|
|
||||||
} );
|
|
||||||
}
|
|
||||||
|
|
||||||
core.setOutput( 'issue_title', iss_title )
|
|
||||||
console.log( "\n\n" )
|
|
||||||
|
|
||||||
# #
|
# #
|
||||||
# Job > Phrase Search
|
# Job > Phrase Search
|
||||||
#
|
#
|
||||||
@@ -793,8 +880,9 @@ jobs:
|
|||||||
🏷️ Labels › Phrase Search
|
🏷️ Labels › Phrase Search
|
||||||
needs:
|
needs:
|
||||||
- job-labels-create
|
- job-labels-create
|
||||||
runs-on: ubuntu-latest
|
# runs-on: ubuntu-latest
|
||||||
timeout-minutes: 4
|
runs-on: apollo-x64
|
||||||
|
timeout-minutes: 5
|
||||||
permissions:
|
permissions:
|
||||||
contents: 'read'
|
contents: 'read'
|
||||||
id-token: 'write'
|
id-token: 'write'
|
||||||
@@ -802,7 +890,7 @@ jobs:
|
|||||||
steps:
|
steps:
|
||||||
|
|
||||||
# #
|
# #
|
||||||
# [ Search Phrase ] Checkout
|
# Phrase Search > Checkout
|
||||||
# #
|
# #
|
||||||
|
|
||||||
- name: >-
|
- name: >-
|
||||||
@@ -813,14 +901,16 @@ jobs:
|
|||||||
fetch-depth: 0
|
fetch-depth: 0
|
||||||
|
|
||||||
# #
|
# #
|
||||||
# [ Search Phrase ] Search
|
# Phrase Search > Search
|
||||||
|
#
|
||||||
|
# if an issue message contains certain keywords; have our bot reply with helpful links and information.
|
||||||
# #
|
# #
|
||||||
|
|
||||||
- name: >-
|
- name: >-
|
||||||
👄 Search Phrases
|
👄 Search Phrases
|
||||||
uses: actions/github-script@v7
|
uses: actions/github-script@v7
|
||||||
with:
|
with:
|
||||||
github-token: ${{ secrets.ADMINSERV_TOKEN_CL }}
|
github-token: ${{ secrets.ADMINSERV_TOKEN_CL || github.token }}
|
||||||
script: |
|
script: |
|
||||||
const fs = require( 'fs' );
|
const fs = require( 'fs' );
|
||||||
const iss_title = `${ context.payload.issue.title }`;
|
const iss_title = `${ context.payload.issue.title }`;
|
||||||
@@ -879,8 +969,9 @@ jobs:
|
|||||||
job-assign-assignees:
|
job-assign-assignees:
|
||||||
name: >-
|
name: >-
|
||||||
✍️ Issue › Assignees
|
✍️ Issue › Assignees
|
||||||
runs-on: ubuntu-latest
|
# runs-on: ubuntu-latest
|
||||||
timeout-minutes: 4
|
runs-on: apollo-x64
|
||||||
|
timeout-minutes: 5
|
||||||
needs: [ job-assign-labels ]
|
needs: [ job-assign-labels ]
|
||||||
# disable
|
# disable
|
||||||
#
|
#
|
||||||
@@ -901,7 +992,7 @@ jobs:
|
|||||||
✍️ Set Assignees
|
✍️ Set Assignees
|
||||||
uses: actions/github-script@v7
|
uses: actions/github-script@v7
|
||||||
with:
|
with:
|
||||||
github-token: ${{ secrets.ADMINSERV_TOKEN_CL }}
|
github-token: ${{ secrets.ADMINSERV_TOKEN_CL || github.token }}
|
||||||
script: |
|
script: |
|
||||||
const assignees = [ `${{ github.repository_owner }}` ];
|
const assignees = [ `${{ github.repository_owner }}` ];
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user