# [cepler release v0.7.19](https://github.com/bodymindarts/cepler/releases/tag/v0.7.19)

- concourse `in`/`check`: skip libgit2's implicit full working-tree checkout during the initial clone. On repos with many files this was the dominant wall-clock cost of the `get` step — silent (libgit2 emits no progress for it) and unrelated to network speed. Only the files cepler actually reads from disk (config + state dir + on-disk gates file) are materialised post-clone; everything else stays unwritten until `prepare`/`reproduce` selectively pulls it in.
- concourse `in`: `depth` source param now defaults to `50` instead of "full clone" — large enough for the on-demand deepener to almost never fire, small enough that the network/pack phase finishes in seconds. Opt out with `depth: 0`.

# [cepler release v0.7.18](https://github.com/bodymindarts/cepler/releases/tag/v0.7.18)

- concourse `in`: optional `depth` source param for shallow clones, mirroring the official `git` resource. cuts the first `get` clone for large repos by an order of magnitude when set.
- shallow clones deepen on-demand when a history walk reaches the shallow boundary, so `find_last_changed_commit` and the state diff still resolve correctly.
- `out` skips the pre-push fetch on the first attempt — the workspace was freshly cloned by `in` seconds earlier. fetch+rebase only happens on `NotFastForward` retry.
- bump `git2` 0.13 -> 0.20 (required for shallow-clone support).
- fix(concourse): SSH host key rejection (`invalid or unknown remote ssh hostkey; class=Ssh (23); code=-17`) introduced by the git2 0.13 → 0.20 bump. libgit2 1.7+ enforces host-key verification by default; restore the pre-bump permissive behaviour by installing a `certificate_check` callback that accepts the remote certificate. Concourse pipelines run against a known git remote and the user's SSH private key already authenticates the connection.
- ci: three parallel GitHub Actions workflows (nextest, bats, flake-check) running inside the project's nix shell.

# [cepler release v0.7.17](https://github.com/bodymindarts/cepler/releases/tag/v0.7.17)

- concourse `in`: skip clone when no environment is configured
- saves a full network clone of the gates repo on every `get` step whose resource has no `environment` set

# [cepler release v0.7.16](https://github.com/bodymindarts/cepler/releases/tag/v0.7.16)

- more retries when pushing
- updated clippy

# [cepler release v0.7.15](https://github.com/bodymindarts/cepler/releases/tag/v0.7.15)

## Misc

- improve output when nothing to commit

# [cepler release v0.7.14](https://github.com/bodymindarts/cepler/releases/tag/v0.7.14)

## Fix

- out operation should not fail due to already applied commit during rebase
- revert git2 bump

# [cepler release v0.7.13](https://github.com/bodymindarts/cepler/releases/tag/v0.7.13)

## Misc

- bump git2

# [cepler release v0.7.12](https://github.com/bodymindarts/cepler/releases/tag/v0.7.12)

## Feat

- concourse in params accept 'prepare: false' flag for use cases on which you just want to reproduce the latest state

# [cepler release v0.7.11](https://github.com/bodymindarts/cepler/releases/tag/v0.7.11)

## Fix
- prepare wasn't checking out the correct file state in rollback use case

# [cepler release v0.7.10](https://github.com/bodymindarts/cepler/releases/tag/v0.7.10)

## Fix
- persist `version` field in state to enable rollback use case
- should also fix re-recording the same state

# [cepler release v0.7.9](https://github.com/bodymindarts/cepler/releases/tag/v0.7.9)

## Misc

- update deps

# [cepler release v0.7.8](https://github.com/bodymindarts/cepler/releases/tag/v0.7.8)

## improvements

- cepler commits should follow conventional commit style `ci(cepler): (...)`

# [cepler release v0.7.7](https://github.com/bodymindarts/cepler/releases/tag/v0.7.7)

## Improvement

- reproduce last state when there is nothing to prepare in ci_in

# [cepler release v0.7.6](https://github.com/bodymindarts/cepler/releases/tag/v0.7.6)

## Improvement

- Latest concourse version wants to check even though the resource is never used to push

# [cepler release v0.7.5](https://github.com/bodymindarts/cepler/releases/tag/v0.7.5)

## Bug fix

When renaming `passed:` environment reflect the change in the state file

# [cepler release v0.7.4](https://github.com/bodymindarts/cepler/releases/tag/v0.7.4)

## Improvements
- Update to rust edition 2021
- Always read target environment state from disk - fixes issue with queueing when using gates

# [cepler release v0.7.3](https://github.com/bodymindarts/cepler/releases/tag/v0.7.3)

## Improvements
- support `ignore_queue` setting in environment specific config

# [cepler release v0.7.2](https://github.com/bodymindarts/cepler/releases/tag/v0.7.2)

## Improvements
- Add `--ignore-queue` to apply the head version of the previous environment.
- Many small wording improvements.

# [cepler release v0.7.1](https://github.com/bodymindarts/cepler/releases/tag/v0.7.1)

## Improvements

- Commit message displays deployment name

# [cepler release v0.7.0](https://github.com/bodymindarts/cepler/releases/tag/v0.7.0)

## Feature

