From 4449c02d54f1e7916df87aa55abfe1d90f12edaf Mon Sep 17 00:00:00 2001 From: Ross Brodbeck Date: Mon, 13 Apr 2020 14:05:37 -0400 Subject: [PATCH] Add linting --- .eslintignore | 3 +++ .eslintrc.json | 55 ++++++++++++++++++++++++++++++++++++++++++++++++++ src/main.ts | 31 +++++++++++++++------------- 3 files changed, 75 insertions(+), 14 deletions(-) create mode 100644 .eslintignore create mode 100644 .eslintrc.json diff --git a/.eslintignore b/.eslintignore new file mode 100644 index 00000000..21869472 --- /dev/null +++ b/.eslintignore @@ -0,0 +1,3 @@ +dist/ +lib/ +node_modules/ \ No newline at end of file diff --git a/.eslintrc.json b/.eslintrc.json new file mode 100644 index 00000000..2566b3d4 --- /dev/null +++ b/.eslintrc.json @@ -0,0 +1,55 @@ +{ + "plugins": ["jest", "@typescript-eslint"], + "extends": ["plugin:github/es6"], + "parser": "@typescript-eslint/parser", + "parserOptions": { + "ecmaVersion": 9, + "sourceType": "module", + "project": "./tsconfig.json" + }, + "rules": { + "eslint-comments/no-use": "off", + "import/no-namespace": "off", + "no-unused-vars": "off", + "@typescript-eslint/no-unused-vars": "error", + "@typescript-eslint/explicit-member-accessibility": ["error", {"accessibility": "no-public"}], + "@typescript-eslint/no-require-imports": "error", + "@typescript-eslint/array-type": "error", + "@typescript-eslint/await-thenable": "error", + "@typescript-eslint/ban-ts-ignore": "error", + "camelcase": "off", + "@typescript-eslint/class-name-casing": "error", + "@typescript-eslint/func-call-spacing": ["error", "never"], + "@typescript-eslint/generic-type-naming": ["error", "^[A-Z][A-Za-z]*$"], + "@typescript-eslint/no-array-constructor": "error", + "@typescript-eslint/no-empty-interface": "error", + "@typescript-eslint/no-explicit-any": "error", + "@typescript-eslint/no-extraneous-class": "error", + "@typescript-eslint/no-for-in-array": "error", + "@typescript-eslint/no-inferrable-types": "error", + "@typescript-eslint/no-misused-new": "error", + "@typescript-eslint/no-namespace": "error", + "@typescript-eslint/no-non-null-assertion": "warn", + "@typescript-eslint/no-object-literal-type-assertion": "error", + "@typescript-eslint/no-unnecessary-qualifier": "error", + "@typescript-eslint/no-unnecessary-type-assertion": "error", + "@typescript-eslint/no-useless-constructor": "error", + "@typescript-eslint/no-var-requires": "error", + "@typescript-eslint/prefer-for-of": "warn", + "@typescript-eslint/prefer-function-type": "warn", + "@typescript-eslint/prefer-includes": "error", + "@typescript-eslint/prefer-interface": "error", + "@typescript-eslint/prefer-string-starts-ends-with": "error", + "@typescript-eslint/promise-function-async": "error", + "@typescript-eslint/require-array-sort-compare": "error", + "@typescript-eslint/restrict-plus-operands": "error", + "semi": "off", + "@typescript-eslint/type-annotation-spacing": "error", + "@typescript-eslint/unbound-method": "error" + }, + "env": { + "node": true, + "es6": true, + "jest/globals": true + } + } \ No newline at end of file diff --git a/src/main.ts b/src/main.ts index a9b5b78c..9954e27b 100644 --- a/src/main.ts +++ b/src/main.ts @@ -1,11 +1,11 @@ import * as core from '@actions/core'; import * as github from '@actions/github'; -import { Octokit } from '@octokit/rest'; +import {Octokit} from '@octokit/rest'; -type Issue = Octokit.IssuesListForRepoResponseItem -type IssueLabel = Octokit.IssuesListForRepoResponseItemLabelsItem +type Issue = Octokit.IssuesListForRepoResponseItem; +type IssueLabel = Octokit.IssuesListForRepoResponseItemLabelsItem; -type Args = { +interface Args { repoToken: string; staleIssueMessage: string; stalePrMessage: string; @@ -17,9 +17,9 @@ type Args = { exemptPrLabel: string; onlyLabels: string; operationsPerRun: number; -}; +} -async function run() { +async function run(): Promise { try { const args = getAndValidateArgs(); @@ -43,7 +43,7 @@ async function processIssues( state: 'open', labels: args.onlyLabels, per_page: 100, - page: page + page }); operationsLeft -= 1; @@ -52,23 +52,26 @@ async function processIssues( return operationsLeft; } - for (var issue of issues.data.values()) { + for (const issue of issues.data.values()) { core.debug(`found issue: ${issue.title} last updated ${issue.updated_at}`); - let isPr = !!issue.pull_request; + const isPr = !!issue.pull_request; - let staleMessage = isPr ? args.stalePrMessage : args.staleIssueMessage; + const staleMessage = isPr ? args.stalePrMessage : args.staleIssueMessage; if (!staleMessage) { core.debug(`skipping ${isPr ? 'pr' : 'issue'} due to empty message`); continue; } - let staleLabel = isPr ? args.stalePrLabel : args.staleIssueLabel; - let exemptLabel = isPr ? args.exemptPrLabel : args.exemptIssueLabel; + const staleLabel = isPr ? args.stalePrLabel : args.staleIssueLabel; + const exemptLabel = isPr ? args.exemptPrLabel : args.exemptIssueLabel; if (exemptLabel && isLabeled(issue, exemptLabel)) { continue; } else if (isLabeled(issue, staleLabel)) { - if (args.daysBeforeClose >= 0 && wasLastUpdatedBefore(issue, args.daysBeforeClose)) { + if ( + args.daysBeforeClose >= 0 && + wasLastUpdatedBefore(issue, args.daysBeforeClose) + ) { operationsLeft -= await closeIssue(client, issue); } else { continue; @@ -167,7 +170,7 @@ function getAndValidateArgs(): Args { ) }; - for (var numberInput of [ + for (const numberInput of [ 'days-before-stale', 'days-before-close', 'operations-per-run'