StoryBoard task branch support
Spec describing how branch-specific tasks could be implemented in StoryBoard. Change-Id: Ib02baca0044894712fd5057718b83ca853c53b5d
This commit is contained in:
parent
4e3ab2f8b2
commit
e2cb246877
179
specs/storyboard_task_branches.rst
Normal file
179
specs/storyboard_task_branches.rst
Normal file
@ -0,0 +1,179 @@
|
||||
::
|
||||
|
||||
This work is licensed under a Creative Commons Attribution 3.0
|
||||
Unported License.
|
||||
http://creativecommons.org/licenses/by/3.0/legalcode
|
||||
|
||||
..
|
||||
This template should be in ReSTructured text. Please do not delete
|
||||
any of the sections in this template. If you have nothing to say
|
||||
for a whole section, just write: "None". For help with syntax, see
|
||||
http://sphinx-doc.org/rest.html To test out your formatting, see
|
||||
http://www.tele3.cz/jbar/rest/rest.html
|
||||
|
||||
===============================
|
||||
StoryBoard support for branches
|
||||
===============================
|
||||
|
||||
StoryBoard needs to support branch-specific tasks in order to be usable for
|
||||
OpenStack bug tracking.
|
||||
|
||||
|
||||
Problem description
|
||||
===================
|
||||
|
||||
Rationale
|
||||
---------
|
||||
|
||||
StoryBoard is a task tracker, and its main use case is the ability
|
||||
to track resolution of a specific issue (story) across multiple teams.
|
||||
|
||||
Most OpenStack projects maintain stable/* branches. A few of them use feature
|
||||
branches. As we near release, projects make use of temporary proposed/*
|
||||
branches. All bugs need to be fixed in the master branch, but some of them
|
||||
will also need to be fixed in other branches, and that involves the work of a
|
||||
lot of separate subteams. So we need the ability to track tasks across
|
||||
branches (bugfix or vulnerability fix backports) as much as we need to
|
||||
track tasks across projects.
|
||||
|
||||
|
||||
Historical usage
|
||||
----------------
|
||||
|
||||
Launchpad supports series-specific tasks, which can be used to emulate branch
|
||||
support. A series in Launchpad is like a release cycle ("juno", "kilo") which
|
||||
contains multiple release "milestones". By default in Launchpad a task applies
|
||||
to the series under development, but you can create series-specific tasks
|
||||
to target past series. An example of that can be seen at:
|
||||
|
||||
https://bugs.launchpad.net/keystone/+bug/1354208
|
||||
|
||||
That said, Launchpad implementation becomes very confusing because you can
|
||||
also explicitly create a task targeting the current series, in which case
|
||||
the main task is disabled with a confusing "status tracked in..." message.
|
||||
|
||||
|
||||
Proposed change
|
||||
===============
|
||||
|
||||
Project names and git repository links
|
||||
--------------------------------------
|
||||
|
||||
Currently the project names are used for two different things. They represent
|
||||
the project name in StoryBoard views and dropdowns, and they specify the name
|
||||
of the git repository that is associated with that project.
|
||||
|
||||
This dual meaning results in confusion when StoryBoard is used to support
|
||||
projects that are not backed by a code repository, in a general waste of
|
||||
UI space (due to the mention of the GitHub organization in the project name),
|
||||
and in the inability to have projects in different git servers (all projects
|
||||
are assumed to come from git.openstack.org).
|
||||
|
||||
Since for branch support we'll need to be able to query git repositories for
|
||||
their branches, this sounds like the right moment to specify the git
|
||||
repository location separately from the project name.
|
||||
|
||||
Task branches
|
||||
-------------
|
||||
|
||||
Projects in StoryBoard may define multiple task branches. Each project has
|
||||
at least one task branch (called "master"). If a project has only one task
|
||||
branch, the UI should optimize and ignore that concept altogether, to
|
||||
simplify the views.
|
||||
|
||||
If a project is linked to a git repository, task branches may be created
|
||||
automatically from branches defined in that git repository (using for example
|
||||
a daily cron job). Each project may opt to have task branches autocreated
|
||||
from its code repository branches. This should not prevent them from manually
|
||||
creating an additional task branch.
|
||||
|
||||
Task branches should be able to expire: they would still show in past tasks,
|
||||
but you would not be able to select them for new tasks. Deleted branches
|
||||
would automatically result in expired task branches.
|
||||
|
||||
Note that the task branch concept degrades gracefully for non-code projects,
|
||||
which can opt to manually define several areas of work as task branches, or
|
||||
ignore the concept altogether and use the default branch.
|
||||
|
||||
|
||||
Implementation
|
||||
==============
|
||||
|
||||
Implementation details should be left to the person that would do the
|
||||
implementation work. What follows is just a suggestion.
|
||||
|
||||
The Project table would have two new columns:
|
||||
|
||||
* 'code_repo', which would hold a URL describing the code repository,
|
||||
like git://git.openstack.org/openstack/nova
|
||||
|
||||
* 'autocreate_branches', which would tell StoryBoard to try to create task
|
||||
branches automatically from the branches declared on that code repository
|
||||
|
||||
A new Branch table would be created, with the following columns:
|
||||
|
||||
* 'project_id', mapping to the owner project
|
||||
|
||||
* 'branch_name', with the name of the task branch
|
||||
|
||||
* 'creation_date', date of creation
|
||||
|
||||
* 'expired', a binary flag that marks branches that should no longer be
|
||||
selectable in tasks
|
||||
|
||||
* 'expiration_date', last date the expired flag was switched to True
|
||||
|
||||
* 'autocreated', a flag that marks autocreated entries, so that they can
|
||||
be auto-expired when the corresponding branch is deleted in the git repo
|
||||
|
||||
By default, all projects would start with a single "master" branch.
|
||||
|
||||
The Task table would have one new column:
|
||||
|
||||
* 'task_branch', which would point to the affected branch in the project.
|
||||
Defaults to the 'master' branch for that project.
|
||||
|
||||
The UI would show the 'branch' only if multiple different branches are
|
||||
defined in the project, saving valuable horizontal space for projects that
|
||||
don't have a use for this concept.
|
||||
|
||||
Assignee(s)
|
||||
-----------
|
||||
Primary Assignee:
|
||||
TBD
|
||||
|
||||
Work Items
|
||||
----------
|
||||
TBD
|
||||
|
||||
Repositories
|
||||
------------
|
||||
No new repositories.
|
||||
|
||||
Servers
|
||||
-------
|
||||
No new servers.
|
||||
|
||||
DNS Entries
|
||||
-----------
|
||||
No new DNS entries.
|
||||
|
||||
Documentation
|
||||
-------------
|
||||
TBD
|
||||
|
||||
Security
|
||||
--------
|
||||
Manual branch creation should be restricted to an admin set of users, to
|
||||
avoid accidental or spurious creation of project branches.
|
||||
|
||||
Testing
|
||||
-------
|
||||
TBD
|
||||
|
||||
|
||||
Dependencies
|
||||
============
|
||||
|
||||
This proposal is not dependent on any other, but it is a prerequisite for
|
||||
task milestone or story type support.
|
Loading…
Reference in New Issue
Block a user