fix(server): use new LocalWorkspace ServerFeature instead (#13091)

keep compatibility

close AF-2720



#### PR Dependency Tree


* **PR #13091** 👈

This tree was auto-generated by
[Charcoal](https://github.com/danerwilliams/charcoal)

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

## Summary by CodeRabbit

* **New Features**
* Added a new `LocalWorkspace` feature flag to server configuration,
enabling more flexible feature management.

* **Deprecations**
* The `allowGuestDemoWorkspace` flag is now deprecated and will be
removed in version 0.25.0. Please use the `features` array for feature
checks instead.

* **Bug Fixes**
* Updated UI and logic throughout the app to rely on the new
`LocalWorkspace` feature flag rather than the deprecated boolean flag.

* **Chores**
* Removed references to `allowGuestDemoWorkspace` from configuration,
queries, and type definitions for improved consistency.
<!-- end of auto-generated comment: release notes by coderabbit.ai -->


#### PR Dependency Tree


* **PR #13091** 👈

This tree was auto-generated by
[Charcoal](https://github.com/danerwilliams/charcoal)
This commit is contained in:
fengmk2
2025-07-08 23:23:42 +08:00
committed by GitHub
parent 15db657b1c
commit 95f88c378c
18 changed files with 79 additions and 37 deletions

View File

@@ -21,3 +21,13 @@ e2e('should comment feature enabled by default', async t => {
JSON.stringify(serverConfig, null, 2)
);
});
e2e('should enable local workspace feature by default', async t => {
const { serverConfig } = await app.gql({ query: serverConfigQuery });
t.is(
serverConfig.features.includes(ServerFeature.LocalWorkspace),
true,
JSON.stringify(serverConfig, null, 2)
);
});

View File

@@ -85,6 +85,7 @@ export class ServerConfigResolver {
baseUrl: this.url.requestBaseUrl,
type: env.DEPLOYMENT_TYPE,
features: this.server.features,
// TODO(@fengmk2): remove this field after the feature 0.25.0 is released
allowGuestDemoWorkspace: this.config.flags.allowGuestDemoWorkspace,
};
}

View File

@@ -110,6 +110,13 @@ export class ServerService implements OnApplicationBootstrap {
this.event.emit('config.changed', event);
}
@OnEvent('config.changed')
onConfigChanged(event: Events['config.changed']) {
if ('flags' in event.updates) {
this.onFlagsChanged();
}
}
async revalidateConfig() {
const overrides = await this.loadDbOverrides();
this.configFactory.override(overrides);
@@ -122,6 +129,7 @@ export class ServerService implements OnApplicationBootstrap {
await this.event.emitAsync('config.init', {
config: this.configFactory.config,
});
this.onFlagsChanged();
}
private async loadDbOverrides() {
@@ -134,4 +142,13 @@ export class ServerService implements OnApplicationBootstrap {
return overrides;
}
private onFlagsChanged() {
const flags = this.configFactory.config.flags;
if (flags.allowGuestDemoWorkspace) {
this.enableFeature(ServerFeature.LocalWorkspace);
} else {
this.disableFeature(ServerFeature.LocalWorkspace);
}
}
}

View File

@@ -10,6 +10,7 @@ export enum ServerFeature {
OAuth = 'oauth',
Indexer = 'indexer',
Comment = 'comment',
LocalWorkspace = 'local_workspace',
}
registerEnumType(ServerFeature, {
@@ -42,6 +43,8 @@ export class ServerConfigType {
@Field(() => Boolean, {
description: 'Whether allow guest users to create demo workspaces.',
deprecationReason:
'This field is deprecated, please use `features` instead. Will be removed in 0.25.0',
})
allowGuestDemoWorkspace!: boolean;
}

View File

@@ -1760,7 +1760,7 @@ enum SearchTable {
type ServerConfigType {
"""Whether allow guest users to create demo workspaces."""
allowGuestDemoWorkspace: Boolean!
allowGuestDemoWorkspace: Boolean! @deprecated(reason: "This field is deprecated, please use `features` instead. Will be removed in 0.25.0")
"""fetch latest available upgradable release of server"""
availableUpgrade: ReleaseVersionType
@@ -1802,6 +1802,7 @@ enum ServerFeature {
Copilot
CopilotEmbedding
Indexer
LocalWorkspace
OAuth
Payment
}