@dxdeveloperexperience/hygie
Version:
Hygie is an easy-to-use Open-Source REST API allowing you to interact with GIT events. This NestJS API expose a set of customizable rules to automate your project's life cycle.
75 lines (68 loc) • 2.28 kB
text/typescript
import {
Controller,
Post,
UseInterceptors,
UseFilters,
Body,
Res,
HttpStatus,
} from '@nestjs/common';
import { AllExceptionsFilter } from '../exceptions/allExceptionFilter';
import { WhiteListInterceptor } from '../interceptors/whiteList.interceptor';
import { WebhookInterceptor } from '../interceptors/webhook.interceptor';
import { Webhook } from '../webhook/webhook';
import { logger } from '../logger/logger.service';
import { EnvVarInterceptor } from '../interceptors/env-var.interceptor';
import { DataAccessService } from '../data_access/dataAccess.service';
import { PreconditionException } from '../exceptions/precondition.exception';
import { GitFileInfos } from '../git/gitFileInfos';
import { EnvVarService } from '../env-var/env-var.service';
('env-var')
export class EnvVarController {
constructor(
private readonly dataAccessService: DataAccessService,
private readonly envVarService: EnvVarService,
) {}
('/')
(EnvVarInterceptor)
(WebhookInterceptor)
(WhiteListInterceptor)
(AllExceptionsFilter)
async postEnvVar(
() webhook: Webhook,
() httpResponse,
): Promise<void> {
const remoteEnvs: string = webhook.getRemoteDirectory();
try {
await webhook.gitService.setEnvironmentVariables(
this.dataAccessService,
remoteEnvs,
);
} catch (e) {
logger.error('There is no config.env file for the current git project', {
project: webhook.getCloneURL(),
location: 'processWebhook',
});
throw new PreconditionException();
}
const gitFileInfos = new GitFileInfos();
gitFileInfos.fileBranch = webhook.getDefaultBranchName();
gitFileInfos.filePath = 'env.yml';
let envFile: string;
try {
envFile = await webhook.gitService
.getFileContent(gitFileInfos)
.then(response => response.data)
.catch(err => {
throw err;
});
} catch (err) {
logger.error(err);
return;
}
this.envVarService
.processEnvFile(remoteEnvs.split('/')[0], envFile)
.catch(err => logger.error(err, { location: 'postEnvVar' }));
return httpResponse.status(HttpStatus.OK).send('Ok');
}
}