chore: cleanup images (#14380)

<!-- This is an auto-generated comment: release notes by coderabbit.ai
-->

## Summary by CodeRabbit

* **New Features**
* Added canary build version support with automatic validation and
age-based restrictions for testing pre-release versions.

* **Chores**
* Enhanced Docker build process with multi-stage builds, image
optimization, and memory allocation improvements.
  * Reorganized dependencies to distinguish development-only packages.

<!-- end of auto-generated comment: release notes by coderabbit.ai -->
This commit is contained in:
DarkSky
2026-02-06 19:49:02 +08:00
committed by GitHub
parent 8c15df489b
commit a0cf5681c4
12 changed files with 793 additions and 8 deletions
@@ -3,7 +3,11 @@ import test from 'ava';
import Sinon from 'sinon';
import { AppModule } from '../app.module';
import { ConfigFactory, UseNamedGuard } from '../base';
import {
CANARY_CLIENT_VERSION_MAX_AGE_DAYS,
ConfigFactory,
UseNamedGuard,
} from '../base';
import { Public } from '../core/auth/guard';
import { VersionService } from '../core/version/service';
import { createTestingApp, TestingApp } from './utils';
@@ -33,6 +37,10 @@ function checkVersion(enabled = true) {
});
}
function makeCanaryDateVersion(date: Date, build = '015') {
return `${date.getUTCFullYear()}.${date.getUTCMonth() + 1}.${date.getUTCDate()}-canary.${build}`;
}
test.before(async () => {
app = await createTestingApp({
imports: [AppModule],
@@ -197,3 +205,47 @@ test('should test prerelease version', async t => {
t.is(res.status, 200);
});
test('should allow recent canary date version in canary namespace', async t => {
const prevNamespace = env.NAMESPACE;
// @ts-expect-error test
env.NAMESPACE = 'dev';
try {
const res = await app
.GET('/guarded/test')
.set('x-affine-version', makeCanaryDateVersion(new Date(), '015'));
t.is(res.status, 200);
} finally {
// @ts-expect-error test
env.NAMESPACE = prevNamespace;
}
});
test('should reject old canary date version in canary namespace', async t => {
const prevNamespace = env.NAMESPACE;
// @ts-expect-error test
env.NAMESPACE = 'dev';
try {
const old = new Date(
Date.now() -
(CANARY_CLIENT_VERSION_MAX_AGE_DAYS + 1) * 24 * 60 * 60 * 1000
);
const oldVersion = makeCanaryDateVersion(old, '015');
const res = await app
.GET('/guarded/test')
.set('x-affine-version', oldVersion);
t.is(res.status, 403);
t.is(
res.body.message,
`Unsupported client with version [${oldVersion}], required version is [canary (within 2 months)].`
);
} finally {
// @ts-expect-error test
env.NAMESPACE = prevNamespace;
}
});