|
| 1 | +const fs = require('fs'); |
| 2 | +const path = require('path'); |
| 3 | +const simpleGit = require('simple-git'); |
| 4 | +const archiver = require('archiver'); |
| 5 | + |
| 6 | +const vcrBuildDir = path.join(__dirname, 'vcr-build'); |
| 7 | +const releaseDir = path.join(__dirname, 'release'); |
| 8 | +const repoUrl = 'https://github.com/Vonage-Community/sample-video-node-learning_server.git'; |
| 9 | + |
| 10 | +// Check for version argument |
| 11 | +const version = process.argv[2]; |
| 12 | +if (!version) { |
| 13 | + console.error('Error: Version argument is required. Usage: npm run vcrbuild <version>'); |
| 14 | + process.exit(1); |
| 15 | +} |
| 16 | + |
| 17 | +const zipFileName = `vcr-build-${version}.zip`; |
| 18 | + |
| 19 | +async function runVcrBuild() { |
| 20 | + try { |
| 21 | + // Check if the release file already exists |
| 22 | + if (fs.existsSync(path.join(releaseDir, zipFileName))) { |
| 23 | + console.error(`Error: Release file for version ${version} already exists.`); |
| 24 | + process.exit(1); |
| 25 | + } |
| 26 | + |
| 27 | + // Create release directory if it doesn't exist |
| 28 | + if (!fs.existsSync(releaseDir)) { |
| 29 | + fs.mkdirSync(releaseDir); |
| 30 | + } |
| 31 | + |
| 32 | + // Step 1: Delete vcr-build directory if it exists |
| 33 | + if (fs.existsSync(vcrBuildDir)) { |
| 34 | + fs.rmSync(vcrBuildDir, { recursive: true }); |
| 35 | + } |
| 36 | + |
| 37 | + // Step 2: Perform a clean checkout of the repository |
| 38 | + await simpleGit().clone(repoUrl, vcrBuildDir); |
| 39 | + |
| 40 | + // Step 3: Copy vcr.yml to vcr-build |
| 41 | + const neruFilePath = path.join(vcrBuildDir, 'vcr.yml.dist'); |
| 42 | + fs.copyFileSync(neruFilePath, path.join(vcrBuildDir, 'vcr.yml')); |
| 43 | + fs.rmSync(vcrBuildDir + '/.git', { recursive: true }) |
| 44 | + fs.rmSync(vcrBuildDir + '/.gitignore') |
| 45 | + fs.rmSync(neruFilePath) |
| 46 | + |
| 47 | + // Step 4: Create a ZIP file from vcr-build with version name |
| 48 | + await createZipFile(vcrBuildDir, zipFileName); |
| 49 | + |
| 50 | + console.log(`VCR build process completed successfully. File created: ${zipFileName}`); |
| 51 | + } catch (error) { |
| 52 | + console.error('Error during VCR build process:', error); |
| 53 | + } |
| 54 | +} |
| 55 | + |
| 56 | +async function createZipFile(sourceDir, zipFileName) { |
| 57 | + return new Promise((resolve, reject) => { |
| 58 | + const output = fs.createWriteStream(path.join(releaseDir, zipFileName)); |
| 59 | + const archive = archiver('zip', { zlib: { level: 9 } }); |
| 60 | + |
| 61 | + output.on('close', () => resolve()); |
| 62 | + archive.on('error', (err) => reject(err)); |
| 63 | + |
| 64 | + archive.pipe(output); |
| 65 | + archive.directory(sourceDir, false); |
| 66 | + archive.finalize(); |
| 67 | + }); |
| 68 | +} |
| 69 | + |
| 70 | +runVcrBuild(); |
0 commit comments