Skip to content

Commit ebc8ce3

Browse files
enhancement: added github-actions for dotnet
1 parent 17b45c6 commit ebc8ce3

File tree

3 files changed

+101
-3
lines changed

3 files changed

+101
-3
lines changed

internal/languages/dotnet/generator.go

+17-2
Original file line numberDiff line numberDiff line change
@@ -9,8 +9,10 @@ import (
99
"github.com/intelops/compage/internal/languages"
1010
"github.com/intelops/compage/internal/languages/dotnet/frameworks/dotnet-clean-architecture"
1111
"github.com/intelops/compage/internal/languages/dotnet/integrations/docker"
12+
"github.com/intelops/compage/internal/languages/dotnet/integrations/githubactions"
1213
"github.com/intelops/compage/internal/languages/dotnet/integrations/kubernetes"
1314
"github.com/intelops/compage/internal/languages/templates"
15+
"github.com/intelops/compage/internal/utils"
1416
log "github.com/sirupsen/logrus"
1517
"strings"
1618
)
@@ -125,6 +127,13 @@ func generateIntegrationConfig(dotNetValues *DotNetValues) error {
125127
return err
126128
}
127129

130+
// githubActions files need to be generated for the whole project so, it should be here.
131+
githubActionsCopier := m["githubActions"].(*githubactions.Copier)
132+
if err = githubActionsCopier.CreateYamls(); err != nil {
133+
log.Errorf("err : %s", err)
134+
return err
135+
}
136+
128137
return nil
129138
}
130139

@@ -139,6 +148,8 @@ func getIntegrationsCopier(dotNetValues *DotNetValues) (map[string]interface{},
139148
nodeName := dotNetValues.Values.Get(languages.NodeName)
140149
// dotnet nodes usually have a directory name same as node name itself but in caps.
141150
nodeDirectoryName := strings.Replace(dotNetValues.Values.NodeDirectoryName, nodeName, strcase.ToCamel(nodeName), 1)
151+
projectDirectoryName := utils.GetProjectDirectoryName(dotNetValues.Values.ProjectName)
152+
142153
// rest
143154
isRestServer := dotNetValues.LDotNetLangNode.RestConfig != nil && dotNetValues.LDotNetLangNode.RestConfig.Server != nil
144155
var restServerPort string
@@ -154,8 +165,12 @@ func getIntegrationsCopier(dotNetValues *DotNetValues) (map[string]interface{},
154165
// create dotnet specific k8sCopier
155166
k8sCopier := kubernetes.NewCopier(gitPlatformUserName, gitRepositoryName, nodeName, nodeDirectoryName, dotNetTemplatesRootPath, isRestServer, restServerPort)
156167

168+
// create dotnet specific githubActionsCopier
169+
githubActionsCopier := githubactions.NewCopier(gitPlatformUserName, gitRepositoryName, projectDirectoryName, nodeName, nodeDirectoryName, dotNetTemplatesRootPath)
170+
157171
return map[string]interface{}{
158-
"docker": dockerCopier,
159-
"k8s": k8sCopier,
172+
"docker": dockerCopier,
173+
"k8s": k8sCopier,
174+
"githubActions": githubActionsCopier,
160175
}, nil
161176
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,83 @@
1+
package githubactions
2+
3+
import (
4+
"github.com/intelops/compage/internal/languages/dotnet/frameworks"
5+
"github.com/intelops/compage/internal/languages/executor"
6+
"github.com/intelops/compage/internal/utils"
7+
"strings"
8+
)
9+
10+
const CIFile = "ci.yml.tmpl"
11+
const ReleaseFile = "release.yml.tmpl"
12+
const Path = "/.github/workflows"
13+
14+
// Copier integrations specific copier
15+
type Copier struct {
16+
ProjectDirectoryName string
17+
NodeDirectoryName string
18+
NodeName string
19+
TemplatesRootPath string
20+
Data map[string]interface{}
21+
}
22+
23+
func NewCopier(gitPlatformUserName, gitRepositoryName, projectDirectoryName, nodeName, nodeDirectoryName, templatesRootPath string) *Copier {
24+
// populate map to replace templates
25+
data := map[string]interface{}{
26+
"NodeName": strings.ToLower(nodeName),
27+
"MicroServiceName": frameworks.GetMicroServiceName(nodeDirectoryName),
28+
"GitRepositoryName": gitRepositoryName,
29+
"GitPlatformUserName": gitPlatformUserName,
30+
}
31+
32+
return &Copier{
33+
TemplatesRootPath: templatesRootPath,
34+
NodeDirectoryName: nodeDirectoryName,
35+
NodeName: nodeName,
36+
ProjectDirectoryName: projectDirectoryName,
37+
Data: data,
38+
}
39+
}
40+
41+
// CreateYamls creates required file from language template.
42+
func (c Copier) CreateYamls() error {
43+
destGithubActionsDirectory := c.ProjectDirectoryName + Path
44+
if err := utils.CreateDirectories(destGithubActionsDirectory); err != nil {
45+
return err
46+
}
47+
48+
err := c.createReleaseYaml()
49+
if err != nil {
50+
return err
51+
}
52+
err = c.createCIYaml()
53+
if err != nil {
54+
return err
55+
}
56+
return nil
57+
}
58+
59+
// createCIYaml creates required file from language template.
60+
func (c Copier) createCIYaml() error {
61+
var filePaths []*string
62+
// copy ci.yaml
63+
targetCIYamlName := c.ProjectDirectoryName + Path + "/" + c.NodeName + "-" + CIFile
64+
_, err := utils.CopyFile(targetCIYamlName, c.TemplatesRootPath+Path+"/"+CIFile)
65+
if err != nil {
66+
return err
67+
}
68+
filePaths = append(filePaths, &targetCIYamlName)
69+
return executor.ExecuteGhActions(filePaths, c.Data)
70+
}
71+
72+
// createReleaseYaml creates required file from language template.
73+
func (c Copier) createReleaseYaml() error {
74+
var filePaths []*string
75+
// copy release.yaml
76+
targetReleaseFileName := c.ProjectDirectoryName + Path + "/" + c.NodeName + "-" + ReleaseFile
77+
_, err := utils.CopyFile(targetReleaseFileName, c.TemplatesRootPath+Path+"/"+ReleaseFile)
78+
if err != nil {
79+
return err
80+
}
81+
filePaths = append(filePaths, &targetReleaseFileName)
82+
return executor.ExecuteGhActions(filePaths, c.Data)
83+
}

test/generator_test.go

+1-1
Original file line numberDiff line numberDiff line change
@@ -1424,7 +1424,7 @@ func TestDotNetCleanArchitectureGenerator(t *testing.T) {
14241424
ProjectJSON: restServerConfigJSON,
14251425
}
14261426
defer func() {
1427-
_ = os.RemoveAll("/tmp/first-rest-server-project-dotnet")
1427+
_ = os.RemoveAll(utils.GetProjectDirectoryName("first-rest-server-project-dotnet"))
14281428
}()
14291429

14301430
// retrieve project struct

0 commit comments

Comments
 (0)