@redpanda-data/docs-extensions-and-macros 5.0.3 → 5.0.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -135,12 +135,97 @@ module.exports.register = function ({ config }) {
135
135
  }
136
136
  });
137
137
 
138
+ // Find latest available Redpanda properties JSON in content catalog
139
+ // This ensures we use a version that actually exists, even if latest-redpanda-tag
140
+ // points to a newer release that doesn't have docs/attachments yet
141
+ // Component name is 'streaming' (or 'ROOT' for backwards compatibility)
142
+ const propertiesFiles = contentCatalog.findBy({
143
+ family: 'attachment'
144
+ }).filter(f => {
145
+ if (!f?.src?.stem || !f?.src?.component) return false;
146
+ const isStreamingComponent = f.src.component === 'streaming' || f.src.component === 'ROOT';
147
+ const isReferenceModule = f.src.module === 'reference';
148
+ const isPropertiesFile = f.src.stem.startsWith('redpanda-properties-');
149
+ return isStreamingComponent && isReferenceModule && isPropertiesFile;
150
+ });
151
+
152
+ let availablePropertiesTag = null;
153
+ if (propertiesFiles.length > 0) {
154
+ const versions = propertiesFiles
155
+ .map(f => f.src.stem.replace('redpanda-properties-', ''))
156
+ // Only accept stable versions (no prerelease suffix like -backup, -rc1, etc.)
157
+ .filter(v => {
158
+ const normalized = v.replace(/^v/, '');
159
+ return semver.valid(normalized) && semver.prerelease(normalized) === null;
160
+ });
161
+
162
+ if (versions.length > 0) {
163
+ availablePropertiesTag = versions.sort((a, b) =>
164
+ semver.rcompare(a.replace(/^v/, ''), b.replace(/^v/, ''))
165
+ )[0];
166
+
167
+ // Set on all component versions
168
+ components.forEach(component => {
169
+ component.versions.forEach(({ asciidoc }) => {
170
+ asciidoc.attributes['available-properties-tag'] = availablePropertiesTag;
171
+ });
172
+ });
173
+
174
+ logger.debug(`Found ${propertiesFiles.length} properties JSON files, latest available: ${availablePropertiesTag}`);
175
+ }
176
+ } else {
177
+ logger.debug('No properties JSON files found in content catalog');
178
+ }
179
+
180
+ // Find latest available Connect JSON in content catalog
181
+ // Component name is 'connect' (or 'redpanda-connect' for backwards compatibility)
182
+ const connectFiles = contentCatalog.findBy({
183
+ family: 'attachment'
184
+ }).filter(f => {
185
+ if (!f?.src?.stem || !f?.src?.component) return false;
186
+ const isConnectComponent = f.src.component === 'connect' || f.src.component === 'redpanda-connect';
187
+ const isComponentsModule = f.src.module === 'components';
188
+ const isConnectFile = f.src.stem.startsWith('connect-');
189
+ return isConnectComponent && isComponentsModule && isConnectFile;
190
+ });
191
+
192
+ let availableConnectVersion = null;
193
+ if (connectFiles.length > 0) {
194
+ const versions = connectFiles
195
+ .map(f => f.src.stem.replace('connect-', ''))
196
+ // Only accept stable versions (no prerelease suffix)
197
+ .filter(v => semver.valid(v) && semver.prerelease(v) === null);
198
+
199
+ if (versions.length > 0) {
200
+ availableConnectVersion = versions.sort((a, b) =>
201
+ semver.rcompare(a, b)
202
+ )[0];
203
+
204
+ // Set on all component versions
205
+ components.forEach(component => {
206
+ component.versions.forEach(({ asciidoc }) => {
207
+ asciidoc.attributes['available-connect-version'] = availableConnectVersion;
208
+ });
209
+ });
210
+
211
+ logger.debug(`Found ${connectFiles.length} connect JSON files, latest available: ${availableConnectVersion}`);
212
+ }
213
+ } else {
214
+ logger.debug('No connect JSON files found in content catalog');
215
+ }
216
+
138
217
  logger.info('Updated Redpanda documentation versions successfully:');
