diff --git a/cli/package.json b/cli/package.json index aff18af49..0df7ba952 100644 --- a/cli/package.json +++ b/cli/package.json @@ -22,6 +22,7 @@ "dependencies": { "ink": "^3.2.0", "meow": "^10.1.2", + "mongoose": "^6.2.7", "react": "^17.0.2" } } diff --git a/cli/src/App.tsx b/cli/src/App.tsx index 3002cd3f3..f9739a793 100644 --- a/cli/src/App.tsx +++ b/cli/src/App.tsx @@ -1,6 +1,5 @@ import React, { ReactNode, useState } from "react"; import { Box, Newline, Text, useInput } from "ink"; -import Builds from "./components/Builds"; import FinalConfig from "./components/FinalConfig"; import { useConfig, useSequence } from "./hooks"; import { Config } from "./types"; @@ -17,7 +16,6 @@ const App = () => { const [periphery, setPeriphery] = useState(); const [installing, setInstalling] = useState(false); const [config, setConfig] = useConfig({ - useBuilds: false, mongoURL: "", registryURL: "", }); @@ -25,7 +23,6 @@ const App = () => { const corePages: ReactNode[] = [ , , - , ]; const peripheryPages: ReactNode[] = []; diff --git a/cli/src/components/Builds.tsx b/cli/src/components/Builds.tsx deleted file mode 100644 index c5362ce4b..000000000 --- a/cli/src/components/Builds.tsx +++ /dev/null @@ -1,33 +0,0 @@ -import { Box, Newline, Text } from "ink"; -import React from "react"; -import { SetConfig } from "../types"; -import Selector from "./util/Selector"; - -const Builds = (p: { setConfig: SetConfig; next: () => void }) => { - return ( - - Would you like to enable docker build services? - - This will create a{" "} - - docker registry - {" "} - and enable Monitor to act as a{" "} - - build server - - . - - - { - p.setConfig("useBuilds", item === "yes"); - p.next(); - }} - /> - - ); -}; - -export default Builds; diff --git a/cli/src/components/FinalConfig.tsx b/cli/src/components/FinalConfig.tsx index d700033c3..03d029012 100644 --- a/cli/src/components/FinalConfig.tsx +++ b/cli/src/components/FinalConfig.tsx @@ -35,10 +35,6 @@ const FinalConfig = (p: { registry url: {p.config.registryURL} - - use builds:{" "} - {p.config.useBuilds ? "yes" : "no"} - diff --git a/cli/src/components/mongo/Mongo.tsx b/cli/src/components/mongo/Mongo.tsx index 37561951c..72add254f 100644 --- a/cli/src/components/mongo/Mongo.tsx +++ b/cli/src/components/mongo/Mongo.tsx @@ -79,6 +79,11 @@ const Mongo = ({ + + note: remember to specify the database name in the url, ie + mongodb://localhost:27017/monitor + + {confirm && ( press{" "} diff --git a/cli/src/helpers/general.ts b/cli/src/helpers/general.ts new file mode 100644 index 000000000..e32c0bcdf --- /dev/null +++ b/cli/src/helpers/general.ts @@ -0,0 +1,3 @@ +export function toDashedName(name: string) { + return name.toLowerCase().replaceAll(" ", "-"); +} \ No newline at end of file diff --git a/cli/src/helpers/mongoose/deployment.ts b/cli/src/helpers/mongoose/deployment.ts new file mode 100644 index 000000000..cb8445dcd --- /dev/null +++ b/cli/src/helpers/mongoose/deployment.ts @@ -0,0 +1,44 @@ +import { Deployment } from "@monitor/types"; +import { model, Schema } from "mongoose"; + +export default function deploymentModel() { + const Conversion = new Schema({ + local: String, + container: String, + }); + + const Volume = new Schema({ + variable: String, + value: String, + }); + + const EnvironmentVar = new Schema({ + variable: String, + value: String, + }); + + const schema = new Schema({ + name: { type: String, unique: true, index: true }, + containerName: { type: String, unique: true, index: true }, // for auto pull of frontend repo as well + owner: { type: String, index: true }, + serverID: { type: String, index: true }, + buildID: { type: String, index: true }, // if deploying a monitor build + /* to create docker run command */ + image: String, // used if deploying an external image (from docker hub) + latest: Boolean, // if custom image, use this to add :latest + ports: [Conversion], + volumes: [Volume], + environment: [EnvironmentVar], + network: String, + restart: String, + postImage: String, // interpolated into run command after the image String + containerUser: String, // after -u in the run command + /* to manage repo for static frontend, mounted as a volume */ + repo: String, + branch: { type: String, default: "master" }, + accessToken: String, + containerMount: String, // the file path to mount repo on inside the container + }); + + return model("Deployment", schema) +} diff --git a/cli/src/helpers/mongoose/mongoose.ts b/cli/src/helpers/mongoose/mongoose.ts new file mode 100644 index 000000000..51890f5d0 --- /dev/null +++ b/cli/src/helpers/mongoose/mongoose.ts @@ -0,0 +1,54 @@ +import { Deployment } from "@monitor/types"; +import mongoose from "mongoose"; +import deploymentModel from "./deployment"; +import serverModel from "./server"; +import userModel from "./user"; + +export async function addInitialDocs(mongoURL: string, localMongo: boolean, localRegistry: boolean) { + await mongoose.connect(mongoURL); + + const servers = serverModel(); + const deployments = deploymentModel(); + const users = userModel(); + + const coreServer = { + name: "Core Server", + address: "localhost", + passkey: "passkey", + enabled: true, + isCore: true, + }; + const coreServerID = (await servers.create(coreServer)).toObject()._id; + + const coreDeployment: Deployment = { + name: "Monitor Core", + containerName: "monitor-core", + image: "mbecker2020/monitor-core", + latest: true, + serverID: coreServerID, + owner: "admin", + }; + deployments.create(coreDeployment); + + if (localMongo) { + const mongoDeployment: Deployment = { + name: "Mongo DB", + containerName: "mongo-db", + image: "mongo", + latest: true, + owner: "admin", + }; + deployments.create(mongoDeployment); + } + + if (localRegistry) { + const registryDeployment: Deployment = { + name: "Registry", + containerName: "registry", + image: "registry:2", + serverID: coreServerID, + owner: "admin", + }; + deployments.create(registryDeployment); + } +} diff --git a/cli/src/helpers/mongoose/server.ts b/cli/src/helpers/mongoose/server.ts new file mode 100644 index 000000000..a2e0c4634 --- /dev/null +++ b/cli/src/helpers/mongoose/server.ts @@ -0,0 +1,14 @@ +import { Server } from "@monitor/types"; +import { model, Schema } from "mongoose"; + +export default function serverModel() { + const schema = new Schema({ + name: { type: String, unique: true }, + address: String, + passkey: String, + enabled: { type: Boolean, default: true }, + isCore: Boolean, + }); + + return model("Server", schema); +} \ No newline at end of file diff --git a/cli/src/helpers/mongoose/user.ts b/cli/src/helpers/mongoose/user.ts new file mode 100644 index 000000000..c0a13d1ab --- /dev/null +++ b/cli/src/helpers/mongoose/user.ts @@ -0,0 +1,14 @@ +import { User } from "@monitor/types"; +import { Schema, model } from "mongoose"; + +export default function userModel() { + const schema = new Schema({ + username: { type: String, index: true, required: true }, + permissions: { type: Number, default: 0 }, + password: String, + avatar: String, + githubID: { type: Number, index: true }, + }); + + return model("User", schema); +} \ No newline at end of file diff --git a/cli/src/types.d.ts b/cli/src/types.d.ts index 6223751e9..83cdc6b5d 100644 --- a/cli/src/types.d.ts +++ b/cli/src/types.d.ts @@ -1,5 +1,4 @@ export type Config = { - useBuilds: boolean; // will set up the registry and enable docker build functionality mongoURL: string; registryURL: string; }; diff --git a/package.json b/package.json index 3a843bb1c..be901ac25 100644 --- a/package.json +++ b/package.json @@ -20,9 +20,7 @@ "docker-run-core": "cd core && yarn docker-run", "build-periphery": "cd periphery && yarn build", "start-frontend": "cd frontend && yarn start", - "build-frontend": "cd frontend && yarn build", - "run-mongo": "docker run -d --name mongo -p 27017:27017 mongo:latest", - "run-registry": "docker run -d --name registry --network=\"host\" registry:2" + "build-frontend": "cd frontend && yarn build" }, "devDependencies": { "typescript": "^4.6.2" diff --git a/yarn.lock b/yarn.lock index 63458a333..3f9db162a 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1942,6 +1942,19 @@ mongoose@^6.2.6: ms "2.1.3" sift "16.0.0" +mongoose@^6.2.7: + version "6.2.7" + resolved "https://registry.yarnpkg.com/mongoose/-/mongoose-6.2.7.tgz#d8ea2fce4c19200d316c3ac4a8377f3af4fb4450" + integrity sha512-yqTZcM3u0+aLzl6cirtXy6vr24kt+kFyTucCQ3pyncvO1jGn/M1R09qkC/v54QoPXeVJdpcuS5eQWn0NLlDvKA== + dependencies: + bson "^4.2.2" + kareem "2.3.4" + mongodb "4.3.1" + mpath "0.8.4" + mquery "4.0.2" + ms "2.1.3" + sift "16.0.0" + mpath@0.8.4: version "0.8.4" resolved "https://registry.yarnpkg.com/mpath/-/mpath-0.8.4.tgz#6b566d9581621d9e931dd3b142ed3618e7599313"