|  | "use strict"; | 
|  |  | 
|  | module.exports = function( Release, files, complete ) { | 
|  |  | 
|  | const fs = require( "fs" ).promises; | 
|  | const shell = require( "shelljs" ); | 
|  | const inquirer = require( "inquirer" ); | 
|  | const pkg = require( `${ Release.dir.repo }/package.json` ); | 
|  | const distRemote = Release.remote | 
|  |  | 
|  | // For local and github dists | 
|  | .replace( /jquery(\.git|$)/, "jquery-dist$1" ); | 
|  |  | 
|  | // These files are included with the distribution | 
|  | const extras = [ | 
|  | "src", | 
|  | "LICENSE.txt", | 
|  | "AUTHORS.txt", | 
|  | "package.json" | 
|  | ]; | 
|  |  | 
|  | /** | 
|  | * Clone the distribution repo | 
|  | */ | 
|  | function clone() { | 
|  | Release.chdir( Release.dir.base ); | 
|  | Release.dir.dist = `${ Release.dir.base }/dist`; | 
|  |  | 
|  | console.log( "Using distribution repo: ", distRemote ); | 
|  | Release.exec( `git clone ${ distRemote } ${ Release.dir.dist }`, | 
|  | "Error cloning repo." ); | 
|  |  | 
|  | // Distribution always works on main | 
|  | Release.chdir( Release.dir.dist ); | 
|  | Release.exec( "git checkout main", "Error checking out branch." ); | 
|  | console.log(); | 
|  | } | 
|  |  | 
|  | /** | 
|  | * Generate bower file for jquery-dist | 
|  | */ | 
|  | function generateBower() { | 
|  | return JSON.stringify( { | 
|  | name: pkg.name, | 
|  | main: pkg.main, | 
|  | license: "MIT", | 
|  | ignore: [ | 
|  | "package.json" | 
|  | ], | 
|  | keywords: pkg.keywords | 
|  | }, null, 2 ); | 
|  | } | 
|  |  | 
|  | /** | 
|  | * Replace the version in the README | 
|  | * @param {string} readme | 
|  | * @param {string} blogPostLink | 
|  | */ | 
|  | function editReadme( readme, blogPostLink ) { | 
|  | return readme | 
|  | .replace( /@VERSION/g, Release.newVersion ) | 
|  | .replace( /@BLOG_POST_LINK/g, blogPostLink ); | 
|  | } | 
|  |  | 
|  | /** | 
|  | * Copy necessary files over to the dist repo | 
|  | */ | 
|  | async function copy() { | 
|  |  | 
|  | // Copy dist files | 
|  | const distFolder = `${ Release.dir.dist }/dist`; | 
|  | const externalFolder = `${ Release.dir.dist }/external`; | 
|  | const readme = await fs.readFile( | 
|  | `${ Release.dir.repo }/build/fixtures/README.md`, "utf8" ); | 
|  | const rmIgnore = [ ...files, "node_modules" ] | 
|  | .map( file => `${ Release.dir.dist }/${ file }` ); | 
|  |  | 
|  | shell.config.globOptions = { | 
|  | ignore: rmIgnore | 
|  | }; | 
|  |  | 
|  | const { blogPostLink } = await inquirer.prompt( [ { | 
|  | type: "input", | 
|  | name: "blogPostLink", | 
|  | message: "Enter URL of the blog post announcing the jQuery release...\n" | 
|  | } ] ); | 
|  |  | 
|  | // Remove extraneous files before copy | 
|  | shell.rm( "-rf", `${ Release.dir.dist }/**/*` ); | 
|  |  | 
|  | shell.mkdir( "-p", distFolder ); | 
|  | files.forEach( function( file ) { | 
|  | shell.cp( "-f", `${ Release.dir.repo }/${ file }`, distFolder ); | 
|  | } ); | 
|  |  | 
|  | // Copy Sizzle | 
|  | shell.mkdir( "-p", externalFolder ); | 
|  | shell.cp( "-rf", `${ Release.dir.repo }/external/sizzle`, externalFolder ); | 
|  |  | 
|  | // Copy other files | 
|  | extras.forEach( function( file ) { | 
|  | shell.cp( "-rf", `${ Release.dir.repo }/${ file }`, Release.dir.dist ); | 
|  | } ); | 
|  |  | 
|  | // Remove the wrapper & the ESLint config from the dist repo | 
|  | shell.rm( "-f", `${ Release.dir.dist }/src/wrapper.js` ); | 
|  | shell.rm( "-f", `${ Release.dir.dist }/src/.eslintrc.json` ); | 
|  |  | 
|  | // Write generated bower file | 
|  | await fs.writeFile( `${ Release.dir.dist }/bower.json`, generateBower() ); | 
|  |  | 
|  | await fs.writeFile( `${ Release.dir.dist }/README.md`, | 
|  | editReadme( readme, blogPostLink ) ); | 
|  |  | 
|  | console.log( "Files ready to add." ); | 
|  | } | 
|  |  | 
|  | /** | 
|  | * Add, commit, and tag the dist files | 
|  | */ | 
|  | function commit() { | 
|  | console.log( "Adding files to dist..." ); | 
|  | Release.exec( "git add -A", "Error adding files." ); | 
|  | Release.exec( | 
|  | `git commit -m "Release ${ Release.newVersion }"`, | 
|  | "Error committing files." | 
|  | ); | 
|  | console.log(); | 
|  |  | 
|  | console.log( "Tagging release on dist..." ); | 
|  | Release.exec( `git tag ${ Release.newVersion }`, | 
|  | `Error tagging ${ Release.newVersion } on dist repo.` ); | 
|  | Release.tagTime = Release.exec( "git log -1 --format=\"%ad\"", | 
|  | "Error getting tag timestamp." ).trim(); | 
|  | } | 
|  |  | 
|  | /** | 
|  | * Push files to dist repo | 
|  | */ | 
|  | function push() { | 
|  | Release.chdir( Release.dir.dist ); | 
|  |  | 
|  | console.log( "Pushing release to dist repo..." ); | 
|  | Release.exec( | 
|  | `git push ${ | 
|  | Release.isTest ? " --dry-run" : "" | 
|  | } ${ distRemote } main --tags`, | 
|  | "Error pushing main and tags to git repo." | 
|  | ); | 
|  |  | 
|  | // Set repo for npm publish | 
|  | Release.dir.origRepo = Release.dir.repo; | 
|  | Release.dir.repo = Release.dir.dist; | 
|  | } | 
|  |  | 
|  | Release.walk( [ | 
|  | Release._section( "Copy files to distribution repo" ), | 
|  | clone, | 
|  | copy, | 
|  | Release.confirmReview, | 
|  |  | 
|  | Release._section( "Add, commit, and tag files in distribution repo" ), | 
|  | commit, | 
|  | Release.confirmReview, | 
|  |  | 
|  | Release._section( "Pushing files to distribution repo" ), | 
|  | push | 
|  | ], complete ); | 
|  | }; |