melezhik

joined 3 years ago
 

DTAP is:

  • fast ( both server and client side a written on go )
  • it has Bash api for end users ( who would write check scenarios )
  • For strict environments it allows to run checks remotely over ssh without even installing anything

Check it out and feel free to ask anything

https://dtap.sparrowhub.io/doc/checks

Thanks

[–] melezhik@programming.dev 2 points 3 weeks ago* (last edited 3 weeks ago)

I mean if it happens when two different repos would run builds simultaneously. Usually average team may have few repos . If there is no builds at all , I think it’s even less by RAM - as all the dependencies are pretty much in binary complied form - so , say 2 GB would be enough . As backend is pure go ( echo framework ) and is extremely low footprint and as for the CI runner is just a dispatcher background process gets run by very efficient rakupp and just idling . All the git operations are also very lightweight - native smart http / CGI protocol is in use under the hood if you need details

[–] melezhik@programming.dev 1 points 3 weeks ago (2 children)

Ok, what requirements you think is lightweight ? We talk about team work anyway , where concurrent builds run …

[–] melezhik@programming.dev 2 points 3 weeks ago* (last edited 3 weeks ago)

Even though you’d prefer do everything in cli which is arguable alternative , what about cicd part? Teams need that one

 

Hey 👋 DSCI author here. If someone love to check out dsci please let me know. It’s in beta stage, but some essential features are here. Extremely fast and lightweight git server and cicd. Fast ci engine on Rakupp. Ability to port existing remote git repos . CI SDK supports many languages including Python, Ruby, Raku. CI jobs run on podman / docker or localhost . Authentication for git push over https. The memory and CPU footprint is comparable to forgejo. You don’t need to install extra ci runner as the one comes included . Thus is extremely simple install. Minimal operations efforts. Suites the best to small dev teams hosting things on single VPS. Works in any Linux / Mac box. Hardware requirements - 4-8 GB RAM, 50 GB hard drive. No extra dependencies like pgsql , redis etc. Backend and front end written on golang . CI engine is on Raku, but runs on Rakupp - efficient Raku implementation that gives one a minimal start up time, speed and small cpu/memory consumption - check yourself. Everything is installed as binaries …

Current demo stand https://dsci.sparrowhub.io/ runs on Rakupp , I need to tweak official documentation to reflect Rakupp migration changes ( not a lot though )

PS. This is NOT AI written project.

[–] melezhik@programming.dev 1 points 1 month ago* (last edited 1 month ago)

Hey. My too cents here. I am building DSCI - self hosted git with ci embedded . Suitable for small teams with limited VPS hosting, features:

  • general programming languages for ci ( not YAML )

  • super simple install and maintaining- everything is a single binary ( golang ) , ci jobs run on localhost/podman/docker

  • no need extra runners / k8s / devops teams - everything is in dev hands through regular programming code - super simple

  • ci SDK is available for bash/python/perl/raku/php/powershell/golang

It’s still in early development stage , but users can already play with it - here is demo stand - http://dsci.sparrowhub.io/

Documentation is available here - http://deadsimpleci.sparrowhub.io/ or GitHub - https://github.com/melezhik/DSCI

[–] melezhik@programming.dev 2 points 1 month ago

See installation page on podman specific setup … Pretty much the same as docker

 

In this episode I talk about developing web application based on well known cro framework and specifically how to create CI pipeline using DSCI tool.

[–] melezhik@programming.dev 2 points 2 months ago* (last edited 2 months ago) (1 children)

But now when you have a YAML program as the first level abstraction how do you handle results between those multi language calls ? In DSCI this is achieved via states and normal functions , and everting is just a function on general purpose programming language, in YAML you need all these magic ( awkward ) YAML syntax to mimic all those things ( pass parameters , handle global variables , process user input , handle returned parameters , etc )

[–] melezhik@programming.dev 1 points 2 months ago* (last edited 2 months ago)

If you use tools gluing them into YAML - you get YAML bloated with time . When you say those tools already having Python - excellent I would like to use those Python libs or SDK directly in my Python code instead of juggling those tools as cli or code blocks inside YAML

UPDATE: and yeah , re-read again - I guess the most of automation is done today via “CI” pipelines even when those are not meant to be CI only, like you said … anyways the rest I have said stands true for me … don’t bake your code into YAML )

[–] melezhik@programming.dev 2 points 2 months ago* (last edited 2 months ago)

The issues you had just proves that YAML based CI approach always leads to troubles with time. And yeah, I have been there, code generators for YAML. Hundreds of lines for YAML pipelines, etc ))

It allows the CI engine to determine which jobs to start, what their steps are etc.

Yep, like a said , I don't mind to have such a configuration inside YAML, but this should NOT be pipeline code itself )

