diff --git a/packages/ducdxf/release.config.cjs b/packages/ducdxf/release.config.cjs index 3b1ce089..ae33d7f5 100644 --- a/packages/ducdxf/release.config.cjs +++ b/packages/ducdxf/release.config.cjs @@ -1,6 +1,17 @@ module.exports = { branches: ["main", { name: "next", prerelease: true }, { name: "dev", prerelease: true }], plugins: [ + [ + require.resolve("../../scripts/semrel-path-filter.cjs"), + { + paths: [ + "packages/ducdxf", + "packages/ducpy" + ], + analyzer: { preset: "conventionalcommits" }, + notes: { preset: "conventionalcommits" }, + }, + ], "@semantic-release/commit-analyzer", "@semantic-release/release-notes-generator", [ diff --git a/packages/ducjs/release.config.cjs b/packages/ducjs/release.config.cjs index 54a49763..f4b3d658 100644 --- a/packages/ducjs/release.config.cjs +++ b/packages/ducjs/release.config.cjs @@ -4,7 +4,9 @@ module.exports = { [ require.resolve("../../scripts/semrel-path-filter.cjs"), { - path: "packages/ducjs", + paths: [ + "packages/ducjs" + ], analyzer: { preset: "conventionalcommits" }, notes: { preset: "conventionalcommits" }, }, diff --git a/packages/ducpdf/release.config.cjs b/packages/ducpdf/release.config.cjs index 85c1b01f..6da8a717 100644 --- a/packages/ducpdf/release.config.cjs +++ b/packages/ducpdf/release.config.cjs @@ -4,7 +4,11 @@ module.exports = { [ require.resolve("../../scripts/semrel-path-filter.cjs"), { - path: "packages/ducpdf", + paths: [ + "packages/ducpdf", + "packages/ducjs", + "packages/ducrs" + ], analyzer: { preset: "conventionalcommits" }, notes: { preset: "conventionalcommits" }, }, @@ -12,7 +16,7 @@ module.exports = { [ "@semantic-release/exec", { - prepareCmd: "node ../../scripts/semrel-set-version.js packages/ducsvg ${nextRelease.version}", + prepareCmd: "node ../../scripts/semrel-set-version.js packages/ducpdf ${nextRelease.version}", publishCmd: "bun publish" } ], diff --git a/packages/ducpdf/src/duc2pdf/release.config.cjs b/packages/ducpdf/src/duc2pdf/release.config.cjs index c866dd3b..b1e6d292 100644 --- a/packages/ducpdf/src/duc2pdf/release.config.cjs +++ b/packages/ducpdf/src/duc2pdf/release.config.cjs @@ -4,7 +4,10 @@ module.exports = { [ require.resolve("../../../../scripts/semrel-path-filter.cjs"), { - path: "packages/ducpdf/src/duc2pdf", + paths: [ + "packages/ducpdf/src/duc2pdf", + "packages/ducrs", + ], analyzer: { preset: "conventionalcommits" }, notes: { preset: "conventionalcommits" }, }, diff --git a/packages/ducpy/release.config.cjs b/packages/ducpy/release.config.cjs index e2c17697..08b69bf1 100644 --- a/packages/ducpy/release.config.cjs +++ b/packages/ducpy/release.config.cjs @@ -4,7 +4,9 @@ module.exports = { [ require.resolve("../../scripts/semrel-path-filter.cjs"), { - path: "packages/ducpy", + paths: [ + "packages/ducpy" + ], analyzer: { preset: "conventionalcommits" }, notes: { preset: "conventionalcommits" }, }, diff --git a/packages/ducpy/src/ducpy/builders/element_builders.py b/packages/ducpy/src/ducpy/builders/element_builders.py index ccbc8454..fe561187 100644 --- a/packages/ducpy/src/ducpy/builders/element_builders.py +++ b/packages/ducpy/src/ducpy/builders/element_builders.py @@ -88,7 +88,6 @@ def _create_element_wrapper(element_class, base_params, element_params, explicit # Set required list fields with defaults base_params.setdefault('group_ids', []) base_params.setdefault('block_ids', []) - base_params.setdefault('block_ids', []) base_params.setdefault('region_ids', []) base_params.setdefault('instance_id', None) diff --git a/packages/ducrs/release.config.cjs b/packages/ducrs/release.config.cjs index 901658d8..8428a4b4 100644 --- a/packages/ducrs/release.config.cjs +++ b/packages/ducrs/release.config.cjs @@ -4,7 +4,9 @@ module.exports = { [ require.resolve("../../scripts/semrel-path-filter.cjs"), { - path: "packages/ducrs", + paths: [ + "packages/ducrs" + ], analyzer: { preset: "conventionalcommits" }, notes: { preset: "conventionalcommits" }, }, diff --git a/packages/ducsvg/README.md b/packages/ducsvg/README.md index fc727b09..21a0033e 100644 --- a/packages/ducsvg/README.md +++ b/packages/ducsvg/README.md @@ -15,6 +15,8 @@ > This library leverages the stable renderer from `ducpdf`, first converting the `duc` document to PDF format before transforming it into SVG using `pdf-into-svg`. This approach ensures high fidelity in the SVG output by utilizing the robust rendering capabilities of the PDF format. +> 💡 Maybe in the future we could refactor `ducpdf` to leverage the growing library [`hayro_svg`](https://docs.rs/hayro-svg/latest/hayro_svg/) to convert PDF to SVG more seamlessly instead of using `pdf-into-svg` (C# library). Reference: [hayro project](https://github.com/LaurenzV/hayro?tab=readme-ov-file) + ## Documentation For detailed documentation, including all available types and utility functions, visit our [Documentation](https://duc.ducflair.com). diff --git a/packages/ducsvg/release.config.cjs b/packages/ducsvg/release.config.cjs index d49dd978..218193ac 100644 --- a/packages/ducsvg/release.config.cjs +++ b/packages/ducsvg/release.config.cjs @@ -4,11 +4,14 @@ module.exports = { [ require.resolve('../../scripts/semrel-path-filter.cjs'), { - // relative to repo root - path: 'packages/ducsvg', - // pass through any analyzer/notes options you like - analyzer: { preset: 'conventionalcommits' }, - notes: { preset: 'conventionalcommits' }, + paths: [ + "packages/ducsvg", + "packages/ducpdf", + "packages/ducjs", + "packages/ducrs", + ], + analyzer: { preset: "conventionalcommits" }, + notes: { preset: "conventionalcommits" }, }, ], [ diff --git a/scripts/semrel-path-filter.cjs b/scripts/semrel-path-filter.cjs index 1a39c8af..4fd31c21 100644 --- a/scripts/semrel-path-filter.cjs +++ b/scripts/semrel-path-filter.cjs @@ -12,14 +12,31 @@ function normalizePrefix(p) { return p.replace(/\\/g, '/').replace(/\/+$/, '') + '/'; } -async function filterCommitsByPath(commits, pkgPath) { - if (!pkgPath) return commits; - const prefix = normalizePrefix(pkgPath); +/** + * Normalize paths config to an array of prefixes + * Supports `paths` (array) option + */ +function normalizePaths(pluginConfig) { + const { paths } = pluginConfig; + + // Ensure paths is an array + const allPaths = Array.isArray(paths) ? paths : []; + + // Remove duplicates and normalize + return [...new Set(allPaths)].map(normalizePrefix); +} + +async function filterCommitsByPaths(commits, prefixes) { + if (!prefixes || prefixes.length === 0) return commits; const filtered = []; for (const c of commits) { const files = gitChangedFiles(c.hash); - if (files.some(f => f.replace(/\\/g, '/').startsWith(prefix))) { + // Check if any file matches any of the prefixes + if (files.some(f => { + const normalizedFile = f.replace(/\\/g, '/'); + return prefixes.some(prefix => normalizedFile.startsWith(prefix)); + })) { filtered.push(c); } } @@ -28,10 +45,12 @@ async function filterCommitsByPath(commits, pkgPath) { module.exports = { analyzeCommits: async (pluginConfig = {}, context) => { - const { path: pkgPath, analyzer = {} } = pluginConfig; - const filtered = await filterCommitsByPath(context.commits, pkgPath); + const { analyzer = {} } = pluginConfig; + const prefixes = normalizePaths(pluginConfig); + const filtered = await filterCommitsByPaths(context.commits, prefixes); - context.logger.log(`[path-filter] ${filtered.length}/${context.commits.length} commits affect "${pkgPath}"`); + const pathsDisplay = prefixes.map(p => p.slice(0, -1)).join(', '); + context.logger.log(`[path-filter] ${filtered.length}/${context.commits.length} commits affect "${pathsDisplay}"`); if (filtered.length === 0) return null; const { analyzeCommits: analyze } = await import('@semantic-release/commit-analyzer'); @@ -39,8 +58,9 @@ module.exports = { }, generateNotes: async (pluginConfig = {}, context) => { - const { path: pkgPath, notes = {} } = pluginConfig; - const filtered = await filterCommitsByPath(context.commits, pkgPath); + const { notes = {} } = pluginConfig; + const prefixes = normalizePaths(pluginConfig); + const filtered = await filterCommitsByPaths(context.commits, prefixes); const { generateNotes: genNotes } = await import('@semantic-release/release-notes-generator'); return genNotes(notes, { ...context, commits: filtered });