Merge branch 'develop' of github.com:Budibase/budibase into feature/query-variables

This commit is contained in:
mike12345567 2021-12-16 14:57:21 +00:00
commit 02855fa37b
18 changed files with 274 additions and 238 deletions

41
.github/workflows/deploy-cloud.yaml vendored Normal file
View File

@ -0,0 +1,41 @@
name: Budibase Cloud Deploy
on:
workflow_dispatch:
inputs:
version:
description: Budibase release version. For example - 1.0.0
required: false
jobs:
release:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- name: Pull values.yaml from budibase-infra
run: |
curl -H "Authorization: token ${{ secrets.GITHUB_TOKEN }}" \ [c3a7a9d12]
-H 'Accept: application/vnd.github.v3.raw' \
-o values.production.yaml \
-L https://api.github.com/repos/budibase/budibase-infra/contents/kubernetes/values.yaml
- name: Get the latest budibase release version if not specifically set
if: ${{ !github.event.inputs.version }}
id: version
run: |
sudo apt-get install -y jq
release_version=$(cat lerna.json | jq -r '.version')
echo "::set-output name=release_version::$release_version"
- uses: peymanmortazavi/eks-helm-deploy@v1
with:
aws-access-key-id: ${{ secrets.AWS_ACCESS_KEY_ID }}
aws-secret-access-key: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
aws-region: eu-west-1
cluster-name: budibase-eks-production
config-files: values.production.yaml
namespace: budibase
values: appVersion=v${{ github.event.inputs.version || github.steps.version.outputs.release_version }}
name: budibase-prod

View File

@ -1,42 +0,0 @@
name: Budibase Release Helm Charts
on:
workflow_dispatch:
jobs:
release:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
with:
fetch-depth: 0
- uses: actions/setup-node@v1
with:
node-version: 14.x
- run: yarn
- run: yarn bootstrap
- name: 'Get Previous tag'
id: previoustag
uses: "WyriHaximus/github-action-get-previous-tag@v1"
- name: Install Helm
uses: azure/setup-helm@v1
with:
version: v3.4.0
# - run: yarn release:helm
# env:
# BUDIBASE_RELEASE_VERSION: ${{ steps.previoustag.outputs.tag }}
- name: Configure Git
run: |
git config user.name "Budibase Helm Bot"
git config user.email "<>"
- name: Run chart-releaser
uses: helm/chart-releaser-action@v1.2.1
env:
CR_TOKEN: "${{ secrets.GITHUB_TOKEN }}"

View File

