Skip to content

Commit 501f9a1

Browse files
enhancement: create default branch for the git platform
1 parent 68b6bb1 commit 501f9a1

File tree

4 files changed

+43
-15
lines changed

4 files changed

+43
-15
lines changed

app/src/integrations/git-platforms/github.ts

Lines changed: 23 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ import {ProjectEntity} from '../../models/project';
33
import {GitPlatformEntity} from '../../models/gitPlatform';
44
import {GITHUB} from '../supportedGitPlatforms';
55
import {GitPlatformService} from '../../services/gitPlatformService';
6+
import {createHash} from 'crypto';
67

78
const ACCEPT = `application/vnd.github+json`;
89
const GITHUB_URL = `https://api.github.com`;
@@ -23,9 +24,30 @@ export const createGithubRepository = async (projectEntity: ProjectEntity) => {
2324
}
2425
});
2526

26-
return githubClient.post('/user/repos', {
27+
return await githubClient.post('/user/repos', {
2728
name: projectEntity.repository_name,
2829
repository: projectEntity.repository_name + ' created by compage',
2930
private: !projectEntity.is_repository_public,
3031
});
3132
};
33+
34+
export const createGithubRepositoryBranch = async (projectEntity: ProjectEntity) => {
35+
const email = projectEntity.owner_email;
36+
const gitPlatformEntity: GitPlatformEntity = await gitPlatformService.getGitPlatform(email, GITHUB);
37+
if (gitPlatformEntity.personal_access_token.length === 0) {
38+
throw new Error(`personal access token for ${email} is empty`);
39+
}
40+
41+
const githubClient = axios.create({
42+
baseURL: GITHUB_URL,
43+
headers: {
44+
Accept: ACCEPT,
45+
Authorization: `Bearer ${gitPlatformEntity.personal_access_token}`,
46+
}
47+
});
48+
49+
return await githubClient.post(`/repos/${projectEntity.git_platform_user_name}/${projectEntity.repository_name}/git/refs`, {
50+
ref: `refs/heads/main`,
51+
sha: createHash('sha1').update('main').digest('hex')
52+
});
53+
};

app/src/integrations/git-platforms/index.ts

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,16 @@
11
import {ProjectEntity} from '../../models/project';
2-
import {createGithubRepository} from './github';
2+
import {createGithubRepository, createGithubRepositoryBranch} from './github';
3+
import Logger from '../../utils/logger';
34

45
export const createRepository = async (projectEntity: ProjectEntity) => {
56
switch (projectEntity.git_platform_name) {
6-
case 'github':
7-
return await createGithubRepository(projectEntity);
7+
case 'github': {
8+
const createGithubRepositoryResponse = await createGithubRepository(projectEntity);
9+
Logger.debug(`createGithubRepositoryResponse: ${JSON.stringify(createGithubRepositoryResponse.data)}`);
10+
const createGithubRepositoryBranchResponse = await createGithubRepositoryBranch(projectEntity);
11+
Logger.debug(`createGithubRepositoryBranchResponse: ${JSON.stringify(createGithubRepositoryBranchResponse.data)}`);
12+
return;
13+
}
814
// case 'gitlab':
915
// return await createGitlabRepository(projectEntity);
1016
// case 'bitbucket':

app/src/routes/codeOperations.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -169,7 +169,7 @@ codeOperationsRouter.post('/generate', requireEmailMiddleware, async (request, r
169169
},
170170
projectVersion: projectEntity.version,
171171
generatedProjectPath: `${downloadedProjectPath}` + `${originalProjectPath}`,
172-
existingProject: `${downloadedProjectPath}/${projectEntity.display_name}`,
172+
existingProject: `${downloadedProjectPath}/${projectEntity.repository_name}`,
173173
};
174174

175175
let error: string = await cloneExistingProjectFromGitServer(existingProjectGitServerRequest);
@@ -208,7 +208,7 @@ codeOperationsRouter.post('/generate', requireEmailMiddleware, async (request, r
208208
projectEntity.version = nextVersion(projectEntity.version);
209209
projectEntity.old_versions.push(JSON.stringify(oldVersion));
210210
}
211-
console.log("projectEntity", projectEntity);
211+
console.log('projectEntity', projectEntity);
212212

213213
const isUpdated = await projectService.updateProject(projectId, projectEntity);
214214
if (isUpdated) {

app/src/routes/projectsOperations.ts

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -35,8 +35,7 @@ projectsOperationsRouter.post('/users/:email/projects', requireEmailMiddleware,
3535
projectDTO.updatedAt = new Date().toISOString();
3636
savedProjectEntity = await projectService.createProject(getProjectEntity(projectDTO));
3737
if (savedProjectEntity.id.length !== 0) {
38-
const resp = await createRepository(savedProjectEntity);
39-
Logger.debug(`createRepository Response: ${JSON.stringify(resp.data)}`);
38+
await createRepository(savedProjectEntity);
4039
const successMessage = `[${savedProjectEntity.owner_email}] project[${savedProjectEntity.id}] created.`;
4140
Logger.info(successMessage);
4241
return response.status(201).json(getCreateProjectResponse(savedProjectEntity));
@@ -45,15 +44,16 @@ projectsOperationsRouter.post('/users/:email/projects', requireEmailMiddleware,
4544
Logger.error(message);
4645
return response.status(500).json(getCreateProjectError(message));
4746
} catch (e: any) {
48-
if (e.response && e.response.data && e.response.data.message && e.response.data.message.includes('Repository creation failed.')) {
49-
if (savedProjectEntity?.id.length !== 0) {
50-
const isDeleted = await projectService.deleteProject(savedProjectEntity?.id);
51-
if (isDeleted) {
52-
const successMessage = `'${ownerEmail}' project[${savedProjectEntity?.id}] deleted successfully.`;
53-
Logger.info(successMessage);
54-
}
47+
console.log('e', e);
48+
// if (e.response && e.response.data && e.response.data.message && e.response.data.message.includes('Repository creation failed.')) {
49+
if (savedProjectEntity?.id.length !== 0) {
50+
const isDeleted = await projectService.deleteProject(savedProjectEntity?.id);
51+
if (isDeleted) {
52+
const successMessage = `'${ownerEmail}' project[${savedProjectEntity?.id}] deleted successfully.`;
53+
Logger.info(successMessage);
5554
}
5655
}
56+
// }
5757
const message = `${projectDTO.ownerEmail} project [${projectDTO.displayName}] couldn't be created[${e.message}]).`;
5858
Logger.error(message);
5959
return response.status(500).json(getCreateProjectError(message));

0 commit comments

Comments
 (0)