|
| 1 | +package nodejs |
| 2 | + |
| 3 | +import ( |
| 4 | + "bytes" |
| 5 | + "context" |
| 6 | + "encoding/json" |
| 7 | + "log" |
| 8 | + |
| 9 | + "github.com/hostinger/api-cli/api" |
| 10 | + "github.com/hostinger/api-cli/output" |
| 11 | + "github.com/hostinger/api-cli/utils" |
| 12 | + "github.com/spf13/cobra" |
| 13 | +) |
| 14 | + |
| 15 | +var UpdateBuildSettingsCmd = &cobra.Command{ |
| 16 | + Use: "update-build-settings <username> <domain>", |
| 17 | + Short: "Update Node.js build settings", |
| 18 | + Long: "Replaces the build settings stored for the website. Send the full set: `node_version` is\nrequired and every nullable field you omit is stored as null. Creates the settings when\nnone exist yet.\n\nThis does not start a build. Stored settings drive Git auto-deployment builds; a build\nstarted through the API uses the values sent in that request, so to rebuild with corrected\nsettings call `Start Node.js build` with the same values. Typical fixes: a wrong `app_type`\nafter auto-detection, or a missing `entry_file` for express, fastify, nest, nuxt and hono\napps.", |
| 19 | + Args: cobra.MatchAll(cobra.ExactArgs(2)), |
| 20 | + Run: func(cmd *cobra.Command, args []string) { |
| 21 | + utils.EnumCheck(cmd, "app-type", []string{"create-react-app", "gatsby", "vite", "angular", "react", "vue", "parcel", "next", "nuxt", "nest", "express", "fastify", "astro", "svelte", "svelte-kit", "hono", "react-router", "nitro", "other"}) |
| 22 | + utils.EnumCheck(cmd, "package-manager", []string{"npm", "yarn", "pnpm"}) |
| 23 | + payload, err := json.Marshal(updateBuildSettingsBody(cmd)) |
| 24 | + if err != nil { |
| 25 | + log.Fatal(err) |
| 26 | + } |
| 27 | + r, err := api.Request().HostingUpdateNodeJsBuildSettingsV1WithBodyWithResponse(context.TODO(), args[0], args[1], "application/json", bytes.NewReader(payload)) |
| 28 | + if err != nil { |
| 29 | + log.Fatal(err) |
| 30 | + } |
| 31 | + |
| 32 | + output.Format(cmd, r.Body, r.StatusCode()) |
| 33 | + }, |
| 34 | +} |
| 35 | + |
| 36 | +func init() { |
| 37 | + UpdateBuildSettingsCmd.Flags().StringP("app-type", "", "", "Node.js application framework. Set it explicitly when auto-detection picked the wrong one. (one of: create-react-app, gatsby, vite, angular, react, vue, parcel, next, nuxt, nest, express, fastify, astro, svelte, svelte-kit, hono, react-router, nitro, other)") |
| 38 | + UpdateBuildSettingsCmd.Flags().StringP("build-script", "", "", "The package.json script that builds the application") |
| 39 | + UpdateBuildSettingsCmd.Flags().StringP("entry-file", "", "", "The main entry point file for the application\n(required for express, fastify, nest, nuxt and hono app types)") |
| 40 | + UpdateBuildSettingsCmd.Flags().IntP("node-version", "", 0, "Node.js major version (one of: 18, 20, 22, 24)") |
| 41 | + UpdateBuildSettingsCmd.Flags().StringP("output-directory", "", "", "Build output directory relative to the root directory") |
| 42 | + UpdateBuildSettingsCmd.Flags().StringP("package-manager", "", "", "Package manager used to install dependencies (one of: npm, yarn, pnpm)") |
| 43 | + UpdateBuildSettingsCmd.Flags().StringP("root-directory", "", "", "Application root directory (where package.json is located) relative to public_html.\nOmit it, or send \".\", for public_html itself.") |
| 44 | + UpdateBuildSettingsCmd.MarkFlagRequired("node-version") |
| 45 | +} |
| 46 | + |
| 47 | +func updateBuildSettingsBody(cmd *cobra.Command) map[string]any { |
| 48 | + body := map[string]any{} |
| 49 | + if cmd.Flags().Changed("app-type") { |
| 50 | + v, _ := cmd.Flags().GetString("app-type") |
| 51 | + body["app_type"] = v |
| 52 | + } |
| 53 | + if cmd.Flags().Changed("build-script") { |
| 54 | + v, _ := cmd.Flags().GetString("build-script") |
| 55 | + body["build_script"] = v |
| 56 | + } |
| 57 | + if cmd.Flags().Changed("entry-file") { |
| 58 | + v, _ := cmd.Flags().GetString("entry-file") |
| 59 | + body["entry_file"] = v |
| 60 | + } |
| 61 | + nodeVersionVal, _ := cmd.Flags().GetInt("node-version") |
| 62 | + body["node_version"] = nodeVersionVal |
| 63 | + if cmd.Flags().Changed("output-directory") { |
| 64 | + v, _ := cmd.Flags().GetString("output-directory") |
| 65 | + body["output_directory"] = v |
| 66 | + } |
| 67 | + if cmd.Flags().Changed("package-manager") { |
| 68 | + v, _ := cmd.Flags().GetString("package-manager") |
| 69 | + body["package_manager"] = v |
| 70 | + } |
| 71 | + if cmd.Flags().Changed("root-directory") { |
| 72 | + v, _ := cmd.Flags().GetString("root-directory") |
| 73 | + body["root_directory"] = v |
| 74 | + } |
| 75 | + return body |
| 76 | +} |
0 commit comments