- add `deployment` (default = "default") to config file to better represent multiple propagations in 1 repo
- add `latest -e <env>` command to print the commit hash of the last recording
- `-g / --gates` flag for providing a commit per environment up to which preparations are allowed
- `--gates-branch` optional flag to checkout the gates file from another branch

The gates file is a yaml file with the names of the environments as keys and the complete git hahs as values:
```
staging: HEAD
production: d5739f9cb7ce6b1ff42cda0999c351790288cdc5
```

## Improvements
- rename head -> trigger in concourse version
- exit 1 on concourse in when trigger is not in sync with expected version

# [cepler release v0.6.5](https://github.com/bodymindarts/cepler/releases/tag/v0.6.5)

## Improvements

- release with latest compiler / clippy warnings

# [cepler release v0.6.4](https://github.com/bodymindarts/cepler/releases/tag/v0.6.4)

## Bug fix

- correctly handle missing environment in source spec

# [cepler release v0.6.3](https://github.com/bodymindarts/cepler/releases/tag/v0.6.3)

## Bug fix

- add newline at end of state file

# [cepler release v0.6.2](https://github.com/bodymindarts/cepler/releases/tag/v0.6.2)

## Bug fix

- fixed ci_out when HEAD is detached

# [cepler release v0.6.1](https://github.com/bodymindarts/cepler/releases/tag/v0.6.1)

## Bug Fix

- attempt to fix push to branch

# [cepler release v0.6.0](https://github.com/bodymindarts/cepler/releases/tag/v0.6.0)

## Features

- handle optional `environment:` param in `put` step
- push to non-existent remote branches

# [cepler release v0.5.0](https://github.com/bodymindarts/cepler/releases/tag/v0.5.0)

## Features
- add `reproduce` command to reset the workspace into the currently deployed state for an environment

# [cepler release v0.4.9](https://github.com/bodymindarts/cepler/releases/tag/v0.4.9)

## Bug Fix

- Fix panic in repos that only have 1 commit

# [cepler release v0.4.8](https://github.com/bodymindarts/cepler/releases/tag/v0.4.8)

## Improvements

- Minor code improvements / compiled with latest rust version

# [cepler release v0.4.7](https://github.com/bodymindarts/cepler/releases/tag/v0.4.7)

## Bug Fix
- Fix detecting state to deploye when propagation queue only contains changes to unrelated files

# [cepler release v0.4.6](https://github.com/bodymindarts/cepler/releases/tag/v0.4.6)

## Bug fix

- Handle removing files when a directory is specified in `cepler.yml`

# [cepler release v0.4.5](https://github.com/bodymindarts/cepler/releases/tag/v0.4.5)

## Bug Fix
- Fix `prepare` command

# [cepler release v0.4.4](https://github.com/bodymindarts/cepler/releases/tag/v0.4.4)

## Bug Fix
- Also apply `MatchOptions` for when checking out files

# [cepler release v0.4.3](https://github.com/bodymindarts/cepler/releases/tag/v0.4.3)

## Bug Fix
- Also apply `MatchOptions` for propagated files.

# [cepler release v0.4.2](https://github.com/bodymindarts/cepler/releases/tag/v0.4.2)

## Bug Fix
- Use explicit `MatchOptions` when testing glob pattern:
  ```
  glob::MatchOptions {
      case_sensitive: true,
      require_literal_separator: true,
      require_literal_leading_dot: true,
  }
  ```

# [cepler release v0.4.1](https://github.com/bodymindarts/cepler/releases/tag/v0.4.1)

## Deprecation

- Remove `concourse gen` subcommand. For integration with concourse pipelines see the ongoing work at https://github.com/bodymindarts/cepler-templates

# [cepler release v0.4.0](https://github.com/bodymindarts/cepler/releases/tag/v0.4.0)

## Breaking Changes
- Encode where the file came from in the state file via `{env}/path/to/file`

# cepler release v0.3.0

*Yanked release*

## Breaking changes
- Change the schema of the persisted state file to differentiate between propagated and latest files

## Bug Fix
- Fix wording for `cepler concourse ci_out` command

# [cepler release v0.2.2](https://github.com/bodymindarts/cepler/releases/tag/v0.2.2)

## Bug Fixes

- Fix `Error: Couldn't find environment` after adding new environment to `cepler.yml`

# [cepler release v0.2.1](https://github.com/bodymindarts/cepler/releases/tag/v0.2.1)

## Bug Fixes
- Load cepler.yml from disk when constructing head deploy state

# [cepler release v0.2.0](https://github.com/bodymindarts/cepler/releases/tag/v0.2.0)

## Features
- Check determins head commit based on last commit that actually influenced the environment state (instead of current head)

## Improvements
- Nicer commit message.  When committing the state via `cepler record` the commit message shouldn't have a `!`
- Display added files in metadata.

# [cepler release v0.1.1](https://github.com/bodymindarts/cepler/releases/tag/v0.1.1)

- Report `crate_version` on stderr in concourse operations
- Add `ls` command - `cepler ls -e <environment>` lists all files tracked by the current config.

# [cepler release v0.1.0](https://github.com/bodymindarts/cepler/releases/tag/v0.1.0)

Initial release of cepler - the Capricious Environment Propagate(l)er
Alpha software!
Please look at the [README](./README.md) and the `cepler help [sub]` command.
