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

[–] [S] 2 points 1 month ago* (last edited 1 month 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

  • source
  • parent
  • context
  •  

    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.

    [–] 2 points 2 months ago* (last edited 2 months 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

  • source
  • [–] [S] 2 points 3 months ago* (1 child)

    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 )

  • source
  • parent
  • context
  • [–] [S] 1 point 3 months ago* (last edited 3 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 )

  • source
  • parent
  • context
  • [–] [S] 2 points 3 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 )

  • source
  • parent
  • context
  • [–] [S] 2 points 3 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 ))

  • source
  • parent
  • context
  • [–] [S] 2 points 3 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

  • source
  • parent
  • context
  • [–] [S] 1 point 3 months ago* (last edited 3 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

  • source
  • parent
  • context
  •  

    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 ...

     

    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 ›