statemachine
Workflow for branch
for field
Branch
{
 
initial
state
Ticket
{
on
merge to integration
[
always
]
do
{
assert
State
==
{
Fixed
}
:
"
Only fixed tickets can be sent to integration branch for testing.
"
;
assert
Code reviewer
!=
null
:
"
Only reviewed tickets can be sent to integration branch for testing.
"
;
assert
Type
!=
{
Hotfix
}
:
"
Hotfixes don't go through integration and rc workflow. Please merge it directly to master and change branch in YT to master.
"
;
assert
loggedInUser
==
Assignee
||
loggedInUser
==
project
.
leader
:
"
Only assignee or project leader can merge this ticket to integration.
"
;
message
(
"
Ticket moved to integration branch in YT, you should now merge it from ticket to integration branch in GIT.
"
)
;
if
(
Tester
==
null
)
{
project
.
leader
.
notify
(
"
[TESTER]
"
+
getId
(
 
)
+
"
:
"
+
summary
,
getUrl
(
 
)
)
;
}
}
transit to
Integration
 
on
merge to master
[
always
]
do
{
assert
Type
==
{
Hotfix
}
:
"
Only hotfixes can be sent to master directly from ticket branches.
"
;
assert
State
==
{
Fixed
}
:
"
Only fixed hotfixes can be sent to master to be released.
"
;
assert
loggedInUser
==
Assignee
||
loggedInUser
==
project
.
leader
:
"
Only assignee or project leader can merge this ticket to master.
"
;
message
(
"
Ticket moved to master branch in YT, you should now merge it from ticket to master branch in GIT.
"
)
;
project
.
leader
.
notify
(
"
[HOTFIX TO DEPLOY]
"
+
getId
(
 
)
+
"
:
"
+
summary
,
getUrl
(
 
)
)
;
}
transit to
Master
}
 
state
Integration
{
on
merge to release candidate
[
always
]
do
{
assert
loggedInUser
==
project
.
leader
:
"
Only project leader can merge integration tickets to release candidate branch.
"
;
}
transit to
Release candidate
}
 
state
Release candidate
{
on
merge to master
[
always
]
do
{
assert
loggedInUser
==
project
.
leader
:
"
Only project leader can merge release candidate tickets to master.
"
;
assert
State
==
{
Verified
}
:
"
Only verified tickets can be merged to master and released.
"
;
}
transit to
Master
}
 
state
Master
{
 
}
 
}