diff --git a/.github/workflows/ci.yaml b/.github/workflows/ci.yaml index 2d3a29a..e88e0a3 100644 --- a/.github/workflows/ci.yaml +++ b/.github/workflows/ci.yaml @@ -8,7 +8,10 @@ on: - main jobs: ci: - runs-on: ubuntu-24.04 + strategy: + matrix: + os: [ubuntu-24.04, windows-latest] + runs-on: ${{ matrix.os }} steps: - uses: actions/checkout@v4 - uses: halo-sigs/reusable-workflows/plugin-setup-env@v3 diff --git a/src/template-config.js b/src/template-config.js index 5439b2a..5383140 100644 --- a/src/template-config.js +++ b/src/template-config.js @@ -1,19 +1,4 @@ export const templateConfig = { - templateFiles: [ - ".gitignore.template", - "build.gradle.template", - "settings.gradle.template", - "README.md.template", - "src/main/resources/plugin.yaml.template", - "src/main/java/Plugin.java.template", - "src/test/java/PluginTest.java.template", - - "ui/build.gradle.template", - "ui/package.json.template", - "ui/tsconfig.node.json.template", - "ui/env.d.ts.template", - ], - conditionalFiles: { vite: ["ui/vite.config.ts"], rsbuild: ["ui/rsbuild.config.ts"], diff --git a/src/template-engine.js b/src/template-engine.js index 1faaf5c..802dc23 100644 --- a/src/template-engine.js +++ b/src/template-engine.js @@ -58,16 +58,6 @@ function getAllFiles(dir, basePath = "") { return files; } -/** - * Check if file is a template file - * @param {string} filePath - File path - * @param {string[]} templateFiles - Template files list - * @returns {boolean} - */ -function isTemplateFile(filePath, templateFiles) { - return templateFiles.includes(filePath); -} - /** * Check if file is a conditional file * @param {string} filePath - File path @@ -75,7 +65,11 @@ function isTemplateFile(filePath, templateFiles) { * @returns {boolean} */ function isConditionalFile(filePath, conditionalFiles) { - return conditionalFiles.includes(filePath); + const normalizedPath = filePath.replace(/\\/g, '/'); + return conditionalFiles.some(conditional => { + const normalizedConditional = conditional.replace(/\\/g, '/'); + return normalizedPath === normalizedConditional; + }); } /** @@ -85,15 +79,21 @@ function isConditionalFile(filePath, conditionalFiles) { * @returns {boolean} */ function isExcludedConditionalFile(filePath, config) { + const normalizedPath = filePath.replace(/\\/g, '/'); + // Get all conditional files (including selected and unselected) const allConditionalFiles = Object.values( templateConfig.conditionalFiles, - ).flat(); + ).flat().map(file => file.replace(/\\/g, '/')); + + const selectedConditionalFiles = config.conditionalFiles.map(file => + file.replace(/\\/g, '/') + ); // If it's a conditional file but not in current selected conditional files list, it should be excluded return ( - allConditionalFiles.includes(filePath) && - !config.conditionalFiles.includes(filePath) + allConditionalFiles.includes(normalizedPath) && + !selectedConditionalFiles.includes(normalizedPath) ); } @@ -137,8 +137,7 @@ async function processFile(filePath, projectPath, variables, config) { return; } - // Determine file type and process accordingly - if (isTemplateFile(filePath, config.templateFiles)) { + if (filePath.endsWith('.template')) { // Process template file await processTemplateFile(filePath, srcPath, projectPath, variables); } else if (isExcludedConditionalFile(filePath, config)) {