-
Notifications
You must be signed in to change notification settings - Fork 562
Conversation
### Step 3: Tag and Create a Release | ||
|
||
TBD | ||
|
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
@jchauncey do you have a lightweight recommendation for using CI to do this?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
So typically you have a foo-release
job and watches for pushed tags to a repo. You can then build whatever artifact you want and with that given tag.
### Step 4: Close GitHub Milestones | ||
|
||
TBD | ||
|
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Will flesh this out a bit later, before merging this PR.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
We have used our "seed-repo" job in the past to close milestones and keep the labels in sync with each other.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Considering it's a single repo (just acs-engine) do you think that'd be helpful here?
First crack at a release process. Please take a gander and comment. Thanks! cc @anhowe @rgardler @dmitsh @lachie83 @jchauncey @sgoings |
@ritazh @wbuchwalter would love your thoughts as well. |
Great stuff, two questions:
|
Master development will largely continue as it already does. Releases will occur monthly, driven by milestones defined in GitHub. Release milestones follow the roadmap toward
Patch fixes can happen at any time, based on need. We're using SemVer for version numbers, which works like:
I think this would be harder, actually. Trunk-based development (committing to master) discourages long-lived development branches to avoid merge hell and broken builds. |
Yeah you really really want to avoid long running "feature/dev" branches in this workflow. So we are constantly merge into master. Lets say that we find a bug we need to fix today and do an immediately release for. The workflow would look something like the following:
This process can keep going for subsequent PATCH releases and even works if we need to port fixes onto older releases (for whatever reason that occurs). |
Totally missed the SemVer part in your first explanation, makes sense. 👍 Forget what I said about git flow then. |
Folks, I'm planning to merge this to get us moving. We'll adjust the process as we learn what works bests. |
LGTM. But I don't have much experience on this sort of things so I'm not going to approve so someone else needs to look at this as well. @colemickens @anhowe @sgoings can any of you approve/look? |
If I have a multi week feature that I am working on: is the proposal there are regular merges into master for that? What if a release was scheduled for say 6/15 but the feature is not ready (but other features are)? How do will commit be picked for being tagged as a version? Will the partial change for a feature in development still be released? |
It largely depends on how you want to divide up the feature development. Lets say its a sufficiently large feature then we might put it behind some type of conditional flag with it off by default. This wya we can continue to merge and ship off master without it being live. Then when the feature is ready for use we turn it on by default. If a release was scheduled for 6/15 and we arent ready for people to use it then we should still be able to ship. Nothing should ever block master from being released (in theory ;)) |
In theory, yes :). I am using a feature flag so its hidden even today. My question/concern is around shipping partial code/feature that might not have been fully tested. In theory nothing should even hit the code path of a new feature but that's not always the case. I am in favor of one branch approach but its not without risks. |
Sure there are risks but we can definitely minimize those. Feature flags help a lot and for areas where we are refactoring code and removing functionality in favor or something else we should have adequate test coverage to validate something is ok to merge. |
These are great questions, so let's unpack this a bit.
Yes, and feature flags are a great way to enable this. This allows you as the engineer working on the long-running feature to stay current with HEAD without fear that the code path can hit your still-in-development work. As a corollary, I'm want to encourage us to seek to deliver value in chunks. If a feature is large and complex, break the feature down into discrete deliverables and put them behind feature flags. You can see an example of the "smallest thing that adds value" mindset in Lachie's issue about creating a separate etcd cluster:
The feature as a whole is "dedicated etcd cluster" which is a lot of work until it would be complete. We can provide value to users right away and avoid merge conflict hell by merging each portion to master as it is completed. Use feature flags to rapidly iterate without jeopardizing safety.
Core to our ability to ship software at a regular cadence is planning. Periodically maintainers will meet—every month is what I proposed—to identify goals for the next version milestone. We do our best to estimate what we think we can get done. If we're wrong—say a feature was slated for the
Use feature flags. We want to constantly be delivering value and providing guardrails to ensure safety. This includes tests, linting, CI, and code review. If a commit can pass all of these gates and is behind a feature flip, then we have great confidence that the change set can be committed in a safe fashion.
I've heard this fear many times in my career and can assure you there is no magic to making it work: a conditional evaluates to either true or false. If you have code behind feature flag that is only evaluated by the Go lexer if the feature flag conditional is true, it can't be executed unless it passes the truth test. We can increase our confidence that this is all true by ensuring we include unit and functional tests at every opportunity. When something breaks—CI or a regression is actually released—we update our automated tests to catch that from happening again. We create a delivery pipeline that all code must pass through before being committed:
|
Makes sense. Thanks! Having done this before I understand that testing and CI are important. Although no fear involved here :) . I want to make sure I understand the proposal as it relates to my work and finding a good balance between quality and agility.
As mentioned code is behind a condition so we should be good. And based on my experience it not always possible to write that can be just cleanly put behind a condition and turned off. There is possibility of some interactions/intersections between old and new code in some code paths. |
@seanknox - very well put. Working at Rally Software showed me how powerful Agile principles are when properly applied. It's not necessarily about dogma. It's about a spirit of partnership with the customer where delivery is as rapid as possible so course-correcting feedback can be reconciled with the plan. And, in every action, is the curiosity about how we might do it better next time. These two driving forces coupled with some of the practices you mentioned above can positively transform the entire landscape of development processes. |
Great discussion! Completely agree with the approach.
We should probably start from this. Creating issues where we are currently missing tests. Most of the tests today are around templates.
I'm sure there is already discussions around CI. As a developer, it would be really nice to be able to see which tests caused the CI to fail (especially the E2E tests and logs) and be able to fix it without bugging the maintainers. 😄 |
@ritazh love your idea to track gaps in test coverage. Would you mind opening an issue around missing coverage you're aware of?
Great observation. We're seeking to make CI public for this very reason. |
docs/roadmap/roadmap.md
Outdated
## CI dashboard available to the public | ||
## Native Azure VNET CNI support | ||
## Multi-GPU support | ||
## Support for dedicated etcd cluster VMs |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Can we instead replace the above 4 items with a "feature" issue tag.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Per our discussion over using the wiki to track Roadmap, I'm going to delete this roadmap.md
file.
This section leads a maintainer through creating an acs-engine release. | ||
|
||
### Step 1: Assemble Master Changelog | ||
A change log is a file which contains a curated, chronologically ordered list of changes |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Is the changelog generation automated?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
It probably should be, though we'd want to adopt semantic commit messages to ensure commits are in a format useful for the changelog. @jchauncey thoughts?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
We have a changelog generator script that can make pretty changelogs but you must follow a commit style for it to work.
But it generates them to look like this - https://github.com/deis/workflow/releases/tag/v2.13.0
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Roger that, then no need to specify in this PR. FWIW, I have another PR around enforcing go conventions which includes using semantic commits.
|
||
When showstopper-level bugs are found, the process is as follows: | ||
|
||
1. Create an issue that describes the bug. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
write a test that covers the test gap?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I like it. Will update.
docs/roadmap/planning-process.md
Outdated
|
||
## Release Planning Meetings | ||
|
||
Major decisions affecting the Roadmap are discussed during Release Planning Meetings on the first Thursday of each month, aligned with the [Release Schedule][]. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
These would also be aligned with the monthly objectives.
docs/roadmap/planning-process.md
Outdated
@@ -0,0 +1,28 @@ | |||
# Planning Process | |||
|
|||
acs-engine features a lightweight process that emphasizes openness and ensures every community member can be an integral part of planning for the future. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Maybe delete this sentence (further description in slack)
docs/roadmap/planning-process.md
Outdated
|
||
## The Role of Maintainers | ||
|
||
[Maintainers][] lead the acs-engine project. Their duties include proposing the Roadmap, reviewing and integrating contributions and maintaining the vision of the project. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
We need to include the current roles covered by the "GitHub Issues" Role, and the "GitHub Code Review" role.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
lgtm, please answer the comments/questions, then it should be good
LGTM. My only opinion would be that for the initial In other words, in my view, the purpose of this upcoming release is exclusively to "package" the existing code into a rational, versioned, process-approved publication. Great work! |
Well said @jackfrancis. I removed the FWIW, the "stretch" goals listed will assuredly be part of the release. In fact, 2 of them are already merged and GPU support is close behind. |
Background
A constant pain point for acs-engine users and internal teams at Microsoft using acs-engine has been lack of clearly defined versions that can be tracked for stability and feature completeness. Now that the project has agreed to use SemVer for version numbers, I'm proposing the following possible approach in defining releases of acs-engine.
For the first release, I propose the following:
v1.0.0
release.v0.1.0
, using GitHub Milestonesv0.1.0
release kick off automated release testingGoing forward, the release process would be:
This change is
Fixes #55