This commit is contained in:
2025-10-13 11:41:26 +04:00
parent aa992cef7d
commit f34ca98623
54 changed files with 94 additions and 613 deletions

View File

@@ -19,7 +19,7 @@ pub fn generate(args_ GenerateArgs) ! {
mut args := args_ mut args := args_
console.print_header('Generate code for path: ${args.path} (reset:${args.reset}, force:${args.force})') console.print_header('Generate code for path: ${args.path} (reset:${args.reset}, force:${args.force})')
console.print_debug(args)
if args.path == '' { if args.path == '' {
return error('no path provided') return error('no path provided')
} }

View File

@@ -21,6 +21,7 @@ pub mut:
hasconfig bool = true hasconfig bool = true
play_name string // e.g. docusaurus is what we look for play_name string // e.g. docusaurus is what we look for
module_path string // e.g.incubaid.herolib.web.docusaurus module_path string // e.g.incubaid.herolib.web.docusaurus
active bool = true // if false then we skip generation
} }
pub enum Cat { pub enum Cat {
@@ -29,8 +30,6 @@ pub enum Cat {
} }
fn args_get(path string) !ModuleMeta { fn args_get(path string) !ModuleMeta {
console.print_debug('generate code for path: ${path}')
mut config_path := pathlib.get_file(path: '${path}/.heroscript', create: false)! mut config_path := pathlib.get_file(path: '${path}/.heroscript', create: false)!
if !config_path.exists() { if !config_path.exists() {
@@ -74,6 +73,7 @@ fn args_get(path string) !ModuleMeta {
startupmanager: p.get_default_true('startupmanager') startupmanager: p.get_default_true('startupmanager')
hasconfig: p.get_default_true('hasconfig') hasconfig: p.get_default_true('hasconfig')
build: p.get_default_false('build') build: p.get_default_false('build')
active: p.get_default_true('active')
cat: .installer cat: .installer
path: path path: path
} }
@@ -93,6 +93,7 @@ fn args_get(path string) !ModuleMeta {
title: p.get_default('title', '')! title: p.get_default('title', '')!
default: p.get_default_true('default') default: p.get_default_true('default')
singleton: p.get_default_false('singleton') singleton: p.get_default_false('singleton')
active: p.get_default_true('active')
cat: .client cat: .client
path: path path: path
play_name: p.get_default('play_name', name)! play_name: p.get_default('play_name', name)!

View File

@@ -19,8 +19,10 @@ pub fn scan(args_ ScannerArgs) ! {
args.path = os.getwd() args.path = os.getwd()
} }
mut generateall := false
if args.path == '' { if args.path == '' {
args.path = '${os.home_dir()}/code/github/incubaid/herolib/lib' args.path = '${os.home_dir()}/code/github/incubaid/herolib/lib'
generateall = true
} }
// now walk over all directories, find .heroscript // now walk over all directories, find .heroscript
@@ -32,9 +34,6 @@ pub fn scan(args_ ScannerArgs) ! {
)! )!
console.print_debug('Found ${plist.paths.len} directories with .heroscript file.') console.print_debug('Found ${plist.paths.len} directories with .heroscript file.')
if args.generate && args.path != '' {
return error('when scanning without generation then we always need to start from the root path, so no . or path provided.')
}
if args.generate { if args.generate {
console.print_debug('Now generating code for all found .heroscript files.') console.print_debug('Now generating code for all found .heroscript files.')
for mut p in plist.paths { for mut p in plist.paths {
@@ -45,8 +44,15 @@ pub fn scan(args_ ScannerArgs) ! {
mut res := []ModuleMeta{} mut res := []ModuleMeta{}
for mut p in plist.paths { for mut p in plist.paths {
pparent := p.parent()! pparent := p.parent()!
res << args_get(pparent.path)! mut t := args_get(pparent.path)!
if t.active {
res << t
} else {
console.print_debug('Skipping generation for ${t.name} as active is false.')
}
}
if generateall {
console.print_debug('Found ${res.len} generator args.')
generate_play_all(res)!
} }
console.print_debug('Found ${res.len} generator args.')
generate_play_all(res)!
} }

View File

@@ -1,5 +1,7 @@
module playcmds module playcmds
import incubaid.herolib.core.playbook
@for item in meta_items @for item in meta_items
import @{item.module_path} import @{item.module_path}
@end @end

View File

@@ -32,6 +32,7 @@ pub fn cmd_generator(mut cmdroot Command) {
flag: .bool flag: .bool
required: false required: false
name: 'generate' name: 'generate'
abbrev: 'g'
description: 'generate the code only relevant for scanning.' description: 'generate the code only relevant for scanning.'
}) })

View File

@@ -1,5 +1,6 @@
module playcmds module playcmds
import incubaid.herolib.core.playbook
import incubaid.herolib.clients.giteaclient import incubaid.herolib.clients.giteaclient
import incubaid.herolib.clients.ipapi import incubaid.herolib.clients.ipapi
import incubaid.herolib.clients.jina import incubaid.herolib.clients.jina
@@ -18,12 +19,7 @@ import incubaid.herolib.clients.wireguard
import incubaid.herolib.clients.zerodb_client import incubaid.herolib.clients.zerodb_client
import incubaid.herolib.clients.zinit import incubaid.herolib.clients.zinit
import incubaid.herolib.develop.heroprompt import incubaid.herolib.develop.heroprompt
import incubaid.herolib.installers.db.cometbft
import incubaid.herolib.installers.db.meilisearch_installer import incubaid.herolib.installers.db.meilisearch_installer
import incubaid.herolib.installers.db.postgresql
import incubaid.herolib.installers.db.qdrant_installer
import incubaid.herolib.installers.db.zerodb
import incubaid.herolib.installers.db.zerofs
import incubaid.herolib.installers.infra.coredns import incubaid.herolib.installers.infra.coredns
import incubaid.herolib.installers.infra.gitea import incubaid.herolib.installers.infra.gitea
import incubaid.herolib.installers.infra.livekit import incubaid.herolib.installers.infra.livekit
@@ -34,15 +30,8 @@ import incubaid.herolib.installers.lang.python
import incubaid.herolib.installers.lang.rust import incubaid.herolib.installers.lang.rust
import incubaid.herolib.installers.net.mycelium_installer import incubaid.herolib.installers.net.mycelium_installer
import incubaid.herolib.installers.net.wireguard_installer import incubaid.herolib.installers.net.wireguard_installer
import incubaid.herolib.installers.net.yggdrasil
import incubaid.herolib.installers.sysadmintools.actrunner
import incubaid.herolib.installers.sysadmintools.b2 import incubaid.herolib.installers.sysadmintools.b2
import incubaid.herolib.installers.sysadmintools.fungistor
import incubaid.herolib.installers.sysadmintools.garage_s3 import incubaid.herolib.installers.sysadmintools.garage_s3
import incubaid.herolib.installers.sysadmintools.grafana
import incubaid.herolib.installers.sysadmintools.prometheus
import incubaid.herolib.installers.sysadmintools.rclone
import incubaid.herolib.installers.sysadmintools.restic
import incubaid.herolib.installers.threefold.griddriver import incubaid.herolib.installers.threefold.griddriver
import incubaid.herolib.installers.virt.cloudhypervisor import incubaid.herolib.installers.virt.cloudhypervisor
import incubaid.herolib.installers.virt.docker import incubaid.herolib.installers.virt.docker
@@ -52,13 +41,10 @@ import incubaid.herolib.installers.virt.pacman
import incubaid.herolib.installers.virt.podman import incubaid.herolib.installers.virt.podman
import incubaid.herolib.installers.virt.youki import incubaid.herolib.installers.virt.youki
import incubaid.herolib.installers.web.bun import incubaid.herolib.installers.web.bun
import incubaid.herolib.installers.web.imagemagick
import incubaid.herolib.installers.web.lighttpd
import incubaid.herolib.installers.web.tailwind import incubaid.herolib.installers.web.tailwind
import incubaid.herolib.installers.web.tailwind4 import incubaid.herolib.installers.web.tailwind4
import incubaid.herolib.installers.web.traefik import incubaid.herolib.installers.web.traefik
import incubaid.herolib.installers.web.zola import incubaid.herolib.installers.web.zola
import incubaid.herolib.threefold.grid3.deployer
import incubaid.herolib.virt.hetznermanager import incubaid.herolib.virt.hetznermanager
pub fn run_all(args_ PlayArgs) ! { pub fn run_all(args_ PlayArgs) ! {
@@ -86,12 +72,7 @@ pub fn run_all(args_ PlayArgs) ! {
zerodb_client.play(mut plbook)! zerodb_client.play(mut plbook)!
zinit.play(mut plbook)! zinit.play(mut plbook)!
heroprompt.play(mut plbook)! heroprompt.play(mut plbook)!
cometbft.play(mut plbook)!
meilisearch_installer.play(mut plbook)! meilisearch_installer.play(mut plbook)!
postgresql.play(mut plbook)!
qdrant_installer.play(mut plbook)!
zerodb.play(mut plbook)!
zerofs.play(mut plbook)!
coredns.play(mut plbook)! coredns.play(mut plbook)!
gitea.play(mut plbook)! gitea.play(mut plbook)!
livekit.play(mut plbook)! livekit.play(mut plbook)!
@@ -102,15 +83,8 @@ pub fn run_all(args_ PlayArgs) ! {
rust.play(mut plbook)! rust.play(mut plbook)!
mycelium_installer.play(mut plbook)! mycelium_installer.play(mut plbook)!
wireguard_installer.play(mut plbook)! wireguard_installer.play(mut plbook)!
yggdrasil.play(mut plbook)!
actrunner.play(mut plbook)!
b2.play(mut plbook)! b2.play(mut plbook)!
fungistor.play(mut plbook)!
garage_s3.play(mut plbook)! garage_s3.play(mut plbook)!
grafana.play(mut plbook)!
prometheus.play(mut plbook)!
rclone.play(mut plbook)!
restic.play(mut plbook)!
griddriver.play(mut plbook)! griddriver.play(mut plbook)!
cloudhypervisor.play(mut plbook)! cloudhypervisor.play(mut plbook)!
docker.play(mut plbook)! docker.play(mut plbook)!
@@ -120,12 +94,9 @@ pub fn run_all(args_ PlayArgs) ! {
podman.play(mut plbook)! podman.play(mut plbook)!
youki.play(mut plbook)! youki.play(mut plbook)!
bun.play(mut plbook)! bun.play(mut plbook)!
imagemagick.play(mut plbook)!
lighttpd.play(mut plbook)!
tailwind.play(mut plbook)! tailwind.play(mut plbook)!
tailwind4.play(mut plbook)! tailwind4.play(mut plbook)!
traefik.play(mut plbook)! traefik.play(mut plbook)!
zola.play(mut plbook)! zola.play(mut plbook)!
deployer.play(mut plbook)!
hetznermanager.play(mut plbook)! hetznermanager.play(mut plbook)!
} }

View File

@@ -11,3 +11,4 @@
startupmanager:1 startupmanager:1
hasconfig:1 hasconfig:1
build:1 build:1
active:0

View File

@@ -10,4 +10,5 @@
reset:0 reset:0
startupmanager:1 startupmanager:1
hasconfig:1 hasconfig:1
build:0 build:0
active:false

View File

@@ -10,4 +10,5 @@
reset:0 reset:0
startupmanager:1 startupmanager:1
hasconfig:1 hasconfig:1
build:1 build:1
active:0

View File

@@ -9,3 +9,4 @@
build: true build: true
startupmanager: true startupmanager: true
supported_platforms: "" supported_platforms: ""
active: false

View File

@@ -1,23 +0,0 @@
module gitea
import incubaid.herolib.core.playbook { PlayBook }
import incubaid.herolib.ui.console
import incubaid.herolib.installers.infra.gitea { install }
pub fn play(mut plbook PlayBook) ! {
if !plbook.exists(filter: 'gitea.') {
return
}
mut install_action := plbook.ensure_once(filter: 'gitea.install')!
mut p := install_action.params
mut args := InstallArgs{
reset: p.get_default_false('reset')
}
console.print_header('Executing gitea.install action')
install(args)!
install_action.done = true
}

View File

@@ -129,7 +129,7 @@ pub fn install_multi(args_ InstallArgs) ! {
// fungistor.install(reset: args.reset)! // fungistor.install(reset: args.reset)!
// } // }
// 'lima' { // 'lima' {
// lima.install_(reset: args.reset, uninstall: args.uninstall)! // lima.install(reset: args.reset, uninstall: args.uninstall)!
// } // }
// 'herocontainers' { // 'herocontainers' {
// mut podman_installer0 := podman_installer.get()! // mut podman_installer0 := podman_installer.get()!

View File

@@ -17,7 +17,7 @@ pub mut:
reset bool // means reinstall reset bool // means reinstall
} }
fn install_(args InstallArgs) ! { fn install0(args InstallArgs) ! {
// install herolib if it was already done will return true // install herolib if it was already done will return true
console.print_header('install herolib (reset: ${args.reset})') console.print_header('install herolib (reset: ${args.reset})')
// osal.package_refresh()! // osal.package_refresh()!
@@ -96,7 +96,7 @@ pub fn compile(args InstallArgs) ! {
return return
} }
console.print_header('compile hero') console.print_header('compile hero')
install_(args)! install(args)!
cmd := " cmd := "
cd /tmp cd /tmp

View File

@@ -9,3 +9,4 @@
build: true build: true
startupmanager: true startupmanager: true
supported_platforms: "" supported_platforms: ""
active: false

View File

@@ -8,4 +8,5 @@
templates: false templates: false
build: true build: true
startupmanager: true startupmanager: true
active: false

View File

@@ -27,7 +27,7 @@ fn startupcmd() ![]startupmanager.ZProcessNewArgs {
return res return res
} }
fn running_() !bool { fn running() !bool {
mut installer := get()! mut installer := get()!
// THIS IS EXAMPLE CODEAND NEEDS TO BE CHANGED // THIS IS EXAMPLE CODEAND NEEDS TO BE CHANGED
// this checks health of fungistor // this checks health of fungistor
@@ -64,7 +64,7 @@ fn stop_post() ! {
//////////////////// following actions are not specific to instance of the object //////////////////// following actions are not specific to instance of the object
// checks if a certain version or above is installed // checks if a certain version or above is installed
fn installed_() !bool { fn installed() !bool {
// THIS IS EXAMPLE CODEAND NEEDS TO BE CHANGED // THIS IS EXAMPLE CODEAND NEEDS TO BE CHANGED
// res := os.execute('${osal.profile_path_source_and()!} fungistor version') // res := os.execute('${osal.profile_path_source_and()!} fungistor version')
// if res.exit_code != 0 { // if res.exit_code != 0 {
@@ -87,14 +87,14 @@ fn ulist_get() !ulist.UList {
} }
// uploads to S3 server if configured // uploads to S3 server if configured
fn upload_() ! { fn upload() ! {
// installers.upload( // installers.upload(
// cmdname: 'fungistor' // cmdname: 'fungistor'
// source: '${gitpath}/target/x86_64-unknown-linux-musl/release/fungistor' // source: '${gitpath}/target/x86_64-unknown-linux-musl/release/fungistor'
// )! // )!
} }
fn install_() ! { fn install() ! {
console.print_header('install fungistor') console.print_header('install fungistor')
// THIS IS EXAMPLE CODEAND NEEDS TO BE CHANGED // THIS IS EXAMPLE CODEAND NEEDS TO BE CHANGED
// mut url := '' // mut url := ''
@@ -125,7 +125,7 @@ fn install_() ! {
// )! // )!
} }
fn build_() ! { fn build() ! {
// url := 'https://github.com/threefoldtech/fungistor' // url := 'https://github.com/threefoldtech/fungistor'
// make sure we install base on the node // make sure we install base on the node
@@ -154,7 +154,7 @@ fn build_() ! {
// )! // )!
} }
fn destroy_() ! { fn destroy() ! {
// mut systemdfactory := systemd.new()! // mut systemdfactory := systemd.new()!
// systemdfactory.destroy("zinit")! // systemdfactory.destroy("zinit")!

View File

@@ -8,4 +8,4 @@
templates: false templates: false
build: true build: true
startupmanager: true startupmanager: true
active: false

View File

@@ -27,7 +27,7 @@ fn startupcmd() ![]startupmanager.ZProcessNewArgs {
return res return res
} }
fn running_() !bool { fn running() !bool {
mut installer := get()! mut installer := get()!
// THIS IS EXAMPLE CODEAND NEEDS TO BE CHANGED // THIS IS EXAMPLE CODEAND NEEDS TO BE CHANGED
// this checks health of grafana // this checks health of grafana
@@ -64,7 +64,7 @@ fn stop_post() ! {
//////////////////// following actions are not specific to instance of the object //////////////////// following actions are not specific to instance of the object
// checks if a certain version or above is installed // checks if a certain version or above is installed
fn installed_() !bool { fn installed() !bool {
// THIS IS EXAMPLE CODEAND NEEDS TO BE CHANGED // THIS IS EXAMPLE CODEAND NEEDS TO BE CHANGED
// res := os.execute('${osal.profile_path_source_and()!} grafana version') // res := os.execute('${osal.profile_path_source_and()!} grafana version')
// if res.exit_code != 0 { // if res.exit_code != 0 {
@@ -87,14 +87,14 @@ fn ulist_get() !ulist.UList {
} }
// uploads to S3 server if configured // uploads to S3 server if configured
fn upload_() ! { fn upload() ! {
// installers.upload( // installers.upload(
// cmdname: 'grafana' // cmdname: 'grafana'
// source: '${gitpath}/target/x86_64-unknown-linux-musl/release/grafana' // source: '${gitpath}/target/x86_64-unknown-linux-musl/release/grafana'
// )! // )!
} }
fn install_() ! { fn install() ! {
console.print_header('install grafana') console.print_header('install grafana')
// THIS IS EXAMPLE CODEAND NEEDS TO BE CHANGED // THIS IS EXAMPLE CODEAND NEEDS TO BE CHANGED
// mut url := '' // mut url := ''
@@ -125,7 +125,7 @@ fn install_() ! {
// )! // )!
} }
fn build_() ! { fn build() ! {
// url := 'https://github.com/threefoldtech/grafana' // url := 'https://github.com/threefoldtech/grafana'
// make sure we install base on the node // make sure we install base on the node
@@ -154,7 +154,7 @@ fn build_() ! {
// )! // )!
} }
fn destroy_() ! { fn destroy() ! {
// mut systemdfactory := systemd.new()! // mut systemdfactory := systemd.new()!
// systemdfactory.destroy("zinit")! // systemdfactory.destroy("zinit")!

View File

@@ -8,4 +8,4 @@
templates: false templates: false
build: true build: true
startupmanager: true startupmanager: true
active: false

View File

@@ -27,7 +27,7 @@ fn startupcmd() ![]startupmanager.ZProcessNewArgs {
return res return res
} }
fn running_() !bool { fn running() !bool {
mut installer := get()! mut installer := get()!
// THIS IS EXAMPLE CODEAND NEEDS TO BE CHANGED // THIS IS EXAMPLE CODEAND NEEDS TO BE CHANGED
// this checks health of prometheus // this checks health of prometheus
@@ -64,7 +64,7 @@ fn stop_post() ! {
//////////////////// following actions are not specific to instance of the object //////////////////// following actions are not specific to instance of the object
// checks if a certain version or above is installed // checks if a certain version or above is installed
fn installed_() !bool { fn installed() !bool {
// THIS IS EXAMPLE CODEAND NEEDS TO BE CHANGED // THIS IS EXAMPLE CODEAND NEEDS TO BE CHANGED
// res := os.execute('${osal.profile_path_source_and()!} prometheus version') // res := os.execute('${osal.profile_path_source_and()!} prometheus version')
// if res.exit_code != 0 { // if res.exit_code != 0 {
@@ -87,14 +87,14 @@ fn ulist_get() !ulist.UList {
} }
// uploads to S3 server if configured // uploads to S3 server if configured
fn upload_() ! { fn upload() ! {
// installers.upload( // installers.upload(
// cmdname: 'prometheus' // cmdname: 'prometheus'
// source: '${gitpath}/target/x86_64-unknown-linux-musl/release/prometheus' // source: '${gitpath}/target/x86_64-unknown-linux-musl/release/prometheus'
// )! // )!
} }
fn install_() ! { fn install() ! {
console.print_header('install prometheus') console.print_header('install prometheus')
// THIS IS EXAMPLE CODEAND NEEDS TO BE CHANGED // THIS IS EXAMPLE CODEAND NEEDS TO BE CHANGED
// mut url := '' // mut url := ''
@@ -125,7 +125,7 @@ fn install_() ! {
// )! // )!
} }
fn build_() ! { fn build() ! {
// url := 'https://github.com/threefoldtech/prometheus' // url := 'https://github.com/threefoldtech/prometheus'
// make sure we install base on the node // make sure we install base on the node
@@ -154,7 +154,7 @@ fn build_() ! {
// )! // )!
} }
fn destroy_() ! { fn destroy() ! {
// mut systemdfactory := systemd.new()! // mut systemdfactory := systemd.new()!
// systemdfactory.destroy("zinit")! // systemdfactory.destroy("zinit")!

View File

@@ -27,7 +27,7 @@ import time
// // port int = 8888 // // port int = 8888
// } // }
// pub fn install_(args_ InstallArgs) ! { // pub fn install(args_ InstallArgs) ! {
// install_prometheus(args_)! // install_prometheus(args_)!
// install_alertmanager(args_)! // install_alertmanager(args_)!
// install_node_exporter(args_)! // install_node_exporter(args_)!

View File

@@ -10,6 +10,6 @@
reset: 0 // regenerate all, dangerous !!! reset: 0 // regenerate all, dangerous !!!
startupmanager:0 //managed by a startup manager, default true startupmanager:0 //managed by a startup manager, default true
build:0 //will we also build the component build:0 //will we also build the component
active:0 //is the installer active by default

View File

@@ -8,4 +8,5 @@
templates: false templates: false
build: true build: true
startupmanager: true startupmanager: true
active: false

View File

@@ -16,7 +16,7 @@ pub mut:
} }
// install restic will return true if it was already installed // install restic will return true if it was already installed
pub fn build_(args BuildArgs) ! { pub fn build(args BuildArgs) ! {
// make sure we install base on the node // make sure we install base on the node
if core.platform() != .ubuntu { if core.platform() != .ubuntu {
return error('only support ubuntu for now') return error('only support ubuntu for now')

View File

@@ -27,7 +27,7 @@ fn startupcmd() ![]startupmanager.ZProcessNewArgs {
return res return res
} }
fn running_() !bool { fn running() !bool {
mut installer := get()! mut installer := get()!
// THIS IS EXAMPLE CODEAND NEEDS TO BE CHANGED // THIS IS EXAMPLE CODEAND NEEDS TO BE CHANGED
// this checks health of restic // this checks health of restic
@@ -64,7 +64,7 @@ fn stop_post() ! {
//////////////////// following actions are not specific to instance of the object //////////////////// following actions are not specific to instance of the object
// checks if a certain version or above is installed // checks if a certain version or above is installed
fn installed_() !bool { fn installed() !bool {
// THIS IS EXAMPLE CODEAND NEEDS TO BE CHANGED // THIS IS EXAMPLE CODEAND NEEDS TO BE CHANGED
// res := os.execute('${osal.profile_path_source_and()!} restic version') // res := os.execute('${osal.profile_path_source_and()!} restic version')
// if res.exit_code != 0 { // if res.exit_code != 0 {
@@ -87,14 +87,14 @@ fn ulist_get() !ulist.UList {
} }
// uploads to S3 server if configured // uploads to S3 server if configured
fn upload_() ! { fn upload() ! {
// installers.upload( // installers.upload(
// cmdname: 'restic' // cmdname: 'restic'
// source: '${gitpath}/target/x86_64-unknown-linux-musl/release/restic' // source: '${gitpath}/target/x86_64-unknown-linux-musl/release/restic'
// )! // )!
} }
fn install_() ! { fn install() ! {
console.print_header('install restic') console.print_header('install restic')
// THIS IS EXAMPLE CODEAND NEEDS TO BE CHANGED // THIS IS EXAMPLE CODEAND NEEDS TO BE CHANGED
// mut url := '' // mut url := ''
@@ -125,7 +125,7 @@ fn install_() ! {
// )! // )!
} }
fn build_() ! { fn build() ! {
// url := 'https://github.com/threefoldtech/restic' // url := 'https://github.com/threefoldtech/restic'
// make sure we install base on the node // make sure we install base on the node
@@ -154,7 +154,7 @@ fn build_() ! {
// )! // )!
} }
fn destroy_() ! { fn destroy() ! {
// mut systemdfactory := systemd.new()! // mut systemdfactory := systemd.new()!
// systemdfactory.destroy("zinit")! // systemdfactory.destroy("zinit")!

View File

@@ -15,7 +15,7 @@ pub mut:
uninstall bool uninstall bool
} }
pub fn install_(args_ InstallArgs) ! { pub fn install(args_ InstallArgs) ! {
mut args := args_ mut args := args_
version := '0.14.0' version := '0.14.0'
@@ -35,11 +35,11 @@ pub fn install_(args_ InstallArgs) ! {
if args.reset { if args.reset {
console.print_header('install tfrobot') console.print_header('install tfrobot')
build_()! build()!
} }
} }
pub fn build_() ! { pub fn build() ! {
mut g := golang.get()! mut g := golang.get()!
g.install()! g.install()!
console.print_header('build tfrobot') console.print_header('build tfrobot')

View File

@@ -11,7 +11,7 @@ pub mut:
reset bool reset bool
} }
pub fn upload_(args_ UploadArgs) ! { pub fn upload(args_ UploadArgs) ! {
//_ := args_ //_ := args_
panic('to implement') panic('to implement')
} }

View File

@@ -10,4 +10,4 @@
reset:0 reset:0
startupmanager:0 startupmanager:0
hasconfig:0 hasconfig:0
build:1 build:1

View File

@@ -3,12 +3,13 @@ module cloudhypervisor
import incubaid.herolib.osal.core as osal import incubaid.herolib.osal.core as osal
import incubaid.herolib.ui.console import incubaid.herolib.ui.console
import incubaid.herolib.core.texttools import incubaid.herolib.core.texttools
import incubaid.herolib.core
// import incubaid.herolib.core.pathlib // import incubaid.herolib.core.pathlib
import incubaid.herolib.installers.ulist import incubaid.herolib.installers.ulist
// import incubaid.herolib.installers.lang.rust // import incubaid.herolib.installers.lang.rust
import os import os
fn installed_() !bool { fn installed() !bool {
res := os.execute('${osal.profile_path_source_and()!} cloud-hypervisor --version') res := os.execute('${osal.profile_path_source_and()!} cloud-hypervisor --version')
if res.exit_code == 0 { if res.exit_code == 0 {
r := res.output.split_into_lines().filter(it.contains('cloud-hypervisor')) r := res.output.split_into_lines().filter(it.contains('cloud-hypervisor'))
@@ -27,7 +28,7 @@ fn installed_() !bool {
return true return true
} }
fn install_() ! { fn install() ! {
console.print_header('install cloudhypervisor') console.print_header('install cloudhypervisor')
// mut installer := get()! // mut installer := get()!
mut url := '' mut url := ''
@@ -59,7 +60,7 @@ fn install_() ! {
)! )!
} }
fn build_() ! { fn build() ! {
} }
// get the Upload List of the files // get the Upload List of the files
@@ -70,7 +71,7 @@ fn ulist_get() !ulist.UList {
} }
// uploads to S3 server if configured // uploads to S3 server if configured
fn upload_() ! { fn upload() ! {
// mut installer := get()! // mut installer := get()!
// installers.upload( // installers.upload(
// cmdname: 'cloudhypervisor' // cmdname: 'cloudhypervisor'
@@ -78,7 +79,7 @@ fn upload_() ! {
// )! // )!
} }
fn destroy_() ! { fn destroy() ! {
osal.process_kill_recursive(name: 'cloud-hypervisor')! osal.process_kill_recursive(name: 'cloud-hypervisor')!
osal.package_remove(' osal.package_remove('

View File

@@ -89,7 +89,7 @@ fn upload() ! {
fn install() ! { fn install() ! {
console.print_header('install lima') console.print_header('install lima')
qemu.install_()! qemu.install()!
mut url := '' mut url := ''
mut url2 := '' mut url2 := ''
mut dest_on_os := '${os.home_dir()}/hero' mut dest_on_os := '${os.home_dir()}/hero'

View File

@@ -14,7 +14,7 @@ pub mut:
uninstall bool uninstall bool
} }
pub fn install_(args_ InstallArgs) ! { pub fn install(args_ InstallArgs) ! {
mut args := args_ mut args := args_
mut version := '10.0.0' mut version := '10.0.0'

View File

@@ -12,7 +12,7 @@ import incubaid.herolib.installers.lang.python
import os import os
// checks if a certain version or above is installed // checks if a certain version or above is installed
fn installed_() !bool { fn installed() !bool {
// THIS IS EXAMPLE CODEAND NEEDS TO BE CHANGED // THIS IS EXAMPLE CODEAND NEEDS TO BE CHANGED
// res := os.execute('${osal.profile_path_source_and()!} youki version') // res := os.execute('${osal.profile_path_source_and()!} youki version')
// if res.exit_code != 0 { // if res.exit_code != 0 {
@@ -28,13 +28,13 @@ fn installed_() !bool {
return false return false
} }
fn install_() ! { fn install() ! {
console.print_header('install youki') console.print_header('install youki')
destroy()! destroy()!
build()! build()!
} }
fn build_() ! { fn build() ! {
// mut installer := get()! // mut installer := get()!
url := 'https://github.com/containers/youki' url := 'https://github.com/containers/youki'
@@ -73,7 +73,7 @@ fn ulist_get() !ulist.UList {
} }
// uploads to S3 server if configured // uploads to S3 server if configured
fn upload_() ! { fn upload() ! {
// mut installer := get()! // mut installer := get()!
// installers.upload( // installers.upload(
// cmdname: 'youki' // cmdname: 'youki'
@@ -81,7 +81,7 @@ fn upload_() ! {
// )! // )!
} }
fn destroy_() ! { fn destroy() ! {
osal.package_remove(' osal.package_remove('
runc runc
')! ')!

View File

@@ -1,11 +0,0 @@
!!hero_code.generate_installer
name: "imagemagick"
classname: "ImageMagick"
hasconfig: false
singleton: true
default: true
title: ""
templates: false
build: true
startupmanager: true

View File

@@ -1,18 +0,0 @@
module imagemagick
import incubaid.herolib.osal.core as osal
import incubaid.herolib.ui.console
import os
// this gets the name of the directory
const installername = os.base(os.dir(@FILE))
// install imagemagick will return true if it was already installed
pub fn install_() ! {
console.print_header('install ${installername}')
if !osal.done_exists('install_${installername}') {
osal.package_install('imagemagick')!
osal.done_set('install_${installername}', 'OK')!
}
console.print_header('${installername} already done')
}

View File

@@ -1,187 +0,0 @@
module imagemagick
import incubaid.herolib.osal.core as osal
import incubaid.herolib.ui.console
import incubaid.herolib.core.texttools
import incubaid.herolib.core.pathlib
import incubaid.herolib.osal.systemd
import incubaid.herolib.osal.startupmanager
import incubaid.herolib.installers.ulist
import incubaid.herolib.installers.lang.golang
import incubaid.herolib.installers.lang.rust
import incubaid.herolib.installers.lang.python
import os
fn startupcmd() ![]startupmanager.ZProcessNewArgs {
mut installer := get()!
mut res := []startupmanager.ZProcessNewArgs{}
// THIS IS EXAMPLE CODEAND NEEDS TO BE CHANGED
// res << startupmanager.ZProcessNewArgs{
// name: 'imagemagick'
// cmd: 'imagemagick server'
// env: {
// 'HOME': '/root'
// }
// }
return res
}
fn running_() !bool {
mut installer := get()!
// THIS IS EXAMPLE CODEAND NEEDS TO BE CHANGED
// this checks health of imagemagick
// curl http://localhost:3333/api/v1/s --oauth2-bearer 1234 works
// url:='http://127.0.0.1:${cfg.port}/api/v1'
// mut conn := httpconnection.new(name: 'imagemagick', url: url)!
// if cfg.secret.len > 0 {
// conn.default_header.add(.authorization, 'Bearer ${cfg.secret}')
// }
// conn.default_header.add(.content_type, 'application/json')
// console.print_debug("curl -X 'GET' '${url}'/tags --oauth2-bearer ${cfg.secret}")
// r := conn.get_json_dict(prefix: 'tags', debug: false) or {return false}
// println(r)
// if true{panic("ssss")}
// tags := r['Tags'] or { return false }
// console.print_debug(tags)
// console.print_debug('imagemagick is answering.')
return false
}
fn start_pre() ! {
}
fn start_post() ! {
}
fn stop_pre() ! {
}
fn stop_post() ! {
}
//////////////////// following actions are not specific to instance of the object
// checks if a certain version or above is installed
fn installed_() !bool {
// THIS IS EXAMPLE CODEAND NEEDS TO BE CHANGED
// res := os.execute('${osal.profile_path_source_and()!} imagemagick version')
// if res.exit_code != 0 {
// return false
// }
// r := res.output.split_into_lines().filter(it.trim_space().len > 0)
// if r.len != 1 {
// return error("couldn't parse imagemagick version.\n${res.output}")
// }
// if texttools.version(version) == texttools.version(r[0]) {
// return true
// }
return false
}
// get the Upload List of the files
fn ulist_get() !ulist.UList {
// optionally build a UList which is all paths which are result of building, is then used e.g. in upload
return ulist.UList{}
}
// uploads to S3 server if configured
fn upload_() ! {
// installers.upload(
// cmdname: 'imagemagick'
// source: '${gitpath}/target/x86_64-unknown-linux-musl/release/imagemagick'
// )!
}
fn install_() ! {
console.print_header('install imagemagick')
// THIS IS EXAMPLE CODEAND NEEDS TO BE CHANGED
// mut url := ''
// if core.is_linux_arm()! {
// url = 'https://github.com/imagemagick-dev/imagemagick/releases/download/v${version}/imagemagick_${version}_linux_arm64.tar.gz'
// } else if core.is_linux_intel()! {
// url = 'https://github.com/imagemagick-dev/imagemagick/releases/download/v${version}/imagemagick_${version}_linux_amd64.tar.gz'
// } else if core.is_osx_arm()! {
// url = 'https://github.com/imagemagick-dev/imagemagick/releases/download/v${version}/imagemagick_${version}_darwin_arm64.tar.gz'
// } else if core.is_osx_intel()! {
// url = 'https://github.com/imagemagick-dev/imagemagick/releases/download/v${version}/imagemagick_${version}_darwin_amd64.tar.gz'
// } else {
// return error('unsported platform')
// }
// mut dest := osal.download(
// url: url
// minsize_kb: 9000
// expand_dir: '/tmp/imagemagick'
// )!
// //dest.moveup_single_subdir()!
// mut binpath := dest.file_get('imagemagick')!
// osal.cmd_add(
// cmdname: 'imagemagick'
// source: binpath.path
// )!
}
fn build_() ! {
// url := 'https://github.com/threefoldtech/imagemagick'
// make sure we install base on the node
// if core.platform()!= .ubuntu {
// return error('only support ubuntu for now')
// }
// golang.install()!
// console.print_header('build imagemagick')
// gitpath := gittools.get_repo(coderoot: '/tmp/builder', url: url, reset: true, pull: true)!
// cmd := '
// cd ${gitpath}
// source ~/.cargo/env
// exit 1 #todo
// '
// osal.execute_stdout(cmd)!
//
// //now copy to the default bin path
// mut binpath := dest.file_get('...')!
// adds it to path
// osal.cmd_add(
// cmdname: 'griddriver2'
// source: binpath.path
// )!
}
fn destroy_() ! {
// mut systemdfactory := systemd.new()!
// systemdfactory.destroy("zinit")!
// osal.process_kill_recursive(name:'zinit')!
// osal.cmd_delete('zinit')!
// osal.package_remove('
// podman
// conmon
// buildah
// skopeo
// runc
// ')!
// //will remove all paths where go/bin is found
// osal.profile_path_add_remove(paths2delete:"go/bin")!
// osal.rm("
// podman
// conmon
// buildah
// skopeo
// runc
// /var/lib/containers
// /var/lib/podman
// /var/lib/buildah
// /tmp/podman
// /tmp/conmon
// ")!
}

View File

@@ -1,205 +0,0 @@
module imagemagick
import incubaid.herolib.core.playbook { PlayBook }
import incubaid.herolib.ui.console
import json
import incubaid.herolib.osal.startupmanager
import time
__global (
imagemagick_global map[string]&ImageMagick
imagemagick_default string
)
/////////FACTORY
@[params]
pub struct ArgsGet {
pub mut:
name string = 'default'
}
pub fn new(args ArgsGet) !&ImageMagick {
return &ImageMagick{}
}
pub fn get(args ArgsGet) !&ImageMagick {
return new(args)!
}
pub fn play(mut plbook PlayBook) ! {
if !plbook.exists(filter: 'imagemagick.') {
return
}
mut install_actions := plbook.find(filter: 'imagemagick.configure')!
if install_actions.len > 0 {
return error("can't configure imagemagick, because no configuration allowed for this installer.")
}
mut other_actions := plbook.find(filter: 'imagemagick.')!
for mut other_action in other_actions {
if other_action.name in ['destroy', 'install', 'build'] {
mut p := other_action.params
reset := p.get_default_false('reset')
if other_action.name == 'destroy' || reset {
console.print_debug('install action imagemagick.destroy')
destroy()!
}
if other_action.name == 'install' {
console.print_debug('install action imagemagick.install')
install()!
}
}
if other_action.name in ['start', 'stop', 'restart'] {
mut p := other_action.params
name := p.get('name')!
mut imagemagick_obj := get(name: name)!
console.print_debug('action object:\n${imagemagick_obj}')
if other_action.name == 'start' {
console.print_debug('install action imagemagick.${other_action.name}')
imagemagick_obj.start()!
}
if other_action.name == 'stop' {
console.print_debug('install action imagemagick.${other_action.name}')
imagemagick_obj.stop()!
}
if other_action.name == 'restart' {
console.print_debug('install action imagemagick.${other_action.name}')
imagemagick_obj.restart()!
}
}
other_action.done = true
}
}
////////////////////////////////////////////////////////////////////////////////////////////////////
//////////////////////////# LIVE CYCLE MANAGEMENT FOR INSTALLERS ///////////////////////////////////
////////////////////////////////////////////////////////////////////////////////////////////////////
fn startupmanager_get(cat startupmanager.StartupManagerType) !startupmanager.StartupManager {
// unknown
// screen
// zinit
// tmux
// systemd
match cat {
.screen {
console.print_debug("installer: imagemagick' startupmanager get screen")
return startupmanager.get(.screen)!
}
.zinit {
console.print_debug("installer: imagemagick' startupmanager get zinit")
return startupmanager.get(.zinit)!
}
.systemd {
console.print_debug("installer: imagemagick' startupmanager get systemd")
return startupmanager.get(.systemd)!
}
else {
console.print_debug("installer: imagemagick' startupmanager get auto")
return startupmanager.get(.auto)!
}
}
}
pub fn (mut self ImageMagick) start() ! {
if self.running()! {
return
}
console.print_header('installer: imagemagick start')
if !installed()! {
install()!
}
configure()!
start_pre()!
for zprocess in startupcmd()! {
mut sm := startupmanager_get(zprocess.startuptype)!
console.print_debug('installer: imagemagick starting with ${zprocess.startuptype}...')
sm.new(zprocess)!
sm.start(zprocess.name)!
}
start_post()!
for _ in 0 .. 50 {
if self.running()! {
return
}
time.sleep(100 * time.millisecond)
}
return error('imagemagick did not install properly.')
}
pub fn (mut self ImageMagick) install_start(args InstallArgs) ! {
switch(self.name)
self.install(args)!
self.start()!
}
pub fn (mut self ImageMagick) stop() ! {
switch(self.name)
stop_pre()!
for zprocess in startupcmd()! {
mut sm := startupmanager_get(zprocess.startuptype)!
sm.stop(zprocess.name)!
}
stop_post()!
}
pub fn (mut self ImageMagick) restart() ! {
switch(self.name)
self.stop()!
self.start()!
}
pub fn (mut self ImageMagick) running() !bool {
switch(self.name)
// walk over the generic processes, if not running return
for zprocess in startupcmd()! {
if zprocess.startuptype != .screen {
mut sm := startupmanager_get(zprocess.startuptype)!
r := sm.running(zprocess.name)!
if r == false {
return false
}
}
}
return running()!
}
@[params]
pub struct InstallArgs {
pub mut:
reset bool
}
pub fn (mut self ImageMagick) install(args InstallArgs) ! {
switch(self.name)
if args.reset || (!installed()!) {
install()!
}
}
pub fn (mut self ImageMagick) build() ! {
switch(self.name)
build()!
}
pub fn (mut self ImageMagick) destroy() ! {
switch(self.name)
self.stop() or {}
destroy()!
}
// switch instance to be used for imagemagick
pub fn switch(name string) {
}

View File

@@ -1,27 +0,0 @@
module imagemagick
import incubaid.herolib.data.paramsparser
import os
pub const version = '0.0.0'
const singleton = true
const default = true
// THIS THE THE SOURCE OF THE INFORMATION OF THIS FILE, HERE WE HAVE THE CONFIG OBJECT CONFIGURED AND MODELLED
@[heap]
pub struct ImageMagick {
pub mut:
name string = 'default'
}
fn obj_init(obj_ ImageMagick) !ImageMagick {
// never call get here, only thing we can do here is work on object itself
mut obj := obj_
panic('implement')
return obj
}
// called before start if done
fn configure() ! {
// mut installer := get()!
}

View File

@@ -1,40 +0,0 @@
# imagemagick
To get started
```v
import incubaid.herolib.installers.something.imagemagick as imagemagick_installer
heroscript:="
!!imagemagick.configure name:'test'
password: '1234'
port: 7701
!!imagemagick.start name:'test' reset:1
"
imagemagick_installer.play(heroscript=heroscript)!
//or we can call the default and do a start with reset
//mut installer:= imagemagick_installer.get()!
//installer.start(reset:true)!
```
## example heroscript
```hero
!!imagemagick.configure
homedir: '/home/user/imagemagick'
username: 'admin'
password: 'secretpassword'
title: 'Some Title'
host: 'localhost'
port: 8888
```

View File

@@ -8,4 +8,5 @@
templates: false templates: false
build: true build: true
startupmanager: true startupmanager: true
active: false

View File

@@ -27,7 +27,7 @@ fn startupcmd() ![]startupmanager.ZProcessNewArgs {
return res return res
} }
fn running_() !bool { fn running() !bool {
mut installer := get()! mut installer := get()!
// THIS IS EXAMPLE CODEAND NEEDS TO BE CHANGED // THIS IS EXAMPLE CODEAND NEEDS TO BE CHANGED
// this checks health of lighttpd // this checks health of lighttpd
@@ -64,7 +64,7 @@ fn stop_post() ! {
//////////////////// following actions are not specific to instance of the object //////////////////// following actions are not specific to instance of the object
// checks if a certain version or above is installed // checks if a certain version or above is installed
fn installed_() !bool { fn installed() !bool {
// THIS IS EXAMPLE CODEAND NEEDS TO BE CHANGED // THIS IS EXAMPLE CODEAND NEEDS TO BE CHANGED
// res := os.execute('${osal.profile_path_source_and()!} lighttpd version') // res := os.execute('${osal.profile_path_source_and()!} lighttpd version')
// if res.exit_code != 0 { // if res.exit_code != 0 {
@@ -87,14 +87,14 @@ fn ulist_get() !ulist.UList {
} }
// uploads to S3 server if configured // uploads to S3 server if configured
fn upload_() ! { fn upload() ! {
// installers.upload( // installers.upload(
// cmdname: 'lighttpd' // cmdname: 'lighttpd'
// source: '${gitpath}/target/x86_64-unknown-linux-musl/release/lighttpd' // source: '${gitpath}/target/x86_64-unknown-linux-musl/release/lighttpd'
// )! // )!
} }
fn install_() ! { fn install() ! {
console.print_header('install lighttpd') console.print_header('install lighttpd')
// THIS IS EXAMPLE CODEAND NEEDS TO BE CHANGED // THIS IS EXAMPLE CODEAND NEEDS TO BE CHANGED
// mut url := '' // mut url := ''
@@ -125,7 +125,7 @@ fn install_() ! {
// )! // )!
} }
fn build_() ! { fn build() ! {
// url := 'https://github.com/threefoldtech/lighttpd' // url := 'https://github.com/threefoldtech/lighttpd'
// make sure we install base on the node // make sure we install base on the node
@@ -154,7 +154,7 @@ fn build_() ! {
// )! // )!
} }
fn destroy_() ! { fn destroy() ! {
// mut systemdfactory := systemd.new()! // mut systemdfactory := systemd.new()!
// systemdfactory.destroy("zinit")! // systemdfactory.destroy("zinit")!

View File

@@ -12,7 +12,7 @@ import os
pub const version = '0.18.0' pub const version = '0.18.0'
// checks if a certain version or above is installed // checks if a certain version or above is installed
fn installed_() !bool { fn installed() !bool {
res := os.execute('${osal.profile_path_source_and()!} zola -V') res := os.execute('${osal.profile_path_source_and()!} zola -V')
myversion := res.output.all_after(' ') myversion := res.output.all_after(' ')
if res.exit_code == 0 { if res.exit_code == 0 {
@@ -25,7 +25,7 @@ fn installed_() !bool {
return false return false
} }
fn install_() ! { fn install() ! {
console.print_header('install zola') console.print_header('install zola')
// make sure we install base on the node // make sure we install base on the node
@@ -62,8 +62,9 @@ fn install_() ! {
} }
// install zola will return true if it was already installed // install zola will return true if it was already installed
fn build_() ! { fn build() ! {
rust.install()! mut r := rust.get()!
r.install()!
console.print_header('install zola') console.print_header('install zola')
cmd := ' cmd := '
source ~/.cargo/env source ~/.cargo/env
@@ -81,5 +82,5 @@ fn build_() ! {
console.print_header('zola installed') console.print_header('zola installed')
} }
fn destroy_() ! { fn destroy() ! {
} }

View File

@@ -5,4 +5,5 @@
singleton:0 singleton:0
default:1 default:1
hasconfig:1 hasconfig:1
reset:0 reset:0
active:false