[–] melezhik@programming.dev 2 points 2 months ago* (last edited 2 months ago) (2 children)

... put those in separate scripts and call them from the YAML.

This is exactly what I try to avoid, cause:

  1. many people (in my experience ) even don't bother refactoring YAML spaghetti code to separate scripts and we end up unmaintainable codebase

  2. and even if one has to do such a refactoring what is the point of using YAML at all ?

All I need just a collection of tasks/jobs written on languages of choice and I don't need YAML "programming" language at all )

PS And btw I don't mind having a minimal amount of YAML as configuration layer and this is what is presented in DSCI, but only minimal ))

[–] melezhik@programming.dev 2 points 2 months ago* (last edited 2 months ago) (2 children)

it's just because I think in real world we have a lot of tasks where state is required or extremely beneficial, some examples on top of my head:

  • creation of virtual machines with dynamic IP addresses
  • creation of bug tracking system tickets with unique ticket IDs
  • looking up in databases where fetched records have unique IDs

etc

[–] melezhik@programming.dev 1 points 2 months ago* (last edited 2 months ago) (4 children)

Ok, try to do it on GH actions, share states between tasks/jobs for example:

tasks/task_one/task.py

#!/usr/bin/python3

update_state({
  'out1' : 'out1 value',
  'out2' : 'out2 value'
})

tasks/task_two/task.py

#!/usr/bin/python3

dict = get_state()
print(dict["out1"])
print(dict["out2"])

Or share states between jobs:

jobs/job1/task.py

#!/usr/bin/python3

update_state({
  'out1' : 'out1 value',
  'out2' : 'out2 value'
})

jobs/job2/task.py

#!/usr/bin/python3

dict = config()

print(dict["_dsci_"]["job1"]["out1"])
print(dict["_dsci_"]["job1"]["out2"])

I can't imagine how much boilerplate code (if this ever possible ) one needs to write to achieve that on YAML based pipelines (GH Actions/ etc)

And don't tell me about jobs artifacts ))

UPDATE:

Another good example is to run tasks conditionally, yes using old good if:

#!/usr/bin/python3

if some_condition(foo, bar): 
    run_task(
       'task1', {
          'foo' : 'foo value',
          'bar' : 'bar value'
       }
    )

The same could be quite awkward in YAML based code

[–] melezhik@programming.dev 2 points 2 months ago* (last edited 2 months ago) (4 children)

Only as high level glue , main logic is just normal programming languages - see here https://github.com/melezhik/DSCI/tree/main/examples

 

DSCI is simple yet super flexible pipeline engine to write CI code on regular programming languages, integrates with Forgejo using web hooks. Intended for small teams hosting Forgejo on single VM VPS and willing to create pipelines on regular programming languages

 

DTAP protocol is a lightweight testing protocol allowing to validate Linux infrastructure at ease. Here is a code example of how one can check that their Rocky Linux VM is secure enough (more Linux distributions are easy to check the same way).

 

Some times ago I posted about scc tool, here is a short update with some example reports provided. https://dev.to/melezhik/linux-compliance-checks-with-sparrow-plugin-2160

People can use the plugin to check if their Linux configuration files are security compliant

Sparrow is a Raku automation framework

 

Scc is a sparrow plugin that could be run over terminal to check security best practice of your Linux conf files :

  • sshd
  • sudoers
  • bind
  • redis
  • sysctl

more services are coming , check it out and let me know what you think https://github.com/melezhik/sparrow-plugins/tree/master/scc

 

Dead simple ci is yamless pipeline engine for gitea/forgejo (using web hooks mechanism). Allowing one to write pipeline in general programming language. DSCI provides SDK allow to write extensions for the engine, the same way using general programming languages . This is an introduction - https://deadsimpleci.sparrowhub.io/doc/bash-plugins with simple examples on Bash and Python, but enough to get started ...

15
submitted 7 months ago* (last edited 7 months ago) by melezhik@programming.dev to c/programming@programming.dev
 

Introduction into Dead Simple CI framework for ci pipelines automation.

https://dev.to/melezhik/dead-simple-ci-introduction-1jh6

5
Dsci runner migrated to golang (deadsimpleci.sparrowhub.io)
submitted 8 months ago* (last edited 8 months ago) by melezhik@programming.dev to c/show_and_tell@programming.dev
 

Hey everyone! After week of work finally rewrote dsci runner on golang.

git clone https://github.com/melezhik/dsci-runner.git cd dsci-runner go mod tidy go build -o dsci_runner main.go ./dsci_runner

That means just a single binary install Check it out ! )

Forgejo integrations details are here - http://deadsimpleci.sparrowhub.io/doc/forgejo-setup

view more: next ›