@ -1,45 +1,60 @@
name: Budibase Release Docker Selfhost name: Budibase Release Selfhost
on: on:
workflow_dispatch: workflow_dispatch:
env:
POSTHOG_TOKEN: ${{ secrets.POSTHOG_TOKEN }}
INTERCOM_TOKEN: ${{ secrets.INTERCOM_TOKEN }}
POSTHOG_URL: ${{ secrets.POSTHOG_URL }}
jobs: jobs:
release: release:
runs-on: ubuntu-latest runs-on: ubuntu-latest
steps: steps:
- uses: actions/checkout@v2 - uses: actions/checkout@v2
with:
fetch-depth: 0
- uses: actions/setup-node@v1
with:
node-version: 14.x
- run: yarn
- run: yarn bootstrap
- name: Configure AWS Credentials - name: Tag and release Docker images (Self Host)
uses: aws-actions/configure-aws-credentials@v1
with:
aws-access-key-id: ${{ secrets.AWS_ACCESS_KEY_ID }}
aws-secret-access-key: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
aws-region: eu-west-1
- name: 'Get Previous tag'
id: previoustag
uses: "WyriHaximus/github-action-get-previous-tag@v1"
- name: Build/release Docker images (Self Host)
run: | run: |
docker login -u $DOCKER_USER -p $DOCKER_PASSWORD docker login -u $DOCKER_USER -p $DOCKER_PASSWORD
yarn build
yarn build:docker:selfhost # Get latest release version
sudo apt-get install -y jq
release_version=$(cat lerna.json | jq -r '.version')
echo "::set-output name=release_version::$release_version"
release_tag=v$release_version
# Pull apps and worker images
docker pull budibase/apps:$release_tag
docker pull budibase/worker:$release_tag
# Tag apps and worker images
docker tag budibase/apps:$release_tag $SELF_HOST_TAG
docker tag budibase/worker:$release_tag $SELF_HOST_TAG
# Push images
docker push --all-tags budibase/apps
docker push --all-tags budibase/worker
env: env:
DOCKER_USER: ${{ secrets.DOCKER_USERNAME }} DOCKER_USER: ${{ secrets.DOCKER_USERNAME }}
DOCKER_PASSWORD: ${{ secrets.DOCKER_API_KEY }} DOCKER_PASSWORD: ${{ secrets.DOCKER_API_KEY }}
BUDIBASE_RELEASE_VERSION: ${{ steps.previoustag.outputs.tag }} SELF_HOST_TAG: latest
- name: Setup Helm
uses: azure/setup-helm@v1
id: helm-install
# - name: Build and release helm chart
# run: |
# git config user.name "Budibase Helm Bot"
# git config user.email "<>"
# helm package charts/budibase
# git checkout gh-pages
# mv budibase-${{ github.steps.version.outputs.release_version }}.tgz docs
# git add -A
# git commit -m "Helm Release: ${{ github.steps.version.outputs.release_version }}"
# git push
# env:
# GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
# - name: Perform github release
# run: |
# echo release
# env:
# GITHUB_TOKEN: "${{ secrets.GITHUB_TOKEN }}"

View File

@ -57,4 +57,25 @@ jobs:
DOCKER_PASSWORD: ${{ secrets.DOCKER_API_KEY }} DOCKER_PASSWORD: ${{ secrets.DOCKER_API_KEY }}
BUDIBASE_RELEASE_VERSION: ${{ steps.previoustag.outputs.tag }} BUDIBASE_RELEASE_VERSION: ${{ steps.previoustag.outputs.tag }}
# Release to pre-prod environment # - name: Pull values.yaml from budibase-infra
# run: |
# curl -H "Authorization: token ${{ secrets.GITHUB_TOKEN }}" \ [c3a7a9d12]
# -H 'Accept: application/vnd.github.v3.raw' \
# -o values.preprod.yaml \
# -L https://api.github.com/repos/budibase/budibase-infra/contents/kubernetes/values.preprod.yaml
# - name: Deploy to Preprod Environment
# uses: deliverybot/helm@v1
# with:
# release: budibase-preprod
# namespace: budibase
# chart: charts/budibase
# token: ${{ github.token }}
# values: |
# appVersion: ${{ steps.previoustag.outputs.tag }}
# value-files: >-
# [
# "values.preprod.yaml"
# ]
# env:
# KUBECONFIG_FILE: '${{ secrets.PREPROD_KUBECONFIG }}'

View File

