mirror of
https://github.com/jquery/jquery.git
synced 2024-11-23 02:54:22 +00:00
2cf659189e
*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 *verify* - use the last modified date of the commit before the tag - use versioned filenames when checking map files on the CDN - skip factory and package.json files when verifying CDN *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 - limit certain workflows to the main repo (not forks) - version has been set to the previously released version 3.7.1, as release-it expects - 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. - include post-release script to be run manually after a release, with further steps that should be verified manually Ref jquery/jquery-release#114 Closes gh-5522
60 lines
1.6 KiB
JavaScript
60 lines
1.6 KiB
JavaScript
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();
|
|
} );
|
|
}
|