mirror of https://github.com/CesiumGS/cesium.git
|
|
||
|---|---|---|
| .. | ||
| PatchReleases | ||
| Prereleases | ||
| README.md | ||
| ReleaseSchedule.md | ||
README.md
Release Guide
We release CesiumJS on the first work day of every month.
- Release Schedule: The upcoming monthly release schedule and the developer responsible for managing each release
- Patch Release Guide: If and how to publish a patch release1 ahead of the regular monthly release, typically used in the case of a significant regression or an issue with published dependency versions.
- Prerelease Guide: If and how to publish a tagged prerelease2 ahead of the regular monthly release, typically used for internal testing.
Motivation
There is no one release manager; instead, our community shares the responsibility. Any committer can create the release for a given month, and at any point, they can pass the responsibility to someone else, or someone else can ask for it. This spreads knowledge, avoids stratification, avoids a single point of failure, and is beautifully unstructured.
One week before release
- Check for any outdated dependencies with
npm outdated. - If one or more dependencies are outdated, checkout a new branch and run
npm install <packagename>@latestfor each package to increment the version.- If
prettierneeds updated you should still update it but keep the version pinned. If you runnpm install prettier@latestyou must remove the^inpackage.json. If the number of changes when runningnpm run prettieris large it may be worth opening a separate PR for only those.
- If
- Verify each update. If an update can be resolved, open a PR with your changes. If an update is incompatible, open an issue. Check the
dependencieslabel for any open issues pinning versions. - Check the
priority - next releaseissues and PRs. If there are any outstanding items, post a message to theCesiumJSchannel in Teams to figure out what needs to be addressed before we can release. - Check the
remove in [this version number]issues and open PRs to address any deprecations. - Ensure you've generated valid end to end testing snapshots against a previous release tag with
npm run test-e2e-update. - Start thinking ahead for a good image for the release blog post in case you need to prepare any data, assets or examples.
Release testing and packaging
Follow these instructions exactly. Do not switch branches or otherwise manipulate your local clone at any point in the process unless instructed to do so. If you need to switch branches for whatever reason, you must start the entire process over again.
- Verify there are no
priority - next releaseissues and PRs. - Verify there are no
remove in [this version number]issues. Delete the label. Create a new label with the next highestremove in [version]relative to the existing labels. - Make sure you are using the latest drivers for your video card.
- Ensure you've generated valid end to end testing snapshots against a previous release tag with
npm run test-e2e-update. - Pull down the latest
mainbranch and runnpm install. - Update the Cesium ion demo token in
Ion.jswith a new token from the CesiumJS ion team account withreadandgeocodepermissions. These tokens are named like this:1.85 Release - Delete on November 1st, 2021. Delete the token from 2 releases ago. - Update the ArcGIS Developer API key in
ArcGisMapService.jswith a new API key from the CesiumJS ArcGIS Developer account. These API keys are named like this:1.85 Release - Delete on November 1st, 2021. Delete the API key from the last release.- Sign in with Bitwarden
- Go to Content at the top
- Click "New Item" -> Developer Credentials -> API Key credentials
- Set the expiration date to the day after the next release (no referrer URLs)
- Only turn on "Static maps" permissions
- Skip adding items
- Set the title and copy the API key on the last screen
- Open the previous release's item and Delete it
- Proofread
CHANGES.mdwith the date of the release. Adjust the order of changes so that prominent/popular changes come first. Ensure each change is in the section for the relevant workspace. - Based on
CHANGES.md, update each workspace version following the rules of semantic versioning, e.g.,npm version minor -w @cesium/engine --no-git-tag-version. Changes in one workspace may require version updates in other workspaces that depend on it. For example, ifCHANGES.mdreports changes in@cesium/engineonly, the version for@cesium/widgetsshould also be incremented to reflect the updated dependency. - Update the version in
package.jsonto match, e.g.1.115.0->1.116.0. - Commit these changes.
- Make sure the repository is clean
git clean -d -x -f --exclude="/Specs/e2e/*-snapshots/". This will delete all files not already in the repository, excluding end to end testing snapshots. - Run
npm install. - Make sure
ThirdParty.jsonis up to date by runningnpm run build-third-party. If there are any changes, verify and commit them. - Create the release zip
npm run make-zip. - Run tests against the release
npm run test -- --failTaskOnError --release. Test in all browsers with the--browsersflag (i.e.--browsers Firefox,Chrome). Alternatively, test with the browser Spec Runner by starting a local server (npm start -- --production) and browsing to http://localhost:8080/Specs/SpecRunner.html?built=true&release=true. - Run end to end tests against the release with
npm run test-e2e-release, or multiple browsers withnpm run test-e2e-release-all. - Unpack the release zip to the directory of your choice and start the server by running
npm installand thennpm start - Browse to http://localhost:8080 and confirm that the home page loads as expected and all links work.
- Verify that the documentation built correctly
- Make sure Hello World loads.
- Make sure Cesium Viewer loads.
- Run Sandcastle on the browser of your choice (or multiple browsers if you are up for it). Remove the
Showcasesfilter and spot test the more complicated demos. Actually play with each of the buttons and sliders on each demo to ensure everything works as expected. - If any of the above steps fail, post a message to the
CesiumJSchannel in Teams to figure out what needs to be fixed before we can release. Do NOT proceed to the next step until issues are resolved. - Push your commits to main
git push
- Create and push a tag, e.g.,
git tag -a 1.121 -m "1.121 release"git push origin 1.121(this assumes origin is the primary cesium repository, do not usegit push --tagsas it pushes all tags from all remotes you have on your system.)
- Publish the release zip file to GitHub
- https://github.com/CesiumGS/cesium/releases/new
- Select the tag you use pushed
- Enter 'CesiumJS 1.xx' for the title
- Include date, list of highlights and link to CHANGES.md (https://github.com/CesiumGS/cesium/blob/1.xx/CHANGES.md) as the description
- Look at a previous release for an example. Don't use emoji, headings, or other formatting
- Attach the
Cesium-1.xxrelease zip file - Publish the release
- Use
npm publish -w <WORKSPACE>in the repository root (not the unzipped file directory) to publish the workspaces. Repeat this step for each updated workspace, in the following order:npm publish -w @cesium/enginenpm publish -w @cesium/widgets
- Publish the top-level
cesiumpackage to npm by runningnpm publishin the repository root (not the unzipped file directory) (the first time you do this, you will need to authorize the machine usingnpm adduser). - Check out the
cesium.combranch. Merge the new release tag into thecesium.combranchgit merge origin <tag-name> --ff-only. CI will deploy the hosted release, Sandcastle, and the updated doc when you push the branch up. - After the
cesium.combranch is live on cesium.com, comment in theCommunicationschannel in Teams to notify comms that the release is done so they can add these highlights and publish the monthly blog post- Note, it may take a little while for the new version of CesiumJS to be live on cesium.com (~30 minutes after the branch builds). You can check the version of Cesium in sandcastle by looking at the tab above the cesium pane.
- Continue to the Cesium Analytics release