diff --git a/.github/workflows/deploy-clean.yml b/.github/workflows/deploy-clean.yml new file mode 100644 index 000000000..a68393a57 --- /dev/null +++ b/.github/workflows/deploy-clean.yml @@ -0,0 +1,105 @@ +# # +# @type github workflow +# @desc cleans up the list of deployments in the environment history +# @author Aetherinox +# @url https://github.com/Aetherinox +# # + +name: "⚙️ Deploy › Clean" +run-name: "⚙️ Deploy › Clean" + +# # +# triggers +# # + +on: + workflow_dispatch: + +# # +# environment variables +# # + +env: + BOT_NAME_1: AdminServ + BOT_NAME_2: AdminServX + BOT_NAME_3: EuropaServ + BOT_NAME_DEPENDABOT: dependabot[bot] + LABELS_JSON: | + [ + { "name": "AC › Changes Made", "color": "8F1784", "description": "Requested changes have been made and are pending a re-scan" }, + { "name": "AC › Changes Required", "color": "8F1784", "description": "Requires changes to be made to the package before being accepted" }, + { "name": "AC › Failed", "color": "a61f2d", "description": "Autocheck failed to run through a complete cycle, requires investigation" }, + { "name": "AC › Needs Rebase", "color": "8F1784", "description": "Due to the permissions on the requesting repo, this pull request must be rebased by the author" }, + { "name": "AC › Passed", "color": "146b4a", "description": "Ready to be reviewed" }, + { "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 › Skipped Scan", "color": "8F1784", "description": "Author has skipped code scan" }, + { "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 𐄂 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 𐄂 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 𐄂 No Action", "color": "030406", "description": "Closed without any action being taken" }, + { "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 𐄂 Reopened", "color": "8a6f14", "description": "A previously closed PR which has been re-opened" }, + { "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": "Type ◦ Bug", "color": "9a2c2c", "description": "Something isn't working" }, + { "name": "Type ◦ Dependency", "color": "243759", "description": "Item is associated to dependency" }, + { "name": "Type ◦ Docs", "color": "0e588d", "description": "Improvements or modifications to docs" }, + { "name": "Type ◦ Feature", "color": "3c4e93", "description": "Feature request" }, + { "name": "Type ◦ Git Action", "color": "030406", "description": "GitHub Action / workflow" }, + { "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 ◦ Internal", "color": "A51994", "description": "Assigned items are for internal developer use" }, + { "name": "Build ◦ Desktop", "color": "c7ca4a", "description": "Specific to desktop" }, + { "name": "Build ◦ Linux", "color": "c7ca4a", "description": "Specific to Linux" }, + { "name": "Build ◦ MacOS", "color": "c7ca4a", "description": "Specific to MacOS" }, + { "name": "Build ◦ Mobile", "color": "c7ca4a", "description": "Specific to mobile" }, + { "name": "Build ◦ Web", "color": "c7ca4a", "description": "Specific to web" }, + { "name": "Build ◦ Windows", "color": "c7ca4a", "description": "Specific to Windows" }, + { "name": "› API", "color": "F99B50", "description": "Plugin API, CLI, browser JS API" }, + { "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": "› Customization", "color": "E3F0FC", "description": "Customizations: plugins, themes, configs" }, + { "name": "› Design", "color": "FA70DE", "description": "Design related queries" }, + { "name": "› Dist", "color": "FA70DE", "description": "Installers and other forms of software distribution" }, + { "name": "› Enterprise", "color": "11447a", "description": "Issues about collaboration, administration, and so on" }, + { "name": "› Hardware", "color": "5a7503", "description": "YubiKey, other tokens, biometrics" }, + { "name": "› Import/Export", "color": "F5FFCC", "description": "Import from and export to different file formats" }, + { "name": "› Improvement", "color": "185c98", "description": "Enhance an existing feature" }, + { "name": "› Performance", "color": "006b75", "description": "Web and desktop performance issues" }, + { "name": "› Plugin Request", "color": "FCE9CA", "description": "Requested changes should be implemented as a plugin" }, + { "name": "› Security", "color": "F75D39", "description": "Security issues" }, + { "name": "› Self-Hosting", "color": "fad8c7", "description": "Self-hosting installations and configs" }, + { "name": "› Storage", "color": "5319e7", "description": "Storage providers: Dropbox, Google, WebDAV, etc." }, + { "name": "› Updater", "color": "1BADDE", "description": "Auto-updater issues" }, + { "name": "› UX", "color": "1BADDE", "description": "UX and usability" }, + { "name": "› Website", "color": "fef2c0", "description": "Website related issues" }, + { "name": "⚠ Urgent", "color": "a8740e", "description": "Requires urgent attention" }, + { "name": "⚠ Announcement", "color": "DB4712", "description": "Announcements" }, + { "name": "📰 Progress Report", "color": "392297", "description": "Development updates" }, + { "name": "📦 Release", "color": "277542", "description": "Release announcements" }, + { "name": "✔️ Poll", "color": "972255", "description": "Community polls" }, + { "name": "❔ Question", "color": "FFFFFF", "description": "All questions" } + ] + +# # +# jobs +# # + +jobs: + cleanup: + runs-on: ubuntu-latest + permissions: write-all + + steps: + - name: >- + ⚙️ Deployments › Clean + uses: strumwolf/delete-deployment-environment@v2 + with: + token: ${{ secrets.SELF_TOKEN_CL }} + environment: orion + onlyRemoveDeployments: true \ No newline at end of file diff --git a/.github/workflows/issues-accept.yml b/.github/workflows/issues-accept.yml index 81d0140c8..738430699 100644 --- a/.github/workflows/issues-accept.yml +++ b/.github/workflows/issues-accept.yml @@ -1,8 +1,10 @@ # # -# @parent : github workflow -# @desc : adds a label to a PR when the command "/accept" is typed in the issue comments -# @author : Aetherinox -# @url : https://github.com/Aetherinox +# @type github workflow +# @desc adds a label to a PR when the command "/accept" is typed in the issue comments +# do not attempt to use env variables in if condition. +# do not accept to change GITHUB_TOKEN. +# @author Aetherinox +# @url https://github.com/Aetherinox # # name: "🎫 Issue › Accept" @@ -39,8 +41,8 @@ jobs: # # deploy: + if: contains(github.event.comment.body, '/accept') && github.event.comment.user.login == 'Aetherinox' runs-on: ubuntu-latest - if: github.event.issue.pull_request && contains(github.event.comment.body, '/accept') && github.event.comment.user.login == ${{ github.repository_owner }} steps: # # diff --git a/.github/workflows/issues-new.yml b/.github/workflows/issues-new.yml index c211c4003..7f237ad91 100644 --- a/.github/workflows/issues-new.yml +++ b/.github/workflows/issues-new.yml @@ -1,8 +1,9 @@ # # -# @parent : github workflow -# @desc : allows you to auto assign labels to new issues and pull requests -# @author : Aetherinox -# @url : https://github.com/Aetherinox +# @type github workflow +# @desc searches a new issues title and body for certain keywords and assigns a label +# sets the assignee for the issue to the repository owner +# @author Aetherinox +# @url https://github.com/Aetherinox # # requires the following labels to be created in your repo: # - bug @@ -133,8 +134,6 @@ jobs: name: >- 🎫 Labels › Verify Existing runs-on: ubuntu-latest - environment: - name: Orion steps: # # @@ -210,8 +209,6 @@ jobs: contents: 'read' id-token: 'write' issues: 'write' - environment: - name: Orion steps: # # @@ -235,7 +232,7 @@ jobs: # # # Labels > Bugs # - # Title of issue is carried over from the previous step. + # Title of issue is carried over from the previous step. # # - name: >- @@ -261,9 +258,9 @@ jobs: const iss_title_lc = iss_title.toLowerCase( ); - console.log( "Feat Title .................... " + iss_title ) - console.log( "Feat Output ................... " + `${{ steps.task_get_title.outputs.issue_title }}` ) - console.log( "Feat Payload .................. " + `${ context.payload.issue.title }` ) + console.log( "Bug Title ..................... " + iss_title ) + console.log( "Bug Output .................... " + `${{ steps.task_get_title.outputs.issue_title }}` ) + console.log( "Bug Payload ................... " + `${ context.payload.issue.title }` ) /* Tags @@ -283,7 +280,7 @@ jobs: */ const words = [ "bug", "broke", "issue", "fail" ]; - const bIncWordT = words.some( s => s.includes( iss_title_lc ) || iss_title_lc.includes( s ) ); + const bTriggerWordInTitle = words.some( s => s.includes( iss_title_lc ) || iss_title_lc.includes( s ) ); /* Find regex based phrases @@ -308,7 +305,7 @@ jobs: console.log( "Title Lowercase ............... " + iss_title_lc ) console.log( "Startswith " + bug_tag.toLowerCase( ) + "................ " + iss_title_lc.startsWith( bug_tag.toLowerCase( ) ) ) - console.log( "Title Includes Keyword ........ " + bIncWordT ) + console.log( "Title Includes Keyword ........ " + bTriggerWordInTitle ) console.log( "Title Includes Regex .......... " + bFoundMatchTitle ) console.log( "Body Includes Regex ........... " + bFoundMatchBody ) console.log( "\n" ) @@ -318,7 +315,7 @@ jobs: - Check if title contains word in words */ - if ( iss_title_lc.startsWith( bug_tag.toLowerCase( ) ) || bIncWordT || bFoundMatchTitle || bFoundMatchBody ) + if ( iss_title_lc.startsWith( bug_tag.toLowerCase( ) ) || bTriggerWordInTitle || bFoundMatchTitle || bFoundMatchBody ) { console.log( "⚠️ " + bug_tag + " ---------------------------------------" ) @@ -365,7 +362,7 @@ jobs: # # # Labels > Features # - # Title of issue is carried over from the previous step. + # Title of issue is carried over from the previous step. # # - name: >- @@ -412,7 +409,7 @@ jobs: */ const words = [ "feature", "request", "add support" ]; - const bIncWordT = words.some( s => s.includes( iss_title_lc ) || iss_title_lc.includes( s ) ); + const bTriggerWordInTitle = words.some( s => s.includes( iss_title_lc ) || iss_title_lc.includes( s ) ); /* Find regex based phrases @@ -437,7 +434,7 @@ jobs: console.log( "Title Lowercase ............... " + iss_title_lc ) console.log( "Startswith " + feat_tag.toLowerCase( ) + "............ " + iss_title_lc.startsWith( feat_tag.toLowerCase( ) ) ) - console.log( "Title Includes Keyword ........ " + bIncWordT ) + console.log( "Title Includes Keyword ........ " + bTriggerWordInTitle ) console.log( "Title Includes Regex .......... " + bFoundMatchTitle ) console.log( "Body Includes Regex ........... " + bFoundMatchBody ) console.log( "\n" ) @@ -448,7 +445,7 @@ jobs: */ // change TAG per category - if ( iss_title_lc.startsWith( feat_tag.toLowerCase( ) ) || bIncWordT || bFoundMatchTitle || bFoundMatchBody ) + if ( iss_title_lc.startsWith( feat_tag.toLowerCase( ) ) || bTriggerWordInTitle || bFoundMatchTitle || bFoundMatchBody ) { console.log( "⚠️ " + feat_tag + " ---------------------------------------" ) @@ -497,7 +494,7 @@ jobs: # # # Labels > Urgent # - # Title of issue is carried over from the previous step. + # Title of issue is carried over from the previous step. # # - name: >- @@ -543,7 +540,7 @@ jobs: */ const words = [ "urgent", "urgency", "emergency", "important", "critical" ]; - const bIncWordT = words.some( s => s.includes( iss_title_lc ) || iss_title_lc.includes( s ) ); + const bTriggerWordInTitle = words.some( s => s.includes( iss_title_lc ) || iss_title_lc.includes( s ) ); /* Find regex based phrases @@ -568,7 +565,7 @@ jobs: console.log( "Title Lowercase ............... " + iss_title_lc ) console.log( "Startswith " + urgn_tag.toLowerCase( ) + "............. " + iss_title_lc.startsWith( urgn_tag.toLowerCase( ) ) ) - console.log( "Title Includes Keyword ........ " + bIncWordT ) + console.log( "Title Includes Keyword ........ " + bTriggerWordInTitle ) console.log( "Title Includes Regex .......... " + bFoundMatchTitle ) console.log( "Body Includes Regex ........... " + bFoundMatchBody ) console.log( "\n" ) @@ -579,7 +576,7 @@ jobs: */ // change TAG per category - if ( iss_title_lc.startsWith( urgn_tag.toLowerCase( ) ) || bIncWordT || bFoundMatchTitle || bFoundMatchBody ) + if ( iss_title_lc.startsWith( urgn_tag.toLowerCase( ) ) || bTriggerWordInTitle || bFoundMatchTitle || bFoundMatchBody ) { console.log( "⚠️ " + urgn_tag + " ---------------------------------------" ) @@ -629,7 +626,7 @@ jobs: # # # Labels > Roadmap # - # Title of issue is carried over from the previous step. + # Title of issue is carried over from the previous step. # # - name: >- @@ -675,7 +672,7 @@ jobs: */ const words = [ "roadmap", "road map", "planned" ]; - const bIncWordT = words.some( s => s.includes( iss_title_lc ) || iss_title_lc.includes( s ) ); + const bTriggerWordInTitle = words.some( s => s.includes( iss_title_lc ) || iss_title_lc.includes( s ) ); /* Find regex based phrases @@ -701,7 +698,7 @@ jobs: 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 ........ " + bIncWordT ) + console.log( "Title Includes Keyword ........ " + bTriggerWordInTitle ) console.log( "Title Includes Regex .......... " + bFoundMatchTitle ) console.log( "Body Includes Regex ........... " + bFoundMatchBody ) console.log( "\n" ) @@ -712,7 +709,7 @@ jobs: */ // change TAG per category - if ( iss_title_lc.startsWith( road_tag.toLowerCase( ) ) || bIncWordT || bFoundMatchTitle || bFoundMatchBody ) + if ( iss_title_lc.startsWith( road_tag.toLowerCase( ) ) || bTriggerWordInTitle || bFoundMatchTitle || bFoundMatchBody ) { console.log( "⚠️ " + road_tag + " ---------------------------------------" ) @@ -773,8 +770,6 @@ jobs: contents: 'read' id-token: 'write' issues: 'write' - environment: - name: Orion steps: # # @@ -863,8 +858,6 @@ jobs: && !contains( needs.*.result, 'failure' ) permissions: contents: write - environment: - name: Orion steps: # # diff --git a/.github/workflows/issues-scan.yml b/.github/workflows/issues-scan.yml index f233bb2ac..2121a3cf9 100644 --- a/.github/workflows/issues-scan.yml +++ b/.github/workflows/issues-scan.yml @@ -1,11 +1,11 @@ # # -# @parent : github workflow -# @desc : pull request autoscan -# scans all of the files related to a particular pull request -# if the code in the files being submitted contains code that is forbidden, -# a report is generated and posted as a comment in the PR. -# @author : Aetherinox -# @url : https://github.com/Aetherinox +# @type github workflow +# @desc pull request autoscan +# scans all of the files related to a particular pull request +# if the code in the files being submitted contains code that is forbidden, +# a report is generated and posted as a comment in the PR. +# @author Aetherinox +# @url https://github.com/Aetherinox # # name: "🎫 Issues › Scan" @@ -16,7 +16,7 @@ run-name: "🎫 Issues › Scan" # # on: - pull_request: + pull_request_target: branches: - main - master @@ -122,7 +122,6 @@ jobs: actions: read issues: write pull-requests: read - steps: # # diff --git a/.github/workflows/issues-stale.yml b/.github/workflows/issues-stale.yml index d376f6cc4..276b9ee4c 100644 --- a/.github/workflows/issues-stale.yml +++ b/.github/workflows/issues-stale.yml @@ -1,8 +1,13 @@ # # -# @parent : github workflow -# @desc : checks each issue / PR for a valid label -# @author : Aetherinox -# @url : https://github.com/Aetherinox +# @type github workflow +# @desc creates repository labels if they are not yet installed +# issues marked as stale after 30 days, given tag Status 𐄂 Stale +# inactive issues closed after 180 days, given tag Status 𐄂 Locked +# inactive pr closed after 365 days, given tag Status 𐄂 Locked +# issues marked stale after 30 days, given tag Status 𐄂 Stale +# issues marked closed 7 days after being marked stale, given tag Status 𐄂 Autoclosed +# @author Aetherinox +# @url https://github.com/Aetherinox # # This Github action must be activated manually. This workflow script will do the # following: @@ -137,10 +142,8 @@ jobs: job-labels-create: name: >- - 🎫 Labels › Verify Existing + 🎫 Labels › Verify Existing runs-on: ubuntu-latest - environment: - name: Orion steps: # # @@ -214,11 +217,9 @@ jobs: job-issues-nolabel: name: >- - 🎫 Labels › Assign Missing + 🎫 Labels › Assign Missing runs-on: ubuntu-latest needs: job-labels-create - environment: - name: Orion steps: # # @@ -270,9 +271,9 @@ jobs: Change last number ( 36 = hours ) */ - const expireAfterMs = 1000 * 60 * 60 * 36; // milliseconds ( 36 hours ) - const curtime = new Date( ).getTime( ); // 1711471510629 - const issues = await github.rest.issues.listForRepo( { owner: context.repo.owner, repo: context.repo.repo, state: 'open' } ); + const expireAfterMs = 1000 * 60 * 60 * 36; // milliseconds ( 36 hours ) + const curtime = new Date( ).getTime( ); // 1711471510629 + const issues = await github.rest.issues.listForRepo( { owner: context.repo.owner, repo: context.repo.repo, state: 'open' } ); console.log( ` 📦── Found ${issues.data.length} open issues` ); @@ -338,7 +339,7 @@ jobs: Label > Bugs */ - const bug_bIncWordT = bug_words.some( s => s.includes( iss_title_lc ) || iss_title_lc.includes( s ) ); + const bug_bIncWordT = bug_words.some( s => s.includes( iss_title_lc ) || iss_title_lc.includes( s ) ); /* Find regex based phrases @@ -347,9 +348,9 @@ jobs: https://regex101.com/r/Z99Gnq/2 */ - const bug_findWordList = /^\b(?:I?\s*have\s*(?:a|an)\s*(?:issue|problem|bug))|(?: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 bug_bFoundMatchTitle = Boolean( bug_findWordList.test( iss_title ) ); - const bug_bFoundMatchBody = Boolean( bug_findWordList.test( iss_body ) ); + const bug_findWordList = /^\b(?:I?\s*have\s*(?:a|an)\s*(?:issue|problem|bug))|(?: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 bug_bFoundMatchTitle = Boolean( bug_findWordList.test( iss_title ) ); + const bug_bFoundMatchBody = Boolean( bug_findWordList.test( iss_body ) ); /* Do not change a title if the item starts with a PR: # @@ -358,8 +359,8 @@ jobs: https://regex101.com/r/JOrqbN/1 */ - const bug_findPRTitle = /^PR\s?#?(?:[0-9]*:)/igm; - const bug_bFoundPRTitle = Boolean( bug_findPRTitle.test( iss_title ) ); + const bug_findPRTitle = /^PR\s?#?(?:[0-9]*:)/igm; + const bug_bFoundPRTitle = Boolean( bug_findPRTitle.test( iss_title ) ); /* - Check if issue title matches the issue label "Bug:" @@ -377,11 +378,11 @@ jobs: // Rename title to contain Bug: if ( author !== `${{ env.BOT_NAME_DEPENDABOT }}` && !bug_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( ) ) ) { - const title = issue.title; - let title_new = title.replace( /^\s?bug\s*(.*?)\b/gi, '' ); - title_new = title.replace( /^\s?fail\s*(.*?)\b/gi, '' ); - title_new = title.replace( /^\s?issue\s*(.*?)\b/gi, '' ); - iss_title = `${ bug_tag } ${ title_new }`; + const title = issue.title; + let title_new = title.replace( /^\s?bug\s*(.*?)\b/gi, '' ); + title_new = title.replace( /^\s?fail\s*(.*?)\b/gi, '' ); + title_new = title.replace( /^\s?issue\s*(.*?)\b/gi, '' ); + iss_title = `${ bug_tag } ${ title_new }`; } await github.rest.issues.update( @@ -395,7 +396,7 @@ jobs: Label > Features */ - const feat_bIncWordT = feat_words.some( s => s.includes( iss_title_lc ) || iss_title_lc.includes( s ) ); + const feat_bIncWordT = feat_words.some( s => s.includes( iss_title_lc ) || iss_title_lc.includes( s ) ); /* Find regex based phrases @@ -404,7 +405,7 @@ jobs: https://regex101.com/r/fR1Hm6/1 */ - const feat_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 feat_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 feat_bFoundMatchTitle = Boolean( feat_findWordList.test( iss_title ) ); const feat_bFoundMatchBody = Boolean( feat_findWordList.test( iss_body ) ); @@ -434,12 +435,12 @@ jobs: // Rename title to contain Feature: if ( author !== `${{ env.BOT_NAME_DEPENDABOT }}` && !feat_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( ) ) ) { - const title = issue.title; - let title_new = title.replace( /^\s?feature\s*(.*?)\b/gi, '' ); - title_new = title.replace( /^\s?request\s*(.*?)\b/gi, '' ); - title_new = title.replace( /^\s?add(.*?)\s?feature\s*(.*?)\b/gi, '' ); - title_new = title.replace( /^\s?add(.*?)\s?support\s*(.*?)\b/gi, '' ); - iss_title = `${ feat_tag } ${ title_new }`; + const title = issue.title; + let title_new = title.replace( /^\s?feature\s*(.*?)\b/gi, '' ); + title_new = title.replace( /^\s?request\s*(.*?)\b/gi, '' ); + title_new = title.replace( /^\s?add(.*?)\s?feature\s*(.*?)\b/gi, '' ); + title_new = title.replace( /^\s?add(.*?)\s?support\s*(.*?)\b/gi, '' ); + iss_title = `${ feat_tag } ${ title_new }`; } await github.rest.issues.update( @@ -453,7 +454,7 @@ jobs: Label > Urgent */ - const urgn_bIncWordT = urgn_words.some( s => s.includes( iss_title_lc ) || iss_title_lc.includes( s ) ); + const urgn_bIncWordT = urgn_words.some( s => s.includes( iss_title_lc ) || iss_title_lc.includes( s ) ); /* Find regex based phrases @@ -462,9 +463,9 @@ jobs: https://regex101.com/r/eE9tJX/2 */ - const urgn_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 urgn_bFoundMatchTitle = Boolean( urgn_findWordList.test( iss_title ) ); - const urgn_bFoundMatchBody = Boolean( urgn_findWordList.test( iss_body ) ); + const urgn_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 urgn_bFoundMatchTitle = Boolean( urgn_findWordList.test( iss_title ) ); + const urgn_bFoundMatchBody = Boolean( urgn_findWordList.test( iss_body ) ); /* Do not change a title if the item starts with a PR: # @@ -492,13 +493,13 @@ jobs: // Rename title to contain Urgent: if ( author !== `${{ env.BOT_NAME_DEPENDABOT }}` && !urgn_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( ) ) ) { - const title = issue.title; - let title_new = title.replace( /^\s?emergency\s*(.*?)\b/gi, '' ); - title_new = title.replace( /^\s?urgent\s*(.*?)\b/gi, '' ); - title_new = title.replace( /^\s?urgency\s*(.*?)\b/gi, '' ); - title_new = title.replace( /^\s?important\s*(.*?)\b/gi, '' ); - title_new = title.replace( /^\s?critical\s*(.*?)\b/gi, '' ); - iss_title = `${ urgn_tag } ${ title_new }`; + const title = issue.title; + let title_new = title.replace( /^\s?emergency\s*(.*?)\b/gi, '' ); + title_new = title.replace( /^\s?urgent\s*(.*?)\b/gi, '' ); + title_new = title.replace( /^\s?urgency\s*(.*?)\b/gi, '' ); + title_new = title.replace( /^\s?important\s*(.*?)\b/gi, '' ); + title_new = title.replace( /^\s?critical\s*(.*?)\b/gi, '' ); + iss_title = `${ urgn_tag } ${ title_new }`; } await github.rest.issues.update( @@ -522,9 +523,9 @@ jobs: https://regex101.com/r/ucajBZ/1 */ - const road_findWordList = /#\s*Summary[\S\s]+#\s*(?:Proposal|Objective)[^\]]+/igm; - const road_bFoundMatchTitle = Boolean( road_findWordList.test( iss_title ) ); - const road_bFoundMatchBody = Boolean( road_findWordList.test( iss_body ) ); + const road_findWordList = /#\s*Summary[\S\s]+#\s*(?:Proposal|Objective)[^\]]+/igm; + const road_bFoundMatchTitle = Boolean( road_findWordList.test( iss_title ) ); + const road_bFoundMatchBody = Boolean( road_findWordList.test( iss_body ) ); /* Do not change a title if the item starts with a PR: # @@ -533,8 +534,8 @@ jobs: https://regex101.com/r/JOrqbN/1 */ - const road_findPRTitle = /^PR\s?#?(?:[0-9]*:)/igm; - const road_bFoundPRTitle = Boolean( road_findPRTitle.test( iss_title ) ); + const road_findPRTitle = /^PR\s?#?(?:[0-9]*:)/igm; + const road_bFoundPRTitle = Boolean( road_findPRTitle.test( iss_title ) ); /* - Check if issue title matches the issue label "Roadmap:" @@ -552,13 +553,13 @@ jobs: // Rename title to contain Roadmap: if ( 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( ) ) ) { - const title = issue.title; - let title_new = title.replace( /^\s?emergency\s*(.*?)\b/gi, '' ); - title_new = title.replace( /^\s?urgent\s*(.*?)\b/gi, '' ); - title_new = title.replace( /^\s?urgency\s*(.*?)\b/gi, '' ); - title_new = title.replace( /^\s?important\s*(.*?)\b/gi, '' ); - title_new = title.replace( /^\s?critical\s*(.*?)\b/gi, '' ); - iss_title = `${ road_tag } ${ title_new }`; + const title = issue.title; + let title_new = title.replace( /^\s?emergency\s*(.*?)\b/gi, '' ); + title_new = title.replace( /^\s?urgent\s*(.*?)\b/gi, '' ); + title_new = title.replace( /^\s?urgency\s*(.*?)\b/gi, '' ); + title_new = title.replace( /^\s?important\s*(.*?)\b/gi, '' ); + title_new = title.replace( /^\s?critical\s*(.*?)\b/gi, '' ); + iss_title = `${ road_tag } ${ title_new }`; } await github.rest.issues.update( @@ -583,7 +584,7 @@ jobs: job-issues-stale: name: >- - 💤 Check › Stale + 💤 Check › Stale runs-on: ubuntu-latest needs: - job-labels-create @@ -592,8 +593,6 @@ jobs: contents: write issues: write pull-requests: write - environment: - name: Orion steps: # # @@ -616,9 +615,8 @@ jobs: --- I am a bot reaching out to you with an automated response. - stale-issue-label: 'Status 𐄂 Stale' - close-issue-label: 'Status 𐄂 ' + close-issue-label: 'Status 𐄂 Autoclosed' exempt-issue-labels: 'feature,Type ◦ Feature,bug,Type ◦ Bug' days-before-stale: 30 days-before-close: 7 @@ -631,25 +629,23 @@ jobs: job-issues-lock: name: >- - 🔒 Check › Inactive + 🔒 Check › Inactive runs-on: ubuntu-latest needs: - job-labels-create - job-issues-nolabel - environment: - name: Orion steps: # # # [ Lock Issues ] Look for inactives # # - + - name: "🔒 Lock › Inactives" uses: dessant/lock-threads@v5 id: task_issues_lock_run with: - add-pr-labels: 'Status ↯ Locked' - add-issue-labels: 'Status ↯ Locked' + add-pr-labels: 'Status 𐄂 Locked' + add-issue-labels: 'Status 𐄂 Locked' github-token: ${{ secrets.ADMINSERV_TOKEN }} issue-inactive-days: '180' issue-lock-reason: 'resolved' diff --git a/.github/workflows/labels-create.yml b/.github/workflows/labels-create.yml index f56a6a2a1..e5e47594d 100644 --- a/.github/workflows/labels-create.yml +++ b/.github/workflows/labels-create.yml @@ -1,8 +1,8 @@ # # -# @parent : github workflow -# @desc : manually activated workflow to create issue labels -# @author : Aetherinox -# @url : https://github.com/Aetherinox +# @type github workflow +# @desc manually activated workflow to create issue labels +# @author Aetherinox +# @url https://github.com/Aetherinox # # This Github action must be activated manually. This workflow script will do the # following: @@ -121,8 +121,6 @@ jobs: contents: 'read' id-token: 'write' issues: 'write' - environment: - name: Orion steps: # # diff --git a/.github/workflows/ping-developer.yml b/.github/workflows/ping-developer.yml new file mode 100644 index 000000000..34434b2c1 --- /dev/null +++ b/.github/workflows/ping-developer.yml @@ -0,0 +1,175 @@ +# # +# @type github workflow +# @desc pings the developer +# @author Aetherinox +# @url https://github.com/Aetherinox +# # + +name: "⚙️ Ping › Developer" +run-name: "⚙️ Ping › Developer" + +# # +# triggers +# # + +on: + issue_comment: + types: [created] + +# # +# environment variables +# # + +env: + BOT_NAME_1: AdminServ + BOT_NAME_2: AdminServX + BOT_NAME_3: EuropaServ + BOT_NAME_DEPENDABOT: dependabot[bot] + +# # +# jobs +# +# env not available for job.if +# # + +jobs: + deploy: + runs-on: ubuntu-latest + if: | + contains(github.event.comment.body, '/ping') + steps: + + # # + # Job > Complete > Get publish timestamp + # # + + - name: "🕛 Get Timestamp" + id: task_complete_timestamp_get + run: | + echo "NOW=$(date +'%m-%d-%Y %H:%M:%S')" >> $GITHUB_ENV + + # # + # Add Label to accepted PR + # + # port 465 + # server_port: 465 + # secure: true + # ignore_cert: false + # + # port 587 + # server_port: 587 + # secure: false + # # + + - name: Send mail + uses: dawidd6/action-send-mail@v3 + with: + server_address: ${{secrets.EMAIL_SMTP}} + server_port: 465 + secure: true + username: ${{secrets.EMAIL_FROM}} + password: ${{secrets.EMAIL_KEY}} + subject: "Github: Ping notification from ${{ github.repository }}" + to: ${{secrets.EMAIL_TO}} + from: ${{secrets.EMAIL_FROM}} + html_body: | + + +
+ +