# COS Changelog

An application that generates build changelogs and locates the first build containing a CL.

## Usage

### Retrieve Changelog
Retrieve the commit changelog between two builds.

Run with `./changelogctl --mode changelog [options] [build-number || image-name] [build-number || image-name]`

Example: `./changelogctl --gob cos.googlesource.com --repo cos/manifest-snapshots cos-rc-85-13310-1034-0 15045.0.0`

### Find First Build Containing CL
Retrieve the first build containing a CL.

Run with `./changelogctl --mode findbuild [options] [CL-number || commit-SHA]`

Example using CL-Number: `./changelogctl --mode findbuild 3280`

Example using Commit-SHA: `./changelogctl --mode findbuild 18d4ce48c1dc2f530120f85973fec348367f78a0`

## Commands
`./changelogctl --help` to see a list of commands or get help for one command

## Global Options

`--mode | -m`: Specifies the query mode. Acceptable values: [changelog || findbuild]

`--gerrit URL`: (optional) Specifies the Gerrit instance to query from, with the `https://` prefix. It will use `https://cos-review.googlesource.com` by default.

`--fallback URL`: (optional) specifies the fallback Gerrit instance to query from, with the `https://` prefix. It will use `https://chromium-review.googlesource.com` by default.

`--gob URL`: (optional) Specifies the Git on Borg instance where manifest-snapshot files are located. It will use `cos.googlesource.com` by default.

`--repo`: (optional) Specifies the repository for manifest-snapshot files within the Git on Borg instance. It will use `cos/manifest-snapshots` by default.

`--debug | -d`: (optional) Enables debug messages.

## Output

## Changelog Output

Creates 2 JSON files representing the changelog between 2 given build numbers. Each output file maps repositories to their repository changelog. A repository changelog consists of all the commits in a repository that were present in between the build numbers.

All the commits that were present in the target build number and not present in the source build number are located in `source_build_number -> target_build_number.json`.

All commits that were present in the source build number but not present in the target build number are located in `target_build_num -> source_build_num.json`.

## FindCL output

Prints the first build number that includes the input CL.

## Notes
* Changelog only supports Cusky builds. For retrieving changelogs from Pre-Cusky builds, please use go/crosland.
* Changelog only supports image names satisfying the regex `^cos-(dev-|beta-|stable-|rc-)?\d+-([\d-]+)$`