simpleci 0.1.1

A simple tool to run CICD pipelines locally
# SimpleCI - Dead simple CI/CD pipeline executor
>
> :warning: SimpleCI was originaly written in Python.
> Some features may be missing for now!
> See python version repo [here]https://gitlab.com/FrancoisSevestre/simple-ci/.

Simple-CI is a CI/CD pipeline executor similar to gitlab CI/CD but in local.
It's triggered by a git hook after a commit and executes directives given by
user in a simple script named .simple-ci.yml, placed at the root of the directory.
The artifacts (logs, compiled binairies, etc) are stored in a folder
at the same level that the project folder named [project name]-simple-ci.

## Why simple-CI?

Automation pipelines like GitLab CI/CD are great tools for improving software development.
However, the syntax can be tidious and the user relies completely on gitlab
and it's runners (even though you can create your own runners).
Furthermore, installing tools like gitlab or jenkins locally consumes a lot
of resources and requires having them running in the background.

Simple-CI/CD solves these issues by providing a dead simple way
for the user to run a CI/CD pipeline:

  1. Start simple-ci in your repository.
  2. Build your pipeline in the .simple-ci.yml file.
  3. Commit a change with git and let the pipeline execute itself.
  4. Profit!

Check the [Wiki](https://gitlab.com/FrancoisSevestre/simple-ci-rust-edition/-/wikis/home)
for more in-depth documentation.

## Commands

- `simpleci start`: Create the git hook.
- `simpleci stop`: Delete git hook (The pipeline will not be executed).
- `simpleci init`: Create the git hook and the .simple-ci.yml file.
- `simpleci exec`: Executes the pipeline.
- `simpleci clean`: Remove all artifacts files.

## Simple example of .simple-ci.yml script

``` yaml
variables:
  GLOBAL_VAR: "last"

stages:
  - stage1
  - stage2

stage1:
  variables:
    MYVAR: "second"
  jobs:
    - job1
    - job2

stage2:
  inside_docker:
    image: ruby:2.7
    path: /tmp/
  jobs:
    - job3

job1:
  variables:
    fie_name: "new_file"
  artifacts:
    paths:
      - new_file
  script:
    - echo "This is the first job."
    - touch $file_name

job2:
  inside_docker:
    image: ubuntu
    path: /
  script:
    - echo "This is the $MYVAR job."

job3:
    script:
    - echo "This is the $GLOBAL_VAR job, that will be executed after stage1 is completed."
```

You will find the complete syntax documentation on the [Wiki](https://gitlab.com/FrancoisSevestre/simple-ci-rust-edition/-/wikis/Pipeline-syntax)

## Installation

``` bash
cargo install simpleci
```

### Dependencies

- bash
- git

## Contributing

Feel free to submit any issues is you want to contribute.

## Roadmap

### ✅ Completed Features

- [x] Basic functionnality: script, job and stage pipelines
- [x] Keyword: Variables (define environment variables before job execution)
- [x] Pipeline logs with timestamps and durations
- [x] Keyword: Docker (execute jobs in docker containers)
- [x] Keyword: Artifacts (Files saved after pipeline execution)
- [x] Keyword: Cache (Share files between jobs)
- [x] Config file (.simple-ci/config.yml)
- [x] Custom shell support (bash, fish, zsh, sh)
- [x] Job-specific shell: keyword "shell"
- [x] Comprehensive test suite (20+ pipeline combinations)
- [x] Git hook creation (start/stop/init)
- [x] Clean command (remove artifacts)

### 📋 Planned Features

- [ ] Gitlab CI/CD integration
- [ ] TUI execution (logs scrollable in window, stages/jobs with symbols)
- [ ] Select run and explore logs
- [ ] only-if (conditional job execution)
- [ ] never-if (conditional job skipping)
- [ ] Custom hooks (pre-commit, post-commit, pre-push...)
- [ ] Secrets (store variables without displaying them)
- [ ] Custom output colors
- [ ] Multi-language support