diff --git a/packages/backend/src/database.ts b/packages/backend/src/database.ts index 9e12ff69..82bed68d 100644 --- a/packages/backend/src/database.ts +++ b/packages/backend/src/database.ts @@ -158,10 +158,9 @@ export class Database { .leftJoinAndSelect( 'project.deployments', 'deployments', - 'deployments.isCurrent = true AND deployments.isDNS = true' + 'deployments.isCurrent = true AND deployments.isCanonical = true' ) .leftJoinAndSelect('deployments.createdBy', 'user') - .leftJoinAndSelect('deployments.domain', 'domain') .leftJoinAndSelect('deployments.deployer', 'deployer') .leftJoinAndSelect('project.owner', 'owner') .leftJoinAndSelect('project.deployers', 'deployers') @@ -203,9 +202,8 @@ export class Database { .leftJoinAndSelect( 'project.deployments', 'deployments', - 'deployments.isCurrent = true AND deployments.isDNS = true' + 'deployments.isCurrent = true AND deployments.isCanonical = true' ) - .leftJoinAndSelect('deployments.domain', 'domain') .leftJoin('project.projectMembers', 'projectMembers') .leftJoin('project.organization', 'organization') .where( @@ -236,7 +234,6 @@ export class Database { return this.getDeployments({ relations: { project: true, - domain: true, createdBy: true, deployer: true, }, @@ -251,11 +248,10 @@ export class Database { }); } - async getCommitDeploymentsByProjectId(projectId: string): Promise { + async getNonCanonicalDeploymentsByProjectId(projectId: string): Promise { return this.getDeployments({ relations: { project: true, - domain: true, createdBy: true, deployer: true, }, @@ -263,7 +259,7 @@ export class Database { project: { id: projectId }, - isDNS: false + isCanonical: false }, order: { createdAt: 'DESC' diff --git a/packages/backend/src/entity/Deployment.ts b/packages/backend/src/entity/Deployment.ts index b30f59f9..882233f7 100644 --- a/packages/backend/src/entity/Deployment.ts +++ b/packages/backend/src/entity/Deployment.ts @@ -78,13 +78,6 @@ export class Deployment { @JoinColumn({ name: 'projectId' }) project!: Project; - @Column({ nullable: true }) - domainId!: string | null; - - @OneToOne(() => Domain) - @JoinColumn({ name: 'domainId' }) - domain!: Domain | null; - @Column('varchar') branch!: string; @@ -142,9 +135,8 @@ export class Deployment { @Column('boolean', { default: false }) isCurrent!: boolean; - // TODO: Rename field @Column('boolean', { default: false }) - isDNS!: boolean; + isCanonical!: boolean; @Column({ enum: DeploymentStatus diff --git a/packages/backend/src/resolvers.ts b/packages/backend/src/resolvers.ts index 47d8f8ff..d9f9128d 100644 --- a/packages/backend/src/resolvers.ts +++ b/packages/backend/src/resolvers.ts @@ -38,7 +38,7 @@ export const createResolvers = async (service: Service): Promise => { }, deployments: async (_: any, { projectId }: { projectId: string }) => { - return service.getCommitDeploymentsByProjectId(projectId); + return service.getNonCanonicalDeploymentsByProjectId(projectId); }, environmentVariables: async ( diff --git a/packages/backend/src/schema.gql b/packages/backend/src/schema.gql index 7e2c32cd..400e36ef 100644 --- a/packages/backend/src/schema.gql +++ b/packages/backend/src/schema.gql @@ -100,7 +100,6 @@ type ProjectMember { type Deployment { id: String! - domain: Domain branch: String! commitHash: String! commitMessage: String! diff --git a/packages/backend/src/service.ts b/packages/backend/src/service.ts index 775e9228..90fae68b 100644 --- a/packages/backend/src/service.ts +++ b/packages/backend/src/service.ts @@ -228,12 +228,12 @@ export class Service { deployment.isCurrent = deployment.environment === Environment.Production; deployment.dnsRecordData = dnsRecordData; - if (deployment.isDNS) { + if (deployment.isCanonical) { const oldDNSDeployment = await this.db.getDeployment({ where: { projectId: deployment.project.id, deployer: deployment.deployer, - isDNS: true, + isCanonical: true, isCurrent: true, }, relations: { @@ -255,14 +255,6 @@ export class Service { await this.db.deleteDeploymentById(oldDNSDeployment.id); } - - // Update domain after the previous DNS deployment is deleted due to unique key constraint for domain - // Set the domain for the new current DNS deployment to the custom domain that was added for that project - const customDomain = await this.db.getOldestDomainByProjectId(deployment.project.id); - - if (customDomain) { - deployment.domain = customDomain; - } } await this.db.updateDeploymentById(deployment.id, deployment); @@ -301,7 +293,7 @@ export class Service { projectDeployment.deployer.deployerLrn === deployment.deployer.deployerLrn && projectDeployment.id !== deployment.id && - projectDeployment.isDNS == deployment.isDNS, + projectDeployment.isCanonical == deployment.isCanonical, ); for (const oldDeployment of oldDeployments) { await this.db.updateDeployment( @@ -493,14 +485,14 @@ export class Service { return dbProjects; } - async getCommitDeploymentsByProjectId(projectId: string): Promise { - const commitDeployments = await this.db.getCommitDeploymentsByProjectId(projectId); - return commitDeployments; + async getNonCanonicalDeploymentsByProjectId(projectId: string): Promise { + const nonCanonicalDeployments = await this.db.getNonCanonicalDeploymentsByProjectId(projectId); + return nonCanonicalDeployments; } async getLatestDNSRecordByProjectId(projectId: string): Promise { - const dnsDeployments = await this.db.getLatestDNSRecordByProjectId(projectId); - return dnsDeployments; + const dnsRecord = await this.db.getLatestDNSRecordByProjectId(projectId); + return dnsRecord; } async getEnvironmentVariablesByProjectId( @@ -649,18 +641,12 @@ export class Service { throw new Error('Deployment does not exist'); } - const prodBranchDomains = await this.db.getDomainsByProjectId( - oldDeployment.project.id, - { branch: oldDeployment.project.prodBranch }, - ); - const octokit = await this.getOctokit(user.id); const newDeployment = await this.createDeployment(user.id, octokit, { project: oldDeployment.project, branch: oldDeployment.branch, environment: Environment.Production, - domain: prodBranchDomains[0], commitHash: oldDeployment.commitHash, commitMessage: oldDeployment.commitMessage, deployer: oldDeployment.deployer @@ -689,19 +675,6 @@ export class Service { commitHash: data.commitHash!, }); - // Update previous deployment with prod branch domain - // TODO: Fix unique constraint error for domain - if (data.domain) { - await this.db.updateDeployment( - { - domainId: data.domain.id, - }, - { - domain: null, - }, - ); - } - let deployer; if (deployerLrn) { deployer = await this.db.getDeployerByLRN(deployerLrn); @@ -709,20 +682,19 @@ export class Service { deployer = data.deployer; } - console.log("DATA>DOMAIN!!!!!!!!!!!!!!!!!!!!!!!!!!!!!",data.domain) - const deployment = await this.createDeploymentFromData(userId, data, deployer!.deployerLrn!, applicationRecordId, applicationRecordData, false); - const dnsDeployment = await this.createDeploymentFromData(userId, data, deployer!.deployerLrn!, applicationRecordId, applicationRecordData, true); const address = await this.getAddress(); const { repo, repoUrl } = await getRepoDetails(octokit, data.project.repository, data.commitHash); const environmentVariablesObj = await this.getEnvVariables(data.project!.id!); - // If a custom domain is present then use that as the DNS in the deployment request - const customDomain = await this.db.getOldestDomainByProjectId(data.project!.id!); // To set project DNS if (data.environment === Environment.Production) { + const dnsDeployment = await this.createDeploymentFromData(userId, data, deployer!.deployerLrn!, applicationRecordId, applicationRecordData, true); + // If a custom domain is present then use that as the DNS in the deployment request + const customDomain = await this.db.getOldestDomainByProjectId(data.project!.id!); + // On deleting deployment later, project DNS deployment is also deleted // So publish project DNS deployment first so that ApplicationDeploymentRecord for the same is available when deleting deployment later const { applicationDeploymentRequestData, applicationDeploymentRequestId } = @@ -867,7 +839,7 @@ export class Service { deployerLrn: string, applicationRecordId: string, applicationRecordData: ApplicationRecord, - isDNS: boolean, + isCanonical: boolean, ): Promise { const newDeployment = await this.db.addDeployment({ project: data.project, @@ -878,14 +850,13 @@ export class Service { status: DeploymentStatus.Building, applicationRecordId, applicationRecordData, - domain: data.domain, createdBy: Object.assign(new User(), { id: userId, }), deployer: Object.assign(new Deployer(), { deployerLrn, }), - isDNS + isCanonical }); log(`Created deployment ${newDeployment.id}`); @@ -1118,9 +1089,6 @@ export class Service { for await (const project of projects) { const octokit = await this.getOctokit(project.ownerId); - const [domain] = await this.db.getDomainsByProjectId(project.id, { - branch, - }); const deployers = project.deployers; if (!deployers) { @@ -1138,7 +1106,6 @@ export class Service { project.prodBranch === branch ? Environment.Production : Environment.Preview, - domain, commitHash: headCommit.id, commitMessage: headCommit.message, deployer: deployer @@ -1180,7 +1147,6 @@ export class Service { const oldDeployment = await this.db.getDeployment({ relations: { project: true, - domain: true, deployer: true, createdBy: true, }, @@ -1206,7 +1172,6 @@ export class Service { // TODO: Put isCurrent field in project branch: oldDeployment.branch, environment: Environment.Production, - domain: oldDeployment.domain, commitHash: oldDeployment.commitHash, commitMessage: oldDeployment.commitMessage, deployer: oldDeployment.deployer @@ -1224,7 +1189,6 @@ export class Service { // TODO: Implement transactions const oldCurrentDeployment = await this.db.getDeployment({ relations: { - domain: true, project: true, deployer: true, }, @@ -1233,7 +1197,7 @@ export class Service { id: projectId, }, isCurrent: true, - isDNS: false, + isCanonical: false, }, }); @@ -1243,12 +1207,12 @@ export class Service { const oldCurrentDeploymentUpdate = await this.db.updateDeploymentById( oldCurrentDeployment.id, - { isCurrent: false, domain: null }, + { isCurrent: false }, ); const newCurrentDeploymentUpdate = await this.db.updateDeploymentById( deploymentId, - { isCurrent: true, domain: null }, + { isCurrent: true }, ); const newCurrentDeployment = await this.db.getDeployment({ where: { id: deploymentId }, relations: { project: true, deployer: true } }); @@ -1261,19 +1225,7 @@ export class Service { const customDomain = await this.db.getOldestDomainByProjectId(projectId); - if (customDomain) { - await this.db.updateDeployment( - { - domainId: customDomain.id, - }, - { - domain: null, - }, - ); - } - - if(customDomain && applicationDeploymentRequestData) { - newCurrentDeployment.domain = customDomain + if (customDomain && applicationDeploymentRequestData) { applicationDeploymentRequestData.dns = customDomain.name } @@ -1326,7 +1278,7 @@ export class Service { where: { projectId: deployment.project.id, deployer: deployment.deployer, - isDNS: true + isCanonical: true }, relations: { project: true, diff --git a/packages/frontend/src/components/projects/project/deployments/DeploymentMenu.tsx b/packages/frontend/src/components/projects/project/deployments/DeploymentMenu.tsx index 118dca39..ee96a588 100644 --- a/packages/frontend/src/components/projects/project/deployments/DeploymentMenu.tsx +++ b/packages/frontend/src/components/projects/project/deployments/DeploymentMenu.tsx @@ -243,7 +243,7 @@ export const DeploymentMenu = ({ setRedeployToProduction((preVal) => !preVal); }} deployment={deployment} - domains={deployment.domain ? [deployment.domain] : []} + domains={[]} isConfirmButtonLoading={isConfirmButtonLoading} /> {Boolean(currentDeployment) && ( @@ -258,7 +258,7 @@ export const DeploymentMenu = ({ }} deployment={currentDeployment} newDeployment={deployment} - domains={currentDeployment.domain ? [currentDeployment.domain] : []} + domains={[]} /> )} { setRedeployToProduction((preVal) => !preVal) } deployment={deployment} - domains={deployment.domain ? [deployment.domain] : []} + domains={[]} /> {/* Rollback to this deployment */}