aboutsummaryrefslogtreecommitdiffstats
path: root/build/release/archive.js
diff options
context:
space:
mode:
Diffstat (limited to 'build/release/archive.js')
-rw-r--r--build/release/archive.js59
1 files changed, 59 insertions, 0 deletions
diff --git a/build/release/archive.js b/build/release/archive.js
new file mode 100644
index 000000000..2325d6ccb
--- /dev/null
+++ b/build/release/archive.js
@@ -0,0 +1,59 @@
+import { readdir, writeFile } from "node:fs/promises";
+import { createReadStream, createWriteStream } from "node:fs";
+import path from "node:path";
+import util from "node:util";
+import os from "node:os";
+import { exec as nodeExec } from "node:child_process";
+import archiver from "archiver";
+
+const exec = util.promisify( nodeExec );
+
+async function md5sum( files, folder ) {
+ if ( os.platform() === "win32" ) {
+ const rmd5 = /[a-f0-9]{32}/;
+ const sum = [];
+
+ for ( let i = 0; i < files.length; i++ ) {
+ const { stdout } = await exec( "certutil -hashfile " + files[ i ] + " MD5", {
+ cwd: folder
+ } );
+ sum.push( rmd5.exec( stdout )[ 0 ] + " " + files[ i ] );
+ }
+
+ return sum.join( "\n" );
+ }
+
+ const { stdout } = await exec( "md5 -r " + files.join( " " ), { cwd: folder } );
+ return stdout;
+}
+
+export default function archive( { cdn, folder, version } ) {
+ return new Promise( async( resolve, reject ) => {
+ console.log( `Creating production archive for ${ cdn }...` );
+
+ const md5file = cdn + "-md5.txt";
+ const output = createWriteStream(
+ path.join( folder, cdn + "-jquery-" + version + ".zip" )
+ );
+
+ output.on( "close", resolve );
+ output.on( "error", reject );
+
+ const archive = archiver( "zip" );
+ archive.pipe( output );
+
+ const files = await readdir( folder );
+ const sum = await md5sum( files, folder );
+ await writeFile( path.join( folder, md5file ), sum );
+ files.push( md5file );
+
+ files.forEach( ( file ) => {
+ const stream = createReadStream( path.join( folder, file ) );
+ archive.append( stream, {
+ name: path.basename( file )
+ } );
+ } );
+
+ archive.finalize();
+ } );
+}