From 22ab80625aad07af1b9b1926f77268a5fefd912a Mon Sep 17 00:00:00 2001 From: Pehesi97 Date: Fri, 20 Oct 2023 16:02:14 -0300 Subject: [PATCH 01/20] feat: frontend js project type --- assets/docker/Dockerfile.frontendjs.tmpl | 22 ++++++++++++++ example/frontend-js/package.json | 38 ++++++++++++++++++++++++ example/{ => node}/.env.sample | 0 example/{ => node}/index.js | 0 example/{ => node}/package.json | 0 src/cli/template_test.go | 29 ++++++++++++++++-- src/services/k8s/knative_test.go | 6 ++-- src/services/project/project.go | 17 ++++++++--- src/services/project/project_test.go | 7 +++-- src/utils/defaults/defaults.go | 2 ++ 10 files changed, 109 insertions(+), 12 deletions(-) create mode 100644 assets/docker/Dockerfile.frontendjs.tmpl create mode 100644 example/frontend-js/package.json rename example/{ => node}/.env.sample (100%) rename example/{ => node}/index.js (100%) rename example/{ => node}/package.json (100%) diff --git a/assets/docker/Dockerfile.frontendjs.tmpl b/assets/docker/Dockerfile.frontendjs.tmpl new file mode 100644 index 00000000..92b39750 --- /dev/null +++ b/assets/docker/Dockerfile.frontendjs.tmpl @@ -0,0 +1,22 @@ +FROM node:{{ or .RuntimeVersion .DefaultRuntimeVersion }} AS build-env + +WORKDIR /app + +COPY package*.json tsconfig*.json ./ + +RUN {{ .NodeInstallCommand }} + +COPY . . + +RUN npm run build --if-present +RUN npm test + +FROM node:{{ or .RuntimeVersion .DefaultRuntimeVersion }} + +COPY --from=build-env /app /app + +WORKDIR /app + +USER nonroot + +CMD npx http-server ./dist diff --git a/example/frontend-js/package.json b/example/frontend-js/package.json new file mode 100644 index 00000000..5b86e0fc --- /dev/null +++ b/example/frontend-js/package.json @@ -0,0 +1,38 @@ +{ + "name": "frontend-js", + "version": "0.1.0", + "private": true, + "dependencies": { + "@testing-library/jest-dom": "^5.17.0", + "@testing-library/react": "^13.4.0", + "@testing-library/user-event": "^13.5.0", + "react": "^18.2.0", + "react-dom": "^18.2.0", + "react-scripts": "5.0.1", + "web-vitals": "^2.1.4" + }, + "scripts": { + "start": "react-scripts start", + "build": "react-scripts build", + "test": "react-scripts test", + "eject": "react-scripts eject" + }, + "eslintConfig": { + "extends": [ + "react-app", + "react-app/jest" + ] + }, + "browserslist": { + "production": [ + ">0.2%", + "not dead", + "not op_mini all" + ], + "development": [ + "last 1 chrome version", + "last 1 firefox version", + "last 1 safari version" + ] + } +} diff --git a/example/.env.sample b/example/node/.env.sample similarity index 100% rename from example/.env.sample rename to example/node/.env.sample diff --git a/example/index.js b/example/node/index.js similarity index 100% rename from example/index.js rename to example/node/index.js diff --git a/example/package.json b/example/node/package.json similarity index 100% rename from example/package.json rename to example/node/package.json diff --git a/src/cli/template_test.go b/src/cli/template_test.go index 8b0a4311..27bf18fc 100644 --- a/src/cli/template_test.go +++ b/src/cli/template_test.go @@ -51,9 +51,34 @@ USER nonroot CMD ["index.js"] ` +const expectedFrontendJsAppDockerTemplate = `FROM node:20.2.0 AS build-env + +WORKDIR /app + +COPY package*.json tsconfig*.json ./ + +RUN i + +COPY . . + +RUN npm run build --if-present +RUN npm test + +FROM node:20.2.0 + +COPY --from=build-env /app /app + +WORKDIR /app + +USER nonroot + +CMD npx http-server ./dist +` + var projects = map[project.ProjectType]map[string]string{ - project.NodeProject: {"directory": "example", "expectedTemplate": expectedNodeAppDockerTemplate}, - project.GoProject: {"directory": ".", "expectedTemplate": expectedGoAppDockerTemplate}, + project.NodeProject: {"directory": "example/node", "expectedTemplate": expectedNodeAppDockerTemplate}, + project.GoProject: {"directory": ".", "expectedTemplate": expectedGoAppDockerTemplate}, + project.FrontendJsProject: {"directory": "example/frontend-js", "expectedTemplate": expectedFrontendJsAppDockerTemplate}, } func TestShouldRenderDockerTemplate(t *testing.T) { diff --git a/src/services/k8s/knative_test.go b/src/services/k8s/knative_test.go index 47704357..e5e95db2 100644 --- a/src/services/k8s/knative_test.go +++ b/src/services/k8s/knative_test.go @@ -72,7 +72,7 @@ func TestLoadManifestForPrivateService(t *testing.T) { Tag: "v1.1.0", } - serviceManifest, err := LoadManifest(namespace, commitSha, proj, dockerImage, path.Join(root, "example/.env.sample")) + serviceManifest, err := LoadManifest(namespace, commitSha, proj, dockerImage, path.Join(root, "example/node/.env.sample")) if err != nil { t.Fatalf(fmt.Sprintf("Error: %v", err)) @@ -93,7 +93,7 @@ func TestLoadManifestForPublicService(t *testing.T) { imagePullSecrets := []string{"secretPassword123"} proj := &project.Project{Name: "knative_test", - Directory: path.Join(root, "example"), + Directory: path.Join(root, "example/node"), Resources: os.DirFS(root), ImagePullSecrets: imagePullSecrets, IsPrivate: true, @@ -106,7 +106,7 @@ func TestLoadManifestForPublicService(t *testing.T) { Tag: "v1.1.0", } - serviceManifest, err := LoadManifest(namespace, commitSha, proj, dockerImage, path.Join(root, "example/.env.sample")) + serviceManifest, err := LoadManifest(namespace, commitSha, proj, dockerImage, path.Join(root, "example/node/.env.sample")) if err != nil { t.Fatalf(fmt.Sprintf("Error: %v", err)) diff --git a/src/services/project/project.go b/src/services/project/project.go index ce42c300..4d6ad3aa 100644 --- a/src/services/project/project.go +++ b/src/services/project/project.go @@ -15,8 +15,9 @@ import ( type ProjectType string const ( - NodeProject ProjectType = "node" - GoProject ProjectType = "go" + NodeProject ProjectType = "node" + GoProject ProjectType = "go" + FrontendJsProject ProjectType = "frontend-js" ) type Project struct { @@ -74,8 +75,13 @@ func DetectType(directory string) (ProjectType, error) { var detectedRuntimes []ProjectType var projectType ProjectType if _, err := os.Stat(path.Join(directory, "package.json")); err == nil { - detectedRuntimes = append(detectedRuntimes, NodeProject) - projectType = NodeProject + if _, err := os.Stat(path.Join(directory, "dist")); err == nil { + detectedRuntimes = append(detectedRuntimes, FrontendJsProject) + projectType = FrontendJsProject + } else { + detectedRuntimes = append(detectedRuntimes, NodeProject) + projectType = NodeProject + } } if _, err := os.Stat(path.Join(directory, "go.mod")); err == nil { detectedRuntimes = append(detectedRuntimes, GoProject) @@ -98,6 +104,9 @@ func (proj *Project) setRuntimeVersion() error { case GoProject: proj.DefaultRuntimeVersion = defaults.DefaultGoRuntimeVersion return nil + case FrontendJsProject: + proj.DefaultRuntimeVersion = defaults.DefaultFrontendJsRuntimeVersion + return nil default: return fmt.Errorf("cannot detect runtime version for project type %s", proj.Type) } diff --git a/src/services/project/project_test.go b/src/services/project/project_test.go index 22992b2d..80ed65a0 100644 --- a/src/services/project/project_test.go +++ b/src/services/project/project_test.go @@ -11,9 +11,10 @@ import ( ) var projects = map[ProjectType]map[string]string{ - NodeProject: {"directory": "example"}, - GoProject: {"directory": "."}, - "invalid": {"directory": "src"}, + NodeProject: {"directory": "example/node"}, + FrontendJsProject: {"directory": "example/frontend-js"}, + GoProject: {"directory": "."}, + "invalid": {"directory": "src"}, } var root = "../../../" diff --git a/src/utils/defaults/defaults.go b/src/utils/defaults/defaults.go index 78c67281..07cd2dff 100644 --- a/src/utils/defaults/defaults.go +++ b/src/utils/defaults/defaults.go @@ -16,3 +16,5 @@ const DefaultNodeRuntimeVersion string = "20.2.0" // renovate: datasource=docker depName=golang const DefaultGoRuntimeVersion string = "1.20.4" + +const DefaultFrontendJsRuntimeVersion string = "20.2.0" From eef1ba307d3f8dab19d31fd5d8560c8b6582be07 Mon Sep 17 00:00:00 2001 From: Pehesi97 Date: Fri, 20 Oct 2023 16:06:16 -0300 Subject: [PATCH 02/20] fix: npm i command --- assets/docker/Dockerfile.frontendjs.tmpl | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/assets/docker/Dockerfile.frontendjs.tmpl b/assets/docker/Dockerfile.frontendjs.tmpl index 92b39750..48843c01 100644 --- a/assets/docker/Dockerfile.frontendjs.tmpl +++ b/assets/docker/Dockerfile.frontendjs.tmpl @@ -4,7 +4,7 @@ WORKDIR /app COPY package*.json tsconfig*.json ./ -RUN {{ .NodeInstallCommand }} +RUN npm {{ .NodeInstallCommand }} COPY . . From 52a88b82398d66a4f6a79dac3f782b3bd59f1884 Mon Sep 17 00:00:00 2001 From: Pehesi97 Date: Mon, 23 Oct 2023 09:06:59 -0300 Subject: [PATCH 03/20] fix: frontend tests --- assets/docker/Dockerfile.frontendjs.tmpl | 2 +- src/services/project/project_test.go | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/assets/docker/Dockerfile.frontendjs.tmpl b/assets/docker/Dockerfile.frontendjs.tmpl index 48843c01..92b39750 100644 --- a/assets/docker/Dockerfile.frontendjs.tmpl +++ b/assets/docker/Dockerfile.frontendjs.tmpl @@ -4,7 +4,7 @@ WORKDIR /app COPY package*.json tsconfig*.json ./ -RUN npm {{ .NodeInstallCommand }} +RUN {{ .NodeInstallCommand }} COPY . . diff --git a/src/services/project/project_test.go b/src/services/project/project_test.go index 80ed65a0..8572579c 100644 --- a/src/services/project/project_test.go +++ b/src/services/project/project_test.go @@ -140,7 +140,7 @@ func TestNodeInstallCommand(t *testing.T) { Resources: os.DirFS(root), } - if project_type == NodeProject { + if project_type == NodeProject || project_type == FrontendJsProject { expected := "npm i" installCommand := proj.NodeInstallCommand() if installCommand != expected { From e94eb6d14136a4497a2ca20b5da7ce3d33b4575a Mon Sep 17 00:00:00 2001 From: Pehesi97 Date: Mon, 23 Oct 2023 14:26:17 -0300 Subject: [PATCH 04/20] fix: newline on docker templates --- ...ockerfile.frontendjs.tmpl => Dockerfile.frontend-js.tmpl} | 0 assets/docker/Dockerfile.go.tmpl | 2 +- assets/docker/Dockerfile.node.tmpl | 2 +- src/cli/template_test.go | 5 ++++- 4 files changed, 6 insertions(+), 3 deletions(-) rename assets/docker/{Dockerfile.frontendjs.tmpl => Dockerfile.frontend-js.tmpl} (100%) diff --git a/assets/docker/Dockerfile.frontendjs.tmpl b/assets/docker/Dockerfile.frontend-js.tmpl similarity index 100% rename from assets/docker/Dockerfile.frontendjs.tmpl rename to assets/docker/Dockerfile.frontend-js.tmpl diff --git a/assets/docker/Dockerfile.go.tmpl b/assets/docker/Dockerfile.go.tmpl index 115fd187..91f9b7e7 100644 --- a/assets/docker/Dockerfile.go.tmpl +++ b/assets/docker/Dockerfile.go.tmpl @@ -12,4 +12,4 @@ RUN CGO_ENABLED=0 go build -o /go/bin/app FROM gcr.io/distroless/static-debian11 COPY --from=build /go/bin/app / -ENTRYPOINT ["/app"] \ No newline at end of file +ENTRYPOINT ["/app"] diff --git a/assets/docker/Dockerfile.node.tmpl b/assets/docker/Dockerfile.node.tmpl index c871a9ca..00199f50 100644 --- a/assets/docker/Dockerfile.node.tmpl +++ b/assets/docker/Dockerfile.node.tmpl @@ -15,4 +15,4 @@ FROM gcr.io/distroless/nodejs20-debian11 COPY --from=build-env /app /app WORKDIR /app USER nonroot -CMD ["index.js"] \ No newline at end of file +CMD ["index.js"] diff --git a/src/cli/template_test.go b/src/cli/template_test.go index 27bf18fc..d57de112 100644 --- a/src/cli/template_test.go +++ b/src/cli/template_test.go @@ -29,6 +29,7 @@ FROM gcr.io/distroless/static-debian11 COPY --from=build /go/bin/app / ENTRYPOINT ["/app"] + ` const expectedNodeAppDockerTemplate = `FROM node:20.2.0 AS build-env @@ -49,6 +50,7 @@ COPY --from=build-env /app /app WORKDIR /app USER nonroot CMD ["index.js"] + ` const expectedFrontendJsAppDockerTemplate = `FROM node:20.2.0 AS build-env @@ -57,7 +59,7 @@ WORKDIR /app COPY package*.json tsconfig*.json ./ -RUN i +RUN npm i COPY . . @@ -73,6 +75,7 @@ WORKDIR /app USER nonroot CMD npx http-server ./dist + ` var projects = map[project.ProjectType]map[string]string{ From 060b6008e743b99999a9178541eef5982d0204ff Mon Sep 17 00:00:00 2001 From: Pehesi97 Date: Mon, 23 Oct 2023 16:12:36 -0300 Subject: [PATCH 05/20] fix: create dist folder in example frontend project --- .gitignore | 2 +- example/frontend-js/dist/index.js | 1 + src/services/project/project.go | 2 ++ 3 files changed, 4 insertions(+), 1 deletion(-) create mode 100644 example/frontend-js/dist/index.js diff --git a/.gitignore b/.gitignore index 17b956ba..fe3c001b 100644 --- a/.gitignore +++ b/.gitignore @@ -5,6 +5,6 @@ Dockerfile.initium *.init_test* initium_onmain.yaml initium_onbranch.yaml -dist/ +/dist node_modules diff --git a/example/frontend-js/dist/index.js b/example/frontend-js/dist/index.js new file mode 100644 index 00000000..98551b64 --- /dev/null +++ b/example/frontend-js/dist/index.js @@ -0,0 +1 @@ +console.log('index') diff --git a/src/services/project/project.go b/src/services/project/project.go index 4d6ad3aa..9fe80b56 100644 --- a/src/services/project/project.go +++ b/src/services/project/project.go @@ -66,6 +66,8 @@ func IsValidProjectType(projectType string) bool { return true case string(GoProject): return true + case string(FrontendJsProject): + return true default: return false } From 4077dd8d3e5670c34e91a261a42dad9193f5bb15 Mon Sep 17 00:00:00 2001 From: Pehesi97 Date: Mon, 23 Oct 2023 17:06:38 -0300 Subject: [PATCH 06/20] fix: improve frontend detection --- src/services/project/project.go | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/src/services/project/project.go b/src/services/project/project.go index 9fe80b56..e352f87b 100644 --- a/src/services/project/project.go +++ b/src/services/project/project.go @@ -6,6 +6,7 @@ import ( "io/fs" "os" "path" + "strings" "text/template" "github.com/nearform/initium-cli/src/services/git" @@ -77,7 +78,12 @@ func DetectType(directory string) (ProjectType, error) { var detectedRuntimes []ProjectType var projectType ProjectType if _, err := os.Stat(path.Join(directory, "package.json")); err == nil { - if _, err := os.Stat(path.Join(directory, "dist")); err == nil { + bytes, err := os.ReadFile(path.Join(directory, "package.json")) + if err != nil { + fmt.Print(err) + } + fileStr := string(bytes) + if strings.Contains(fileStr, "react") || strings.Contains(fileStr, "angular") || strings.Contains(fileStr, "vue") { detectedRuntimes = append(detectedRuntimes, FrontendJsProject) projectType = FrontendJsProject } else { From c8191c1958124f1fc25f6ecd2950f746e9808fa1 Mon Sep 17 00:00:00 2001 From: Pehesi97 Date: Mon, 23 Oct 2023 18:01:32 -0300 Subject: [PATCH 07/20] fix: using user node --- assets/docker/Dockerfile.frontend-js.tmpl | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/assets/docker/Dockerfile.frontend-js.tmpl b/assets/docker/Dockerfile.frontend-js.tmpl index 92b39750..1ec7e7df 100644 --- a/assets/docker/Dockerfile.frontend-js.tmpl +++ b/assets/docker/Dockerfile.frontend-js.tmpl @@ -17,6 +17,6 @@ COPY --from=build-env /app /app WORKDIR /app -USER nonroot +USER node CMD npx http-server ./dist From a1c0c6ed2811dfdeb0e1d6104905e4c778abfe67 Mon Sep 17 00:00:00 2001 From: Pehesi97 Date: Mon, 23 Oct 2023 18:06:15 -0300 Subject: [PATCH 08/20] fix: docker template test --- src/cli/template_test.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/cli/template_test.go b/src/cli/template_test.go index d57de112..dd7fc50c 100644 --- a/src/cli/template_test.go +++ b/src/cli/template_test.go @@ -72,7 +72,7 @@ COPY --from=build-env /app /app WORKDIR /app -USER nonroot +USER node CMD npx http-server ./dist From 84b5982994d848500914c7a629e17061a3152c58 Mon Sep 17 00:00:00 2001 From: Pehesi97 Date: Tue, 24 Oct 2023 11:04:58 -0300 Subject: [PATCH 09/20] fix: expose frontend port --- assets/docker/Dockerfile.frontend-js.tmpl | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/assets/docker/Dockerfile.frontend-js.tmpl b/assets/docker/Dockerfile.frontend-js.tmpl index 1ec7e7df..2df58564 100644 --- a/assets/docker/Dockerfile.frontend-js.tmpl +++ b/assets/docker/Dockerfile.frontend-js.tmpl @@ -17,6 +17,8 @@ COPY --from=build-env /app /app WORKDIR /app +EXPOSE 3000 + USER node -CMD npx http-server ./dist +CMD npx http-server -p 3000 ./dist From 8d089ab8c18431715c95678f39a2105641e2fa34 Mon Sep 17 00:00:00 2001 From: Pehesi97 Date: Tue, 24 Oct 2023 13:12:17 -0300 Subject: [PATCH 10/20] fix: expected frontend docker template --- src/cli/template_test.go | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/cli/template_test.go b/src/cli/template_test.go index dd7fc50c..8c695ce2 100644 --- a/src/cli/template_test.go +++ b/src/cli/template_test.go @@ -72,9 +72,11 @@ COPY --from=build-env /app /app WORKDIR /app +EXPOSE 3000 + USER node -CMD npx http-server ./dist +CMD npx http-server -p 3000 ./dist ` From a04fb6ae3987d8f9874488e284c18c0510def055 Mon Sep 17 00:00:00 2001 From: Pehesi97 Date: Tue, 24 Oct 2023 15:33:27 -0300 Subject: [PATCH 11/20] fix: expose build folder --- assets/docker/Dockerfile.frontend-js.tmpl | 2 +- src/cli/template_test.go | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/assets/docker/Dockerfile.frontend-js.tmpl b/assets/docker/Dockerfile.frontend-js.tmpl index 2df58564..2091de1c 100644 --- a/assets/docker/Dockerfile.frontend-js.tmpl +++ b/assets/docker/Dockerfile.frontend-js.tmpl @@ -21,4 +21,4 @@ EXPOSE 3000 USER node -CMD npx http-server -p 3000 ./dist +CMD npx http-server -p 3000 ./build diff --git a/src/cli/template_test.go b/src/cli/template_test.go index 8c695ce2..c4b6bfa1 100644 --- a/src/cli/template_test.go +++ b/src/cli/template_test.go @@ -76,7 +76,7 @@ EXPOSE 3000 USER node -CMD npx http-server -p 3000 ./dist +CMD npx http-server -p 3000 ./build ` From 7919cd051bd2dc4fa13937d3b68afc2701894afe Mon Sep 17 00:00:00 2001 From: Pehesi97 Date: Wed, 25 Oct 2023 18:15:31 -0300 Subject: [PATCH 12/20] fix: env ci true --- assets/docker/Dockerfile.frontend-js.tmpl | 2 ++ 1 file changed, 2 insertions(+) diff --git a/assets/docker/Dockerfile.frontend-js.tmpl b/assets/docker/Dockerfile.frontend-js.tmpl index 2091de1c..a6911f64 100644 --- a/assets/docker/Dockerfile.frontend-js.tmpl +++ b/assets/docker/Dockerfile.frontend-js.tmpl @@ -1,5 +1,7 @@ FROM node:{{ or .RuntimeVersion .DefaultRuntimeVersion }} AS build-env +ENV CI=true + WORKDIR /app COPY package*.json tsconfig*.json ./ From 2ecb9272a9e8fbb453fcb0a6454f1524358dfc4e Mon Sep 17 00:00:00 2001 From: Pehesi97 Date: Thu, 26 Oct 2023 11:22:36 -0300 Subject: [PATCH 13/20] fix: expected image template test --- src/cli/template_test.go | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/cli/template_test.go b/src/cli/template_test.go index c4b6bfa1..74cf9244 100644 --- a/src/cli/template_test.go +++ b/src/cli/template_test.go @@ -55,6 +55,8 @@ CMD ["index.js"] const expectedFrontendJsAppDockerTemplate = `FROM node:20.2.0 AS build-env +ENV CI=true + WORKDIR /app COPY package*.json tsconfig*.json ./ From 9672bf1512be8b1eed796ab809bce865e74760f1 Mon Sep 17 00:00:00 2001 From: Pehesi97 Date: Thu, 26 Oct 2023 14:26:02 -0300 Subject: [PATCH 14/20] fix: reverting to default knative service port on frontend --- assets/docker/Dockerfile.frontend-js.tmpl | 4 +--- example/frontend-js/build/index.html | 14 ++++++++++++++ example/frontend-js/dist/index.js | 1 - src/cli/template_test.go | 4 +--- 4 files changed, 16 insertions(+), 7 deletions(-) create mode 100644 example/frontend-js/build/index.html delete mode 100644 example/frontend-js/dist/index.js diff --git a/assets/docker/Dockerfile.frontend-js.tmpl b/assets/docker/Dockerfile.frontend-js.tmpl index a6911f64..ea99ce7d 100644 --- a/assets/docker/Dockerfile.frontend-js.tmpl +++ b/assets/docker/Dockerfile.frontend-js.tmpl @@ -19,8 +19,6 @@ COPY --from=build-env /app /app WORKDIR /app -EXPOSE 3000 - USER node -CMD npx http-server -p 3000 ./build +CMD npx http-server -p 8080 ./build diff --git a/example/frontend-js/build/index.html b/example/frontend-js/build/index.html new file mode 100644 index 00000000..ee7a0cda --- /dev/null +++ b/example/frontend-js/build/index.html @@ -0,0 +1,14 @@ + + + + + + + Initium Frontend Sample + + + + Welcome to Initium! + + + diff --git a/example/frontend-js/dist/index.js b/example/frontend-js/dist/index.js deleted file mode 100644 index 98551b64..00000000 --- a/example/frontend-js/dist/index.js +++ /dev/null @@ -1 +0,0 @@ -console.log('index') diff --git a/src/cli/template_test.go b/src/cli/template_test.go index 74cf9244..7400856e 100644 --- a/src/cli/template_test.go +++ b/src/cli/template_test.go @@ -74,11 +74,9 @@ COPY --from=build-env /app /app WORKDIR /app -EXPOSE 3000 - USER node -CMD npx http-server -p 3000 ./build +CMD npx http-server -p 8080 ./build ` From 616491c178839db0da3e5be073c4824ca5b5d19c Mon Sep 17 00:00:00 2001 From: Pehesi97 Date: Thu, 26 Oct 2023 18:12:59 -0300 Subject: [PATCH 15/20] fix: detect frontend frameworks only in node dependencies --- README.md | 1 + src/services/project/project.go | 15 +++++++++++++-- 2 files changed, 14 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index e7ce75f8..29f32079 100644 --- a/README.md +++ b/README.md @@ -68,6 +68,7 @@ Following we have a matrix related to which application runtime our CLI is curre |----------------------|:------------------:| | [Nodejs](https://github.com/nearform/initium-cli/blob/main/assets/docker/Dockerfile.node.tmpl) | :white_check_mark: | | [GoLang](https://github.com/nearform/initium-cli/blob/main/assets/docker/Dockerfile.go.tmpl) | :white_check_mark: | +| [Frontend](https://github.com/nearform/initium-cli/blob/main/assets/docker/Dockerfile.frontend-js.tmpl) | :white_check_mark: | | Python | Coming Soon | | More will be added...| | diff --git a/src/services/project/project.go b/src/services/project/project.go index e352f87b..323bc2bf 100644 --- a/src/services/project/project.go +++ b/src/services/project/project.go @@ -2,6 +2,7 @@ package project import ( "bytes" + "encoding/json" "fmt" "io/fs" "os" @@ -79,11 +80,21 @@ func DetectType(directory string) (ProjectType, error) { var projectType ProjectType if _, err := os.Stat(path.Join(directory, "package.json")); err == nil { bytes, err := os.ReadFile(path.Join(directory, "package.json")) + var result map[string]any + json.Unmarshal([]byte(bytes), &result) + dependencies := result["dependencies"].(map[string]string) + if err != nil { fmt.Print(err) } - fileStr := string(bytes) - if strings.Contains(fileStr, "react") || strings.Contains(fileStr, "angular") || strings.Contains(fileStr, "vue") { + + frontendDetected := false + for dependency := range dependencies { + if strings.Contains(dependency, "react") || strings.Contains(dependency, "angular") || strings.Contains(dependency, "vue") { + frontendDetected = true + } + } + if frontendDetected { detectedRuntimes = append(detectedRuntimes, FrontendJsProject) projectType = FrontendJsProject } else { From e4c7529700d62a030684583ca01d0df3651ca149 Mon Sep 17 00:00:00 2001 From: Pehesi97 Date: Thu, 26 Oct 2023 18:13:22 -0300 Subject: [PATCH 16/20] docs: fix frontend type in readme --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 29f32079..1180a1ab 100644 --- a/README.md +++ b/README.md @@ -68,7 +68,7 @@ Following we have a matrix related to which application runtime our CLI is curre |----------------------|:------------------:| | [Nodejs](https://github.com/nearform/initium-cli/blob/main/assets/docker/Dockerfile.node.tmpl) | :white_check_mark: | | [GoLang](https://github.com/nearform/initium-cli/blob/main/assets/docker/Dockerfile.go.tmpl) | :white_check_mark: | -| [Frontend](https://github.com/nearform/initium-cli/blob/main/assets/docker/Dockerfile.frontend-js.tmpl) | :white_check_mark: | +| [JS Frontend](https://github.com/nearform/initium-cli/blob/main/assets/docker/Dockerfile.frontend-js.tmpl) | :white_check_mark: | | Python | Coming Soon | | More will be added...| | From ea6d1ba8e2cc2cffbe0a2dbd25d6bc33b4627f0f Mon Sep 17 00:00:00 2001 From: Pehesi97 Date: Fri, 27 Oct 2023 12:01:49 -0300 Subject: [PATCH 17/20] fix: use the default port or process.env.PORT --- assets/docker/Dockerfile.frontend-js.tmpl | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/assets/docker/Dockerfile.frontend-js.tmpl b/assets/docker/Dockerfile.frontend-js.tmpl index ea99ce7d..1a6eff07 100644 --- a/assets/docker/Dockerfile.frontend-js.tmpl +++ b/assets/docker/Dockerfile.frontend-js.tmpl @@ -21,4 +21,4 @@ WORKDIR /app USER node -CMD npx http-server -p 8080 ./build +CMD npx http-server ./build From 9a93d51480fb7fbf81005bc0103c0397bd41b45f Mon Sep 17 00:00:00 2001 From: Pehesi97 Date: Fri, 27 Oct 2023 12:05:33 -0300 Subject: [PATCH 18/20] fix: changing CMD to ENTRYPOINT --- assets/docker/Dockerfile.frontend-js.tmpl | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/assets/docker/Dockerfile.frontend-js.tmpl b/assets/docker/Dockerfile.frontend-js.tmpl index 1a6eff07..87f06a33 100644 --- a/assets/docker/Dockerfile.frontend-js.tmpl +++ b/assets/docker/Dockerfile.frontend-js.tmpl @@ -21,4 +21,4 @@ WORKDIR /app USER node -CMD npx http-server ./build +ENTRYPOINT npx http-server ./build From 2fd755a40f4d4f83da22ec9cb84e59e03d674224 Mon Sep 17 00:00:00 2001 From: Pehesi97 Date: Fri, 27 Oct 2023 16:23:19 -0300 Subject: [PATCH 19/20] fix: dependencies object format --- src/services/project/project.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/services/project/project.go b/src/services/project/project.go index 323bc2bf..c61380e8 100644 --- a/src/services/project/project.go +++ b/src/services/project/project.go @@ -82,7 +82,7 @@ func DetectType(directory string) (ProjectType, error) { bytes, err := os.ReadFile(path.Join(directory, "package.json")) var result map[string]any json.Unmarshal([]byte(bytes), &result) - dependencies := result["dependencies"].(map[string]string) + dependencies := result["dependencies"].(map[string]any) if err != nil { fmt.Print(err) From c62cbc30ad9a6b591aa86579169d1fc689bd7c60 Mon Sep 17 00:00:00 2001 From: Pehesi97 Date: Fri, 27 Oct 2023 16:31:22 -0300 Subject: [PATCH 20/20] fix: json unmarshalling --- src/services/project/project.go | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/services/project/project.go b/src/services/project/project.go index c61380e8..d58b3eb0 100644 --- a/src/services/project/project.go +++ b/src/services/project/project.go @@ -81,7 +81,7 @@ func DetectType(directory string) (ProjectType, error) { if _, err := os.Stat(path.Join(directory, "package.json")); err == nil { bytes, err := os.ReadFile(path.Join(directory, "package.json")) var result map[string]any - json.Unmarshal([]byte(bytes), &result) + json.Unmarshal(bytes, &result) dependencies := result["dependencies"].(map[string]any) if err != nil { @@ -90,7 +90,7 @@ func DetectType(directory string) (ProjectType, error) { frontendDetected := false for dependency := range dependencies { - if strings.Contains(dependency, "react") || strings.Contains(dependency, "angular") || strings.Contains(dependency, "vue") { + if strings.Contains(string(dependency), "react") || strings.Contains(string(dependency), "angular") || strings.Contains(string(dependency), "vue") { frontendDetected = true } }