We release Cesium on the first work day of every month. The Release Schedule outlines the release schedule and the developer responsible for each month's release.
There is no 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 (more info).
- Check for any outdated dependencies with
npm outdated
. - If one or more dependencies are outdated, checkout a new branch and run
npm install <packagename>@latest
for each package to increment the version.- If
prettier
needs updated you should still update it but keep the version pinned. If you runnpm install prettier@latest
you must remove the^
inpackage.json
. If the number of changes when runningnpm run prettier
is 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
dependencies
label for any open issues pinning versions. - Check the
priority - next release
issues and PRs. If there are any outstanding items, post a message to the#cesiumjs
channel in Slack to figure out what needs to be addressed before we can release. - Ensure you've generated valid end to end testing snapshots against a previous release tag with
npm run test-e2e-update
.
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 release
issues 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
main
branch and runnpm install
. - Update the Cesium ion demo token in
Ion.js
with a new token from the CesiumJS ion team account with read and geocode permissions. 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.js
with 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 LastPass
- 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.md
with 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.md
reports changes in@cesium/engine
only, the version for@cesium/widgets
should also be incremented to reflect the updated dependency. - Update the version in
package.json
to 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.json
is 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--browsers
flag (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 install
and 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). Switch to the
All
tab and spot test 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
#cesiumjs
channel in Slack 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 --tags
as 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.xx
release 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/engine
npm publish -w @cesium/widgets
- Publish the top-level
cesium
package to npm by runningnpm publish
in 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.com
branch. Merge the new release tag into thecesium.com
branchgit merge origin <tag-name>
. CI will deploy the hosted release, Sandcastle, and the updated doc when you push the branch up. - After the
cesium.com
branch is live on cesium.com, comment in the#comms-chat
slack channel 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