Skip to content

Commit 455eccb

Browse files
committed
feat: Enhance lifecycle management by adding config and default directories, and ensure their existence
1 parent b50a30e commit 455eccb

File tree

3 files changed

+31
-6
lines changed

3 files changed

+31
-6
lines changed

Dockerfile

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -56,7 +56,11 @@ RUN yarn install \
5656
--production=false
5757

5858
COPY --from=builder /data/apps/api/dist ./apps/api/dist
59+
COPY --from=builder /data/apps/api/configs ./apps/api/configs
60+
COPY --from=builder /data/apps/api/defaults ./apps/api/defaults
5961
COPY --from=builder /data/apps/web/.output ./apps/web/.output
62+
COPY --from=builder /data/apps/web/config ./apps/web/config
63+
COPY --from=builder /data/apps/web/default ./apps/web/default
6064
COPY --from=builder /data/apps/web/nuxt.config.ts ./apps/web/nuxt.config.ts
6165
COPY --from=builder /data/apps/web/src ./apps/web/src
6266
COPY --from=builder /data/apps/web/start.mjs ./apps/web/start.mjs

apps/api/src/management/lifecycle/_functions/load-lifecycle-rules.function.ts

Lines changed: 11 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import { readdirSync, readFileSync, statSync } from 'node:fs'
1+
import { readdirSync, readFileSync, statSync, existsSync } from 'node:fs'
22
import { plainToInstance } from 'class-transformer'
33
import { parse } from 'yaml'
44
import { validateOrReject } from 'class-validator'
@@ -49,14 +49,21 @@ export async function loadLifecycleRules(): Promise<ConfigRulesObjectSchemaDTO[]
4949
logger.verbose('Loading lifecycle rules from configuration files...')
5050
logger.verbose('Initializing LifecycleService...')
5151

52+
const rulesDir = `${process.cwd()}/configs/lifecycle/rules`
53+
54+
if (!existsSync(rulesDir)) {
55+
logger.warn(`Rules directory does not exist: ${rulesDir}. Returning empty rules array.`)
56+
return []
57+
}
58+
5259
try {
53-
files = readdirSync(`${process.cwd()}/configs/lifecycle/rules`)
60+
files = readdirSync(rulesDir)
5461
} catch (error) {
5562
logger.error('Error reading lifecycle files', error.message, error.stack)
63+
return []
5664
}
5765

5866
// Construire une signature du set de fichiers (nom + mtimeMs) pour le cache
59-
const rulesDir = `${process.cwd()}/configs/lifecycle/rules`
6067
const yamlFiles = files.filter((f) => f.endsWith('.yml') || f.endsWith('.yaml'))
6168
const signatureParts: string[] = []
6269
for (const file of yamlFiles) {
@@ -84,7 +91,7 @@ export async function loadLifecycleRules(): Promise<ConfigRulesObjectSchemaDTO[]
8491
}
8592

8693
try {
87-
const data = readFileSync(`${process.cwd()}/configs/lifecycle/rules/${file}`, 'utf-8')
94+
const data = readFileSync(`${rulesDir}/${file}`, 'utf-8')
8895
logger.debug(`Loaded lifecycle config: ${file}`)
8996
const yml = parse(data)
9097
schema = plainToInstance(ConfigRulesObjectSchemaDTO, yml)

apps/api/src/management/lifecycle/lifecycle-hooks.service.ts

Lines changed: 16 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ import { SchedulerRegistry } from '@nestjs/schedule'
99
import { ConfigService } from '@nestjs/config'
1010
import { LifecycleStateDTO } from './_dto/config-states.dto'
1111
import { ConfigRulesObjectIdentitiesDTO, ConfigRulesObjectSchemaDTO } from './_dto/config-rules.dto'
12-
import { readdirSync, readFileSync, writeFileSync } from 'node:fs'
12+
import { readdirSync, readFileSync, writeFileSync, mkdirSync, existsSync } from 'node:fs'
1313
import { isConsoleEntrypoint } from '~/_common/functions/is-cli'
1414
import { CronJob } from 'cron'
1515
import dayjs from 'dayjs'
@@ -22,7 +22,7 @@ import { AbstractLifecycleService } from './_abstracts/abstract.lifecycle.servic
2222
@Injectable()
2323
export class LifecycleHooksService extends AbstractLifecycleService {
2424
private _lastLifecycleCacheRefresh?: number
25-
25+
2626
/**
2727
* Initialise le service lors du chargement du module
2828
*
@@ -51,6 +51,20 @@ export class LifecycleHooksService extends AbstractLifecycleService {
5151

5252
this.logger.verbose('Initializing LifecycleService...')
5353

54+
// Ensure config directories exist
55+
const configDir = `${process.cwd()}/configs/lifecycle`
56+
const configRulesDir = `${process.cwd()}/configs/lifecycle/rules`
57+
58+
if (!existsSync(configDir)) {
59+
this.logger.warn(`Creating missing directory: ${configDir}`)
60+
mkdirSync(configDir, { recursive: true })
61+
}
62+
63+
if (!existsSync(configRulesDir)) {
64+
this.logger.warn(`Creating missing directory: ${configRulesDir}`)
65+
mkdirSync(configRulesDir, { recursive: true })
66+
}
67+
5468
try {
5569
files = readdirSync(`${process.cwd()}/configs/lifecycle`)
5670
defaultFiles = readdirSync(`${process.cwd()}/defaults/lifecycle`)

0 commit comments

Comments
 (0)