# What is Socrates?

## *A Simple Automation Server*

[![@coreui angular](https://img.shields.io/badge/@coreui%20-angular-lightgrey.svg?style=flat-square)](https://github.com/coreui/angular)

[Socrates](#a-simple-automation-server) is a simple automation server, inspired by Jenkins. It can run tasks in any code language and present them in a friendly dashboard to non-technical users.

![](https://1971768033-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FVaIfG2Rerp9OfcB9UQTT%2Fuploads%2FwrNz6ZU0V7uU6bwVYCJL%2FScreen%20Shot%202022-04-09%20at%2016.16.17.png?alt=media\&token=a4d249ab-ca66-44e9-84dd-bf75f302f882)

## Quickstart

*For Evaluation and Testing:*

1. Download the `docker-compose.yaml` file from the root of the repository.
2. Run `docker-compose up` and wait until all components are healthy.

## Features

* Define [Parameterized](https://socrates.gitbook.io/socrates/fundamentals/parameters) [Blocks](https://socrates.gitbook.io/socrates/fundamentals/projects) of code in any language to be run in Docker.
* Define Static and [Dynamic](https://socrates.gitbook.io/socrates/fundamentals/parameters/dynamic) [parameters](https://socrates.gitbook.io/socrates/fundamentals/parameters) to be used by all Blocks.
* Create [Instances](https://socrates.gitbook.io/socrates/fundamentals/instances) of code that can be run individually.
* Create [Steps](https://socrates.gitbook.io/socrates/fundamentals/flows/step-flows) and [DAG](https://socrates.gitbook.io/socrates/fundamentals/flows/dag-flows) [Flows](https://socrates.gitbook.io/socrates/fundamentals/flows) using Instances of code.
* Save [Artifacts](https://socrates.gitbook.io/socrates/fundamentals/instances/artifacts) and Outputs, managed by Minio S3.
* [Schedule](https://socrates.gitbook.io/socrates/fundamentals/scheduler) any component and view it in a timeline.
* Connect a [Github](https://socrates.gitbook.io/socrates/configuration/settings/github) repository with or without a Webhook, automatically update all the code in the server.
* Manage a friendly [Developer Portal](https://socrates.gitbook.io/socrates/use-cases/user-portal), give your jobs custom names and folders.
* Can be run on [Docker or on Kubernetes](https://socrates.gitbook.io/socrates/guides/creating-your-first-project)

## Components

Socrates's main components are the basic terms that define how to work with the server.

| Component                                                                        | Description                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 |
| -------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| [Block](https://socrates.gitbook.io/socrates/fundamentals/projects)              | A Block is a component made of a Code in a specific Language. It might have [parameters](https://socrates.gitbook.io/socrates/fundamentals/parameters), defaults, and a Pre-Code in `Shell` to execute before the main. It may also be directly attached to a file in [Github](https://socrates.gitbook.io/socrates/configuration/settings/github).                                                                                                                                                                                                                                                         |
| [Instance](https://socrates.gitbook.io/socrates/fundamentals/instances)          | An Instance is attached to a [Block](https://socrates.gitbook.io/socrates/fundamentals/projects). It is essentially a [Parameterized](https://socrates.gitbook.io/socrates/fundamentals/parameters) [Block](https://socrates.gitbook.io/socrates/fundamentals/projects), with its own execution History. Multiple Instance can exist for the same [Block](https://socrates.gitbook.io/socrates/fundamentals/projects). It can be run individually, inside a [Flow](https://socrates.gitbook.io/socrates/fundamentals/flows) or be [scheduled](https://socrates.gitbook.io/socrates/fundamentals/scheduler). |
| [Steps Flow](https://socrates.gitbook.io/socrates/fundamentals/flows/step-flows) | Steps Flow is a pipeline of one or more [Instances](https://socrates.gitbook.io/socrates/fundamentals/instances) arranged in Steps. They share ENV Variables ([parameters](https://socrates.gitbook.io/socrates/fundamentals/parameters)) and Outputs to the next Steps. It has its own execution history and can be drilled down to individual Instances.                                                                                                                                                                                                                                                  |
| [DAG Flow](https://socrates.gitbook.io/socrates/fundamentals/flows/dag-flows)    | DAG Flow is a pipeline of one or more [Instances](https://socrates.gitbook.io/socrates/fundamentals/instances) arranged in a Graph. They share ENV Variables ([parameters](https://socrates.gitbook.io/socrates/fundamentals/parameters)), and pass Outputs to the next Nodes in the Branch. It has its own execution history and can be drilled down to individual [Instances](https://socrates.gitbook.io/socrates/fundamentals/instances).                                                                                                                                                               |
| [Parameters](https://socrates.gitbook.io/socrates/fundamentals/parameters)       | Each [Block](https://socrates.gitbook.io/socrates/fundamentals/projects) and its [Instance](https://socrates.gitbook.io/socrates/fundamentals/instances) have "parameters" which always include defaults. These are basically translated as Strings (Environment Variables) inside the execution of any code language in its virtual machine. Parameters can also be [Dynamic](https://socrates.gitbook.io/socrates/fundamentals/parameters/dynamic).                                                                                                                                                       |

## License

Apache 2.0
