feat: new page UI + db fixes + installer improvements
This commit is contained in:
@@ -3,100 +3,106 @@ package main
|
||||
import (
|
||||
"fmt"
|
||||
"runtime"
|
||||
"time"
|
||||
|
||||
"github.com/gosuri/uiprogress"
|
||||
"github.com/manifoldco/promptui"
|
||||
"github.com/ttacon/chalk"
|
||||
"github.com/bugsnag/bugsnag-go"
|
||||
"github.com/fatih/color"
|
||||
"gopkg.in/AlecAivazis/survey.v1"
|
||||
)
|
||||
|
||||
var logo = `
|
||||
__ __ _ _ _ _
|
||||
/ / /\ \ (_) | _(_) (_)___
|
||||
\ \/ \/ / | |/ / | | / __|
|
||||
\ /\ /| | <| |_ | \__ \
|
||||
\/ \/ |_|_|\_\_(_)/ |___/
|
||||
|__/
|
||||
`
|
||||
|
||||
var finish = `
|
||||
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
|
||||
| |
|
||||
| Open http://localhost:3000/ in your browser |
|
||||
| to complete the installation! |
|
||||
| |
|
||||
<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
|
||||
`
|
||||
var qs = []*survey.Question{
|
||||
{
|
||||
Name: "location",
|
||||
Prompt: &survey.Input{
|
||||
Message: "Where do you want to install Wiki.js?",
|
||||
Default: "./wiki",
|
||||
},
|
||||
Validate: survey.Required,
|
||||
},
|
||||
{
|
||||
Name: "dbtype",
|
||||
Prompt: &survey.Select{
|
||||
Message: "Select a DB Driver:",
|
||||
Options: []string{"MariabDB", "MS SQL Server", "MySQL", "PostgreSQL", "SQLite"},
|
||||
Default: "PostgreSQL",
|
||||
},
|
||||
},
|
||||
{
|
||||
Name: "port",
|
||||
Prompt: &survey.Input{
|
||||
Message: "Server Port:",
|
||||
Default: "3000",
|
||||
},
|
||||
},
|
||||
}
|
||||
|
||||
func main() {
|
||||
fmt.Println(chalk.Yellow.Color(logo))
|
||||
fmt.Println(chalk.Bold.TextStyle("Installer for Wiki.js 2.x"))
|
||||
bugsnag.Configure(bugsnag.Configuration{
|
||||
APIKey: "37770b3b08864599fd47c4edba5aa656",
|
||||
ReleaseStage: "dev",
|
||||
})
|
||||
|
||||
bold := color.New(color.FgWhite).Add(color.Bold)
|
||||
|
||||
logo := `
|
||||
__ __ _ _ _ _
|
||||
/ / /\ \ (_) | _(_) (_)___
|
||||
\ \/ \/ / | |/ / | | / __|
|
||||
\ /\ /| | <| |_ | \__ \
|
||||
\/ \/ |_|_|\_\_(_)/ |___/
|
||||
|__/
|
||||
`
|
||||
color.Yellow(logo)
|
||||
|
||||
bold.Println("\nInstaller for Wiki.js 2.x")
|
||||
fmt.Printf("%s-%s\n\n", runtime.GOOS, runtime.GOARCH)
|
||||
|
||||
// Check system requirements
|
||||
|
||||
fmt.Println(chalk.Bold.TextStyle("Verifying system requirements..."))
|
||||
bold.Println("Verifying system requirements...")
|
||||
CheckNodeJs()
|
||||
CheckRAM()
|
||||
fmt.Println(chalk.Bold.TextStyle("\nSetup"))
|
||||
fmt.Println()
|
||||
|
||||
// Prompt for build to install
|
||||
|
||||
promptBuild := promptui.Select{
|
||||
Label: "Select Build to install",
|
||||
Items: []string{"Stable", "Dev"},
|
||||
Templates: &promptui.SelectTemplates{
|
||||
Help: " ",
|
||||
Selected: chalk.Green.Color("✔") + " Build: {{ . }}",
|
||||
},
|
||||
}
|
||||
|
||||
_, _, err := promptBuild.Run()
|
||||
// the answers will be written to this struct
|
||||
answers := struct {
|
||||
Location string
|
||||
DBType string `survey:"dbtype"`
|
||||
Port int
|
||||
}{}
|
||||
|
||||
// perform the questions
|
||||
err := survey.Ask(qs, &answers)
|
||||
if err != nil {
|
||||
fmt.Printf("Prompt failed %v\n", err)
|
||||
fmt.Println(err.Error())
|
||||
return
|
||||
}
|
||||
|
||||
// Choose database driver
|
||||
|
||||
promptDB := promptui.Select{
|
||||
Label: "Select database driver",
|
||||
Items: []string{"MariaDB", "MySQL", "MS SQL Server", "PostgreSQL", "SQLite"},
|
||||
Templates: &promptui.SelectTemplates{
|
||||
Help: " ",
|
||||
Selected: chalk.Green.Color("✔") + " Database Driver: {{ . }}",
|
||||
},
|
||||
Size: 10,
|
||||
}
|
||||
|
||||
_, _, err = promptDB.Run()
|
||||
|
||||
// Port
|
||||
|
||||
promptPort := promptui.Prompt{
|
||||
Label: "Port",
|
||||
Default: "3000",
|
||||
Templates: &promptui.PromptTemplates{
|
||||
Success: chalk.Green.Color("✔") + " Port: {{ . }}",
|
||||
},
|
||||
}
|
||||
|
||||
_, err = promptPort.Run()
|
||||
fmt.Printf("%s chose %d.", answers.Location, answers.Port)
|
||||
|
||||
// Download archives...
|
||||
|
||||
fmt.Println(chalk.Bold.TextStyle("\nDownloading packages..."))
|
||||
bold.Println("\nDownloading packages...")
|
||||
|
||||
uiprogress.Start()
|
||||
bar := uiprogress.AddBar(100)
|
||||
// uiprogress.Start()
|
||||
// bar := uiprogress.AddBar(100)
|
||||
|
||||
bar.AppendCompleted()
|
||||
bar.PrependElapsed()
|
||||
// bar.AppendCompleted()
|
||||
// bar.PrependElapsed()
|
||||
|
||||
for bar.Incr() {
|
||||
time.Sleep(time.Millisecond * 20)
|
||||
}
|
||||
// for bar.Incr() {
|
||||
// time.Sleep(time.Millisecond * 20)
|
||||
// }
|
||||
|
||||
fmt.Println("\n" + chalk.Yellow.Color(finish))
|
||||
finish := `
|
||||
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
|
||||
| |
|
||||
| Open http://localhost:3000/ in your browser |
|
||||
| to complete the installation! |
|
||||
| |
|
||||
<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
|
||||
`
|
||||
color.Yellow("\n\n" + finish)
|
||||
|
||||
fmt.Println("Press any key to continue.")
|
||||
fmt.Scanln()
|
||||
}
|
||||
|
@@ -3,15 +3,14 @@ package main
|
||||
import (
|
||||
"fmt"
|
||||
"log"
|
||||
"os"
|
||||
"os/exec"
|
||||
|
||||
"github.com/blang/semver"
|
||||
"github.com/fatih/color"
|
||||
"github.com/pbnjay/memory"
|
||||
"github.com/ttacon/chalk"
|
||||
)
|
||||
|
||||
const nodejsSemverRange = ">=8.11.3 <10.0.0"
|
||||
const nodejsSemverRange = ">=8.11.4 <11.0.0"
|
||||
const ramMin = 768
|
||||
|
||||
// CheckNodeJs checks if Node.js is installed and has minimal supported version
|
||||
@@ -25,11 +24,10 @@ func CheckNodeJs() bool {
|
||||
validRange := semver.MustParseRange(nodejsSemverRange)
|
||||
nodeVersion, err := semver.ParseTolerant(string(cmdOutput[:]))
|
||||
if !validRange(nodeVersion) {
|
||||
fmt.Printf(chalk.Red.Color("Error: Installed Node.js version is not supported! %s"), nodejsSemverRange)
|
||||
os.Exit(1)
|
||||
panic(fmt.Errorf(color.RedString("Error: Installed Node.js version %s is not supported! %s\n"), nodeVersion, nodejsSemverRange))
|
||||
}
|
||||
|
||||
fmt.Printf(chalk.Green.Color("✔")+" Node.js %s: OK\n", nodeVersion.String())
|
||||
fmt.Printf(color.GreenString("✔")+" Node.js %s: OK\n", nodeVersion.String())
|
||||
|
||||
return true
|
||||
}
|
||||
@@ -38,11 +36,10 @@ func CheckNodeJs() bool {
|
||||
func CheckRAM() bool {
|
||||
var totalRAM = memory.TotalMemory() / 1024 / 1024
|
||||
if totalRAM < ramMin {
|
||||
fmt.Printf(chalk.Red.Color("Error: System does not meet RAM requirements. %s MB minimum."), ramMin)
|
||||
os.Exit(1)
|
||||
panic(fmt.Errorf(color.RedString("Error: System does not meet RAM requirements. %s MB minimum.\n"), ramMin))
|
||||
}
|
||||
|
||||
fmt.Printf(chalk.Green.Color("✔")+" Total System RAM %d MB: OK\n", totalRAM)
|
||||
fmt.Printf(color.GreenString("✔")+" Total System RAM %d MB: OK\n", totalRAM)
|
||||
|
||||
return true
|
||||
}
|
||||
|
Reference in New Issue
Block a user