Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 0 additions & 1 deletion .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -4,4 +4,3 @@
!/src/README.md
.env
.idea
build-errors.json
156 changes: 47 additions & 109 deletions build.js
Original file line number Diff line number Diff line change
Expand Up @@ -23,9 +23,6 @@ import { cleandir } from 'rollup-plugin-cleandir';
import fs from 'fs';
import CleanCSS from 'clean-css';

// Track build errors
const buildErrors = [];

const plugins = ({ activity, styles, cssRestrictions, variantName, config }) => {
// Read the CSS file
const cssFilePath = (styles && styles.length > 0) ? `./src/activities/${activity}/${variantName ? variantName + '/' : ''}${styles[0]}` : '';
Expand Down Expand Up @@ -153,122 +150,71 @@ const buildActivities = async (activitiesFilter = [], activitiesGroup) => {
}, {});
// check if activity has package.json
if (fs.existsSync(packageJsonPath)) {
console.log('package json found');
const packageJson = JSON.parse(fs.readFileSync(packageJsonPath, 'utf-8'));
if (packageJson.scripts && packageJson.scripts.dist) {
console.log(`"dist" script found. Running "dist" script...`);
const dirPath = `./src/activities/${activity.activity}`;
try {
await runCommand('npm run dist', dirPath);
} catch (error) {
buildErrors.push({
activity: activity.activity,
variant: null,
stage: 'npm run dist',
error: error.toString(),
});
console.error(`Error running npm dist for ${activity.activity}:`, error);
continue; // Skip to next activity
}
await runCommand('npm run dist', dirPath);
}
}
if (activity.variants) {
// build variants...
for (const [variantName, variant] of Object.entries(activity.variants)) {
Object.entries(activity.variants).forEach(async ([variantName, variant]) => {
console.log('BUILDING:'+activity.activity,{variant});
console.log(`Building ${activity.activity}_${variantName}/${variant.scripts[0]}...`);

try {
await buildFile({
input: `src/activities/${activity.activity}/${variantName}/${variant.scripts[0]}`,
output: {
file: `dist/fe_activity_${activity.activity}_${variantName}.js`,
format: 'iife',
},
plugins: plugins({ ...activity, ...variant, variantName, config }),
});
} catch (error) {
buildErrors.push({
activity: activity.activity,
variant: variantName,
stage: 'build (unminified)',
error: error.message || error.toString(),
});
console.error(`Error building ${activity.activity}_${variantName}:`, error);
continue; // Skip minified build if unminified fails
}

try {
await buildFile({
input: `src/activities/${activity.activity}/${variantName}/${variant.scripts[0]}`,
output: {
file: `dist/fe_activity_${activity.activity}_${variantName}.min.js`,
format: 'iife',
sourcemap: true,
sourcemapBaseUrl: `https://fe-hpe-script.s3.us-east-2.amazonaws.com/${activitiesGroup.toLowerCase()}/v2`,
},
plugins: [...plugins({ ...activity, ...variant, variantName, config }), terser()],
});
} catch (error) {
buildErrors.push({
activity: activity.activity,
variant: variantName,
stage: 'build (minified)',
error: error.message || error.toString(),
});
console.error(`Error building minified ${activity.activity}_${variantName}:`, error);
}
}
} else {
console.log(`Building ${activity.activity}/${activity.scripts[0]}...`);

try {
await buildFile({
input: `src/activities/${activity.activity}/${activity.scripts[0]}`,
input: `src/activities/${activity.activity}/${variantName}/${variant.scripts[0]}`,
output: {
file: `dist/fe_activity_${activity.activity}.js`,
file: `dist/fe_activity_${activity.activity}_${variantName}.js`,
format: 'iife',
},
plugins: plugins({ ...activity, config }),
});
} catch (error) {
buildErrors.push({
activity: activity.activity,
variant: null,
stage: 'build (unminified)',
error: error.message || error.toString(),
plugins: plugins({ ...activity, ...variant, variantName, config }),
});
console.error(`Error building ${activity.activity}:`, error);
continue; // Skip minified build if unminified fails
}

try {
await buildFile({
input: `src/activities/${activity.activity}/${activity.scripts[0]}`,
input: `src/activities/${activity.activity}/${variantName}/${variant.scripts[0]}`,
output: {
file: `dist/fe_activity_${activity.activity}.min.js`,
file: `dist/fe_activity_${activity.activity}_${variantName}.min.js`,
format: 'iife',
sourcemap: true,
sourcemapBaseUrl: `https://fe-hpe-script.s3.us-east-2.amazonaws.com/${activitiesGroup.toLowerCase()}/v2`,
},
plugins: [...plugins({ ...activity, config }), terser()],
plugins: [...plugins({ ...activity, ...variant, variantName, config }), terser()],
});
} catch (error) {
buildErrors.push({
activity: activity.activity,
variant: null,
stage: 'build (minified)',
error: error.message || error.toString(),
});
console.error(`Error building minified ${activity.activity}:`, error);
}
});
} else {
console.log(`Building ${activity.activity}/${activity.scripts[0]}...`);
await buildFile({
input: `src/activities/${activity.activity}/${activity.scripts[0]}`,
output: {
file: `dist/fe_activity_${activity.activity}.js`,
format: 'iife',
},
plugins: plugins({ ...activity, config }),
});
await buildFile({
input: `src/activities/${activity.activity}/${activity.scripts[0]}`,
output: {
file: `dist/fe_activity_${activity.activity}.min.js`,
format: 'iife',
sourcemap: true,
sourcemapBaseUrl: `https://fe-hpe-script.s3.us-east-2.amazonaws.com/${activitiesGroup.toLowerCase()}/v2`,
},
plugins: [...plugins({ ...activity, config }), terser()],
});
}
}
}

// Function to build a single file
const buildFile = async (config) => {
const bundle = await rollup.rollup(config);
await bundle.write(config.output);
try {
const bundle = await rollup.rollup(config);
await bundle.write(config.output);
} catch (error) {
console.error('Build error:', error);
// process.exit(1);
}
}

// Build the library files
Expand Down Expand Up @@ -318,26 +264,18 @@ const buildLibFiles = async () => {
// Run the build process
cleandir('dist');
if (argv.all) {
await buildLibFiles();
await buildActivities();
buildLibFiles();
buildActivities().catch((error) => {
console.error('Build error:', error);
process.exit(1);
});
}
if (argv.lib) {
await buildLibFiles();
buildLibFiles();
} else {
await buildActivities(argv.activities?.split(','), argv?.group);
}

// Write errors to a JSON file for the GitHub Action to read
if (buildErrors.length > 0) {
console.error('\n=== BUILD ERRORS SUMMARY ===');
buildErrors.forEach(err => {
const variantInfo = err.variant ? ` (variant: ${err.variant})` : '';
console.error(`- ${err.activity}${variantInfo} [${err.stage}]: ${err.error}`);
console.log('activities:', argv.activities);
buildActivities(argv.activities?.split(','), argv?.group).catch((error) => {
console.error('Build error:', error);
process.exit(1);
});

fs.writeFileSync('./build-errors.json', JSON.stringify(buildErrors, null, 2));
console.log('\nBuild errors written to build-errors.json');
process.exit(1); // Exit with error code so GitHub Action knows there were failures
} else {
console.log('\n✓ All activities built successfully');
}