-
Notifications
You must be signed in to change notification settings - Fork 277
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
[Proposal] Branching strategy for build #1975
Comments
[Tirage] We will groom this issue and add appropriate acceptance criteria before moving to backlog. |
Update 2022/05/10: I have discussed with @dblock on branching with build repo and here are the thoughts. Two Options: 1. Branching within
2. Stay on main for
@bbarani @dblock please let me know about your thoughts. Thanks. |
I don't agree with the pros of (1), especially I think(2) is very clean and easy to understand! All the cons are "it's a bit of work". I recommend (2). |
@peterzhuamazon I still dont understand the exact scope of Option 2. Will the new opensearch-dist repo hold all the distribution / plugin specific scripts? The plugin teams will need to raise PR for making manifest related changes to opensearch-dist repo? I am trying to understand the boundary between opensearch-build vs opensearch-dist repo. We also need to focus on moving the component scripts to component repo itself from our build repo. |
From what I understood, we are already recommending the plugin teams to maintain plugin specific scripts inside their own repo, as this will allow more flexibility is building plugin specific tasks, now if we go with option 2 and if plugin's team maintains their own scripts and configuration, will this new repo There is another option we can consider.
Note: We can also organize views as
With this we dont need to touch the actual core logic of our current build system and need not maintain any additional repos. is there any other dependency that I have missed in our build-system (in actual core logic) that has hardcoded values to look for opensearch-build main branch ? |
The scope is hard to understand as the there are many different components with different purposes in the opensearch-build branch, please add a diagram/table of what exist and how its coupled to different systems, then how this will be updated with the selected proposed 'branching' changes. With this table it should be easier to identify what should be grouped together vs apart. Here are what could be a list of these components: pipeline jenkins scripts, opensearch manifest files, data-prepper manifests, default build scripts, custom build scripts, docker build scripts, other build processes (rpm?) |
There is an question of 'effort' with this change in process, I would recommend revisiting the last N changes into opensearch-build and then determine if they would go into a certain branch and how much work to manage them would be entailed (forward/back porting?) This would be useful in informing different segregation strategies. |
Build Repo Summarycomponents: The existing components within the opensearch-build repocentral-code(yes/no) : Denotes if the component is directly dependent of build ecosystem. required-branching(yes/no): Denotes if the component should be part of repo’s branching strategy. Git URL: component git code location.
|
Proposed Solution: Assumptions: All the distribution build jobs only depend upon Jenkins job configuration Solution Details: opensearch-build repo will actively maintain Scenario: 1 If a specific PR is an enhancement that can be used across the build-system, the PR should be merged to Scenario: 2 If a specific PR is limited to only specific version, then it’s allowed to directly merge to respective Workflow:
NOTE: From @peterzhuamazon suggestion, distribution jobs can be modified to have an input
|
Hey @dblock @peternied @bbarani @peterzhuamazon please add your thoughts to my above two comments. |
@peterzhuamazon in this case if we have to go with single job that can have |
@prudhvigodithi Thanks for the detailed breakout of the different areas of the repository and what you'd like to move.
The current organization of manifests has them in folders that are named, branching these files seems redundant? While these can move to another repo, the branch 'name' is effective a part of the naming scheme.
Why delete anything? We can never know if something is really unused or not, and deletion is not reversible. Deprecation/relegation to a static state is fine, but I would avoid any actual deletion activities. Could you restate what problem you are trying to solve in the Proposed Solution? Its hard to evaluate the scenarios without knowing what needs to be overcomed? |
Which product's versioning scheme is going to be used for branching and those Jenkins tabs? For example, is 2.0 the tooling for DataPrepper 2.0 or OpenSearch 2.0? I am afraid that after we create the proposed branching scheme we'll be back to square 1 where Data Prepper 2.0 wants newest tooling from OpenSearch 3.0 and we've just made things very confusing again. |
Hey @peternied, thanks for your thought, we dont need to maintain a separate repo, in above solution since we maintain
So my thought was, the release branches (
@peternied more than a problem I'm trying to propose a process of branching to the build repo, this will eventually solve problems of code being not compatible with release versions (current or future). Its not ideal to have entire development and release workflow on a single source of truth |
@dblock considering |
I think this isn't going to work. Let's say there's 1 year of development between OpenSearch 2.0 and DataPrepper 2.0. When you introduce a feature on main to build DataPrepper 2.0 it may be incompatible with building OpenSearch 2.0, so you cannot back-port it to the 2.x branch, because it will break a very old OpenSearch 2.0 build. My recommendation is to move any code that needs to branch with a product (e.g. docker scripts) to the products' repos, branch and version tooling in opensearch-build independently, move any Jenkinsfile's for each product into those product repos and refer to the specific versions of tooling from those Jenkinsfile's. |
My thought is If there's 1 year of development difference between OpenSearch 2.0 and DataPrepper 2.0 and both being build from To separate as products' repos is good thought. We can even consider exploring a tooling framework that can be used and imported with versions. |
I agree that the current situation of everything on main isn't great. My opinion is that the branching strategy proposed creates many main's, so it's net worse. Thanks for a good discussion, thought, I am just trying to help, do what you think will work best! |
Hey going forward with solution posted above, closing this issue and will open a new META issue with proper breakdown of tasks and once done will link back here. |
Is your feature request related to a problem? Please describe
As we move towards next major release, more breaking changes will be introduced in the repo with respect to distribution.
This is fine for major versions, however as of today our build workflows checkout main branch of this repository (hard coded) for any upcoming release.
For example, if we are releasing 1.3.2 (upcoming) and 2.0.0-rc1 changes going actively in main, there might be breaking changes introduced unintentionally when it comes to distribution consumed by our customers. We do not have proper checks in place to detect this today.
The enhancements and features of next major release should not impact the minor releases of previous version.
Describe the solution you'd like
Follow standard branching strategy like other components, where 1.3.2 should be released using 1.3 branch.
This would involve decoupling of build workflows with main branch.
Acceptance Criteria
Describe alternatives you've considered
No response
Additional context
No response
The text was updated successfully, but these errors were encountered: