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: Add release process details and workflow #353

Merged
merged 5 commits into from
Feb 16, 2021

Conversation

placer14
Copy link
Contributor

Documentation of the release process I follow for visor so others may participate.

@placer14 placer14 added the kind/chore Technical debt due to be resolved label Jan 13, 2021
@placer14 placer14 requested review from iand and frrist January 13, 2021 22:00
@placer14 placer14 self-assigned this Jan 13, 2021
@placer14 placer14 force-pushed the mg/docs/update-release-process branch from 4814387 to adb6b49 Compare January 13, 2021 22:02
@placer14 placer14 force-pushed the mg/docs/update-release-process branch from adb6b49 to dd8d5dd Compare January 13, 2021 22:04
Copy link
Member

@frrist frrist left a comment

Choose a reason for hiding this comment

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

Perhaps the release process deserves its own file?

I generally expect README's to contain tips on getting started, a couple usage examples, and pointers for contributing -- short and sweet. Since publishing a release is the responsibility of maintainers I'd be okay with it moving to its own document.

README.md Outdated
git checkout master
git pull # checkout/pull latest master
git checkout -b vx.x.x-release # create release branch
vi CHANGELOG.md # update CHANGELOG.md
Copy link
Member

Choose a reason for hiding this comment

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

Should git-chglog be used for this step (and the hotfix)? Could mention the make command for it as well.

Copy link
Contributor Author

Choose a reason for hiding this comment

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

I don't know if the make command is useful as this workflow requires providing arguments (to define the next tag being created within --next-tag arg) which make requires envvars for. I'm considering removing the target from the makefile and letting the doc stand alone.

Copy link
Member

Choose a reason for hiding this comment

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

In favor of dropping the makefile target.

Copy link
Contributor

@iand iand left a comment

Choose a reason for hiding this comment

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

Meta question: why isn't cutting a release as simple as tagging master once the changelog has been updated?

I think the current method is process heavy and more complex than we need at this stage of development. I'd like to see us tagging minor releases every few day and deploying them, which means keeping a lightweight approach for as long as possible.

I'd also like to avoid having long lived version branches with hotfixes. Unless it's unavoidable we should prefer to fix in master and increment the patch version.

The main friction is the schema version. We should be very clear in the changelog when a schema version changes and whether it is destructive or breaking.

README.md Outdated
git checkout -b vx.x.x-release # create release branch
vi CHANGELOG.md # update CHANGELOG.md
make visor # validate build
go mod tidy # ensure tidy go.mod for release
Copy link
Contributor

Choose a reason for hiding this comment

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

tidy should be done before build so the build uses the exact same versions as specified in go.mod/go.sum. Ideally go build should be run with -mod=readonly so it doesn't change the files. This is the new default in the upcoming version of Go.

@iand
Copy link
Contributor

iand commented Jan 14, 2021

As a follow-on thought: a new schema version should always result in at least a minor version increment.

@placer14
Copy link
Contributor Author

placer14 commented Jan 14, 2021

why isn't cutting a release as simple as tagging master once the changelog has been updated?

I've made the following assumptions:

  1. That release candidates are a worthwhile step in validating our release. (Primarily because the feature set in the RC is pinned within the branch and does not move unless done so explicitly.)
  2. Deltas between release candidates should ONLY include fixes and not features or interface changes. (To ensure that prior validation performed on the RC has minimal opportunity to regress from other major changes applied.)

If we simply tag latest master, there is no guarantee of the 2nd assumption being true.

@iand
Copy link
Contributor

iand commented Jan 14, 2021

why isn't cutting a release as simple as tagging master once the changelog has been updated?

I've made the following assumptions:

1. that release candidates are a worthwhile step in validating our release.

2. I also believe that deltas between release candidates should ONLY include fixes and not features or interface changes.

If we simply tag latest master, there is no guarantee of the 2nd assumption being true.

I think release candidate management is a complexity that we don't need yet. We don't have a pattern of regular releases to base our decisions on nor do we have a good enough testing regime to be confident of catching regressions or problems in a release candidate. This is made even more difficult if a candidate involves a breaking schema change.

At the moment I don't feel we have any release momentum and each release seems to involve a huge amount of work.

At this stage of our development I think we should be more flexible and responsive. Tag minor releases regularly and attempt deployment as soon as we tag. Prefer to roll forward, fixing issues in a new minor release. Roll back only if there is no choice.

@placer14
Copy link
Contributor Author

I fully support a leaner release cycle, but also note that we are adding many dependencies onto the schema outputs of visor. I am looking for room in the release process to validate these dependencies (automatically or otherwise). That said, I can be satisfied with defaulting to the fast path until it becomes too painful.

@frrist frrist mentioned this pull request Jan 26, 2021
@placer14
Copy link
Contributor Author

Update with feedback applied. Looking for one last review since we're discussing process here.

@placer14 placer14 requested review from frrist and iand February 12, 2021 17:39
@@ -0,0 +1,29 @@
# Schema Migrations

The database schema is versioned and every change requires a migration script to be executed. See [storage/migrations/README.md](storage/migrations/README.md) for more information.
Copy link
Member

Choose a reason for hiding this comment

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

The migration link 404's for me, but maybe it's a PR/formatting thing?

Copy link
Contributor Author

Choose a reason for hiding this comment

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

Good catch!

Copy link
Member

@frrist frrist left a comment

Choose a reason for hiding this comment

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

LGTM!

@placer14 placer14 merged commit c09eb82 into master Feb 16, 2021
@placer14 placer14 deleted the mg/docs/update-release-process branch February 16, 2021 22:52
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
kind/chore Technical debt due to be resolved
Projects
None yet
Development

Successfully merging this pull request may close these issues.

3 participants