Skip to content
Merged
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
84 changes: 80 additions & 4 deletions gulpfile.js
Original file line number Diff line number Diff line change
@@ -1,5 +1,8 @@
const { execSync } = require('child_process');
const fs = require('fs');
const gulp = require('gulp');
const shell = require('gulp-shell');
const path = require('path');
const process = require('process');
const ts = require('gulp-typescript');

const tsProject = ts.createProject('tsconfig.json');
Expand All @@ -10,15 +13,88 @@ function clean(cb) {
.then(() => cb());
}

function sideload(cb) {
if (process.env.SECURITY_DEVOPS_ACTION_BUILD_SIDELOAD === 'true') {
console.log('Sideload mode enabled. Linking @microsoft/security-devops-actions-toolkit');

const toolkitSrcDir = path.resolve(path.join(__dirname, '..', 'security-devops-actions-toolkit'));

if (!fs.existsSync(toolkitSrcDir)) {
throw new Error(`Could not the toolkit repo directory: ${toolkitSrcDir}. Please clone the repo to a parallel directory to this extension repo. Repo homepage: https://github.com/microsoft/security-devops-actions-toolkit`);
}

const toolkitNodeModulesDir = path.join(__dirname, 'node_modules', '@microsoft', 'security-devops-actions-toolkit');

if (!fs.existsSync(toolkitNodeModulesDir)) {
throw new Error(`The node_modules directory for the toolkit does not exist. please run npm install before continuing: ${toolkitNodeModulesDir}`);
}

if (process.env.SECURITY_DEVOPS_ACTION_BUILD_SIDELOAD_BUILD !== 'false') {
console.log('Building sideload project: npm run build');
const output = execSync('npm run build', { cwd: toolkitSrcDir, encoding: 'utf8' });
console.log(output);
}

console.log(`Clearing the existing toolkit directory: ${toolkitNodeModulesDir}`);
clearDir(toolkitNodeModulesDir);

const toolkitDistDir = path.join(toolkitSrcDir, 'dist');

console.log("Copying sideload build...");
copyFiles(toolkitDistDir, toolkitNodeModulesDir);

fs.writeFileSync(
path.join(toolkitNodeModulesDir, '.sideloaded'),
'This package was built and sideloaded by the security-devops-action build process. Do not commit this file to source control.');
}
cb();
}

function compile(cb) {
tsProject
.src()
.pipe(tsProject()).js
.pipe(gulp.dest('lib'));
cb();
.pipe(gulp.dest('lib'))
.on('end', () => cb());
}

function clearDir(dirPath) {
// Get a list of files and subdirectories in the directory
const items = fs.readdirSync(dirPath);

for (const item of items) {
const itemPath = path.join(dirPath, item);

if (fs.statSync(itemPath).isFile()) {
fs.unlinkSync(itemPath);
} else {
clearDir(itemPath);
}
}

// Finally, remove the empty directory
fs.rmdirSync(dirPath);
}

function copyFiles(srcDir, destDir) {
if (!fs.existsSync(destDir)) {
fs.mkdirSync(destDir, { recursive: true });
}

fs.readdirSync(srcDir).forEach((file) => {
const srcFilePath = path.join(srcDir, file);
const destFilePath = path.join(destDir, file);

if (fs.statSync(srcFilePath).isDirectory()) {
copyFiles(srcFilePath, destFilePath);
} else {
fs.copyFileSync(srcFilePath, destFilePath);
console.log(`Copied ${srcFilePath} to ${destFilePath}`);
}
});
}

exports.clean = clean;
exports.compile = compile;
exports.build = gulp.series(clean, compile);
exports.build = gulp.series(clean, sideload, compile);
exports.default = exports.build;