jquery/build/release
Timmy Willison 2646a8b07f 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
2024-07-11 10:00:56 -04:00
..
archive.js Release: migrate release process to release-it 2024-07-11 10:00:56 -04:00
authors.js Release: migrate release process to release-it 2024-07-11 10:00:56 -04:00
cdn.js Release: migrate release process to release-it 2024-07-11 10:00:56 -04:00
changelog.js Release: migrate release process to release-it 2024-07-11 10:00:56 -04:00
dist.js Release: migrate release process to release-it 2024-07-11 10:00:56 -04:00
post-release.sh Release: migrate release process to release-it 2024-07-11 10:00:56 -04:00
pre-release.sh Release: migrate release process to release-it 2024-07-11 10:00:56 -04:00
README.md Release: migrate release process to release-it 2024-07-11 10:00:56 -04:00
verify.js Release: migrate release process to release-it 2024-07-11 10:00:56 -04:00

Releasing jQuery

This document describes the process for releasing a new version of jQuery. It is intended for jQuery team members and collaborators who have been granted permission to release new versions.

Prerequisites

Before you can release a new version of jQuery, you need to have the following tools installed:

Setup

  1. Clone the jQuery repo:

    git clone git@github.com:jquery/jquery.git
    cd jquery
    
  2. Install the dependencies:

    npm install
    
  3. Log into npm with a user that has access to the jquery package.

    npm login
    

The release script will not run if not logged in.

  1. Set JQUERY_GITHUB_TOKEN in the shell environment that will be used to run npm run release. The token can be created on GitHub and only needs the repo scope. This token is used to publish GitHub release notes and generate a list of contributors for the blog post.

    export JQUERY_GITHUB_TOKEN=...
    

The release script will not run without this token.

Release Process

  1. Ensure all milestoned issues/PRs are closed, or reassign to a new milestone.

  2. Verify all tests are passing in CI.

  3. Run any release-only tests, such as those in the test/integration folder.

  4. Ensure AUTHORS.txt file is up to date (this will be verified by the release script).

    • Use npm run authors:update to update.
  5. Create draft blog post on blog.jquery.com; save the link before publishing. The link is required to run the release.

    • Highlight major changes and reason for release.
    • Add contributor list generated in the below release script.
    • Add HTML from the changelog.html generated in the below release script.
    • Use HTML from the contributors.html generated in the below release script in the "Thanks" section.
  6. Run a dry run of the release script:

    BLOG_URL=https://blog.jquery.com/... npm run release -- -d
    
  7. If the dry run is successful, run the release script:

    BLOG_URL=https://blog.jquery.com/... npm run release
    

    This will run the pre-release script, which includes checking authors, running tests, running the build, and cloning the CDN and jquery-dist repos in the tmp/ folder.

    It will then walk you through the rest of the release process: creating the tag, publishing to npm, publishing release notes on GitHub, and pushing the updated branch and new tag to the jQuery repo.

    Finally, it will run the post-release script, which will ask you to confirm the files prepared in tmp/release/cdn and tmp/release/dist are correct before pushing to the respective repos. It will also prepare a commit for the jQuery repo to remove the release files and update the AUTHORS.txt URL in the package.json. It will ask for confirmation before pushing that commit as well.

    For a pre-release, run:

    BLOG_URL=https://blog.jquery.com/... npm run release -- --preRelease=beta
    

    preRelease can also be set to alpha or rc.

    Note: preReleaseBase is set in the npm script to 1 to ensure any pre-releases start at .1 instead of .0. This does not interfere with stable releases.

  8. Once the release is complete, publish the blog post.

Stable releases

Stable releases have a few more steps:

  1. Close the milestone matching the current release: https://github.com/jquery/jquery/milestones. Ensure there is a new milestone for the next release.

  2. Update jQuery on https://github.com/jquery/jquery-wp-content.

  3. Update jQuery on https://github.com/jquery/blog.jquery.com-theme.

  4. Update latest jQuery version for healthyweb.org.

  5. Update the shipping version on jquery.com home page.

    git pull jquery/jquery.com
    # Edit index.html and download.md
    git commit
    npm version patch
    git push origin main --tags
    
  6. Update the version used in jQuery docs demos.

  7. Email archives to CDNs.

CDN Emails Include
Google hosted-libraries@google tmp/archives/googlecdn-jquery-*.zip
Microsoft damian.edwards@microsoft, Chris.Sfanos@microsoft tmp/archives/mscdn-jquery-*.zip
CDNJS ryan@ryankirkman, thomasalwyndavis@gmail Blog post link