Improve guides/programming.md

Signed-off-by: Tihomir Jovicic <tihomir.jovicic.develop@gmail.com>
This commit is contained in:
Tihomir Jovicic 2021-06-07 15:44:45 +02:00
parent a002d2e02e
commit 862cf5550d

View File

@ -5,45 +5,45 @@ slug: /programming
# Dagger Programming Guide # Dagger Programming Guide
## Overview ## Writing your first Dagger plan
1. A developer writes a _plan_ specifying how to deliver their application. Plans are written in the [Cue](https://cuelang.org) data language. 1\. Initialize a Dagger workspace anywhere in your git repository:
2. Dagger executes plans in isolated _environments_. Each environment has its own configuration and state.
## Programming in Cue `dagger init`
[Cue](https://cuelang.org) is a next-generation data language by Marcel van Lohuizen and the spiritual successor It will create a `.dagger` directory in your current directory with an empty `env` directory inside it:
of GCL, the language used to configure all of Google's infrastructure.
Cue extends JSON with powerful features: ```bash
.dagger/
└── env
```
- Composition: layering, templating, references 2\. Create a new environment, for example `staging`:
- Correctness: types, schemas
- Developer experience: comments, packages, first-class tooling, builtin functions
- And mucn more.
To get started with Cue, we recommend the following resources: `dagger new staging`
- [Cuetorials](https://cuetorials.com) ```bash
- [Cue playground](https://cuelang.org/play) .dagger/
└── env
└── staging
├── plan
└── values.yaml
## Writing your first plan ```
To create a Dagger plan: 3\. Create a new file [Cue](#programming-in-cue) config file in `.dagger/env/staging/plan`, and open it with any text editor or IDE:
1\. Initialize a Dagger workspace anywhere in your git repository. ```bash
.dagger/
└── env
└── staging
├── plan
│   └── staging.cue
└── values.yaml
`dagger init`. ```
2\. Create a new environment. 4\. Describe each [relay](#relays) in your plan as a field in the Cue configuration:
For example: `dagger new staging`.
3\. Create a new file with the _.cue_ extension in `.dagger/env/staging/plan`, and open it with any text editor or IDE.
For example: `.dagger/env/staging/plan/staging.cue`.
4\. Describe each relay in your plan as a field in the cue configuration.
For example: For example:
@ -78,7 +78,7 @@ For more inspiration, see these examples:
5\. Extend your plan with relay definitions from [Dagger 5\. Extend your plan with relay definitions from [Dagger
Universe](https://github.com/dagger/dagger/tree/main/stdlib), an encyclopedia of Universe](https://github.com/dagger/dagger/tree/main/stdlib), an encyclopedia of
cue packages curated by the Dagger community. Cue packages curated by the Dagger community.
6\. If you can't find the relay you need in the Universe, you can simply create your own. 6\. If you can't find the relay you need in the Universe, you can simply create your own.
@ -111,8 +111,30 @@ american: #Greeting & {
} }
``` ```
## Programming in Cue
[Cue](https://cuelang.org) is a next-generation data language by Marcel van Lohuizen and the spiritual successor
of GCL, the language used to configure all of Google's infrastructure.
Cue extends JSON with powerful features:
- Composition: layering, templating, references
- Correctness: types, schemas
- Developer experience: comments, packages, first-class tooling, builtin functions
- And much more.
To get started with Cue, we recommend the following resources:
- [Cuetorials](https://cuetorials.com)
- [Cue playground](https://cuelang.org/play)
## Concepts ## Concepts
### Overview
1. A developer writes a _plan_ specifying how to deliver their application. Plans are written in the [Cue](https://cuelang.org) data language.
2. Dagger executes plans in isolated _environments_. Each environment has its own configuration and state.
### Plans ### Plans
A _plan_ specifies, in code, how to deliver a particular application in a particular way. A _plan_ specifies, in code, how to deliver a particular application in a particular way.
@ -201,7 +223,7 @@ A relay is typically contained in a [cue definition](https://cuetorials.com/over
For example a relay for a git repository might be defined as `#Repository`. For example a relay for a git repository might be defined as `#Repository`.
The processing pipeline is a crucial feature of Dagger. It uses the [LLB](https://github.com/moby/buildkit) The processing pipeline is a crucial feature of Dagger. It uses the [LLB](https://github.com/moby/buildkit)
executable format pioneered by the Buildkit project. It allows Dagger components to run executable format pioneered by the BuildKit project. It allows Dagger components to run
sophisticated pipelines to ingest produce artifacts such as source code, binaries, database exports, etc. sophisticated pipelines to ingest produce artifacts such as source code, binaries, database exports, etc.
Best of all, LLB pipelines can securely build and run any docker container, effectively making Dagger Best of all, LLB pipelines can securely build and run any docker container, effectively making Dagger
scriptable in any language. scriptable in any language.