Compare commits

...

2 commits

Author SHA1 Message Date
Artur Gurgul1
a7807f089c add doc 2025-08-06 17:55:14 +02:00
Artur Gurgul1
9c77ae9d2c make it possible to call DSL script 2025-08-06 17:49:36 +02:00
3 changed files with 112 additions and 0 deletions

View file

@ -56,6 +56,10 @@ when :make
puts "making..."
require 'make'
Make.command(options)
when :execute
puts "Ececuting: #{options.name}"
require 'execute'
Execute.file(options)
when :goto
Dir.chdir(ENV["DAT_ROOT"])
when :vm

37
doc/execute.md Normal file
View file

@ -0,0 +1,37 @@
It is how you can describe config of your server
```ruby
user :artur
user :lucyna
service :forgejo do |context|
context.home_page = true
# per default all users are allowed
context.users = [:artur]
end
service :zulip
# this should be already installed, becouse it is required by others
service :postgresql
install :nvim, :python
```
And then save it as `Configfile` as default or with specyfic name
```bash
# if default file name
dat execute
# if non standard file
dat execute file-name
```

71
lib/execute.rb Normal file
View file

@ -0,0 +1,71 @@
module Execute
end
require 'rubygems'
require 'ostruct'
# dat execute progress
# dat execute < default Configfile
module Execute
def dependency(name)
puts "Checking for #{name}..."
unless gem_installed?(name)
puts "Installing #{name}..."
system("gem install #{name}")
else
puts "#{name} is already installed."
end
require name
rescue LoadError => e
puts "Failed to load #{name}: #{e.message}"
end
def gem_installed?(name)
Gem::Specification::find_all_by_name(name).any?
end
def postgres
require 'setup/postgresql'
puts 'installing postgres'
Setup::PostgreSQL.install
end
def service(name)
if block_given?
context = OpenStruct.new
output = yield context
puts output
puts "context: #{context}"
else
puts "No block provided"
end
end
def user(name)
puts "Creating user: #{name}"
end
def install(*packages)
packages.each do |pkg|
puts "Installing #{pkg}"
end
end
def self.file(options)
puts "options: #{options}"
dsl = Object.new
dsl.extend(Execute)
# Configfile
path = File.join(Dir.pwd, options.name || "./Configfile")
dsl.instance_eval(File.read(path), path)
# Execute the config
end
end