screwdriver-api
Version:
API server for the Screwdriver.cd service
186 lines (125 loc) • 4.86 kB
Markdown
# Templates Plugin
> Hapi templates plugin for the Screwdriver API
## Usage
### Register plugin
```javascript
const Hapi = require('@hapi/hapi');
const server = new Hapi.Server();
const templatesPlugin = require('./');
server.connection({ port: 3000 });
server.register({
register: templatesPlugin,
options: {}
}, () => {
server.start((err) => {
if (err) {
throw err;
}
console.log('Server running at:', server.info.uri);
});
});
```
### Routes
#### Template
##### Get all templates
`GET /templates`
Can filter by template namespace:
`GET /templates?namespace=chef`
Can search by keyword in template name, namespace, and description:
`GET /templates?search=screwdriver`
Can list all distinct template namespaces:
`GET /templates?distinct=namespace`
Can use additional options for sorting, pagination and get total count:
`GET /templates?sort=ascending&sortBy=name&page=1&count=50&getCount=true`
##### Get a single template
You can get a single template by providing the template name and the specific version or the tag.
`GET /templates/{name}/{tag}` or `GET /templates/{name}/{version}`
###### Arguments
'name', 'tag' or 'version'
* `name` - Name of the template
* `tag` - Tag of the template (e.g. `stable`, `latest`, etc)
* `version` - Version of the template
##### Get a single template using templateId
You can get a single template by providing the template id.
`GET /templates/{id}`
###### Arguments
'id'
* `id` - Id of the template
##### Create a template
Creating a template will store the template data (`config`, `name`, `version`, `description`, `maintainer`) into the datastore.
`version` will be auto-bumped. For example, if `mytemplate@1.0.0` already exists and the version passed in is `1.0.0`, the newly created template will be version `1.0.1`.
*Note: This endpoint is only accessible in `build` scope and the permission is tied to the pipeline that first creates the template.*
`POST /templates`
###### Arguments
'name', 'namespace', 'version', 'description', 'maintainer', 'labels'
* `name` - Name of the template
* `namespace` - (Optional) Namespace of the template
* `version` - Version of the template
* `description` - Description of the template
* `maintainer` - Maintainer of the template
* `labels` - Labels of the template. This field is optional and should be an array.
* `config` - Config of the template. This field is an object that includes `steps`, `image`, and optional `secrets`, `environments`. Similar to what's inside the `job`
Example payload:
```json
{
"name": "build",
"namespace": "screwdriver",
"labels": ["stable"],
"version": "1.7.3",
"description": "this is a template",
"maintainer": "foo@bar.com",
"config": {
"steps": [{
"echo": "echo hello"
}]
}
}
```
##### Delete a template
Deleting a template will delete a template and all of its associated tags and versions.
`DELETE /templates/{name}`
###### Arguments
* `name` - Name of the template
##### Delete a version
Delete the template version and all of its associated tags.
If the deleted version was the last published, the API would set the `latest` attribute of the previous version to `true`.
`DELETE /templates/{name}/versions/{version}`
###### Arguments
'name', 'version'
* `name` - Name of the template
* `version` - Version of the template
##### Get Report of Pipelines that use a template version
`GET /templates/{name}/{version}/usage/pipelines`
###### Arguments
'name', 'version'
* `name` - Name of the template
* `version` - Version of the template
###### Example response
```json
[
{
id: 4,
name: 'nathom/sd-uses-template',
scmRepo: {
branch: 'main',
name: 'nathom/sd-uses-template',
url: 'https://github.com/nathom/sd-uses-template/tree/main/pipe2',
rootDir: 'pipe2',
private: false
},
lastRun: '2023-07-31T17:15:37.510Z',
admins: { nathom: true }
},
]
```
#### Template Tag
Template tag allows fetching on template version by tag. For example, tag `mytemplate@1.1.0` as `stable`.
##### Create/Update a tag
If the template tag already exists, it will update the tag with the new version. If the template tag doesn't exist yet, this endpoint will create the tag.
*Note: This endpoint is only accessible in `build` scope and the permission is tied to the pipeline that creates the template.*
`PUT /templates/{templateName}/tags/{tagName}` with the following payload
* `version` - Exact version of the template (ex: `1.1.0`)
##### Delete a tag
Delete the template tag. This does not delete the template itself.
*Note: This endpoint is only accessible in `build` scope and the permission is tied to the pipeline that creates the template.*
`DELETE /templates/{templateName}/tags/{tagName}`