From b9ed39f728f9085b2a014f1ab18007d2f266f9b9 Mon Sep 17 00:00:00 2001 From: Anupam <83457710+s-anupam@users.noreply.github.com> Date: Thu, 2 Mar 2023 19:56:14 +0530 Subject: [PATCH] Configure baseUrl in octokit initialisation (#91) Make the action work for GHES by passing `GITHUB_API_URL` environment variable to octokit initialisation. --- .github/workflows/test.yml | 6 ++ __tests__/delete.test.ts | 77 ++++++++++++++++++++++++ __tests__/version/delete-version.test.ts | 39 ++++++++++++ __tests__/version/get-version.test.ts | 31 ++++++++++ dist/index.js | 7 ++- src/main.ts | 1 - src/version/delete-version.ts | 3 +- src/version/get-versions.ts | 3 +- 8 files changed, 161 insertions(+), 6 deletions(-) diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index 6fad119..1169133 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -18,6 +18,9 @@ jobs: steps: - uses: actions/checkout@v2 name: Checkout Delete Package Versions Repo + - uses: actions/setup-node@v3 + with: + node-version: 16 - run: npm install name: NPM Install - run: npm run pack @@ -29,6 +32,9 @@ jobs: steps: - uses: actions/checkout@v2 name: Checkout Delete Package Versions Repo + - uses: actions/setup-node@v3 + with: + node-version: 16 - uses: ./ name: Smoke Test Delete Package Versions Action with: diff --git a/__tests__/delete.test.ts b/__tests__/delete.test.ts index 093368f..b5dbe49 100644 --- a/__tests__/delete.test.ts +++ b/__tests__/delete.test.ts @@ -55,6 +55,36 @@ describe('index tests -- call rest', () => { }) }) + it('finalIDs test - success - GHES', done => { + process.env.GITHUB_API_URL = 'https://github.someghesinstance.com/api/v3' + + const numVersions = 10 + let apiCalled = 0 + + const versions = getMockedVersionsResponse(numVersions) + + server.use( + rest.get( + 'https://github.someghesinstance.com/api/v3/users/test-owner/packages/npm/test-package/versions', + (req, res, ctx) => { + apiCalled++ + return res(ctx.status(200), ctx.json(versions)) + } + ) + ) + + finalIds(getInput()).subscribe(ids => { + expect(apiCalled).toBe(1) + expect(ids.length).toBe(numVersions) + for (let i = 0; i < numVersions; i++) { + expect(ids[i]).toBe(versions[i].id.toString()) + } + + delete process.env.GITHUB_API_URL + done() + }) + }) + it('finalIDs test - success - pagination', done => { const numVersions = RATE_LIMIT * 2 let apiCalled = 0 @@ -343,6 +373,53 @@ describe('index tests -- call rest', () => { done() }) }) + + it('deleteVersions test - success complete flow - GHES', done => { + process.env.GITHUB_API_URL = 'https://github.someghesinstance.com/api/v3' + + const numVersions = 10 + let getApiCalled = 0 + let deleteApiCalled = 0 + + const versions = getMockedVersionsResponse(numVersions) + const versionsDeleted: string[] = [] + + server.use( + rest.get( + 'https://github.someghesinstance.com/api/v3/users/test-owner/packages/npm/test-package/versions', + (req, res, ctx) => { + getApiCalled++ + return res(ctx.status(200), ctx.json(versions)) + } + ) + ) + + server.use( + rest.delete( + 'https://github.someghesinstance.com/api/v3/users/test-owner/packages/npm/test-package/versions/:versionId', + (req, res, ctx) => { + deleteApiCalled++ + versionsDeleted.push(req.params.versionId as string) + return res(ctx.status(204)) + } + ) + ) + + deleteVersions(getInput()) + .subscribe(result => { + expect(result).toBe(true) + }) + .add(() => { + expect(getApiCalled).toBe(1) + expect(deleteApiCalled).toBe(numVersions) + for (let i = 0; i < numVersions; i++) { + expect(versionsDeleted[i]).toBe(versions[i].id.toString()) + } + + delete process.env.GITHUB_API_URL + done() + }) + }) }) const defaultInput: InputParams = { diff --git a/__tests__/version/delete-version.test.ts b/__tests__/version/delete-version.test.ts index b78557d..d552fff 100644 --- a/__tests__/version/delete-version.test.ts +++ b/__tests__/version/delete-version.test.ts @@ -71,6 +71,45 @@ describe('delete tests - mock rest', () => { }) }) + it('deletePackageVersions - GHES', done => { + process.env.GITHUB_API_URL = 'https://github.someghesinstance.com/api/v3' + + let success = 0 + + server.use( + rest.delete( + 'https://github.someghesinstance.com/api/v3/users/test-owner/packages/npm/test-package/versions/*', + (req, res, ctx) => { + return res(ctx.status(204)) + } + ) + ) + + deletePackageVersions( + ['123', '456', '789'], + 'test-owner', + 'test-package', + 'npm', + 'test-token' + ) + .subscribe( + result => { + expect(result).toBe(true) + success++ + }, + err => { + // should not get here + done.fail(err) + } + ) + .add(() => { + expect(success).toBe(3) + + delete process.env.GITHUB_API_URL + done() + }) + }) + it('deletePackageVersion - API error', done => { server.use( rest.delete( diff --git a/__tests__/version/get-version.test.ts b/__tests__/version/get-version.test.ts index 6a03f15..967125b 100644 --- a/__tests__/version/get-version.test.ts +++ b/__tests__/version/get-version.test.ts @@ -46,6 +46,37 @@ describe('get versions tests -- mock rest', () => { }) }) + it('getOldestVersions -- success - GHES', done => { + const numVersions = RATE_LIMIT + const resp = getMockedVersionsResponse(numVersions) + + // set GITHUB_API_URL to a different base url + process.env.GITHUB_API_URL = 'https://github.someghesinstance.com/api/v3' + + server.use( + rest.get( + 'https://github.someghesinstance.com/api/v3/users/test-owner/packages/npm/test-package/versions', + (req, res, ctx) => { + return res(ctx.status(200), ctx.json(resp)) + } + ) + ) + + getOldestVersions({numVersions}).subscribe(result => { + expect(result.versions.length).toBe(numVersions) + for (let i = 0; i < numVersions; i++) { + expect(result.versions[i].id).toBe(resp[i].id) + expect(result.versions[i].version).toBe(resp[i].name) + expect(result.versions[i].created_at).toBe(resp[i].created_at) + } + expect(result.paginate).toBe(true) + expect(result.totalCount).toBe(numVersions) + + delete process.env.GITHUB_API_URL + done() + }) + }) + it('getOldestVersions -- paginate is false when fetched versions is less than page size', done => { const numVersions = 5 diff --git a/dist/index.js b/dist/index.js index 4d387e5..4cb7e48 100644 --- a/dist/index.js +++ b/dist/index.js @@ -147,7 +147,8 @@ const rest_1 = __nccwpck_require__(5375); let deleted = 0; function deletePackageVersion(packageVersionId, owner, packageName, packageType, token) { const octokit = new rest_1.Octokit({ - auth: token + auth: token, + baseUrl: process.env.GITHUB_API_URL || 'https://api.github.com' }); const package_version_id = +packageVersionId; const package_type = packageType; @@ -195,7 +196,8 @@ const operators_1 = __nccwpck_require__(7801); const rest_1 = __nccwpck_require__(5375); function getOldestVersions(owner, packageName, packageType, numVersions, page, token) { const octokit = new rest_1.Octokit({ - auth: token + auth: token, + baseUrl: process.env.GITHUB_API_URL || 'https://api.github.com' }); const package_type = packageType; return (0, rxjs_1.from)(octokit.rest.packages.getAllPackageVersionsForPackageOwnedByUser({ @@ -43896,7 +43898,6 @@ var __webpack_exports__ = {}; var exports = __webpack_exports__; Object.defineProperty(exports, "__esModule", ({ value: true })); -/* eslint-disable @typescript-eslint/no-unused-vars */ const core_1 = __nccwpck_require__(2186); const github_1 = __nccwpck_require__(5438); const input_1 = __nccwpck_require__(8657); diff --git a/src/main.ts b/src/main.ts index 152799f..23fb904 100644 --- a/src/main.ts +++ b/src/main.ts @@ -1,4 +1,3 @@ -/* eslint-disable @typescript-eslint/no-unused-vars */ import {getInput, setFailed} from '@actions/core' import {context} from '@actions/github' import {Input} from './input' diff --git a/src/version/delete-version.ts b/src/version/delete-version.ts index f9641cc..3e788b9 100644 --- a/src/version/delete-version.ts +++ b/src/version/delete-version.ts @@ -15,7 +15,8 @@ export function deletePackageVersion( token: string ): Observable { const octokit = new Octokit({ - auth: token + auth: token, + baseUrl: process.env.GITHUB_API_URL || 'https://api.github.com' }) const package_version_id = +packageVersionId const package_type: PackageType = packageType as PackageType diff --git a/src/version/get-versions.ts b/src/version/get-versions.ts index eb8e274..28a54a4 100644 --- a/src/version/get-versions.ts +++ b/src/version/get-versions.ts @@ -31,7 +31,8 @@ export function getOldestVersions( token: string ): Observable { const octokit = new Octokit({ - auth: token + auth: token, + baseUrl: process.env.GITHUB_API_URL || 'https://api.github.com' }) const package_type: PackageType = packageType as PackageType