diff --git a/package.json b/package.json index aeefb4f..246159b 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "@agility/cli", - "version": "1.0.0", + "version": "1.0.0-beta.11", "description": "Agility CLI for working with your content. (Public Beta)", "repository": { "type": "git", diff --git a/src/core/logs.ts b/src/core/logs.ts index 8732117..51511ed 100644 --- a/src/core/logs.ts +++ b/src/core/logs.ts @@ -922,10 +922,6 @@ export class Logs { // Log to file using logger summary this.summary(this.operationType, totalSuccessful, totalFailed, 0); - // Console output - console.log(ansiColors.cyan("\nSummary:")); - console.log(`Processed ${results.length} GUID/locale combinations`); - console.log(`${totalSuccessful} successful, ${totalFailed} failed`); console.log(`Total time: ${timeDisplay}`); // Success/failure message diff --git a/src/lib/mappers/gallery-mapper.ts b/src/lib/mappers/gallery-mapper.ts index 09c734b..227a5a3 100644 --- a/src/lib/mappers/gallery-mapper.ts +++ b/src/lib/mappers/gallery-mapper.ts @@ -29,7 +29,6 @@ export class GalleryMapper { } getGalleryMapping(gallery: mgmtApi.assetMediaGrouping, type: 'source' | 'target'): GalleryMapping | null { - debugger; const mapping = this.mappings.find((m: GalleryMapping) => type === 'source' ? m.sourceMediaGroupingID === gallery.mediaGroupingID : m.targetMediaGroupingID === gallery.mediaGroupingID ); diff --git a/src/lib/pushers/model-pusher.ts b/src/lib/pushers/model-pusher.ts index df0f1d8..384a9bd 100644 --- a/src/lib/pushers/model-pusher.ts +++ b/src/lib/pushers/model-pusher.ts @@ -47,7 +47,7 @@ export async function pushModels(sourceData: mgmtApi.Model[], targetData: mgmtAp // special case for the default RichTextArea model - const defaultRichTextArea = model.referenceName === 'RichTextArea' && hasSourceChanged && hasTargetChanged; + const defaultRichTextArea = model.referenceName === 'RichTextArea' && !mapping && targetModel; if(defaultRichTextArea){ // force create the mapping for the default RichTextArea model referenceMapper.addMapping(model, targetModel); diff --git a/src/lib/pushers/orchestrate-pushers.ts b/src/lib/pushers/orchestrate-pushers.ts index 0896718..a849ca4 100644 --- a/src/lib/pushers/orchestrate-pushers.ts +++ b/src/lib/pushers/orchestrate-pushers.ts @@ -287,7 +287,7 @@ export class Pushers { (Array.isArray(elementData) && elementData.length === 0) || !elements.some((element) => config.elements.includes(element)) ) { - console.log(ansiColors.gray(`Skipping ${config.description} - no data or not requested`)); + console.log(ansiColors.yellow(`⚠️ Skipping ${config.description} for locale ${locale} - no data or filtered by --locales`)); return; } diff --git a/src/lib/pushers/page-pusher/process-sitemap.ts b/src/lib/pushers/page-pusher/process-sitemap.ts index db2f98d..8437015 100644 --- a/src/lib/pushers/page-pusher/process-sitemap.ts +++ b/src/lib/pushers/page-pusher/process-sitemap.ts @@ -36,6 +36,13 @@ interface Props { // This is separate from pagesInProgress which tracks concurrent processing const processedPageIDs = new Set(); +/** + * Reset the processed page IDs tracking - should be called at the start of each pushPages operation + */ +export function resetProcessedPageIDs(): void { + processedPageIDs.clear(); +} + export async function processSitemap({ channel, pageMapper, diff --git a/src/lib/pushers/page-pusher/push-pages.ts b/src/lib/pushers/page-pusher/push-pages.ts index a5ac973..468c9ce 100644 --- a/src/lib/pushers/page-pusher/push-pages.ts +++ b/src/lib/pushers/page-pusher/push-pages.ts @@ -3,7 +3,7 @@ import { state, getApiClient, getLoggerForGuid } from "core/state"; import { PusherResult } from "../../../types/sourceData"; import { SitemapHierarchy } from "lib/pushers/page-pusher/sitemap-hierarchy"; import { PageMapper } from "lib/mappers/page-mapper"; -import { processSitemap } from "./process-sitemap"; +import { processSitemap, resetProcessedPageIDs } from "./process-sitemap"; import ansiColors from "ansi-colors"; export async function pushPages( @@ -24,6 +24,9 @@ export async function pushPages( const sitemapHierarchy = new SitemapHierarchy(); + // Reset processed page IDs tracking for this locale + resetProcessedPageIDs(); + const sitemaps = sitemapHierarchy.loadAllSitemaps(sourceGuid[0], locale); const channels = Object.keys(sitemaps); @@ -40,6 +43,12 @@ export async function pushPages( for (const channel of channels) { const sitemap = sitemaps[channel]; + // Skip if sitemap is null or empty + if (!sitemap || sitemap.length === 0) { + console.log(ansiColors.yellow(`⚠️ Skipping channel ${channel} - no sitemap data found for locale ${locale}`)); + continue; + } + const { sourceGuid, targetGuid, overwrite } = state; const apiClient = getApiClient(); @@ -59,12 +68,14 @@ export async function pushPages( logger }) - successful = res.successful; - failed = res.failed; - skipped = res.skipped; - publishableIds = res.publishableIds; + successful += res.successful; + failed += res.failed; + skipped += res.skipped; + if (res.publishableIds && res.publishableIds.length > 0) { + publishableIds.push(...res.publishableIds); + } - if (failed > 0) { + if (res.failed > 0) { status = "error"; } diff --git a/src/lib/pushers/page-pusher/sitemap-hierarchy.ts b/src/lib/pushers/page-pusher/sitemap-hierarchy.ts index dc73ca7..b4cd5eb 100644 --- a/src/lib/pushers/page-pusher/sitemap-hierarchy.ts +++ b/src/lib/pushers/page-pusher/sitemap-hierarchy.ts @@ -24,13 +24,24 @@ export class SitemapHierarchy { const sitemaps: { [key: string]: SitemapNode[] | null } = {}; - fs.readdirSync(sitemapDir).forEach(fileName => { - if (!fileName.endsWith('.json')) { - return; // Skip non-JSON files - } - const channel = path.basename(fileName, '.json'); - sitemaps[channel] = this.loadNestedSitemap(path.join(sitemapDir, fileName)); - }); + // Check if directory exists before trying to read it + if (!fs.existsSync(sitemapDir)) { + console.warn(`⚠️ Nested sitemap directory not found for locale ${locale}: ${sitemapDir}`); + return sitemaps; // Return empty object if directory doesn't exist + } + + try { + fs.readdirSync(sitemapDir).forEach(fileName => { + if (!fileName.endsWith('.json')) { + return; // Skip non-JSON files + } + const channel = path.basename(fileName, '.json'); + sitemaps[channel] = this.loadNestedSitemap(path.join(sitemapDir, fileName)); + }); + } catch (error: any) { + console.error(`Error reading sitemap directory ${sitemapDir}: ${error.message}`); + return sitemaps; // Return empty object on error + } return sitemaps; }