aboutsummaryrefslogtreecommitdiffstats
path: root/build/release/archive.js
diff options
context:
space:
mode:
authorTimmy Willison <timmywil@users.noreply.github.com>2023-07-27 11:24:49 -0400
committerTimmy Willison <timmywil@users.noreply.github.com>2024-07-11 10:00:56 -0400
commit2646a8b07fcc2cf7cf384724f622eb0c27f9166c (patch)
tree3367ad18d492486a692bb4a7a23b216ba155451f /build/release/archive.js
parent3a98ef91dfa0b4897df7562f40bfd1715f5fc30e (diff)
downloadjquery-2646a8b07fcc2cf7cf384724f622eb0c27f9166c.tar.gz
jquery-2646a8b07fcc2cf7cf384724f622eb0c27f9166c.zip
Release: migrate release process to release-it
*Authors* - Checking and updating authors has been migrated to a custom script in the repo *Changelog* - changelogplease is no longer maintained - generate changelog in markdown for GitHub releases - generate changelog in HTML for blog posts - generate contributors list in HTML for blog posts *dist* - clone dist repo, copy files, and commit/push - commit tag with dist files on main branch; remove dist files from main branch after release *cdn* - clone cdn repo, copy files, and commit/push - create versioned and unversioned copies in cdn/ - generate md5 sums and archives for Google and MSFT *build* - implement reproducible builds and verify release builds * uses the last modified date for the latest commit * See https://reproducible-builds.org/ - the verify workflow also ensures all files were properly published to the CDN and npm *docs* - the new release workflow is documented at build/release/README.md *misc* - now that we don't need the jquery-release script and now that we no longer need to build on Node 10, we can use ESM in all files in the build folder - move dist wrappers to "wrappers" folders for easy removal of all built files - limit certain workflows to the main repo (not forks) - version in package.json has been set to beta.1 so that the next release will be beta.2 - release-it added the `preReleaseBase` option and we now always set it to `1` in the npm script. This is a noop for stable releases. Fixes jquery/jquery-release#114 Closes gh-5512
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();
+ } );
+}