This commit is contained in:
commit
c7dabda145
3
.dockerignore
Normal file
3
.dockerignore
Normal file
@ -0,0 +1,3 @@
|
||||
.lowdefy/**
|
||||
.env
|
||||
.drone.yml
|
35
.drone.yml
Normal file
35
.drone.yml
Normal file
@ -0,0 +1,35 @@
|
||||
kind: pipeline
|
||||
type: kubernetes
|
||||
name: Harbor
|
||||
|
||||
steps:
|
||||
- name: build & publish
|
||||
image: plugins/docker
|
||||
context: .
|
||||
settings:
|
||||
repo: bv11-cr01.bessems.eu/library/lowdefy
|
||||
registry: bv11-cr01.bessems.eu
|
||||
mtu: 1450
|
||||
tags: latest
|
||||
username:
|
||||
from_secret: harbor_username
|
||||
password:
|
||||
from_secret: harbor_password
|
||||
|
||||
---
|
||||
kind: pipeline
|
||||
type: kubernetes
|
||||
name: Dockerhub
|
||||
|
||||
steps:
|
||||
- name: build & publish
|
||||
image: plugins/docker
|
||||
context: .
|
||||
settings:
|
||||
repo: djpbessems/lowdefy
|
||||
mtu: 1450
|
||||
tags: latest
|
||||
username:
|
||||
from_secret: docker_username
|
||||
password:
|
||||
from_secret: docker_password
|
26
Dockerfile
Normal file
26
Dockerfile
Normal file
@ -0,0 +1,26 @@
|
||||
FROM node:14-buster AS build
|
||||
|
||||
# Set working directory and node user
|
||||
WORKDIR /home/node/lowdefy
|
||||
|
||||
RUN chown node:node /home/node/lowdefy
|
||||
|
||||
USER node
|
||||
|
||||
# Copy app config and change ownership of files to "node" user
|
||||
COPY --chown=node:node . .
|
||||
|
||||
# Build the Lowdefy config using the Lowdefy CLI
|
||||
RUN npx lowdefy@3.23.2 build
|
||||
|
||||
# Use the correct Lowdefy base image
|
||||
FROM lowdefy/lowdefy:3.23.2
|
||||
|
||||
# Copy build output from build stage
|
||||
COPY --from=build --chown=node:node /home/node/lowdefy/.lowdefy/build ./build
|
||||
|
||||
# Copy contents of public directory into image
|
||||
COPY --chown=node:node ./public ./public
|
||||
|
||||
# Run the server on start
|
||||
CMD ["node", "./dist/server.js"]
|
210
deploy.yaml
Normal file
210
deploy.yaml
Normal file
@ -0,0 +1,210 @@
|
||||
id: deploy
|
||||
type: PageHeaderMenu
|
||||
properties:
|
||||
title: Deploy
|
||||
|
||||
layout:
|
||||
contentJustify: center
|
||||
|
||||
areas:
|
||||
content:
|
||||
blocks:
|
||||
- id: content
|
||||
type: Card
|
||||
layout:
|
||||
size: 1000
|
||||
contentGutter: 10
|
||||
blocks:
|
||||
- id: title
|
||||
type: Title
|
||||
layout:
|
||||
span: 24
|
||||
properties:
|
||||
content: Deploy
|
||||
- id: leftcolumn
|
||||
type: Box
|
||||
layout:
|
||||
span: 12
|
||||
contentGutter: 10
|
||||
blocks:
|
||||
- id: macaddress
|
||||
required: true
|
||||
type: TextInput
|
||||
properties:
|
||||
title: MAC Address
|
||||
placeholder: 00:00:00:00:00:00
|
||||
validate:
|
||||
- status: error
|
||||
message: Enter a valid MAC address
|
||||
pass:
|
||||
_regex: ^(?!(?:00[:-]){5}00)((?:[0-9a-fA-F]{2}[:-]){5}[0-9a-fA-F]{2})$
|
||||
- id: projectname
|
||||
type: TextInput
|
||||
properties:
|
||||
title: Project name
|
||||
- id: hostname
|
||||
required: true
|
||||
type: TextInput
|
||||
properties:
|
||||
title: Hostname
|
||||
label:
|
||||
extra: Can only contain alphanumeric characters and hyphens; must be between 1 and 15 characters long
|
||||
extraStyle:
|
||||
font-size: smaller
|
||||
font-style: italic
|
||||
validate:
|
||||
- status: error
|
||||
message: Enter a valid hostname
|
||||
pass:
|
||||
_regex: ^([a-zA-Z0-9]{1,15}|[a-zA-Z0-9][a-zA-Z0-9\-]{0,13}[a-zA-Z0-9])$
|
||||
- id: ipaddress
|
||||
required: true
|
||||
type: TextInput
|
||||
properties:
|
||||
title: IP address
|
||||
placeholder: 0.0.0.0
|
||||
validate:
|
||||
- status: error
|
||||
message: Enter a valid IP address
|
||||
pass:
|
||||
_regex: ^(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)$
|
||||
- id: subnetmask
|
||||
required: true
|
||||
type: TextInput
|
||||
properties:
|
||||
title: Subnet mask
|
||||
placeholder: 255.255.255.0
|
||||
validate:
|
||||
- status: error
|
||||
message: Enter a valid subnet mask
|
||||
pass:
|
||||
_regex: ^(?:(255|254|252|248|240|224|192|128|0+)(?:\.(?!$)|$)){4}$
|
||||
- id: gateway
|
||||
required: true
|
||||
type: TextInput
|
||||
properties:
|
||||
title: Gateway
|
||||
placeholder: 0.0.0.0
|
||||
validate:
|
||||
- status: error
|
||||
message: Enter a valid IP address
|
||||
pass:
|
||||
_regex: ^(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)$
|
||||
- id: dnsserver
|
||||
required: true
|
||||
type: TextInput
|
||||
properties:
|
||||
title: DNS server
|
||||
placeholder: 1.1.1.1, 1.0.0.1
|
||||
label:
|
||||
extra: (comma-separated list of IP addresses)
|
||||
extraStyle:
|
||||
font-size: smaller
|
||||
font-style: italic
|
||||
validate:
|
||||
- status: error
|
||||
message: Enter one or more valid IP addresses, separated by a comma
|
||||
pass:
|
||||
_regex: ^(?:(?:25[0-5]|2[0-4]\d|[01]?\d\d?)\.(?:25[0-5]|2[0-4]\d|[01]?\d\d?)\.(?:25[0-5]|2[0-4]\d|[01]?\d\d?)\.(?:25[0-5]|2[0-4]\d|[01]?\d\d?))(?:,\s*(?:(?:25[0-5]|2[0-4]\d|[01]?\d\d?)\.(?:25[0-5]|2[0-4]\d|[01]?\d\d?)\.(?:25[0-5]|2[0-4]\d|[01]?\d\d?)\.(?:25[0-5]|2[0-4]\d|[01]?\d\d?)))*$
|
||||
- id: dnssuffix
|
||||
required: true
|
||||
type: TextInput
|
||||
properties:
|
||||
title: DNS suffix
|
||||
placeholder: example.org
|
||||
validate:
|
||||
- status: error
|
||||
message: Enter a valid domain name
|
||||
pass:
|
||||
_regex: (?=^.{4,253}$)(^((?!-)[a-zA-Z0-9-]{1,63}(?<!-)\.)+[a-zA-Z]{2,63}$)
|
||||
- id: rightcolumn
|
||||
type: Box
|
||||
layout:
|
||||
span: 12
|
||||
contentGutter: 10
|
||||
blocks:
|
||||
- id: certificate
|
||||
required: true
|
||||
type: TextArea
|
||||
properties:
|
||||
autoSize:
|
||||
maxRows: 4
|
||||
minRows: 4
|
||||
block: true
|
||||
title: Certificate
|
||||
placeholder: |
|
||||
-----BEGIN CERTIFICATE-----
|
||||
[...]
|
||||
-----END CERTIFICATE-----
|
||||
label:
|
||||
extra: PEM format
|
||||
extraStyle:
|
||||
font-size: smaller
|
||||
font-style: italic
|
||||
- id: privatekey
|
||||
required: true
|
||||
type: TextArea
|
||||
properties:
|
||||
autoSize:
|
||||
maxRows: 4
|
||||
minRows: 4
|
||||
block: true
|
||||
title: Private key
|
||||
placeholder: |
|
||||
-----BEGIN RSA PRIVATE KEY-----
|
||||
[...]
|
||||
-----END RSA PRIVATE KEY-----
|
||||
label:
|
||||
extra: PEM format
|
||||
extraStyle:
|
||||
font-size: smaller
|
||||
font-style: italic
|
||||
- id: warning
|
||||
type: Alert
|
||||
properties:
|
||||
message: After pressing 'Start Deployment' the physical device can be booted over LAN
|
||||
type: warning
|
||||
- id: reset_button
|
||||
type: Button
|
||||
layout:
|
||||
grow: 1
|
||||
properties:
|
||||
title: Reset
|
||||
icon: ClearOutlined
|
||||
block: true
|
||||
type: default
|
||||
events:
|
||||
onClick:
|
||||
- id: reset
|
||||
type: Reset
|
||||
- id: start_deployment
|
||||
type: Button
|
||||
layout:
|
||||
grow: 3
|
||||
properties:
|
||||
title: Start Deployment
|
||||
icon: RocketOutlined
|
||||
block: true
|
||||
# requests:
|
||||
# - id: update_brand
|
||||
# type: MongoDBUpdateOne # MongoDb updateOne request to update the brand.
|
||||
# connectionId: brands
|
||||
# properties:
|
||||
# filter:
|
||||
# _id:
|
||||
# _state: _id # Select the document that matches the document's _id that is in state.
|
||||
# update:
|
||||
# $set:
|
||||
# name:
|
||||
# _state: name # Insert the brand name we set in state.
|
||||
# description:
|
||||
# _state: description # Insert the description name we set in state.
|
||||
# updated_at:
|
||||
# _date: now # Set the updated_at date as current time.
|
||||
events:
|
||||
onClick:
|
||||
- id: validate
|
||||
type: Validate
|
||||
- id: update_brand # Call the update_brand request.
|
||||
type: Request
|
||||
params: update_brand
|
23
lowdefy.yaml
Normal file
23
lowdefy.yaml
Normal file
@ -0,0 +1,23 @@
|
||||
lowdefy: 3.23.2
|
||||
name: Lowdefy starter
|
||||
licence: MIT
|
||||
|
||||
pages:
|
||||
- _ref: stage.yaml
|
||||
- _ref: deploy.yaml
|
||||
|
||||
menus:
|
||||
- id: default
|
||||
links:
|
||||
- id: Stage
|
||||
type: MenuLink
|
||||
pageId: stage
|
||||
properties:
|
||||
title: Stage
|
||||
icon: CloudDownloadOutlined
|
||||
- id: Deploy
|
||||
type: MenuLink
|
||||
pageId: deploy
|
||||
properties:
|
||||
title: Deploy
|
||||
icon: RocketOutlined
|
BIN
public/logo-dark-theme.png
Normal file
BIN
public/logo-dark-theme.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 20 KiB |
BIN
public/logo-square-dark-theme.png
Normal file
BIN
public/logo-square-dark-theme.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 2.0 KiB |
120
stage.yaml
Normal file
120
stage.yaml
Normal file
@ -0,0 +1,120 @@
|
||||
id: stage
|
||||
type: PageHeaderMenu
|
||||
properties:
|
||||
title: Stage
|
||||
|
||||
layout:
|
||||
contentJustify: center
|
||||
|
||||
areas:
|
||||
content:
|
||||
blocks:
|
||||
- id: content
|
||||
type: Card
|
||||
layout:
|
||||
size: 1000
|
||||
contentGutter: 10
|
||||
blocks:
|
||||
- id: title
|
||||
type: Title
|
||||
layout:
|
||||
span: 24
|
||||
properties:
|
||||
content: Stage
|
||||
- id: leftcolumn
|
||||
type: Box
|
||||
layout:
|
||||
span: 12
|
||||
contentGutter: 10
|
||||
blocks:
|
||||
- id: foo
|
||||
required: true
|
||||
type: TextInput
|
||||
properties:
|
||||
block: true
|
||||
title: Foo
|
||||
placeholder: Bar
|
||||
label:
|
||||
extra: Lorem ipsum; yada yada
|
||||
extraStyle:
|
||||
font-size: smaller
|
||||
font-style: italic
|
||||
# span: 5
|
||||
- id: woot
|
||||
required: true
|
||||
type: TextInput
|
||||
properties:
|
||||
block: true
|
||||
title: Woot
|
||||
placeholder: Sweet
|
||||
label:
|
||||
extra: Dude!
|
||||
extraStyle:
|
||||
font-size: smaller
|
||||
font-style: italic
|
||||
# span: 5
|
||||
- id: rightcolumn
|
||||
type: Box
|
||||
layout:
|
||||
span: 12
|
||||
contentGutter: 10
|
||||
blocks:
|
||||
- id: alpha
|
||||
required: true
|
||||
type: TextArea
|
||||
properties:
|
||||
autoSize:
|
||||
maxRows: 3
|
||||
minRows: 3
|
||||
block: true
|
||||
title: Alpha
|
||||
placeholder: Beta
|
||||
label:
|
||||
extra: Gamma
|
||||
extraStyle:
|
||||
font-size: smaller
|
||||
font-style: italic
|
||||
# span: 5
|
||||
- id: kappa
|
||||
required: true
|
||||
type: TextArea
|
||||
properties:
|
||||
autoSize:
|
||||
maxRows: 3
|
||||
minRows: 3
|
||||
block: true
|
||||
title: Kappa
|
||||
placeholder: Lambda
|
||||
label:
|
||||
extra: Mu
|
||||
extraStyle:
|
||||
font-size: smaller
|
||||
font-style: italic
|
||||
# span: 5
|
||||
- id: bottomrow
|
||||
type: Box
|
||||
layout:
|
||||
span: 24
|
||||
contentGutter: 10
|
||||
blocks:
|
||||
- id: reset_button
|
||||
type: Button
|
||||
layout:
|
||||
grow: 1
|
||||
properties:
|
||||
title: Reset
|
||||
icon: ClearOutlined
|
||||
block: true
|
||||
type: default
|
||||
events:
|
||||
onClick:
|
||||
- id: reset
|
||||
type: Reset
|
||||
- id: start_download
|
||||
type: Button
|
||||
layout:
|
||||
grow: 3
|
||||
properties:
|
||||
title: Download
|
||||
icon: CloudDownloadOutlined
|
||||
block: true
|
Reference in New Issue
Block a user