Add presentation about gerrit change workflows Change-Id: I9b749cb48bb901ac15fb94b87dd37d700026f026
diff --git a/presentations/gerrit-change-workflow/gerrit-change-workflows.txt b/presentations/gerrit-change-workflow/gerrit-change-workflows.txt new file mode 100644 index 0000000..4ee998b --- /dev/null +++ b/presentations/gerrit-change-workflow/gerrit-change-workflows.txt
@@ -0,0 +1,380 @@ += Gerrit Change Workflows, David Ostrovsky +:backend: slidy +:max-width: 70em + +[[title-page]] + +== Gerrit Change Workflows +=== David Ostrovsky +==== Gerrit User Conference +===== Palo Alto, 2018 + +== Outline + +* Standard change workflow +* Custom change workflow +* Draft change workflow +* Work In Progress (WIP) workflow proposed by OpenStack project (2012) +* Allow to disable Draft change workflow in Gerrit core +* WIP plugin (2013) and its limitation +* Alternative implementations of WIP workflow in Gerrit core +* Gerrit adoption by Chromium project in mid 2017 +* WIP workflow details +* Replace Draft change workflow with WIP and Private Change workflows +* Migration from earlier Gerrit versions + +== Standard Gerrit change workflow / 1 + +=== Pre-Submit code review workflow + +---- + $ git push origin HEAD:refs/for/master +---- + +image:./imgs/change_workflow_pre_submit.png[] + +== Standard Gerrit change workflow / 2 + +=== Post-Submit code review workflow (supported since 2.14) + +---- + $ git push origin sha1:refs/for/master%merged +---- + +image:./imgs/change_workflow_post_submit.png[] + +== Custom change workflow / 1 + +* Gerrit doesn't provide (yet) workflow engine, now what? + +[role="incremental"] + +image:./imgs/change_workflow_custom.png[] + +== Custom change workflow / 2 + +* There is no supported way to do that directly with change states +** We don't consider forking Gerrit as a viable option ;-) + +* Use issue tracker system, that supports custom workflows +** Link Gerrit change to the corresponding issue + +== Custom change workflow / 3 + +* Write a plugin to track the custom workflow +* e.g.: verify-status plugin uses database to store verification details + +== Draft change workflow / 1 + +- Not yet ready changes +- Only visible for reviewers + +---- + $ git push origin HEAD:refs/drafts/master +---- + +image:./imgs/draft_change_workflow.png[] + +== Draft change workflow / 2 + +- Can draft change be abandoned and restored? + +[role="incremental"] + +- Yes, it could, but the DRAFT state would be lost: ++ +image:./imgs/draft_change_abandoned_workflow.png[] + +== Draft change workflow / 3 + +- Add new change state ABANDONED_DRAFT to rectify: + +image:./imgs/draft_change_workflow_draft_abandoned.png[] + +== Draft patch set workflow + +---- + $ git push origin HEAD:refs/for/master + <amend the commit> + $ git push origin HEAD:refs/drafts/master +---- + +image:./imgs/draft_patch_set_workflow.png[] + +== Disadvantages of draft change workflow + +* Visibility constraint is orthogonal to Work In Progress attribute +* Once published, there is no way to flip DRAFT status again +** this is needed when reviewers identifed issues, that need to be addressed +* User often consfused with draft change workflow: +** draft change and draft patch set +** deletion of draft changes vs. draft patch sets + +== Work In Progress (WIP) workflow from OpenStack project + +- WIP state suggested in 2012 by David Shrewsbury from Open Stack project +- link:https://gerrit-review.googlesource.com/c/gerrit/+/36091[Add Work In Progress state to Gerrit] + +image:./imgs/work_in_progress_workflow.png[] + +== Combined WIP workflow with DRAFT workflow + +- WIP and Draft change workflow are overlapping workflows: + +image:./imgs/draft_and_work_in_progress_workflow.png[] + +== Allow to disable draft workflow in Gerrit core + +* Add `change.allowDrafts` option to disable draft workflow +** No upload of drafts per push to `refs/drafts/master` +** No publish and deletion actions for a change +* As the consequence of this setting DRAFT change state is unused + +== WIP plugin: abuse DRAFT change state + +* WIP plugin is created in 2013, that implements WIP workflow +* Only usable when `change.allowDrafts` is set to `true` on gerrit site + +image:./imgs/work_in_progress_workflow_as_wip_plugin.png[] + +== WIP Plugin: Show regular change + +* Reviewers can see change on their dashboard: + +image:./imgs/changes_are_shown.png[] + +== WIP Plugin: Flip WIP bit on a change + +* Set `DRAFT = true` from wip-plugin's UI action: + +image:./imgs/mark_as_wip.png[] + +== WIP Plugin: WIP changes are filtered out on reviewer's dashboards + +* WIP change are hidden on reviewer's dashboards: + +image:./imgs/filtered_wip_changes.png[] + +== WIP Plugin: Flip ready bit on a change + +* Set `DRAFT = false` from wip-plugin's UI action: + +image:./imgs/mark_as_ready.png[] + +== Disadvantages of WIP plugin + +* Draft change workflow must be disabled +* Cannot upload a change as WIP +* Notifications for WIP changes: Firehose is not turned off +* Stream events are not implemented + +== Alternative considered to WIP workflow (in core or as a plugin) + +* Dedicated label can be used, with vote permission granted to change owner only +** combined with customized dashboard to filter out negative votes on this label +* Abuse existing label +** CRVW and interpret the blocking-Vote of change owner as virtual WIP state. +* Assignee workflow: assign change directly to owner or reviewer +* Change edits can be used to hide notifications, but there are disadvantages +** Certain code review features aren't available on change edits: +*** Change edits cannot be shared with other reviewers +*** like review comments from CI or static analysis; +*** Updating change edit would override the existing ref + +== Gerrit adoption by Chromium project in mid 2017 + +* Poorer notification control compared to Rietveld: +** link:https://bugs.chromium.org/p/gerrit/issues/detail?id=4489[Issue 4489 Provide control over when a review starts and reviewers are notified] +** link:https://bugs.chromium.org/p/gerrit/issues/detail?id=4390[Issue 4390 Provide e-mail notification (notify section) for when review is requested] +** link:https://bugs.chromium.org/p/gerrit/issues/detail?id=4673[Issue 4673 Reduce too frequent email notifications to CC list and Reviewers] + +* Solution: WIP workflow to address these problems + +== Work In Progress workflow: Overview + +* link:https://gerrit-review.googlesource.com/c/gerrit/+/97245[Proposal: Work In Progress workflow] +* Software development is all about communication +** Gerrit should streamline the communication process: +*** make the next action to take obvious for all participants +*** make it clear to a reviewer when their attention on a change is needed +*** without requiring the reviewer to scan the content of a change in order to make a judgment call +* Avoid spamming reviewers with not ready changes: +** Notifications +** Dashboards + +== WIP workflow: Implementation +* Use change attribute: "WIP" instead of change state "WIP" + +image:./imgs/work_in_progress_workflow_in_core.png[] + +== WIP workflow: Mark as work in progress - button + +image:./imgs/mark_as_wip_button.png[] + +== WIP workflow: Start Review - button + +image:./imgs/start_review_button.png[] + +== WIP workflow: Use "Save" button to publish comments without moving the change out of WIP + +image:./imgs/start_review_save_button.png[] + +** The workflow really could use a major UX refresh + +== WIP workflow: ACL to flip the WIP state to ready + +* Change owner +* Gerrit Administrators +* Project Owners + +== WIP workflow: Push options + +* Push Option: + +---- + $ git push -o wip origin HEAD:refs/for/master + $ git push origin HEAD:refs/for/master%wip +---- + +== WIP workflow: Notification impact + +* Actions that create a new patch set in a WIP change default to notifying *OWNER* +* Actions that add a reviewer or CC to a WIP change default to notifying *NONE* +* Abandoning a WIP change defaults to notifying *OWNER_REVIEWERS* +* Reviewing a WIP change defaults to notifying *OWNER* + +== WIP workflow: Dashboard + +* There is a new section for *Work in progress* changes +** The underlying query is for WIP changes owned by the user. +* The query driving the existing *Incoming reviews* section +** substracts WIP changes from the results + +== WIP workflow: Search + +* WIP Change subtruction from `reviewer:self` predicate: + +[source,java] +---- + if ("reviewer".equalsIgnoreCase(value)) { + return Predicate.and( + Predicate.not(new BooleanPredicate(ChangeField.WIP)), + ReviewerPredicate.reviewer(args, self())); + } +---- + +* Feature requests: link:https://bugs.chromium.org/p/gerrit/issues/detail?id=9902[issue 9902]: allow search for WIP changes for specific reviewers +* Consider to change the `reviewer:self` predicate definition: +---- + reviewer:self -is:wip +---- + +== WIP workflow: Always push as WIP per user setting + +* Add user option to upload changes as WIP per default: + +image:./imgs/new_change_as_wip_per_default.png[] + +== WIP workflow: Always push as WIP per project setting + +* Add config option to upload changes for a project as WIP per default: + +---- +[change] + workInProgressByDefault = true +---- + +* Controls whether all new changes in the project are set as WIP by default. +* This setting can be overridden: +** if the `workInProgress` field in ChangeInput entity is set to `false` explicitly when creating change per REST API +** if the `ready` PushOption is used during the Git push. ++ +* Default is `INHERIT`, which means that this property is inherited from +the parent project. + +== WIP workflow: Always mark as WIP for changes created in browser + +* Inline change implementation creates empty changes +* Empty changes are WIP per definition + +== Releasing WIP workflow + +* In addition to Draft change workflow or instead of Draft change workflow? +* Both workflows have similarities and differences +* Concluson: Discontinue Draft change worklfow + +== Discontinue Draft change workflow + +* WIP workflow: not readiness of the changes is orthogonal to the visibility constraints of Draft change workflow +* Draft change workflow cannot be replaced with WIP workflow +* Now what? + +== Private change workflow + +* Implement Private change workflow for visibility constraint' part of Draft change workflow: + +image:./imgs/work_in_progress_workflow_and_private_change_workflow_in_core.png[] + +== Migration strategy from earlier Gerrit versions to 2.15 (Schema_159) + +* Draft changes are migrated to WIP or Private changes +* Draft patch sets migrated to regular changes or private changes +* Default to WIP changes (this was flipped recently): + +---- + [...] +Migrating data to schema 158 ... + > Done (0.000 s) +Migrating data to schema 159 ... +Migrate draft changes to private changes (default is work-in-progress) [y/N]? +Replace draft changes with work_in_progress changes ... +done + > Done (7.917 s) + [...] +---- + +== Caution with Draft changes migration to Private changes strategy + +* Changes with Draft patch sets are migrated to private changes +** Risk to mark substantial amount of merged and abandoned changes as +*`private` and thus make them non visible +* Workaround is to search for changes that were inadvertently marked as `private` and unmark them: + +---- + owner:self is:private +---- + +== Left over from removal of Draft change workflow + +* Because of dependency of some external tools `refs/drafts/master` is preserved +** with the follow semantic: + +---- + git push origin HEAD:refs/drafts/master # 1 + <amend 1> + git push origin HEAD:refs/drafts/master # 2 + <amend 2> + git push origin HEAD:refs/drafts/master # 3 +---- + +* 1. Creates private change +* 2. Creates change edit +* 3. Overwrites change edit + +== Thank you + +*David Ostrovsky* + +Mainatainer, Gerrit Code Review + +++++ +<style type="text/css"> +#title-page { + border-bottom: 0; + text-align: center; + position: relative; + top: 30%; + font-size: 60px; +} +</style> +++++
diff --git a/presentations/gerrit-change-workflow/imgs/change_workflow_custom.dot b/presentations/gerrit-change-workflow/imgs/change_workflow_custom.dot new file mode 100644 index 0000000..9ded00e --- /dev/null +++ b/presentations/gerrit-change-workflow/imgs/change_workflow_custom.dot
@@ -0,0 +1,21 @@ +digraph change_workflow_custom { +start -> NEW [ label="push" fontname=Verdana fontsize=12, style=filled, color="#31CEF0" ] +NEW -> MERGED [ label="submit" fontname=Verdana fontsize=12, height=0.02, width=0.02, shape=Mrecord, style=filled, color="#31CEF0"]; +MERGED -> INTEGRATION [ label="deploy INT" fontname=Verdana fontsize=12, height=0.02, width=0.02, shape=Mrecord, style=filled, color="#31CEF0"]; +INTEGRATION -> ACCEPTANCE [ label="deploy ACCEPT" fontname=Verdana fontsize=12, height=0.02, width=0.02, shape=Mrecord, style=filled, color="#31CEF0"]; +ACCEPTANCE -> PRE_PROD [ label="deploy PRE_PROD" fontname=Verdana fontsize=12, height=0.02, width=0.02, shape=Mrecord, style=filled, color="#31CEF0"]; +PRE_PROD -> PROD [ label="deploy PROD" fontname=Verdana fontsize=12, height=0.02, width=0.02, shape=Mrecord, style=filled, color="#31CEF0"]; +PROD -> end [ fontname=Verdana fontsize=12, style=filled, color="#31CEF0" ] +NEW -> ABANDONED [ label="abandon" fontname=Verdana fontsize=12, height=0.02, width=0.02, shape=Mrecord, style=filled, color="#31CEF0"]; +ABANDONED -> NEW [ label="restore" fontname=Verdana fontsize=12, height=0.02, width=0.02, shape=Mrecord, style=filled, color="#31CEF0"]; + +start [shape=Mdiamond fontname=Verdana, fontsize=10, height=0.02, width=0.02, style=filled, color="#31CEF0"]; +end [shape=Msquare fontname=Verdana, fontsize=10, height=0.02, width=0.02, style=filled, color="#31CEF0"]; +NEW [fontname=Verdana, fontsize=10, height=0.02, width=0.02, shape=Mrecord, style=filled, color="#31CEF0"] +ABANDONED [fontname=Verdana, fontsize=10, height=0.02, width=0.02, shape=Mrecord, style=filled, color="#31CEF0"] +MERGED [fontname=Verdana, fontsize=10, height=0.02, width=0.02, shape=Mrecord, style=filled, color="#31CEF0"] +INTEGRATION [fontname=Verdana, fontsize=10, height=0.02, width=0.02, shape=Mrecord, style=filled, color="#31CEF0"] +ACCEPTANCE [fontname=Verdana, fontsize=10, height=0.02, width=0.02, shape=Mrecord, style=filled, color="#31CEF0"] +PRE_PROD [fontname=Verdana, fontsize=10, height=0.02, width=0.02, shape=Mrecord, style=filled, color="#31CEF0"] +PROD [fontname=Verdana, fontsize=10, height=0.02, width=0.02, shape=Mrecord, style=filled, color="#31CEF0"] +}
diff --git a/presentations/gerrit-change-workflow/imgs/change_workflow_post_submit.dot b/presentations/gerrit-change-workflow/imgs/change_workflow_post_submit.dot new file mode 100644 index 0000000..7e5cec5 --- /dev/null +++ b/presentations/gerrit-change-workflow/imgs/change_workflow_post_submit.dot
@@ -0,0 +1,8 @@ +digraph change_workflow_post_submit { +start -> MERGED [ label="push" fontname=Verdana fontsize=12, height=0.02, width=0.02, shape=Mrecord, style=filled, color="#31CEF0"]; +MERGED -> end [ fontname=Verdana fontsize=12, style=filled, color="#31CEF0" ] + +start [shape=Mdiamond fontname=Verdana, fontsize=10, height=0.02, width=0.02, style=filled, color="#31CEF0"]; +end [shape=Msquare fontname=Verdana, fontsize=10, height=0.02, width=0.02, style=filled, color="#31CEF0"]; +MERGED [fontname=Verdana, fontsize=10, height=0.02, width=0.02, shape=Mrecord, style=filled, color="#31CEF0"] +}
diff --git a/presentations/gerrit-change-workflow/imgs/change_workflow_pre_submit.dot b/presentations/gerrit-change-workflow/imgs/change_workflow_pre_submit.dot new file mode 100644 index 0000000..d512aa4 --- /dev/null +++ b/presentations/gerrit-change-workflow/imgs/change_workflow_pre_submit.dot
@@ -0,0 +1,13 @@ +digraph change_workflow_pre_submit { +start -> NEW [ label="push" fontname=Verdana fontsize=12, style=filled, color="#31CEF0" ] +NEW -> MERGED [ label="submit" fontname=Verdana fontsize=12, height=0.02, width=0.02, shape=Mrecord, style=filled, color="#31CEF0"]; +NEW -> ABANDONED [ label="abandon" fontname=Verdana fontsize=12, height=0.02, width=0.02, shape=Mrecord, style=filled, color="#31CEF0"]; +ABANDONED -> NEW [ label="restore" fontname=Verdana fontsize=12, height=0.02, width=0.02, shape=Mrecord, style=filled, color="#31CEF0"]; +MERGED -> end [ fontname=Verdana fontsize=12, style=filled, color="#31CEF0" ] + +start [shape=Mdiamond fontname=Verdana, fontsize=10, height=0.02, width=0.02, style=filled, color="#31CEF0"]; +end [shape=Msquare fontname=Verdana, fontsize=10, height=0.02, width=0.02, style=filled, color="#31CEF0"]; +NEW [fontname=Verdana, fontsize=10, height=0.02, width=0.02, shape=Mrecord, style=filled, color="#31CEF0"] +MERGED [fontname=Verdana, fontsize=10, height=0.02, width=0.02, shape=Mrecord, style=filled, color="#31CEF0"] +ABANDONED [fontname=Verdana, fontsize=10, height=0.02, width=0.02, shape=Mrecord, style=filled, color="#31CEF0"] +}
diff --git a/presentations/gerrit-change-workflow/imgs/draft_and_work_in_progress_workflow.dot b/presentations/gerrit-change-workflow/imgs/draft_and_work_in_progress_workflow.dot new file mode 100644 index 0000000..65586c3 --- /dev/null +++ b/presentations/gerrit-change-workflow/imgs/draft_and_work_in_progress_workflow.dot
@@ -0,0 +1,20 @@ +digraph draft_and_work_in_progress_workflow { +start -> DRAFT [ label="push as draft" fontname=Verdana fontsize=12, style=filled, color="#31CEF0" ] +DRAFT -> NEW [ label="publish" fontname=Verdana fontsize=12, style=filled, color="#31CEF0" ] +start -> WORK_IN_PROGRESS [ label="push as wip" fontname=Verdana fontsize=12, style=filled, color="#31CEF0" ] +WORK_IN_PROGRESS -> NEW [ label="ready" fontname=Verdana fontsize=12, style=filled, color="#31CEF0" ] +NEW -> WORK_IN_PROGRESS [ label="wip" fontname=Verdana fontsize=12, style=filled, color="#31CEF0" ] +start -> NEW [ label="push" fontname=Verdana fontsize=12, style=filled, color="#31CEF0" ] +NEW -> MERGED [ label="submit" fontname=Verdana fontsize=12, height=0.02, width=0.02, shape=Mrecord, style=filled, color="#31CEF0"]; +NEW -> ABANDONED [ label="abandon" fontname=Verdana fontsize=12, height=0.02, width=0.02, shape=Mrecord, style=filled, color="#31CEF0"]; +ABANDONED -> NEW [ label="restore" fontname=Verdana fontsize=12, height=0.02, width=0.02, shape=Mrecord, style=filled, color="#31CEF0"]; +MERGED -> end [ fontname=Verdana fontsize=12, style=filled, color="#31CEF0" ] + +start [shape=Mdiamond fontname=Verdana, fontsize=10, height=0.02, width=0.02, style=filled, color="#31CEF0"]; +end [shape=Msquare fontname=Verdana, fontsize=10, height=0.02, width=0.02, style=filled, color="#31CEF0"]; +NEW [fontname=Verdana, fontsize=10, height=0.02, width=0.02, shape=Mrecord, style=filled, color="#31CEF0"] +DRAFT [fontname=Verdana, fontsize=10, height=0.02, width=0.02, shape=Mrecord, style=filled, color="#31CEF0"] +WORK_IN_PROGRESS [fontname=Verdana, fontsize=10, height=0.02, width=0.02, shape=Mrecord, style=filled, color="#31CEF0"] +MERGED [fontname=Verdana, fontsize=10, height=0.02, width=0.02, shape=Mrecord, style=filled, color="#31CEF0"] +ABANDONED [fontname=Verdana, fontsize=10, height=0.02, width=0.02, shape=Mrecord, style=filled, color="#31CEF0"] +}
diff --git a/presentations/gerrit-change-workflow/imgs/draft_change_abandoned_workflow.dot b/presentations/gerrit-change-workflow/imgs/draft_change_abandoned_workflow.dot new file mode 100644 index 0000000..1eb52f2 --- /dev/null +++ b/presentations/gerrit-change-workflow/imgs/draft_change_abandoned_workflow.dot
@@ -0,0 +1,16 @@ +digraph draft_change_abandoned_workflow { +start -> DRAFT [ label="push as draft / create change in browser" fontname=Verdana fontsize=12, style=filled, color="#31CEF0" ] +DRAFT -> NEW [ label="publish" fontname=Verdana fontsize=12, style=filled, color="#31CEF0" ] +DRAFT -> ABANDONED [ label="abandon" fontname=Verdana fontsize=12, style=filled, color="#31CEF0" ] +NEW -> MERGED [ label="submit" fontname=Verdana fontsize=12, height=0.02, width=0.02, shape=Mrecord, style=filled, color="#31CEF0"]; +NEW -> ABANDONED [ label="abandon" fontname=Verdana fontsize=12, height=0.02, width=0.02, shape=Mrecord, style=filled, color="#31CEF0"]; +ABANDONED -> NEW [ label="restore" fontname=Verdana fontsize=12, height=0.02, width=0.02, shape=Mrecord, style=filled, color="#31CEF0"]; +MERGED -> end [ fontname=Verdana fontsize=12, style=filled, color="#31CEF0" ] + +start [shape=Mdiamond fontname=Verdana, fontsize=10, height=0.02, width=0.02, style=filled, color="#31CEF0"]; +end [shape=Msquare fontname=Verdana, fontsize=10, height=0.02, width=0.02, style=filled, color="#31CEF0"]; +NEW [fontname=Verdana, fontsize=10, height=0.02, width=0.02, shape=Mrecord, style=filled, color="#31CEF0"] +DRAFT [fontname=Verdana, fontsize=10, height=0.02, width=0.02, shape=Mrecord, style=filled, color="#31CEF0"] +MERGED [fontname=Verdana, fontsize=10, height=0.02, width=0.02, shape=Mrecord, style=filled, color="#31CEF0"] +ABANDONED [fontname=Verdana, fontsize=10, height=0.02, width=0.02, shape=Mrecord, style=filled, color="#31CEF0"] +}
diff --git a/presentations/gerrit-change-workflow/imgs/draft_change_workflow.dot b/presentations/gerrit-change-workflow/imgs/draft_change_workflow.dot new file mode 100644 index 0000000..dd79948 --- /dev/null +++ b/presentations/gerrit-change-workflow/imgs/draft_change_workflow.dot
@@ -0,0 +1,15 @@ +digraph draft_change_workflow { +start -> DRAFT [ label="push as draft / create change in browser" fontname=Verdana fontsize=12, style=filled, color="#31CEF0" ] +DRAFT -> NEW [ label="publish" fontname=Verdana fontsize=12, style=filled, color="#31CEF0" ] +NEW -> MERGED [ label="submit" fontname=Verdana fontsize=12, height=0.02, width=0.02, shape=Mrecord, style=filled, color="#31CEF0"]; +NEW -> ABANDONED [ label="abandon" fontname=Verdana fontsize=12, height=0.02, width=0.02, shape=Mrecord, style=filled, color="#31CEF0"]; +ABANDONED -> NEW [ label="restore" fontname=Verdana fontsize=12, height=0.02, width=0.02, shape=Mrecord, style=filled, color="#31CEF0"]; +MERGED -> end [ fontname=Verdana fontsize=12, style=filled, color="#31CEF0" ] + +start [shape=Mdiamond fontname=Verdana, fontsize=10, height=0.02, width=0.02, style=filled, color="#31CEF0"]; +end [shape=Msquare fontname=Verdana, fontsize=10, height=0.02, width=0.02, style=filled, color="#31CEF0"]; +NEW [fontname=Verdana, fontsize=10, height=0.02, width=0.02, shape=Mrecord, style=filled, color="#31CEF0"] +DRAFT [fontname=Verdana, fontsize=10, height=0.02, width=0.02, shape=Mrecord, style=filled, color="#31CEF0"] +MERGED [fontname=Verdana, fontsize=10, height=0.02, width=0.02, shape=Mrecord, style=filled, color="#31CEF0"] +ABANDONED [fontname=Verdana, fontsize=10, height=0.02, width=0.02, shape=Mrecord, style=filled, color="#31CEF0"] +}
diff --git a/presentations/gerrit-change-workflow/imgs/draft_change_workflow_draft_abandoned.dot b/presentations/gerrit-change-workflow/imgs/draft_change_workflow_draft_abandoned.dot new file mode 100644 index 0000000..d000ca6 --- /dev/null +++ b/presentations/gerrit-change-workflow/imgs/draft_change_workflow_draft_abandoned.dot
@@ -0,0 +1,18 @@ +digraph draft_change_abandoned_workflow { +start -> DRAFT [ label="push as draft / create change in browser" fontname=Verdana fontsize=12, style=filled, color="#31CEF0" ] +DRAFT -> NEW [ label="publish" fontname=Verdana fontsize=12, style=filled, color="#31CEF0" ] +DRAFT -> ABANDONED_DRAFT [ label="abandon" fontname=Verdana fontsize=12, style=filled, color="#31CEF0" ] +ABANDONED_DRAFT -> DRAFT [ label="restore" fontname=Verdana fontsize=12, style=filled, color="#31CEF0" ] +NEW -> MERGED [ label="submit" fontname=Verdana fontsize=12, height=0.02, width=0.02, shape=Mrecord, style=filled, color="#31CEF0"]; +NEW -> ABANDONED [ label="abandon" fontname=Verdana fontsize=12, height=0.02, width=0.02, shape=Mrecord, style=filled, color="#31CEF0"]; +ABANDONED -> NEW [ label="restore" fontname=Verdana fontsize=12, height=0.02, width=0.02, shape=Mrecord, style=filled, color="#31CEF0"]; +MERGED -> end [ fontname=Verdana fontsize=12, style=filled, color="#31CEF0" ] + +start [shape=Mdiamond fontname=Verdana, fontsize=10, height=0.02, width=0.02, style=filled, color="#31CEF0"]; +end [shape=Msquare fontname=Verdana, fontsize=10, height=0.02, width=0.02, style=filled, color="#31CEF0"]; +NEW [fontname=Verdana, fontsize=10, height=0.02, width=0.02, shape=Mrecord, style=filled, color="#31CEF0"] +DRAFT [fontname=Verdana, fontsize=10, height=0.02, width=0.02, shape=Mrecord, style=filled, color="#31CEF0"] +MERGED [fontname=Verdana, fontsize=10, height=0.02, width=0.02, shape=Mrecord, style=filled, color="#31CEF0"] +ABANDONED [fontname=Verdana, fontsize=10, height=0.02, width=0.02, shape=Mrecord, style=filled, color="#31CEF0"] +ABANDONED_DRAFT [fontname=Verdana, fontsize=10, height=0.02, width=0.02, shape=Mrecord, style=filled, color="#31CEF0"] +}
diff --git a/presentations/gerrit-change-workflow/imgs/draft_patch_set_workflow.dot b/presentations/gerrit-change-workflow/imgs/draft_patch_set_workflow.dot new file mode 100644 index 0000000..a225198 --- /dev/null +++ b/presentations/gerrit-change-workflow/imgs/draft_patch_set_workflow.dot
@@ -0,0 +1,16 @@ +digraph draft_patch_set_workflow { +start -> NEW [ label="push as regular change" fontname=Verdana fontsize=12, style=filled, color="#31CEF0" ] +NEW -> DRAFT_PATCH_SET [ label="push as draft" fontname=Verdana fontsize=12, height=0.02, width=0.02, style=dotted, arrowhead="dot" color="turquoise"]; +DRAFT_PATCH_SET -> NEW [ label="publish" fontname=Verdana fontsize=12, height=0.02, width=0.02, style="dotted", arrowhead="dot" color="turquoise"]; +NEW -> MERGED [ label="submit" fontname=Verdana fontsize=12, height=0.02, width=0.02, style=filled, color="#31CEF0"]; +NEW -> ABANDONED [ label="abandon" fontname=Verdana fontsize=12, height=0.02, width=0.02, style=filled, color="#31CEF0"]; +ABANDONED -> NEW [ label="restore" fontname=Verdana fontsize=12, height=0.02, width=0.02, style=filled, color="#31CEF0"]; +MERGED -> end [ fontname=Verdana fontsize=12, style=filled, color="#31CEF0" ] + +start [shape=Mdiamond fontname=Verdana, fontsize=10, height=0.02, width=0.02, style=filled, color="#31CEF0"]; +end [shape=Msquare fontname=Verdana, fontsize=10, height=0.02, width=0.02, style=filled, color="#31CEF0"]; +NEW [fontname=Verdana, fontsize=10, height=0.02, width=0.02, shape=Mrecord, style=filled, color="#31CEF0"] +DRAFT_PATCH_SET [label="Patch set attribute: DRAFT" fontname=Verdana, fontsize=10, height=0.02, width=0.02, shape=ellipse, style=filled, color="turquoise"] +MERGED [fontname=Verdana, fontsize=10, height=0.02, width=0.02, shape=Mrecord, style=filled, color="#31CEF0"] +ABANDONED [fontname=Verdana, fontsize=10, height=0.02, width=0.02, shape=Mrecord, style=filled, color="#31CEF0"] +}
diff --git a/presentations/gerrit-change-workflow/imgs/work_in_progress_workflow.dot b/presentations/gerrit-change-workflow/imgs/work_in_progress_workflow.dot new file mode 100644 index 0000000..6449926 --- /dev/null +++ b/presentations/gerrit-change-workflow/imgs/work_in_progress_workflow.dot
@@ -0,0 +1,17 @@ +digraph draft_change_workflow { +start -> WORK_IN_PROGRESS [ label="push as wip" fontname=Verdana fontsize=12, style=filled, color="#31CEF0" ] +WORK_IN_PROGRESS -> NEW [ label="ready" fontname=Verdana fontsize=12, style=filled, color="#31CEF0" ] +NEW -> WORK_IN_PROGRESS [ label="wip" fontname=Verdana fontsize=12, style=filled, color="#31CEF0" ] +start -> NEW [ label="push" fontname=Verdana fontsize=12, style=filled, color="#31CEF0" ] +NEW -> MERGED [ label="submit" fontname=Verdana fontsize=12, height=0.02, width=0.02, shape=Mrecord, style=filled, color="#31CEF0"]; +NEW -> ABANDONED [ label="abandon" fontname=Verdana fontsize=12, height=0.02, width=0.02, shape=Mrecord, style=filled, color="#31CEF0"]; +ABANDONED -> NEW [ label="restore" fontname=Verdana fontsize=12, height=0.02, width=0.02, shape=Mrecord, style=filled, color="#31CEF0"]; +MERGED -> end [ fontname=Verdana fontsize=12, style=filled, color="#31CEF0" ] + +start [shape=Mdiamond fontname=Verdana, fontsize=10, height=0.02, width=0.02, style=filled, color="#31CEF0"]; +end [shape=Msquare fontname=Verdana, fontsize=10, height=0.02, width=0.02, style=filled, color="#31CEF0"]; +NEW [fontname=Verdana, fontsize=10, height=0.02, width=0.02, shape=Mrecord, style=filled, color="#31CEF0"] +WORK_IN_PROGRESS [fontname=Verdana, fontsize=10, height=0.02, width=0.02, shape=Mrecord, style=filled, color="#31CEF0"] +MERGED [fontname=Verdana, fontsize=10, height=0.02, width=0.02, shape=Mrecord, style=filled, color="#31CEF0"] +ABANDONED [fontname=Verdana, fontsize=10, height=0.02, width=0.02, shape=Mrecord, style=filled, color="#31CEF0"] +}
diff --git a/presentations/gerrit-change-workflow/imgs/work_in_progress_workflow_and_private_change_workflow_in_core.dot b/presentations/gerrit-change-workflow/imgs/work_in_progress_workflow_and_private_change_workflow_in_core.dot new file mode 100644 index 0000000..d025e94 --- /dev/null +++ b/presentations/gerrit-change-workflow/imgs/work_in_progress_workflow_and_private_change_workflow_in_core.dot
@@ -0,0 +1,21 @@ +digraph draft_patch_set_workflow { +start -> NEW [ label="push/push as wip/push as private" fontname=Verdana fontsize=12, style=filled, color="#31CEF0" ] +start -> WIP [ label="mark as wip" fontname=Verdana fontsize=12, height=0.02, width=0.02, style=dotted, arrowhead="dot" color="turquoise"]; +NEW -> WIP [ label="mark as wip" fontname=Verdana fontsize=12, height=0.02, width=0.02, style=dotted, arrowhead="dot" color="turquoise"]; +start -> PRIVATE [ label="mark as private" fontname=Verdana fontsize=12, height=0.02, width=0.02, style=dotted, arrowhead="dot" color="turquoise"]; +NEW -> PRIVATE [ label="mark as private" fontname=Verdana fontsize=12, height=0.02, width=0.02, style=dotted, arrowhead="dot" color="turquoise"]; +PRIVATE -> NEW [ label="unmark as private" fontname=Verdana fontsize=12, height=0.02, width=0.02, style="dotted", arrowhead="dot" color="turquoise"]; +WIP -> NEW [ label="mark as ready" fontname=Verdana fontsize=12, height=0.02, width=0.02, style="dotted", arrowhead="dot" color="turquoise"]; +NEW -> MERGED [ label="submit" fontname=Verdana fontsize=12, height=0.02, width=0.02, style=filled, color="#31CEF0"]; +NEW -> ABANDONED [ label="abandon" fontname=Verdana fontsize=12, height=0.02, width=0.02, style=filled, color="#31CEF0"]; +ABANDONED -> NEW [ label="restore" fontname=Verdana fontsize=12, height=0.02, width=0.02, style=filled, color="#31CEF0"]; +MERGED -> end [ fontname=Verdana fontsize=12, style=filled, color="#31CEF0" ] + +start [shape=Mdiamond fontname=Verdana, fontsize=10, height=0.02, width=0.02, style=filled, color="#31CEF0"]; +end [shape=Msquare fontname=Verdana, fontsize=10, height=0.02, width=0.02, style=filled, color="#31CEF0"]; +NEW [fontname=Verdana, fontsize=10, height=0.02, width=0.02, shape=Mrecord, style=filled, color="#31CEF0"] +WIP [label="Change attribute: WIP" fontname=Verdana, fontsize=10, height=0.02, width=0.02, shape=ellipse, style=filled, color="turquoise"] +PRIVATE [label="Change attribute: Private" fontname=Verdana, fontsize=10, height=0.02, width=0.02, shape=ellipse, style=filled, color="turquoise"] +MERGED [fontname=Verdana, fontsize=10, height=0.02, width=0.02, shape=Mrecord, style=filled, color="#31CEF0"] +ABANDONED [fontname=Verdana, fontsize=10, height=0.02, width=0.02, shape=Mrecord, style=filled, color="#31CEF0"] +}
diff --git a/presentations/gerrit-change-workflow/imgs/work_in_progress_workflow_as_wip_plugin.dot b/presentations/gerrit-change-workflow/imgs/work_in_progress_workflow_as_wip_plugin.dot new file mode 100644 index 0000000..3c73a93 --- /dev/null +++ b/presentations/gerrit-change-workflow/imgs/work_in_progress_workflow_as_wip_plugin.dot
@@ -0,0 +1,16 @@ +digraph draft_change_workflow { +start -> NEW [ label="push" fontname=Verdana fontsize=12, style=filled, color="#31CEF0" ] +DRAFT -> NEW [ label="ready" fontname=Verdana fontsize=12, style=filled, color="#31CEF0" ] +NEW -> DRAFT [ label="wip" fontname=Verdana fontsize=12, style=filled, color="#31CEF0" ] +NEW -> MERGED [ label="submit" fontname=Verdana fontsize=12, height=0.02, width=0.02, shape=Mrecord, style=filled, color="#31CEF0"]; +NEW -> ABANDONED [ label="abandon" fontname=Verdana fontsize=12, height=0.02, width=0.02, shape=Mrecord, style=filled, color="#31CEF0"]; +ABANDONED -> NEW [ label="restore" fontname=Verdana fontsize=12, height=0.02, width=0.02, shape=Mrecord, style=filled, color="#31CEF0"]; +MERGED -> end [ fontname=Verdana fontsize=12, style=filled, color="#31CEF0" ] + +start [shape=Mdiamond fontname=Verdana, fontsize=10, height=0.02, width=0.02, style=filled, color="#31CEF0"]; +end [shape=Msquare fontname=Verdana, fontsize=10, height=0.02, width=0.02, style=filled, color="#31CEF0"]; +NEW [fontname=Verdana, fontsize=10, height=0.02, width=0.02, shape=Mrecord, style=filled, color="#31CEF0"] +DRAFT [fontname=Verdana, fontsize=10, height=0.02, width=0.02, shape=Mrecord, style=filled, color="#31CEF0"] +MERGED [fontname=Verdana, fontsize=10, height=0.02, width=0.02, shape=Mrecord, style=filled, color="#31CEF0"] +ABANDONED [fontname=Verdana, fontsize=10, height=0.02, width=0.02, shape=Mrecord, style=filled, color="#31CEF0"] +}
diff --git a/presentations/gerrit-change-workflow/imgs/work_in_progress_workflow_in_core.dot b/presentations/gerrit-change-workflow/imgs/work_in_progress_workflow_in_core.dot new file mode 100644 index 0000000..42f606c --- /dev/null +++ b/presentations/gerrit-change-workflow/imgs/work_in_progress_workflow_in_core.dot
@@ -0,0 +1,17 @@ +digraph draft_patch_set_workflow { +start -> NEW [ label="push/push as wip" fontname=Verdana fontsize=12, style=filled, color="#31CEF0" ] +start -> WIP [ label="mark as wip" fontname=Verdana fontsize=12, height=0.02, width=0.02, style=dotted, arrowhead="dot" color="turquoise"]; +NEW -> WIP [ label="mark as wip" fontname=Verdana fontsize=12, height=0.02, width=0.02, style=dotted, arrowhead="dot" color="turquoise"]; +WIP -> NEW [ label="mark as ready" fontname=Verdana fontsize=12, height=0.02, width=0.02, style="dotted", arrowhead="dot" color="turquoise"]; +NEW -> MERGED [ label="submit" fontname=Verdana fontsize=12, height=0.02, width=0.02, style=filled, color="#31CEF0"]; +NEW -> ABANDONED [ label="abandon" fontname=Verdana fontsize=12, height=0.02, width=0.02, style=filled, color="#31CEF0"]; +ABANDONED -> NEW [ label="restore" fontname=Verdana fontsize=12, height=0.02, width=0.02, style=filled, color="#31CEF0"]; +MERGED -> end [ fontname=Verdana fontsize=12, style=filled, color="#31CEF0" ] + +start [shape=Mdiamond fontname=Verdana, fontsize=10, height=0.02, width=0.02, style=filled, color="#31CEF0"]; +end [shape=Msquare fontname=Verdana, fontsize=10, height=0.02, width=0.02, style=filled, color="#31CEF0"]; +NEW [fontname=Verdana, fontsize=10, height=0.02, width=0.02, shape=Mrecord, style=filled, color="#31CEF0"] +WIP [label="Change attribute: WIP" fontname=Verdana, fontsize=10, height=0.02, width=0.02, shape=ellipse, style=filled, color="turquoise"] +MERGED [fontname=Verdana, fontsize=10, height=0.02, width=0.02, shape=Mrecord, style=filled, color="#31CEF0"] +ABANDONED [fontname=Verdana, fontsize=10, height=0.02, width=0.02, shape=Mrecord, style=filled, color="#31CEF0"] +}
diff --git a/presentations/gerrit-change-workflow/makeslides b/presentations/gerrit-change-workflow/makeslides new file mode 100755 index 0000000..d260d1f --- /dev/null +++ b/presentations/gerrit-change-workflow/makeslides
@@ -0,0 +1 @@ +asciidoc -a icons -a iconsdir=/opt/local/etc/asciidoc/images/icons gerrit-change-workflows.txt