Skip to content
GitLab
Explore
Sign in
Primary navigation
Search or go to…
Project
C
cis-workflow-gen
Manage
Activity
Members
Labels
Plan
Issues
0
Issue boards
Milestones
Wiki
Code
Merge requests
0
Repository
Branches
Commits
Tags
Repository graph
Compare revisions
Snippets
Build
Pipelines
Jobs
Pipeline schedules
Artifacts
Deploy
Releases
Model registry
Operate
Environments
Monitor
Incidents
Analyze
Value stream analytics
Contributor analytics
CI/CD analytics
Repository analytics
Model experiments
Help
Help
Support
GitLab documentation
Compare GitLab plans
Community forum
Contribute to GitLab
Provide feedback
Terms and privacy
Keyboard shortcuts
?
Snippets
Groups
Projects
Show more breadcrumbs
msc
cis-workflow-gen
Commits
9bcf7e78
There was a problem fetching the pipeline stages.
Commit
9bcf7e78
authored
4 years ago
by
Recolic K
Browse files
Options
Downloads
Patches
Plain Diff
update demo
parent
0ab8634f
No related branches found
No related tags found
No related merge requests found
Pipeline
#851
passed with stage
in 8 seconds
Changes
4
Pipelines
1
Hide whitespace changes
Inline
Side-by-side
Showing
4 changed files
activity.hpp
+4
-3
4 additions, 3 deletions
activity.hpp
web/demo.cc
+45
-23
45 additions, 23 deletions
web/demo.cc
workflows/another.cc
+48
-4
48 additions, 4 deletions
workflows/another.cc
xaml-template.hpp
+1
-1
1 addition, 1 deletion
xaml-template.hpp
with
98 additions
and
31 deletions
activity.hpp
+
4
−
3
View file @
9bcf7e78
...
@@ -87,8 +87,8 @@ namespace CIS {
...
@@ -87,8 +87,8 @@ namespace CIS {
class
ManualOperation
:
public
ActivityBase
{
class
ManualOperation
:
public
ActivityBase
{
public:
public:
explicit
ManualOperation
(
string
displayName
,
string
message
=
""
,
string
entityName
=
""
)
explicit
ManualOperation
(
string
displayName
,
string
message
=
""
,
string
teamId
=
""
,
string
entityName
=
""
)
:
displayName
(
Utility
::
HtmlEscapeString
(
displayName
)),
messageInCSharp
(
Utility
::
HtmlEscapeString
(
"
\"
"
+
message
+
"
\"
"
)),
entityName
(
entityName
),
taskId
(
Utility
::
GenUUID
())
{}
:
displayName
(
Utility
::
HtmlEscapeString
(
displayName
)),
messageInCSharp
(
Utility
::
HtmlEscapeString
(
"
\"
"
+
message
+
"
\"
"
)),
teamId
(
teamId
),
entityName
(
entityName
),
taskId
(
Utility
::
GenUUID
())
{}
ManualOperation
(
const
ManualOperation
&
another
)
ManualOperation
(
const
ManualOperation
&
another
)
:
displayName
(
another
.
displayName
),
messageInCSharp
(
another
.
messageInCSharp
),
entityName
(
another
.
entityName
),
taskId
(
Utility
::
GenUUID
())
{}
:
displayName
(
another
.
displayName
),
messageInCSharp
(
another
.
messageInCSharp
),
entityName
(
another
.
entityName
),
taskId
(
Utility
::
GenUUID
())
{}
ManualOperation
(
ManualOperation
&&
)
=
default
;
ManualOperation
(
ManualOperation
&&
)
=
default
;
...
@@ -99,12 +99,13 @@ namespace CIS {
...
@@ -99,12 +99,13 @@ namespace CIS {
}
}
private
:
private
:
string
displayName
,
messageInCSharp
,
entityName
;
string
displayName
,
messageInCSharp
,
teamId
,
entityName
;
string
taskId
;
string
taskId
;
virtual
rlib
::
string
generateXaml
()
const
override
{
virtual
rlib
::
string
generateXaml
()
const
override
{
rlib
::
string
xamlCode
=
templates
::
MANUAL_OPERATION_XAML
;
rlib
::
string
xamlCode
=
templates
::
MANUAL_OPERATION_XAML
;
xamlCode
.
replace_once
(
"__TEMPLATE_ARG_DisplayName"
,
displayName
);
xamlCode
.
replace_once
(
"__TEMPLATE_ARG_DisplayName"
,
displayName
);
xamlCode
.
replace_once
(
"__TEMPLATE_ARG_TaskId"
,
this
->
taskId
);
xamlCode
.
replace_once
(
"__TEMPLATE_ARG_TaskId"
,
this
->
taskId
);
xamlCode
.
replace_once
(
"__TEMPLATE_ARG_TeamId"
,
this
->
teamId
);
xamlCode
.
replace_once
(
"__TEMPLATE_ARG_CodeLines"
,
messageInCSharp
);
xamlCode
.
replace_once
(
"__TEMPLATE_ARG_CodeLines"
,
messageInCSharp
);
auto
entityXaml
=
this
->
entityName
==
""
?
""
:
rlib
::
string
(
templates
::
ENTITY_DEF_TEMPLATE
).
replace
(
"__TEMPLATE_ARG_EntityName"
,
this
->
entityName
);
auto
entityXaml
=
this
->
entityName
==
""
?
""
:
rlib
::
string
(
templates
::
ENTITY_DEF_TEMPLATE
).
replace
(
"__TEMPLATE_ARG_EntityName"
,
this
->
entityName
);
...
...
This diff is collapsed.
Click to expand it.
web/demo.cc
+
45
−
23
View file @
9bcf7e78
// This is a DEMO. You may use any C++17 syntax here.
// This is a DEMO. You may use any C++17 syntax here.
// 先演示一下定义一个Activity的正常语法。
// 先演示一下定义一个Activity
和ManualOperation
的正常语法。
// (ActivityName, ClassName_In_Our_Code , DependencyEntityName)
// (ActivityName, ClassName_In_Our_Code , DependencyEntityName)
Activity
HaveASleep
(
"HaveASleep"
,
"FleetAGC.Activities.DelayActivity"
,
""
);
Activity
HaveASleep
(
"HaveASleep"
,
"FleetAGC.Activities.DelayActivity"
,
""
);
HaveASleep
.
addInputSetting
(
"Timespan"
,
"60"
);
HaveASleep
.
addInputSetting
(
"Timespan"
,
"60"
);
// (DisplayName , Message , DependencyEntityName)
ManualOperation
AlertSomeone
(
"AlertSomeone"
,
"This is some message"
,
""
);
// 但是如果你要定义很多很多Activity,建议下面的方法偷懒。
// 但是如果你要定义很多很多Activity,建议用这种方法偷懒。
////////////////////////////////////////////////////////////////////////////////////////////////
#define DEFINE_ACTIVITY(name, entityName) \
Activity name (#name, "FleetAGC.Activities.DelayActivity", entityName); \
name.addInputSetting("Timespan", "60");
// 使用刚刚定义的偷懒宏。
DEFINE_ACTIVITY
(
GridManager
,
"M365Poc.SPO.GridManager"
)
DEFINE_ACTIVITY
(
AuthAndProvision
,
"M365Poc.SPO.AuthProvisioning"
)
DEFINE_ACTIVITY
(
FarmsAndTennats
,
""
)
DEFINE_ACTIVITY
(
CSC
,
""
)
DEFINE_ACTIVITY
(
FastSearch
,
""
)
DEFINE_ACTIVITY
(
Microservices
,
"M365Poc.SPO.MicroServices"
)
DEFINE_ACTIVITY
(
MonitorAndAlert
,
"M365Poc.SPO.MonitoringAlerting"
)
DEFINE_ACTIVITY
(
SPOTooling
,
"M365Poc.SPO.SPOTooling"
)
DEFINE_ACTIVITY
(
UXCDNFailover
,
"M365Poc.SPO.UXCDNFailover"
)
DEFINE_ACTIVITY
(
ODFBSyncClient
,
"M365Poc.SPO.ODFBSyncClient"
)
// 把定义好的Activity组合一下,其中箭头表示串行,竖线表示并行。
{
// 偷懒方案1
auto
block1
=
GridManager
>>
FarmsAndTennats
>>
(
CSC
|
FastSearch
);
// 这里假设你想用FleetAGC.Activities.DelayActivity,并且想给他一个TimeSpan参数。
auto
block2
=
Microservices
|
MonitorAndAlert
;
#define AC(name, entityName) \
auto
completeFlow
=
block1
|
AuthAndProvision
|
block2
>>
SPOTooling
|
UXCDNFailover
|
ODFBSyncClient
;
auto name = Activity(#name, "FleetAGC.Activities.DelayActivity", entityName).addInputSetting("Timespan", "60");
// 使用刚刚定义的偷懒宏。
AC
(
GridManager
,
"M365Poc.SPO.GridManager"
)
AC
(
AuthAndProvision
,
"M365Poc.SPO.AuthProvisioning"
)
AC
(
FarmsAndTennats
,
""
)
AC
(
CSC
,
""
)
AC
(
FastSearch
,
""
)
AC
(
Microservices
,
"M365Poc.SPO.MicroServices"
)
AC
(
MonitorAndAlert
,
"M365Poc.SPO.MonitoringAlerting"
)
AC
(
SPOTooling
,
"M365Poc.SPO.SPOTooling"
)
AC
(
UXCDNFailover
,
"M365Poc.SPO.UXCDNFailover"
)
AC
(
ODFBSyncClient
,
"M365Poc.SPO.ODFBSyncClient"
)
// 把定义好的Activity组合一下,其中箭头表示串行,竖线表示并行。
auto
block1
=
GridManager
>>
FarmsAndTennats
>>
(
CSC
|
FastSearch
);
auto
block2
=
Microservices
|
MonitorAndAlert
;
auto
completeFlow
=
block1
|
AuthAndProvision
|
block2
>>
SPOTooling
|
UXCDNFailover
|
ODFBSyncClient
;
// 最后指定一下workflow的名字就可以了。
println
(
completeFlow
.
generateXaml
(
"FleetAGC.Workflows.SPOBuildoutPOCWorkflow"
));
}
// 最后指定一下workflow的名字就可以了。
////////////////////////////////////////////////////////////////////////////////////////////////
println
(
completeFlow
.
generateXaml
(
"FleetAGC.Workflows.SPOBuildoutPOCWorkflow"
));
if
constexpr
(
false
)
{
// 偷懒方案2
#define A_2(name, entityName) (Activity(#name, "FleetAGC.Activities.DelayActivity", #entityName).addInputSetting("Timespan", "60"))
#define A_1(name) A_2(name, )
#define A_proxy(x, Arg1, Arg2, FUNC, ...) FUNC
#define A(...) A_proxy(, ##__VA_ARGS__, A_2(__VA_ARGS__), A_1(__VA_ARGS__))
// 和上一个例子一样的语法,只不过这次更懒了。
auto
block1
=
A
(
GridManager
,
M365Poc
.
SPO
.
GridManager
)
>>
A
(
FarmsAndTennats
)
>>
(
A
(
CSC
)
|
A
(
FastSearch
));
auto
block2
=
A
(
Microservices
,
M365Poc
.
SPO
.
MicroServices
)
|
A
(
MonitorAndAlert
,
M365Poc
.
SPO
.
MonitoringAlerting
);
auto
completeFlow
=
block1
|
A
(
AuthAndProvision
,
M365Poc
.
SPO
.
AuthProvisioning
)
|
block2
|
A
(
SPOTooling
,
M365Poc
.
SPO
.
SPOTooling
)
|
A
(
UXCDNFailover
,
M365Poc
.
SPO
.
UXCDNFailover
)
|
A
(
ODFBSyncClient
,
M365Poc
.
SPO
.
ODFBSyncClient
);
// 最后指定一下workflow的名字就可以了。
println
(
completeFlow
.
generateXaml
(
"FleetAGC.Workflows.SPOBuildoutPOCWorkflow"
));
}
This diff is collapsed.
Click to expand it.
workflows/another.cc
+
48
−
4
View file @
9bcf7e78
#include
<cis-workflow-gen/quick-include.hpp>
#include
<cis-workflow-gen/quick-include.hpp>
int
main
()
{
int
main
()
{
// This is a DEMO. You may use any C++17 syntax here.
// 先演示一下定义一个Activity和ManualOperation的正常语法。
// (ActivityName, ClassName_In_Our_Code , DependencyEntityName)
Activity
HaveASleep
(
"HaveASleep"
,
"FleetAGC.Activities.DelayActivity"
,
""
);
HaveASleep
.
addInputSetting
(
"Timespan"
,
"60"
);
// (DisplayName , Message , TeamId to alert , DependencyEntityName)
ManualOperation
AlertSomeone
(
"AlertSomeone"
,
"This is some message"
,
"AzDNetDeployments"
,
""
);
// 但是如果你要定义很多很多Activity,建议下面的方法偷懒。
////////////////////////////////////////////////////////////////////////////////////////////////
{
// 偷懒方案1
// 这里假设你想用FleetAGC.Activities.DelayActivity,并且想给他一个TimeSpan参数。
#define AC(name, entityName) \
auto name = Activity(#name, "FleetAGC.Activities.DelayActivity", entityName).addInputSetting("Timespan", "60");
// 使用刚刚定义的偷懒宏。
AC
(
GridManager
,
"M365Poc.SPO.GridManager"
)
AC
(
AuthAndProvision
,
"M365Poc.SPO.AuthProvisioning"
)
AC
(
FarmsAndTennats
,
""
)
AC
(
CSC
,
""
)
AC
(
FastSearch
,
""
)
AC
(
Microservices
,
"M365Poc.SPO.MicroServices"
)
AC
(
MonitorAndAlert
,
"M365Poc.SPO.MonitoringAlerting"
)
AC
(
SPOTooling
,
"M365Poc.SPO.SPOTooling"
)
AC
(
UXCDNFailover
,
"M365Poc.SPO.UXCDNFailover"
)
AC
(
ODFBSyncClient
,
"M365Poc.SPO.ODFBSyncClient"
)
// 把定义好的Activity组合一下,其中箭头表示串行,竖线表示并行。
auto
block1
=
GridManager
>>
FarmsAndTennats
>>
(
CSC
|
FastSearch
);
auto
block2
=
Microservices
|
MonitorAndAlert
;
auto
completeFlow
=
block1
|
AuthAndProvision
|
block2
>>
SPOTooling
|
UXCDNFailover
|
ODFBSyncClient
;
// 最后指定一下workflow的名字就可以了。
println
(
completeFlow
.
generateXaml
(
"FleetAGC.Workflows.SPOBuildoutPOCWorkflow"
));
}
////////////////////////////////////////////////////////////////////////////////////////////////
if
constexpr
(
false
)
{
// 偷懒方案2
#define A_2(name, entityName) (Activity(#name, "FleetAGC.Activities.DelayActivity", #entityName).addInputSetting("Timespan", "60"))
#define A_2(name, entityName) (Activity(#name, "FleetAGC.Activities.DelayActivity", #entityName).addInputSetting("Timespan", "60"))
#define A_1(name) A_2(name,
""
)
#define A_1(name) A_2(name, )
#define A_proxy(x, Arg1, Arg2, FUNC, ...) FUNC
#define A_proxy(x, Arg1, Arg2, FUNC, ...) FUNC
#define A(...) A_proxy(, ##__VA_ARGS__, A_2(__VA_ARGS__), A_1(__VA_ARGS__))
#define A(...) A_proxy(, ##__VA_ARGS__, A_2(__VA_ARGS__), A_1(__VA_ARGS__))
// 和上一个例子一样的语法,只不过这次更懒了。
auto
block1
=
A
(
GridManager
,
M365Poc
.
SPO
.
GridManager
)
>>
A
(
FarmsAndTennats
)
>>
(
A
(
CSC
)
|
A
(
FastSearch
));
auto
block1
=
A
(
GridManager
,
M365Poc
.
SPO
.
GridManager
)
>>
A
(
FarmsAndTennats
)
>>
(
A
(
CSC
)
|
A
(
FastSearch
));
auto
block2
=
A
(
Microservices
,
M365Poc
.
SPO
.
MicroServices
)
|
A
(
MonitorAndAlert
,
M365Poc
.
SPO
.
MonitoringAlerting
);
auto
block2
=
A
(
Microservices
,
M365Poc
.
SPO
.
MicroServices
)
|
A
(
MonitorAndAlert
,
M365Poc
.
SPO
.
MonitoringAlerting
);
auto
completeFlow
=
block1
|
A
(
AuthAndProvision
,
M365Poc
.
SPO
.
AuthProvisioning
)
|
block2
|
A
(
SPOTooling
,
M365Poc
.
SPO
.
SPOTooling
)
|
A
(
UXCDNFailover
,
M365Poc
.
SPO
.
UXCDNFailover
)
|
A
(
ODFBSyncClient
,
M365Poc
.
SPO
.
ODFBSyncClient
);
auto
completeFlow
=
block1
|
A
(
AuthAndProvision
,
M365Poc
.
SPO
.
AuthProvisioning
)
|
block2
|
A
(
SPOTooling
,
M365Poc
.
SPO
.
SPOTooling
)
|
A
(
UXCDNFailover
,
M365Poc
.
SPO
.
UXCDNFailover
)
|
A
(
ODFBSyncClient
,
M365Poc
.
SPO
.
ODFBSyncClient
);
println
(
to_file
(
"SPOBuildoutPOCWorkflow.xaml"
),
completeFlow
.
generateXaml
(
"FleetAGC.Workflows.SPOBuildoutPOCWorkflow"
));
// 最后指定一下workflow的名字就可以了。
println
(
completeFlow
.
generateXaml
(
"FleetAGC.Workflows.SPOBuildoutPOCWorkflow"
));
}
}
}
\ No newline at end of file
This diff is collapsed.
Click to expand it.
xaml-template.hpp
+
1
−
1
View file @
9bcf7e78
...
@@ -96,7 +96,7 @@ constexpr auto STD_XAML_TAIL = "</Activity>";
...
@@ -96,7 +96,7 @@ constexpr auto STD_XAML_TAIL = "</Activity>";
constexpr
auto
MANUAL_OPERATION_XAML
=
constexpr
auto
MANUAL_OPERATION_XAML
=
R"XAML( <mwcwa:ManualOperation
DeprecatedTaskId="{x:Null}"
TaskId="__TEMPLATE_ARG_TaskId" DisplayName="__TEMPLATE_ARG_DisplayName" MonitoringSystems="icm" WaitUntilFinish="True" __TEMPLATE_ARG_EntityDefPlaceholder>
R"XAML( <mwcwa:ManualOperation TaskId="__TEMPLATE_ARG_TaskId" DisplayName="__TEMPLATE_ARG_DisplayName" MonitoringSystems="icm" WaitUntilFinish="True"
mwcwcc:OwningTeamPropertyBinder.OwningTeamId="__TEMPLATE_ARG_TeamId"
__TEMPLATE_ARG_EntityDefPlaceholder>
<mwcwa:ManualOperation.AdditionalContent>
<mwcwa:ManualOperation.AdditionalContent>
<InArgument x:TypeArguments="x:String">
<InArgument x:TypeArguments="x:String">
<mca:CSharpValue x:TypeArguments="x:String">__TEMPLATE_ARG_CodeLines</mca:CSharpValue>
<mca:CSharpValue x:TypeArguments="x:String">__TEMPLATE_ARG_CodeLines</mca:CSharpValue>
...
...
This diff is collapsed.
Click to expand it.
Preview
0%
Loading
Try again
or
attach a new file
.
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Save comment
Cancel
Please
register
or
sign in
to comment