An open API service indexing awesome lists of open source software.

https://github.com/hasura/smooth-checkout-buildkite-plugin

All the things you need during a Buildkite checkout :butter: :kite:
https://github.com/hasura/smooth-checkout-buildkite-plugin

buildkite buildkite-plugin checkout ci git

Last synced: 6 days ago
JSON representation

All the things you need during a Buildkite checkout :butter: :kite:

Awesome Lists containing this project

README

          

# Smooth Checkout
All the things you need during a Buildkite checkout :butter: :kite:

## Usage

### Repository-less builds
```yml
steps:
- command: echo "Skips checking out Git project in checkout"
plugins:
- hasura/smooth-checkout#v4.4.1:
skip_checkout: true
```

### Checking out repo
```yml
steps:
- command: echo "Checks out repo at given ref"
plugins:
- hasura/smooth-checkout#v4.4.1:
repos:
- config:
- url: git@github.com:/.git
ref: # (optional)
clone_flags: # (optional) flags to use with `git clone` command
```

If `ref` is not provided the values of `BUILDKITE_BRANCH` and `BUILDKITE_COMMIT` env vars are used.

Allowed values for `ref`:
- Branch name
- Git tag
- Commit SHA (40 character long hash)

`clone_flags` can either be a string or an array of strings.

### Shallow clone
A shallow clone can easily be done by passing the `depth` flag in the `clone_flags` field. For example:
```yaml
steps:
- command: echo "shallow clone repo"
plugins:
- hasura/smooth-checkout#v4.4.1:
repos:
- config:
- url: "git@github.com:hasura/smooth-checkout-buildkite-plugin"
clone_flags: "--depth 1"
```

### Checking out multiple repositories
You can checkout multiple repositories by providing multiple `config` elements:
```yaml
steps:
- command: echo "Checks out multiple git repositories"
plugins:
- hasura/smooth-checkout#v4.4.1:
repos:
- config:
- url: git@github.com:/.git
- config:
- url: https://github.com//.git
ref:
```
Unlike single repo checkouts, when checking out multiple repos, they will each be checked out in
subdirectories of `$BUILDKITE_BUILD_CHECKOUT_PATH` corresponding to the name of the repository
(based on its URL). In the above example, the contents of the working directory would be `repo_1/`
and `repo_2/`.

You can also explicitly provide the path to an ssh identity file using the `ssh_key_path` config field:
```yaml
steps:
- command: echo "Checks out multiple git repositories"
plugins:
- hasura/smooth-checkout#v4.4.1:
repos:
- config:
- url: git@github.com:/.git
ssh_key_path: .ssh/key_1
- config:
- url: git@github.com:/.git
ref:
ssh_key_path: .ssh/key_2
```

If you are using [smooth-secrets](https://github.com/hasura/smooth-secrets-buildkite-plugin) to
configure ssh keys, you can do the following to easily set the `ssh_key_path`:
```yaml
steps:
- command: echo "Checks out multiple git repositories"
plugins:
- hasura/smooth-checkout#v4.4.1:
repos:
- config:
- url: git@github.com:/.git
ssh_key_path: $$SECRETS_DIR/
```
where `` is the value of
[`key` field](https://github.com/hasura/smooth-secrets-buildkite-plugin#key-required-string) in
smooth-secrets config with any `/` characters replaced by `-`.

### Checking out repo from git mirrors
You can attempt to fetch a git repository from git mirrors and fallback to using the original
source repo in case of a failure while checking out from mirrors.
```yaml
steps:
- command: echo "Checks out repo from mirror (fall back to github in case of failure)"
plugins:
- hasura/smooth-checkout#v4.4.1:
repos:
- config:
- url: git@mirror.git.interal:/path/to/git/mirror
- url: git@github.com:/.git
```

## Setup & Cleanup
Smooth Checkout also supports setting custom directories for your jobs and deleting the checkout
directory after the job completes. `BUILDKITE_BUILD_CHECKOUT_PATH` is set to the
directory specified by the `build_checkout_path` option. For legacy reasons, the environment
variable `WORKSPACE` is also set to the same value, but its usage is deprecated.
```yaml
steps:
- command: echo "Checks out repo to custom directory"
plugins:
- hasura/smooth-checkout#v4.4.1:
build_checkout_path: /tmp/${BUILDKITE_COMMIT}
delete_checkout: true
repos:
- config:
- url: git@github.com:/.git
```
### Use custom directory with interpolation
Additionally, if `BUILDKITE_PIPELINE_NO_INTERPOLATION` is set to true and custom directory is an interpolation of variables (example: depends on BUILDKITE_JOB_ID, BUILDKITE_STEP_ID etc); use `interpolate_checkout_path` env to set the directory.

```yaml
steps:
- command: echo "Checks out repo to custom directory"
plugins:
- hasura/smooth-checkout#v4.2.1:
interpolate_checkout_path: /tmp/${BUILD_CHECKOUT_PATH}/${BUILD_ID}
delete_checkout: true
repos:
- config:
- url: git@github.com:/.git
```

## Contributing
- Fork this repo and clone on your machine:
```bash
git clone https://github.com//smooth-checkout-buildkite-plugin
```
- Make the required changes
- Run linter
```bash
docker-compose run --rm lint
```
- Run tests (try to add tests for any new features introduced)
```bash
docker-compose run --rm tests
```
- Once linter and tests run successfully, open a pull request on this repo