Updater is a tool that allows to manage the update of services in a vps. Currently there are 2 ways to update a service. Using an endpoint (design to be called from a build workflow) or using a github repo release.
Also there is a tui app to interact with several updater services from you local computer.
-c
,--config
set the path to the configuration file. If the path is not an absolute path the the current working directory will be used (default "config.cue")--cert
the tls certificate path to be used in https. If not present the server will use http--key
the tls key to be used in https. If not present the server will use http
Below is the schema file that updater uses to validate the configuration.
!
at the end of variable name means required:varname!
?
at the end of variable name means optional:varname?
[...#Type]
array of elements with type#Type
time.Duration()
this is from golang time.ParseDuration documentation: A duration string is a possibly signed sequence of decimal numbers, each with optional fraction and a unit suffix, such as "300ms", "-1.5h" or "2h45m". Valid time units arens
nanoseconds,us
(orµs
) microseconds,ms
miliseconds,s
seconds,m
minute,h
hour
import "time"
port!: uint16 // port where the updater will listen
user_secret_key!: string // the key used to encode the json web token. Used to authenticate the user endpoints
user_jwt_expiry!: time.Duration() // the time to expire the user json web token
users: [...#User] // list of user allowed to interface with the updater
apps: [...#Application] // list of the apps that the updater will update
base_path?: string // path where the temporal files used by the app will place
// user credentials, represent a user that will be allowed to interact with the updater
#User: {
name!: string
password!: string
}
#Application: {
name?: string // this name is only used for human readability
auth_token?: string // token that identify an application and authorize a user to update
assets!: [...#Asset] // Assets to update
// service path used for systemd/task-scheduler.
// if set the service will be stopped at the beggining of the asset update and restarted at the end
service?: string
cmd?: #Command // command to run after the application update all his assets
github_release?: #GithubRelease // github repository where to find the latest release for manual application update
}
#GithubRelease: {
token?: string // set if the repo is not a public one
repo!: string // repository name <github.com/$owner/$repo>
owner!: string // repository owner name <github.com/$owner/$repo>
}
#Asset: {
name!: string // the name of the form field
system_path!: string // path where the asset should be included
keep_old: bool | *false // (default false) if true keeps the previous version with at .old at the end
// service path used for systemd/task-scheduler.
// if set the service will be stopped at the beggining of the asset update and restarted at the end
service?: string
unzip: bool | *false // (default false) if this true, the asset will be decompressed
cmd?: #Command // command to run after the asset is copy
}
#Command: {
command!: string // the command name or absolute path to binary
args?: [...string] // arguments to be passed to the command invocation
// working directory where the command should be executed.
// if no value is provided the working directory of updater is used
path?: string
}
port: 7432
user_secret_key: "super secret key"
user_jwt_expiry: "2h"
users: [
{
name: "my-name"
password: "my-password"
},
]
apps: [
{
name: "my-app"
auth_token: "secure-token-my-app"
assets: [
{
name: "app"
service: "my-app.service"
system_path: "/usr/bin/myapp"
unzip: true
},
{
name: "assets"
system_path: "/usr/share/my-app/assets.tar.gz"
unzip: true
cmd: {
command: "ls"
args: ["--all"]
path: "/usr/share/my-app/"
}
},
]
},
]
To use the client text user interface download the binary with the name deplo and run it with
path/to/binary --cli
. The --cli is temporal, in the future will be the default.
If you found any error about required arguments running the cli just add some random parameter as this does not affect the behaviour of the TUI.. fix comming soon