Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

docs(releasing): add schedule, more explicit integration testing #9695

Merged
merged 13 commits into from
Sep 30, 2019
118 changes: 110 additions & 8 deletions docs/releasing.md
Original file line number Diff line number Diff line change
@@ -1,10 +1,28 @@
### Release guide for maintainers

This doc is only relevant to core member.

## Release Policy

### Cadence

We ship once a month, on the Thursday before the 1st. While not necessary, followup minor/patch releases may be done if warranted. The planned ship dates are added to the internal Lighthouse calendar.
We aim to release every 3 weeks. Our schedule is set as follows: One day before the [expected Chromium branch point](https://www.chromium.org/developers/calendar) (which is every six weeks) and again exactly 3 weeks after that day.
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I don't feel comfortable writing this down with no established history of being able to pull this off and without a bot doing the releasing, but I guess I'm comfortable with you taking the heat for it, @connorjclark :)


For example, following this schedule, we will attempt a release on these dates:

* _Oct 15 2019_
* Nov 5 2019
* _Nov 26 2019_
* Dec 17 2019
* ...

Italicized dates are the day before the expected Chromium branch point.

The planned ship dates are added to the internal Lighthouse calendar.
connorjclark marked this conversation as resolved.
Show resolved Hide resolved

If a release is necessary outside these scheduled dates, we may choose to skip the next scheduled release.

In general, the above release dates are when new versions will be available in npm. About a week later, it will be reflected in LR / PSI. Some 10 weeks later, it will be available in Stable Chrome.

### Release manager

Expand All @@ -16,6 +34,8 @@ Release manager follows the below _Release Process_.

### Release publicity

Note: actively undergoing changes by @exterkamp and @egsweeny.

