feat: 限制发布单重试边界
This commit is contained in:
@@ -382,7 +382,13 @@ describe('DeployRunsService', () => {
|
||||
});
|
||||
|
||||
it('retries a deploy run with retry trigger', async () => {
|
||||
const { repository, service } = createService();
|
||||
const failedRun: DeployRunSummary = {
|
||||
...baseRun,
|
||||
status: 'failed',
|
||||
};
|
||||
const { repository, service } = createService({
|
||||
runs: [failedRun],
|
||||
});
|
||||
|
||||
const run = await service.retryRun(baseRun.id);
|
||||
|
||||
@@ -396,6 +402,15 @@ describe('DeployRunsService', () => {
|
||||
);
|
||||
});
|
||||
|
||||
it('rejects non-terminal retry requests before creating a new run', async () => {
|
||||
const { repository, service } = createService();
|
||||
|
||||
await expect(service.retryRun(baseRun.id)).rejects.toBeInstanceOf(
|
||||
AppError,
|
||||
);
|
||||
expect(repository.create).not.toHaveBeenCalled();
|
||||
});
|
||||
|
||||
it('syncs all queued or running Jenkins runs with queue/build identifiers', async () => {
|
||||
const queuedRun: DeployRunSummary = {
|
||||
...baseRun,
|
||||
|
||||
@@ -111,6 +111,7 @@ export class DeployRunsService {
|
||||
projectKey: input.projectKey,
|
||||
environment: input.environment,
|
||||
ref: input.ref,
|
||||
trigger: input.trigger ?? 'manual',
|
||||
remark: input.remark,
|
||||
},
|
||||
});
|
||||
@@ -182,6 +183,18 @@ export class DeployRunsService {
|
||||
): Promise<DeployRunSummary> {
|
||||
const source = await this.getRun(id, user);
|
||||
|
||||
if (!['failed', 'canceled'].includes(source.status)) {
|
||||
throw new AppError(
|
||||
'VALIDATION_FAILED',
|
||||
`发布记录 ${id} 当前状态为 ${source.status},只能重试失败或已取消的发布单`,
|
||||
400,
|
||||
{
|
||||
id,
|
||||
status: source.status,
|
||||
},
|
||||
);
|
||||
}
|
||||
|
||||
return this.createRun(
|
||||
{
|
||||
projectKey: source.projectKey,
|
||||
|
||||
Reference in New Issue
Block a user