@ -1,5 +1,5 @@
{ {
"version": "1.0.22", "version": "1.0.23",
"npmClient": "yarn", "npmClient": "yarn",
"packages": [ "packages": [
"packages/*" "packages/*"

View File

@ -1,6 +1,6 @@
{ {
"name": "@budibase/auth", "name": "@budibase/auth",
"version": "1.0.22", "version": "1.0.23",
"description": "Authentication middlewares for budibase builder and apps", "description": "Authentication middlewares for budibase builder and apps",
"main": "src/index.js", "main": "src/index.js",
"author": "Budibase", "author": "Budibase",

View File

@ -1,7 +1,7 @@
{ {
"name": "@budibase/bbui", "name": "@budibase/bbui",
"description": "A UI solution used in the different Budibase projects.", "description": "A UI solution used in the different Budibase projects.",
"version": "1.0.22", "version": "1.0.23",
"license": "MPL-2.0", "license": "MPL-2.0",
"svelte": "src/index.js", "svelte": "src/index.js",
"module": "dist/bbui.es.js", "module": "dist/bbui.es.js",

View File

@ -63,6 +63,9 @@
.gap-L { .gap-L {
grid-gap: var(--spectrum-alias-grid-gutter-medium); grid-gap: var(--spectrum-alias-grid-gutter-medium);
} }
.gap-XL {
grid-gap: var(--spectrum-alias-grid-gutter-large);
}
.horizontal.gap-S :global(*) + :global(*) { .horizontal.gap-S :global(*) + :global(*) {
margin-left: var(--spectrum-alias-grid-gutter-xsmall); margin-left: var(--spectrum-alias-grid-gutter-xsmall);
} }

View File

@ -13,3 +13,9 @@
> >
<slot /> <slot />
</p> </p>
<style>
p {
font-weight: 600;
}
</style>

View File

@ -1,6 +1,6 @@
{ {
"name": "@budibase/builder", "name": "@budibase/builder",
"version": "1.0.22", "version": "1.0.23",
"license": "GPL-3.0", "license": "GPL-3.0",
"private": true, "private": true,
"scripts": { "scripts": {
@ -65,10 +65,10 @@
} }
}, },
"dependencies": { "dependencies": {
"@budibase/bbui": "^1.0.22", "@budibase/bbui": "^1.0.23",
"@budibase/client": "^1.0.22", "@budibase/client": "^1.0.23",
"@budibase/colorpicker": "1.1.2", "@budibase/colorpicker": "1.1.2",
"@budibase/string-templates": "^1.0.22", "@budibase/string-templates": "^1.0.23",
"@sentry/browser": "5.19.1", "@sentry/browser": "5.19.1",
"@spectrum-css/page": "^3.0.1", "@spectrum-css/page": "^3.0.1",
"@spectrum-css/vars": "^3.0.1", "@spectrum-css/vars": "^3.0.1",

View File

@ -63,12 +63,13 @@
</div> </div>
<div> <div>
<Button <Button
size="S"
disabled={app.lockedOther} disabled={app.lockedOther}
on:click={() => editApp(app)} on:click={() => editApp(app)}
size="S" secondary
quiet
secondary>Open</Button
> >
Open
</Button>
<ActionMenu align="right"> <ActionMenu align="right">
<Icon hoverable slot="control" name="More" /> <Icon hoverable slot="control" name="More" />
{#if app.deployed} {#if app.deployed}
@ -91,7 +92,7 @@
<MenuItem on:click={() => updateApp(app)} icon="Edit">Edit</MenuItem> <MenuItem on:click={() => updateApp(app)} icon="Edit">Edit</MenuItem>
<MenuItem on:click={() => deleteApp(app)} icon="Delete">Delete</MenuItem> <MenuItem on:click={() => deleteApp(app)} icon="Delete">Delete</MenuItem>
{/if} {/if}
<MenuItem on:click={() => editIcon(app)} icon="Brush">Edit Icon</MenuItem> <MenuItem on:click={() => editIcon(app)} icon="Brush">Edit icon</MenuItem>
</ActionMenu> </ActionMenu>
</div> </div>

View File

@ -4,10 +4,11 @@
export let app export let app
let modal let modal
$: selectedIcon = app?.icon?.name $: selectedIcon = app?.icon?.name || "Apps"
$: selectedColor = app?.icon?.color $: selectedColor = app?.icon?.color
let iconsList = [ let iconsList = [
"Apps",
"Actions", "Actions",
"ConversionFunnel", "ConversionFunnel",
"App", "App",
@ -31,7 +32,6 @@
"GraphDonut", "GraphDonut",
"GraphBarHorizontal", "GraphBarHorizontal",
"Demographic", "Demographic",
"Apps",
] ]
export const show = () => { export const show = () => {
modal.show() modal.show()
@ -68,13 +68,13 @@
> >
<div class="scrollable-icons"> <div class="scrollable-icons">
<div class="title-spacing"> <div class="title-spacing">
<Label>Select an Icon</Label> <Label>Select an icon</Label>
</div> </div>
<div class="grid"> <div class="grid">
{#each iconsList as item} {#each iconsList as item}
<div <div
class="icon-item" class="icon-item"
style="color: {item === selectedIcon ? selectedColor : ''}" class:selected={item === selectedIcon}
on:click={() => (selectedIcon = item)} on:click={() => (selectedIcon = item)}
> >
<Icon name={item} /> <Icon name={item} />
@ -84,7 +84,7 @@
</div> </div>
<div class="color-selection"> <div class="color-selection">
<div> <div>
<Label>Select a Color</Label> <Label>Select a color</Label>
</div> </div>
<div class="color-selection-item"> <div class="color-selection-item">
<ColorPicker <ColorPicker
@ -124,4 +124,7 @@
.icon-item { .icon-item {
cursor: pointer; cursor: pointer;
} }
.icon-item.selected {
color: var(--spectrum-global-color-blue-600);
}
</style> </style>

View File

@ -4,7 +4,6 @@
Layout, Layout,
Detail, Detail,
Button, Button,
ButtonGroup,
Input, Input,
Select, Select,
Modal, Modal,
@ -43,6 +42,7 @@
let cloud = $admin.cloud let cloud = $admin.cloud
let appName = "" let appName = ""
let creatingFromTemplate = false let creatingFromTemplate = false
$: enrichedApps = enrichApps($apps, $auth.user, sortBy) $: enrichedApps = enrichApps($apps, $auth.user, sortBy)
$: filteredApps = enrichedApps.filter(app => $: filteredApps = enrichedApps.filter(app =>
app?.name?.toLowerCase().includes(searchTerm.toLowerCase()) app?.name?.toLowerCase().includes(searchTerm.toLowerCase())
@ -280,26 +280,32 @@
</script> </script>
<Page wide> <Page wide>
<Layout noPadding> <Layout noPadding gap="XL">
<div class="title"> <div class="title">
<Heading size="S">Welcome to Budibase</Heading> <Layout noPadding gap="XS">
<Heading size="M">Welcome to Budibase</Heading>
<Body size="S">
Manage your apps and get a head start with templates
</Body>
</Layout>
<ButtonGroup> <div class="buttons">
{#if cloud} {#if cloud}
<Button secondary on:click={initiateAppsExport}>Export apps</Button> <Button icon="Export" quiet secondary on:click={initiateAppsExport}>
Export apps
</Button>
{/if} {/if}
<Button icon="Import" quiet secondary on:click={initiateAppImport} <Button icon="Import" quiet secondary on:click={initiateAppImport}>
>Import app</Button Import app
> </Button>
<Button icon="Add" cta on:click={initiateAppCreation}>Create app</Button <Button icon="Add" cta on:click={initiateAppCreation}>
> Create app
</ButtonGroup> </Button>
</div>
</div> </div>
<div class="title-text"> <Layout noPadding gap="S">
<Body size="S">Manage your apps and get a head start with templates</Body> <Detail size="L">Quick start templates</Detail>
</div>
<Detail>Quick Start Templates</Detail>
<div class="grid"> <div class="grid">
{#each $templates as item} {#each $templates as item}
<div <div
@ -332,12 +338,13 @@
</div> </div>
{/each} {/each}
</div> </div>
</Layout>
{#if loaded && enrichedApps.length} {#if loaded && enrichedApps.length}
<Layout noPadding gap="S">
<div class="title"> <div class="title">
<Detail>My Apps</Detail> <Detail size="L">My apps</Detail>
</div>
<div class="filter"> <div class="filter">
<div class="select">
<Select <Select
quiet quiet
autoWidth autoWidth
@ -349,14 +356,10 @@
{ label: "Sort by status", value: "status" }, { label: "Sort by status", value: "status" },
]} ]}
/> />
<div class="desktop-search">
<Search quiet placeholder="Search" bind:value={searchTerm} />
</div>
</div>
</div>
<div class="mobile-search">
<Search placeholder="Search" bind:value={searchTerm} /> <Search placeholder="Search" bind:value={searchTerm} />
</div> </div>
</div>
<div class="appTable"> <div class="appTable">
{#each filteredApps as app (app.appId)} {#each filteredApps as app (app.appId)}
<AppRow <AppRow
@ -372,7 +375,9 @@
/> />
{/each} {/each}
</div> </div>
</Layout>
{/if} {/if}
{#if !enrichedApps.length && !creatingApp && loaded} {#if !enrichedApps.length && !creatingApp && loaded}
<div class="empty-wrapper"> <div class="empty-wrapper">
<Modal inline> <Modal inline>
@ -380,6 +385,7 @@
</Modal> </Modal>
</div> </div>
{/if} {/if}
{#if creatingFromTemplate} {#if creatingFromTemplate}
<div class="empty-wrapper"> <div class="empty-wrapper">
<p>Creating your Budibase app from your selected template...</p> <p>Creating your Budibase app from your selected template...</p>
@ -427,68 +433,61 @@
<ChooseIconModal app={selectedApp} bind:this={iconModal} /> <ChooseIconModal app={selectedApp} bind:this={iconModal} />
<style> <style>
.title, .title {
.filter {
display: flex; display: flex;
flex-direction: row; flex-direction: row;
justify-content: space-between; justify-content: space-between;
align-items: center; align-items: center;
gap: 5px; gap: var(--spacing-xl);
flex-wrap: wrap;
}
.buttons {
display: flex;
flex-direction: row;
justify-content: flex-start;
align-items: center;
gap: var(--spacing-xl);
flex-wrap: wrap;
}
@media (max-width: 640px) {
.buttons {
flex-direction: row-reverse;
justify-content: flex-end;
}
} }
@media only screen and (max-width: 560px) { .filter {
.title { display: flex;
flex-direction: column; flex-direction: row;
align-items: flex-start; justify-content: flex-start;
align-items: center;
gap: var(--spacing-xl);
} }
.grid { .grid {
grid-template-columns: repeat(2, 1fr); display: grid;
} grid-gap: var(--spacing-xl);
} grid-template-columns: repeat(auto-fill, minmax(270px, 1fr));
.iconAlign {
padding: 0 0 0 var(--spacing-m);
display: inline-block;
} }
.template-card { .template-card {
height: 80px; height: 80px;
width: 270px;
border-radius: var(--border-radius-s); border-radius: var(--border-radius-s);
margin-bottom: var(--spacing-m);
border: 1px solid var(--spectrum-global-color-gray-300); border: 1px solid var(--spectrum-global-color-gray-300);
cursor: pointer; cursor: pointer;
display: flex; display: flex;
} }
.title-text { .template-card:hover {
margin-top: calc(var(--spacing-xl) * -1); background: var(--spectrum-alias-background-color-tertiary);
} }
.card-body { .card-body {
display: flex; display: flex;
align-items: center; align-items: center;
padding: 12px; padding: 12px;
} }
.iconAlign {
.grid { padding: 0 0 0 var(--spacing-m);
display: grid; display: inline-block;
grid-gap: 5px;
grid-template-columns: repeat(auto-fill, minmax(270px, 1fr));
}
@media (min-width: 200px) {
}
.select {
display: grid;
grid-template-columns: auto auto;
grid-gap: 30px;
}
.filter :global(.spectrum-ActionGroup) {
flex-wrap: nowrap;
}
.mobile-search {
display: none;
} }
.appTable { .appTable {
@ -511,6 +510,12 @@
.appTable :global(> div) { .appTable :global(> div) {
border-bottom: var(--border-light); border-bottom: var(--border-light);
} }
@media (max-width: 640px) {
.appTable {
grid-template-columns: 1fr auto;
}
}
.empty-wrapper { .empty-wrapper {
flex: 1 1 auto; flex: 1 1 auto;
height: 100%; height: 100%;
@ -519,20 +524,4 @@
justify-content: center; justify-content: center;
align-items: center; align-items: center;
} }
@media (max-width: 640px) {
.appTable {
grid-template-columns: 1fr auto;
}
.desktop-search {
display: none;
}
.mobile-search {
display: block;
}
}
.template-card:hover {
background: var(--spectrum-alias-background-color-tertiary);
}
</style> </style>

View File

@ -1,6 +1,6 @@
{ {
"name": "@budibase/cli", "name": "@budibase/cli",
"version": "1.0.22", "version": "1.0.23",
"description": "Budibase CLI, for developers, self hosting and migrations.", "description": "Budibase CLI, for developers, self hosting and migrations.",
"main": "src/index.js", "main": "src/index.js",
"bin": { "bin": {

View File

@ -1,6 +1,6 @@
{ {
"name": "@budibase/client", "name": "@budibase/client",
"version": "1.0.22", "version": "1.0.23",
"license": "MPL-2.0", "license": "MPL-2.0",
"module": "dist/budibase-client.js", "module": "dist/budibase-client.js",
"main": "dist/budibase-client.js", "main": "dist/budibase-client.js",
@ -19,9 +19,9 @@
"dev:builder": "rollup -cw" "dev:builder": "rollup -cw"
}, },
"dependencies": { "dependencies": {
"@budibase/bbui": "^1.0.22", "@budibase/bbui": "^1.0.23",
"@budibase/standard-components": "^0.9.139", "@budibase/standard-components": "^0.9.139",
"@budibase/string-templates": "^1.0.22", "@budibase/string-templates": "^1.0.23",
"regexparam": "^1.3.0", "regexparam": "^1.3.0",
"shortid": "^2.2.15", "shortid": "^2.2.15",
"svelte-spa-router": "^3.0.5" "svelte-spa-router": "^3.0.5"

View File

@ -1,7 +1,7 @@
{ {
"name": "@budibase/server", "name": "@budibase/server",
"email": "hi@budibase.com", "email": "hi@budibase.com",
"version": "1.0.22", "version": "1.0.23",
"description": "Budibase Web Server", "description": "Budibase Web Server",
"main": "src/index.ts", "main": "src/index.ts",
"repository": { "repository": {
@ -69,10 +69,9 @@
"author": "Budibase", "author": "Budibase",
"license": "GPL-3.0", "license": "GPL-3.0",
"dependencies": { "dependencies": {
"@apidevtools/swagger-parser": "^10.0.3", "@budibase/auth": "^1.0.23",
"@budibase/auth": "^1.0.22", "@budibase/client": "^1.0.23",
"@budibase/client": "^1.0.22", "@budibase/string-templates": "^1.0.23",
"@budibase/string-templates": "^1.0.22",
"@bull-board/api": "^3.7.0", "@bull-board/api": "^3.7.0",
"@bull-board/koa": "^3.7.0", "@bull-board/koa": "^3.7.0",
"@elastic/elasticsearch": "7.10.0", "@elastic/elasticsearch": "7.10.0",

View File

@ -1,6 +1,6 @@
{ {
"name": "@budibase/string-templates", "name": "@budibase/string-templates",
"version": "1.0.22", "version": "1.0.23",
"description": "Handlebars wrapper for Budibase templating.", "description": "Handlebars wrapper for Budibase templating.",
"main": "src/index.cjs", "main": "src/index.cjs",
"module": "dist/bundle.mjs", "module": "dist/bundle.mjs",

View File

@ -1,7 +1,7 @@
{ {
"name": "@budibase/worker", "name": "@budibase/worker",
"email": "hi@budibase.com", "email": "hi@budibase.com",
"version": "1.0.22", "version": "1.0.23",
"description": "Budibase background service", "description": "Budibase background service",
"main": "src/index.js", "main": "src/index.js",
"repository": { "repository": {
@ -29,8 +29,8 @@
"author": "Budibase", "author": "Budibase",
"license": "GPL-3.0", "license": "GPL-3.0",
"dependencies": { "dependencies": {
"@budibase/auth": "^1.0.22", "@budibase/auth": "^1.0.23",
"@budibase/string-templates": "^1.0.22", "@budibase/string-templates": "^1.0.23",
"@koa/router": "^8.0.0", "@koa/router": "^8.0.0",
"@sentry/node": "^6.0.0", "@sentry/node": "^6.0.0",
"@techpass/passport-openidconnect": "^0.3.0", "@techpass/passport-openidconnect": "^0.3.0",