1. Release mgr copies changelog to a new [Releases](https://github.com/GoogleChrome/lighthouse/releases). Tags and ships it.
* Include a line of `We expect this release to ship in the DevTools of Chrome XX`.
1. Release mgr tells the _LH public_ Hangout chat about the new version.
Expand All @@ -25,35 +45,104 @@ Release manager follows the below _Release Process_.

### Versioning

We follow [semver](https://semver.org/) versioning semantics (`vMajor.Minor.Patch`), to align with the greater Node community. Generally, this means our bi-weekly releases will bump a minor. Though we will release a new patch version if high-priority fixes are required before the next schedule release. Additionally, if a schedule release contains no new features, then we'll only bump the patch version.
We follow [semver](https://semver.org/) versioning semantics (`vMajor.Minor.Patch`). Breaking changes will bump the major version. New features or bug fixes will bump the minor version. If a release contains no new features, then we'll only bump the patch version.
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

worth clarifying what constitutes a "breaking change" here?

probably enough meat on that question for a separate PR but wanted to leave the thought in here all the same :)



## Release Process

Note: You'll wanna be on a Linux machine, since the Lightrider step will require that.
connorjclark marked this conversation as resolved.
Show resolved Hide resolved

### On the scheduled release date

Before starting, you should announce to the LH eng channel that you are releasing,
and that no new PRs should be merged until you are done.

```sh
# Run the tests
# Run the tests.
bash ./lighthouse-core/scripts/release/test.sh
# Change into the pristine folder.
cd ../lighthouse-pristine
```

Confirm DevTools integration will work:
```sh
# You should have Chromium already checked out at ~/chromium/src
# See: https://www.chromium.org/developers/how-tos/get-the-code

# Roll to Chromium folder.
yarn devtools
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@paulirish wasn't there a way (used to be a way?) to live-edit devtools? Could we do that with Lighthouse so that the releaser isn't dependent on rebuilding?

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

yahh there is a thing now. --custom-devtools-frontend

https://chromium-review.googlesource.com/c/chromium/src/+/1791150

this might just work for us. but might not because remote modules.


# Checkout latest Chromium code.
cd ~/chromium/src
git pull
git new-branch lh-roll-x.x.x
gclient sync
autoninja -C out/Release chrome blink_tests
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

how bad is this without goma?

Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

oh it's unbearable.

Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

woah I've never even heard of autoninja 😮


# Run tests and rebase.
yarn --cwd ~/chromium/src/third_party/blink/renderer/devtools test 'http/tests/devtools/audits/*.js' --reset-results
# Verify the changes are expected.
git diff

# Verify that the Audits panel still works. Consider the new features that have been added.
# If anything is wrong, stop releasing, investigate, and prioritize landing the PR.

# For bonus points, add some tests covering new features. Either a new test, or an extra
Copy link
Member

@brendankenny brendankenny Sep 23, 2019

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

if this is a priority we should figure out a way to have this done when new features land. Putting it here means either we'll never release because no one will want to take on the extra work or this will never be done :)

Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

New features usually come with a smoke test, so the day they run smoothly in all of our integrations, we get this for free.

# assertion in an existing test.

git cl upload --bypass-hooks
# Go to Gerrit, run CQ dry run, ensure the tests all pass.
```

Confirm Lightrider integration will work:
```sh
# See the internal README for updating Lighthouse.

# Test things out locally, if happy, deploy to canary and see how the graphs react. 20 minutes should be enough time.

# Do the stuff in "Test LR changes in Canary".
# go/lightrider-doc#test-lr-changes-in-canary

# Verify that Lightrider works properly, and is generating reports fully. Consider the new features that have been added.
# Note: if the changes include proto changes make sure that the API has those new fields.
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

can we automate this?

Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

maybe @exterkamp would be interested in doing this in the future

# If anything is wrong, stop releasing, investigate, and prioritize landing the PR.

# For bonus points, add some tests covering new features. Either a new test, or an extra
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

same as for devtools

# assertion in an existing test.
```

Now that the integrations are confirmed to work, go back to `lighthouse` folder.

```sh
# Run the tests again.
# Note: you can skip this if you didn't need to land any changes.
bash ./lighthouse-core/scripts/release/test.sh

# Prepare the commit, replace x.x.x with the desired version
bash ./lighthouse-core/scripts/release/prepare-commit.sh x.x.x

# Open the PR and await merge...
echo "It's been merged! 🎉"
echo "It's been merged! 🎉"

# Run the tests again :)
# One last test (this script uses origin/master, so we also get the commit with the new changelog - that commit should be HEAD).
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

should this step be run in pristine?

Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The release scripts cd to pristine. You always run them from a development checkout.

bash ./lighthouse-core/scripts/release/test.sh
# Package everything for publishing
bash ./lighthouse-core/scripts/release/prepare-package.sh
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Mention making a release in GH to get the x.x.x tag, which is required for prepare-package?

Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

That's not a required step for making a tag, the prepare-package script makes the tag. but I do need to add the whole "add GH Release" thing

Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

fwiw, this should also be a very easy automatable step given a GITHUB_KEY in your env variables.


# Make sure you're in the Lighthouse pristine repo we just tested.
cd ../lighthouse-pristine

# Publish to NPM
# Sanity check: last chance to abort.
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

should/can we add flags to these to get them to fail if somethings not right? i.e. we're looking for a porcelain git status and the master/tagged version commit in git log?

git status
git log

# Publish to npm.
npm publish

# Publish viewer
# Publish viewer.
yarn deploy-viewer

# Upload the extension
# Publish the extension.
open https://chrome.google.com/webstore/developer/edit/blipmdconlkpinefehnmjammfjpmpbjk
cd dist/extension-package/
echo "Upload the package zip to CWS dev dashboard..."
Expand All @@ -66,4 +155,17 @@ echo "Upload the package zip to CWS dev dashboard..."

# * Tell the world!!! *
echo "Complete the _Release publicity_ tasks documented above"

# Roll the tagged commit to Chromium and update the CL you made. Do not land, see next section.
# Roll the tagged commit to LR and land the CL.
```

### Chromium CL

If this is a branching week, wait until _after_ the branch point email, then land the CL.

Otherwise, you can land it immediately.

### The following Monday

Evaluate LR staging, if all looks good, promote to production!
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

any link here back to the comms around LR?