139
218
  logger.info(`- Redpanda: ${latestVersions.redpanda.latestRedpandaRelease.version}${latestVersions.redpanda.latestRcRelease ? ', beta: ' + latestVersions.redpanda.latestRcRelease.version : ''}`);
140
219
  logger.info(`- Connect: ${latestVersions.connect}`);
141
220
  logger.info(`- Console: ${latestVersions.console.latestStableRelease}${latestVersions.console.latestBetaRelease ? ', beta: ' + latestVersions.console.latestBetaRelease : ''}`);
142
221
  logger.info(`- Operator: ${latestVersions.operator?.latestStableRelease || 'unknown'}${latestVersions.operator?.latestBetaRelease ? ', beta: ' + latestVersions.operator.latestBetaRelease : ''}`);
143
222
  logger.info(`- Helm chart: ${latestVersions.helmChart?.latestStableRelease || 'unknown'}${latestVersions.helmChart?.latestBetaRelease ? ', beta: ' + latestVersions.helmChart.latestBetaRelease : ''}`);
223
+ if (availablePropertiesTag) {
224
+ logger.info(`- Available properties JSON: ${availablePropertiesTag}`);
225
+ }
226
+ if (availableConnectVersion) {
227
+ logger.info(`- Available Connect JSON: ${availableConnectVersion}`);
228
+ }
144
229
  } catch (error) {
145
230
  logger.error(`Error updating versions: ${error}`);
146
231
  }
@@ -174,4 +259,50 @@ module.exports.register = function ({ config }) {
174
259
  }
175
260
  });
176
261
  }
262
+ };
263
+
264
+ // Export helper functions for testing
265
+ module.exports.filterPropertiesFiles = function(files) {
266
+ return files.filter(f => {
267
+ if (!f?.src?.stem || !f?.src?.component) return false;
268
+ const isStreamingComponent = f.src.component === 'streaming' || f.src.component === 'ROOT';
269
+ const isReferenceModule = f.src.module === 'reference';
270
+ const isPropertiesFile = f.src.stem.startsWith('redpanda-properties-');
271
+ return isStreamingComponent && isReferenceModule && isPropertiesFile;
272
+ });
273
+ };
274
+
275
+ module.exports.filterConnectFiles = function(files) {
276
+ return files.filter(f => {
277
+ if (!f?.src?.stem || !f?.src?.component) return false;
278
+ const isConnectComponent = f.src.component === 'connect' || f.src.component === 'redpanda-connect';
279
+ const isComponentsModule = f.src.module === 'components';
280
+ const isConnectFile = f.src.stem.startsWith('connect-');
281
+ return isConnectComponent && isComponentsModule && isConnectFile;
282
+ });
283
+ };
284
+
285
+ module.exports.extractLatestPropertiesVersion = function(files, semver) {
286
+ const versions = files
287
+ .map(f => f.src.stem.replace('redpanda-properties-', ''))
288
+ .filter(v => {
289
+ const normalized = v.replace(/^v/, '');
290
+ return semver.valid(normalized) && semver.prerelease(normalized) === null;
291
+ });
292
+
293
+ if (versions.length === 0) return null;
294
+
295
+ return versions.sort((a, b) =>
296
+ semver.rcompare(a.replace(/^v/, ''), b.replace(/^v/, ''))
297
+ )[0];
298
+ };
299
+
300
+ module.exports.extractLatestConnectVersion = function(files, semver) {
301
+ const versions = files
302
+ .map(f => f.src.stem.replace('connect-', ''))
303
+ .filter(v => semver.valid(v) && semver.prerelease(v) === null);
304
+
305
+ if (versions.length === 0) return null;
306
+
307
+ return versions.sort((a, b) => semver.rcompare(a, b))[0];
177
308
  };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@redpanda-data/docs-extensions-and-macros",
3
- "version": "5.0.3",
3
+ "version": "5.0.4",
4
4
  "description": "Antora extensions and macros developed for Redpanda documentation.",
5
5
  "keywords": [
6
6
  "antora",