Browse Source

Merge pull request #1465 from Budibase/bugs/dev-fixes

Updates to simplify getting going with Budibase single stack development
gh-pages
Michael Drury 5 years ago
committed by GitHub
parent
commit
8f88187e49
No known key found for this signature in database GPG Key ID: 4AEE18F83AFDEB23
  1. 19
      .github/CONTRIBUTING.md
  2. 61
      hosting/scripts/setup.js
  3. 1
      package.json
  4. 12
      packages/builder/src/components/common/ConfigChecklist.svelte
  5. 3
      packages/server/src/api/index.js
  6. 4
      packages/server/src/utilities/workerRequests.js

19
.github/CONTRIBUTING.md

@ -92,6 +92,16 @@ then `cd ` into your local copy.
### 3. Install and Build ### 3. Install and Build
To develop the Budibase platform you'll need [Docker](https://www.docker.com/) and [Docker Compose](https://docs.docker.com/compose/) installed.
#### Quick method
`yarn setup` will check that all necessary components are installed and setup the repo for usage.
#### Manual method
The following commands can be executed to manually get Budibase up and running (assuming Docker/Docker Compose has been installed).
`yarn` to install project dependencies `yarn` to install project dependencies
`yarn bootstrap` will install all budibase modules and symlink them together using lerna. `yarn bootstrap` will install all budibase modules and symlink them together using lerna.
@ -112,10 +122,17 @@ To run the budibase server and builder in dev mode (i.e. with live reloading):
1. Open a new console 1. Open a new console
2. `yarn dev` (from root) 2. `yarn dev` (from root)
3. Access the builder on http://localhost:4001/_builder/ 3. Access the builder on http://localhost:10000/builder
This will enable watch mode for both the builder app, server, client library and any component libraries. This will enable watch mode for both the builder app, server, client library and any component libraries.
### 5. Cleanup
If you wish to delete all the apps created in development and reset the environment then run the following:
1. `yarn nuke:docker` will wipe all the Budibase services
2. `yarn dev` will restart all the services
## Data Storage ## Data Storage
When you are running locally, budibase stores data on disk using [PouchDB](https://pouchdb.com/), as well as some JSON on local files. After setting up budibase, you can find all of this data in the `~/.budibase` directory. When you are running locally, budibase stores data on disk using [PouchDB](https://pouchdb.com/), as well as some JSON on local files. After setting up budibase, you can find all of this data in the `~/.budibase` directory.

61
hosting/scripts/setup.js

@ -0,0 +1,61 @@
#!/usr/bin/env node
const os = require("os")
const exec = require("child_process").exec
const fs = require("fs")
const platform = os.platform()
const windows = platform === "win32"
const mac = platform === "darwin"
const linux = platform === "linux"
function execute(command) {
return new Promise(resolve => {
exec(command, (err, stdout) => resolve(linux ? !!stdout : true))
})
}
async function commandExistsUnix(command) {
const unixCmd = `command -v ${command} 2>/dev/null && { echo >&1 ${command}; exit 0; }`
return execute(command)
}
async function commandExistsWindows(command) {
if (/[\x00-\x1f<>:"|?*]/.test(command)) {
return false
}
return execute(`where ${command}`)
}
function commandExists(command) {
return windows ? commandExistsWindows(command) : commandExistsUnix(command)
}
async function init() {
const docker = commandExists("docker")
const dockerCompose = commandExists("docker-compose")
if (docker && dockerCompose) {
console.log("Docker installed - continuing.")
return
}
if (mac) {
console.log(
"Please install docker by visiting: https://docs.docker.com/docker-for-mac/install/"
)
} else if (windows) {
console.log(
"Please install docker by visiting: https://docs.docker.com/docker-for-windows/install/"
)
} else if (linux) {
console.log("Beginning automated linux installation.")
await execute(`./hosting/scripts/linux/get-docker.sh`)
await execute(`./hosting/scripts/linux/get-docker-compose.sh`)
} else {
console.error(
"Platform unknown - please look online for information about installing docker for our OS."
)
}
console.log("Once installation complete please re-run the setup script.")
process.exit(-1)
}
init()

1
package.json

@ -17,6 +17,7 @@
"svelte": "^3.37.0" "svelte": "^3.37.0"
}, },
"scripts": { "scripts": {
"setup": "./hosting/scripts/setup.js && yarn && yarn bootstrap && yarn build && yarn dev",
"bootstrap": "lerna link && lerna bootstrap", "bootstrap": "lerna link && lerna bootstrap",
"build": "lerna run build", "build": "lerna run build",
"initialise": "lerna run initialise", "initialise": "lerna run initialise",

12
packages/builder/src/components/common/ConfigChecklist.svelte

@ -1,22 +1,12 @@
<script> <script>
import { isActive, url, goto } from "@roxi/routify"
import { onMount } from "svelte"
import { import {
ActionMenu, ActionMenu,
Checkbox, Checkbox,
Body,
MenuItem, MenuItem,
Icon,
Heading, Heading,
Avatar,
Search,
Layout,
ProgressCircle, ProgressCircle,
SideNavigation as Navigation,
SideNavigationItem as Item,
} from "@budibase/bbui" } from "@budibase/bbui"
import api from "builderStore/api" import { admin } from "stores/portal"
import { organisation, admin } from "stores/portal"
const MESSAGES = { const MESSAGES = {
apps: "Create your first app", apps: "Create your first app",

3
packages/server/src/api/index.js

@ -67,4 +67,7 @@ for (let route of mainRoutes) {
router.use(staticRoutes.routes()) router.use(staticRoutes.routes())
router.use(staticRoutes.allowedMethods()) router.use(staticRoutes.allowedMethods())
// add a redirect for when hitting server directly
router.redirect("/", "/builder")
module.exports = router module.exports = router

4
packages/server/src/utilities/workerRequests.js

@ -19,12 +19,14 @@ function request(ctx, request) {
if (!request.headers) { if (!request.headers) {
request.headers = {} request.headers = {}
} }
if (request.body) { if (request.body && Object.keys(request.body).length > 0) {
request.headers["Content-Type"] = "application/json" request.headers["Content-Type"] = "application/json"
request.body = request.body =
typeof request.body === "object" typeof request.body === "object"
? JSON.stringify(request.body) ? JSON.stringify(request.body)
: request.body : request.body
} else {
delete request.body
} }
if (ctx.headers) { if (ctx.headers) {
request.headers.cookie = ctx.headers.cookie request.headers.cookie = ctx.headers.cookie

Loading…
Cancel
Save