Skip to content

Commit

Permalink
pre-alpha - S-111246 - Backstage and Third party Library upgrade (#57)
Browse files Browse the repository at this point in the history
* pre-alpha - S-111246 - Backstage and Third party Library upgrade

* Updated to permissionservice

* Updated lint and prettier formatting changes

* Removed deprecated logger and updated with LoggerService

* Removed deprecated getVoidLogger() and replaced with mocked logger services

* Removed deprecated logger and used loggerservice mock

* Updated loggerservice to rootloggerservice and  deprecated errorhandles

* Updated authservice in standaloneserver

* Reverted node-fetch version to 2

* Added standalone plugin backend server using new backend system

* Added changelog

* Added pluginid

* fixed pluginid issues

* Fixed backend plugin issue for legacy configuration

* Added new command fix

* Updated version for testing

* Updated common plugin version to test

* Reverted deprecated features and upgraded only libraries

* Updated package version for testing

* Reverted mocked logger

* Reverted to deprecated logger

* Reverted to deprecated logger

* Reverted code back to remove deprecated features

* Updated temp version to test and removed winston logger

* Removed Permission evaluator and skipped permission check if httpAuth is not defined

* Updated version for testing

* Updated packsage.json and Changelog

---------

Co-authored-by: Nelson Paulraj <nelsonpaulraj@Nelsons-MacBook-Pro.local>
  • Loading branch information
nelson-digi and Nelson Paulraj authored Sep 18, 2024
1 parent 84677d6 commit a9ddf67
Show file tree
Hide file tree
Showing 13 changed files with 134 additions and 72 deletions.
24 changes: 24 additions & 0 deletions plugins/dai-release-backend/CHANGE_LOG.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,29 @@
# Changelog

## [v0.1.1-alpha.0](https://github.com/digital-ai/backstage-release/tree/dai-release-backend/v0.1.1-alpha.0) (18/09/2024)

### Library upgrade

- Replaced winston logger with LoggerService
- Replaced PermissionEvaluator to PermissionService
- Removed permission support for old backend system
- Updated dependencies
- @backstage/backend-common@^0.24.1
- @backstage/backend-defaults@^0.4.4
- @backstage/backend-plugin-api@^0.8.1
- @backstage/catalog-model@^1.6.0
- @backstage/config@^1.2.0
- @backstage/errors@^1.2.4
- @backstage/plugin-auth-node@^0.5.1
- @backstage/plugin-permission-common@^0.8.1
- @backstage/plugin-permission-node@^0.8.2
- @backstage/backend-test-utils@^0.5.1
- @digital-ai/plugin-dai-release-common@0.1.1-alpha.0
- express@^4.19.2
- express-promise-router@^4.1.1
- node-fetch@^2.7.0
- yn@^5.0.0

## [v0.1.0](https://github.com/digital-ai/backstage-release/tree/dai-release-backend/v0.1.0) (11/06/2024)

### Features
Expand Down
3 changes: 3 additions & 0 deletions plugins/dai-release-backend/backstage.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
{
"version": "1.30.4"
}
Binary file added plugins/dai-release-backend/dev/.DS_Store
Binary file not shown.
21 changes: 21 additions & 0 deletions plugins/dai-release-backend/dev/index.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
/*
* Copyright 2024 The Backstage Authors
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/

import { createBackend } from '@backstage/backend-defaults';

const backend = createBackend();
backend.add(import('../src/index'));
backend.start();
53 changes: 30 additions & 23 deletions plugins/dai-release-backend/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -11,11 +11,16 @@
"types": "dist/index.d.ts"
},
"backstage": {
"role": "backend-plugin"
"role": "backend-plugin",
"pluginId": "dai-release",
"pluginPackages": [
"@digital-ai/plugin-dai-release-backend"
]
},
"repository": {
"type": "git",
"url": "git://github.com/digital-ai/backstage-release.git"
"url": "git://github.com/digital-ai/backstage-release.git",
"directory": "."
},
"bugs": {
"url": "https://github.com/digital-ai/backstage-release/issues"
Expand All @@ -40,34 +45,36 @@
"postpack": "backstage-cli package postpack",
"prepare": "husky",
"prettier:check": "prettier --check .",
"prettier:fix": "prettier --write ."
"prettier:fix": "prettier --write .",
"fix": "backstage-cli repo fix --publish"
},
"dependencies": {
"@backstage/backend-common": "^0.19.5",
"@backstage/backend-plugin-api": "^0.6.12",
"@backstage/catalog-model": "^1.4.4",
"@backstage/config": "^1.1.0",
"@backstage/errors": "^1.2.3",
"@backstage/plugin-auth-node": "^0.4.8",
"@backstage/plugin-permission-common": "^0.7.12",
"@backstage/plugin-permission-node": "^0.7.24",
"@backstage/backend-common": "^0.24.1",
"@backstage/backend-defaults": "^0.4.4",
"@backstage/backend-plugin-api": "^0.8.1",
"@backstage/catalog-model": "^1.6.0",
"@backstage/config": "^1.2.0",
"@backstage/errors": "^1.2.4",
"@backstage/plugin-auth-node": "^0.5.1",
"@backstage/plugin-permission-common": "^0.8.1",
"@backstage/plugin-permission-node": "^0.8.2",
"@backstage/backend-test-utils": "^0.5.1",
"@digital-ai/plugin-dai-release-common": "0.1.1-alpha.0",
"@types/express": "*",
"express": "^4.17.1",
"express-promise-router": "^4.1.0",
"node-fetch": "^2.6.7",
"winston": "^3.2.1",
"yn": "^4.0.0"
"express": "^4.19.2",
"express-promise-router": "^4.1.1",
"node-fetch": "^2.7.0",
"yn": "^5.0.0"
},
"devDependencies": {
"@backstage/cli": "^0.22.13",
"@backstage/cli": "^0.27.0",
"@spotify/prettier-config": "^15.0.0",
"@types/supertest": "^2.0.12",
"husky": "^9.0.11",
"lint-staged": "^15.2.2",
"msw": "^2.2.1",
"prettier": "3.2.5",
"supertest": "^6.2.4"
"@types/supertest": "^6.0.2",
"husky": "^9.1.5",
"lint-staged": "^15.2.10",
"msw": "^2.4.1",
"prettier": "3.3.3",
"supertest": "^7.0.0"
},
"files": [
"dist"
Expand Down
16 changes: 8 additions & 8 deletions plugins/dai-release-backend/src/api/ReleaseOverviewApi.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@ import {
import { ReleaseConfig } from '../service/releaseInstanceConfig';
import { ReleaseList } from '@digital-ai/plugin-dai-release-common';
import { ReleaseOverviewApi } from './ReleaseOverviewApi';
import { getVoidLogger } from '@backstage/backend-common';
import { mockServices } from "@backstage/backend-test-utils";

function configureMockServer(): SetupServerApi {
const server = setupServer();
Expand Down Expand Up @@ -46,7 +46,7 @@ describe('Backend API tests for Releases', () => {
it('Should throw error if instance is not in config', async () => {
const releaseOverviewApi = ReleaseOverviewApi.fromConfig(
ReleaseConfig.fromConfig(config),
getVoidLogger(),
mockServices.logger.mock(),
);

await expect(
Expand Down Expand Up @@ -75,7 +75,7 @@ describe('Backend API tests for Releases', () => {
it('Should get releases from Release API', async () => {
const releaseOverviewApi = ReleaseOverviewApi.fromConfig(
ReleaseConfig.fromConfig(config),
getVoidLogger(),
mockServices.logger.mock(),
);

const releaseList: ReleaseList = await releaseOverviewApi.getReleases(
Expand Down Expand Up @@ -104,7 +104,7 @@ describe('Backend API tests for Releases', () => {

const releaseOverviewApi = ReleaseOverviewApi.fromConfig(
ReleaseConfig.fromConfig(config),
getVoidLogger(),
mockServices.logger.mock(),
);

await expect(
Expand Down Expand Up @@ -135,7 +135,7 @@ describe('Backend API tests for Releases', () => {

const releaseOverviewApi = ReleaseOverviewApi.fromConfig(
ReleaseConfig.fromConfig(config),
getVoidLogger(),
mockServices.logger.mock(),
);

await expect(
Expand Down Expand Up @@ -166,7 +166,7 @@ describe('Backend API tests for Releases', () => {

const releaseOverviewApi = ReleaseOverviewApi.fromConfig(
ReleaseConfig.fromConfig(config),
getVoidLogger(),
mockServices.logger.mock(),
);
await expect(
async () =>
Expand Down Expand Up @@ -194,7 +194,7 @@ describe('Backend API tests for Releases', () => {

const releaseOverviewApi = ReleaseOverviewApi.fromConfig(
ReleaseConfig.fromConfig(config),
getVoidLogger(),
mockServices.logger.mock(),
);

await expect(
Expand Down Expand Up @@ -223,7 +223,7 @@ describe('Backend API tests for Releases', () => {

const releaseOverviewApi = ReleaseOverviewApi.fromConfig(
ReleaseConfig.fromConfig(config),
getVoidLogger(),
mockServices.logger.mock(),
);

const releaseList: ReleaseList = await releaseOverviewApi.getReleases(
Expand Down
8 changes: 4 additions & 4 deletions plugins/dai-release-backend/src/api/ReleaseOverviewApi.ts
Original file line number Diff line number Diff line change
Expand Up @@ -15,21 +15,21 @@ import {
} from '@digital-ai/plugin-dai-release-common';
import { getEndOrDueDate, getStartOrScheduledDate } from './date-service';
import { Folder } from '@digital-ai/plugin-dai-release-common';
import { Logger } from 'winston';
import { ReleaseConfig } from '../service/releaseInstanceConfig';
import { ReleaseList } from '@digital-ai/plugin-dai-release-common';
import { RootLoggerService } from "@backstage/backend-plugin-api";
import { parseErrorResponse } from './responseUtil';

export class ReleaseOverviewApi {
private readonly logger: Logger;
private readonly logger: RootLoggerService;
private readonly config: ReleaseConfig;

private constructor(logger: Logger, config: ReleaseConfig) {
private constructor(logger: RootLoggerService, config: ReleaseConfig) {
this.logger = logger;
this.config = config;
}

static fromConfig(config: ReleaseConfig, logger: Logger) {
static fromConfig(config: ReleaseConfig, logger: RootLoggerService) {
return new ReleaseOverviewApi(logger, config);
}

Expand Down
2 changes: 1 addition & 1 deletion plugins/dai-release-backend/src/api/apiConfig.ts
Original file line number Diff line number Diff line change
Expand Up @@ -33,7 +33,7 @@ export const getEncodedQueryVal = (queryString?: string): string => {

export const getDecodedQueryVal = (queryString?: string): string => {
return decodeURIComponent(
queryString || queryString === 'undefined' ? queryString : '',
queryString || queryString === 'undefined' ? queryString : '',
);
};

Expand Down
4 changes: 2 additions & 2 deletions plugins/dai-release-backend/src/api/responseUtil.ts
Original file line number Diff line number Diff line change
Expand Up @@ -4,10 +4,10 @@ import {
NotFoundError,
} from '@backstage/errors';
import { Config } from '@backstage/config';
import { Logger } from 'winston';
import { ReleaseInstanceConfig } from '@digital-ai/plugin-dai-release-common';
import { RootLoggerService } from "@backstage/backend-plugin-api";

export async function parseErrorResponse(logger: Logger, response: Response) {
export async function parseErrorResponse(logger: RootLoggerService, response: Response) {
logger?.error(
`Error occurred while accessing release: status: ${response.status}, statusText: ${response.statusText} `,
);
Expand Down
9 changes: 5 additions & 4 deletions plugins/dai-release-backend/src/plugin.ts
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,6 @@ import {
createBackendPlugin,
} from '@backstage/backend-plugin-api';
import { createRouter } from './service/router';
import { loggerToWinstonLogger } from '@backstage/backend-common';

/**
* Digital.ai Release backend plugin
Expand All @@ -16,15 +15,17 @@ export const daiReleasePlugin = createBackendPlugin({
env.registerInit({
deps: {
config: coreServices.rootConfig,
logger: coreServices.logger,
logger: coreServices.rootLogger,
httpRouter: coreServices.httpRouter,
httpAuth: coreServices.httpAuth,
permissions: coreServices.permissions,
},
async init({ config, logger, httpRouter, permissions }) {
async init({ config, logger, httpRouter, httpAuth, permissions }) {
httpRouter.use(
await createRouter({
config: config,
logger: loggerToWinstonLogger(logger),
logger: logger,
httpAuth,
permissions,
}),
);
Expand Down
19 changes: 12 additions & 7 deletions plugins/dai-release-backend/src/service/router.test.ts
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
import {
AuthorizeResult,
PermissionEvaluator,
} from '@backstage/plugin-permission-common';
HttpAuthService,
PermissionsService,
} from '@backstage/backend-plugin-api';
import {
config,
releaseInstanceConfigResponse,
Expand All @@ -13,17 +13,18 @@ import {
error500ResponseHandler,
mockTestHandlers,
} from '../mocks/mock.test.handlers';
import { AuthorizeResult } from '@backstage/plugin-permission-common';
import { createRouter } from './router';
import express from 'express';
import { getVoidLogger } from '@backstage/backend-common';
import { mockServices } from '@backstage/backend-test-utils';
import request from 'supertest';
import { setupServer } from 'msw/node';

let app: express.Express;
const permissionApi = {
authorize: jest.fn(),
authorizeConditional: jest.fn(),
} as unknown as PermissionEvaluator;
} as unknown as PermissionsService;

function configureMockServer(permission: boolean) {
const server = setupServer();
Expand All @@ -32,14 +33,18 @@ function configureMockServer(permission: boolean) {
if (permission) {
const router = await createRouter({
config: config,
logger: getVoidLogger(),
logger: mockServices.logger.mock(),
httpAuth: {
credentials: jest.fn().mockResolvedValue({}),
} as unknown as HttpAuthService,
permissions: permissionApi,
});
app = express().use(router);
} else {
const router = await createRouter({
config: config,
logger: getVoidLogger(),
logger: mockServices.logger.mock(),
httpAuth: mockServices.httpAuth.mock(),
});
app = express().use(router);
}
Expand Down
Loading

0 comments on commit a9ddf67

Please sign in to comment.