diff --git a/.eslintrc.json b/.eslintrc.json index 1d66b29..dfa78b8 100644 --- a/.eslintrc.json +++ b/.eslintrc.json @@ -1,6 +1,6 @@ { - "plugins": ["jest", "@typescript-eslint"], - "extends": ["plugin:github/es6"], + "plugins": ["jest", "@typescript-eslint", "github"], + "extends": ["plugin:github/typescript"], "parser": "@typescript-eslint/parser", "parserOptions": { "ecmaVersion": 9, @@ -18,15 +18,10 @@ "@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/camelcase": "error", - "@typescript-eslint/class-name-casing": "error", "@typescript-eslint/explicit-function-return-type": ["error", { "allowExpressions": true }], "@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", @@ -36,7 +31,6 @@ "@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", @@ -44,7 +38,6 @@ "@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", diff --git a/package-lock.json b/package-lock.json index 0006f9f..4f1dd8d 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1410,6 +1410,15 @@ "integrity": "sha512-OCutwjDZ4aFS6PB1UZ988C4YgwlBHJd6wCeQqaLdmadZ/7e+w79+hbMUFC1QXDNCmdyoRfAFdm0RypzwR+Qpag==", "dev": true }, + "@types/glob": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/@types/glob/-/glob-7.1.2.tgz", + "integrity": "sha512-VgNIkxK+j7Nz5P7jvUZlRvhuPSmsEfS03b0alKcq5V/STUKAa3Plemsn5mrQUO7am6OErJ4rhGEGJbACclrtRA==", + "requires": { + "@types/minimatch": "*", + "@types/node": "*" + } + }, "@types/graceful-fs": { "version": "4.1.3", "resolved": "https://registry.npmjs.org/@types/graceful-fs/-/graceful-fs-4.1.3.tgz", @@ -1465,6 +1474,11 @@ "integrity": "sha1-7ihweulOEdK4J7y+UnC86n8+ce4=", "dev": true }, + "@types/minimatch": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/@types/minimatch/-/minimatch-3.0.3.tgz", + "integrity": "sha512-tHq6qdbT9U1IRSGf14CL0pUlULksvY9OZ+5eEgl1N7t+OA3tGvNpxJCzuKQlsNgCVwbAs670L1vcVQi8j9HjnA==" + }, "@types/node": { "version": "12.12.47", "resolved": "https://registry.npmjs.org/@types/node/-/node-12.12.47.tgz", diff --git a/package.json b/package.json index be6c303..350b2b4 100644 --- a/package.json +++ b/package.json @@ -29,6 +29,7 @@ "dependencies": { "@actions/core": "^1.2.0", "@actions/github": "^4.0.0", + "@types/glob": "^7.1.2", "glob": "^7.1.6" }, "devDependencies": { diff --git a/src/main.ts b/src/main.ts index 6919864..66efaff 100644 --- a/src/main.ts +++ b/src/main.ts @@ -1,19 +1,23 @@ import * as fs from 'fs' +import {Octokit} from '@octokit/core' +import {Endpoints} from '@octokit/types' import * as core from '@actions/core' import * as github from '@actions/github' import * as path from 'path' +import * as glob from 'glob' -const glob = require('glob') +type RepoAssetsResp = Endpoints['GET /repos/:owner/:repo/releases/:release_id/assets']['response'] +type ReleaseByTagResp = Endpoints['GET /repos/:owner/:repo/releases/tags/:tag']['response'] +type CreateReleaseResp = Endpoints['POST /repos/:owner/:repo/releases']['response'] async function get_release_by_tag( tag: string, - octokit: any, - context: any -): Promise { + octokit: Octokit +): Promise { try { core.debug(`Getting release by tag ${tag}.`) return await octokit.repos.getReleaseByTag({ - ...context.repo, + ...github.context.repo, tag: tag }) } catch (error) { @@ -23,7 +27,7 @@ async function get_release_by_tag( `Release for tag ${tag} doesn't exist yet so we'll create it now.` ) return await octokit.repos.createRelease({ - ...context.repo, + ...github.context.repo, tag_name: tag }) } else { @@ -33,14 +37,13 @@ async function get_release_by_tag( } async function upload_to_release( - release: any, + release: ReleaseByTagResp | CreateReleaseResp, file: string, asset_name: string, tag: string, overwrite: string, - octokit: any, - context: any -) { + octokit: Octokit +): Promise { const stat = fs.statSync(file) if (!stat.isFile()) { core.debug(`Skipping ${file}, since its not a file`) @@ -50,18 +53,18 @@ async function upload_to_release( const file_bytes = fs.readFileSync(file) // Check for duplicates. - const assets = await octokit.repos.listAssetsForRelease({ - ...context.repo, + const assets: RepoAssetsResp = await octokit.repos.listAssetsForRelease({ + ...github.context.repo, release_id: release.data.id }) - const duplicate_asset = assets.data.find((a: any) => a.name === asset_name) + const duplicate_asset = assets.data.find(a => a.name === asset_name) if (duplicate_asset !== undefined) { if (overwrite === 'true') { core.debug( `An asset called ${asset_name} already exists in release ${tag} so we'll overwrite it.` ) await octokit.repos.deleteReleaseAsset({ - ...context.repo, + ...github.context.repo, asset_id: duplicate_asset.id }) } else { @@ -86,7 +89,7 @@ async function upload_to_release( }) } -async function run() { +async function run(): Promise { try { const token = core.getInput('repo_token', {required: true}) const file = core.getInput('file', {required: true}) @@ -94,14 +97,13 @@ async function run() { const tag = core.getInput('tag', {required: true}).replace('refs/tags/', '') const overwrite = core.getInput('overwrite') - const octokit = github.getOctokit(token) - const context = github.context - const release = await get_release_by_tag(tag, octokit, context) + const octokit: Octokit = github.getOctokit(token) + const release = await get_release_by_tag(tag, octokit) if (file_glob === 'true') { const files = glob.sync(file) if (files.length > 0) { - for (let file of files) { + for (const file of files) { const asset_name = path.basename(file) await upload_to_release( release, @@ -109,8 +111,7 @@ async function run() { asset_name, tag, overwrite, - octokit, - context + octokit ) } } else { @@ -126,8 +127,7 @@ async function run() { asset_name, tag, overwrite, - octokit, - context + octokit ) } } catch (error) {