2021-07-16 18:37:29 +02:00
---
slug: /1010/dev-cue-package/
---
# Develop a new CUE package for Dagger
2021-07-15 11:29:30 +02:00
2021-08-13 12:43:13 +02:00
This tutorial illustrates how to create new packages, manually distribute them among your applications and contribute to the Dagger stdlib packages.
2021-07-15 11:29:30 +02:00
2021-08-13 12:43:13 +02:00
## Creating your package
2021-07-15 11:29:30 +02:00
2021-09-21 22:36:51 +02:00
### Initializing project
2021-07-15 11:29:30 +02:00
2021-09-21 22:36:51 +02:00
Create an empty directory for your new Dagger project:
2021-07-15 11:29:30 +02:00
```shell
2021-09-21 22:36:51 +02:00
mkdir project
cd project
2021-07-15 11:29:30 +02:00
```
2021-09-21 22:36:51 +02:00
As described in the previous tutorials, initialize your Dagger project:
2021-07-15 11:29:30 +02:00
```shell
dagger init
```
2021-08-13 12:43:13 +02:00
That will create two directories: `.dagger` and `cue.mod` , where our package will reside:
2021-07-15 11:29:30 +02:00
```shell
.
├── cue.mod
│ ├── module.cue
│ ├── pkg
│ └── usr
├── .dagger
│ └── env
```
### Writing the package
2021-09-21 22:36:51 +02:00
Now that you've initialized your project, it's time to write a simple package. Package name usually starts with a
2021-08-13 12:43:13 +02:00
domain name (as in Go) followed by a descriptive name. In this example, we reuse the Cloud Run example and create a
2021-07-16 10:14:53 +02:00
package from it.
2021-07-15 11:29:30 +02:00
```shell
2021-10-13 23:32:06 +02:00
mkdir -p cue.mod/pkg/github.com/username/gcpcloudrun
2021-07-15 11:29:30 +02:00
```
2021-07-16 10:14:53 +02:00
Let's write the package logic. It is basically what we've seen in the 106-cloudrun example:
2021-07-15 11:29:30 +02:00
```shell
2021-10-13 23:32:06 +02:00
touch cue.mod/pkg/github.com/username/gcpcloudrun/source.cue
2021-07-15 11:29:30 +02:00
```
2021-12-14 11:01:31 +01:00
```cue file=./tests/dev-cue-package/source.cue title="cue.mod/pkg/github.com/username/gcpcloudrun/source.cue"
2021-07-15 11:29:30 +02:00
```
### Running the package
2021-08-13 12:43:13 +02:00
Now that you've successfully created a package let's run it in a new environment. Create a new test package using
2021-07-16 10:14:53 +02:00
our reusable `gcpcloudrun` :
2021-07-15 11:29:30 +02:00
2021-08-13 12:43:13 +02:00
```cue file=./tests/dev-cue-package/script.sh#L3-L16
2021-07-15 11:29:30 +02:00
```
Run it:
```shell
dagger up -e staging
```
2021-07-16 10:14:53 +02:00
You should see a familiar output:
2021-07-15 11:29:30 +02:00
```shell
2021-07-16 10:14:53 +02:00
9:32AM ERR system | required input is missing input=run.src
9:32AM ERR system | required input is missing input=run.imageRef
9:32AM ERR system | required input is missing input=run.gcpConfig.region
9:32AM ERR system | required input is missing input=run.gcpConfig.project
9:32AM ERR system | required input is missing input=run.gcpConfig.serviceKey
9:32AM ERR system | required input is missing input=run.deploy.name
9:32AM FTL system | some required inputs are not set, please re-run with `--force` if you think it's a mistake missing=0s
2021-07-15 11:29:30 +02:00
```
## Manually distributing packages
2021-09-21 22:36:51 +02:00
You've probably guessed this package isn't tied to just your project. You can easily copy/paste it into any number
of different projects and use it as we've shown above.
2021-07-15 11:29:30 +02:00
```shell
2021-10-13 23:32:06 +02:00
mkdir -p /my-new-workspace/cue.mod/pkg/github.com/username/gcpcloudrun
cp ./cue.mod/pkg/github.com/username/gcpcloudrun/source.cue /new-workspace/cue.mod/pkg/github.com/username/gcpcloudrun
2021-07-15 11:29:30 +02:00
```
## Contributing to Dagger stdlib
2021-08-13 12:43:13 +02:00
Our [stdlib ](https://github.com/dagger/dagger/tree/main/stdlib ) has many valuable packages that you can use.
2021-09-21 22:36:51 +02:00
You've probably seen it when you've initialized your project:
2021-07-15 11:29:30 +02:00
```shell
.
├── cue.mod
│ ├── module.cue
│ ├── pkg
│ │ ├── alpha.dagger.io
│ │ └── .gitignore
│ └── usr
```
2021-08-13 12:43:13 +02:00
We are still a small community and are constantly looking for new contributors that will work with us to improve this fantastic project. If you feel like we are missing a package or want to improve an existing one, please start with our
2021-07-15 11:29:30 +02:00
[contributing docs ](https://github.com/dagger/dagger/blob/main/CONTRIBUTING.md ) and open a PR.