# Changelog
## [0.3.0]
This is a major release which adds many new features and polishes many
old ones. In particular, this release adds proper support for package
repositories (deemed "indices" and "registries") by adding many new
commands and manifest fields for interacting with registries, and
generally making the index/registry system more robust.
This release also provides experimental support for the Blodwen
compiler; in the future, more robust support will be added.
### Added
- **BREAKING CHANGE**: A new format for the `indices` key: index aliases
can now be specified in elba's configuration, which propagate to
packages and commands which take an `--index` flag.
- New commands for interacting with package registries: `package` for
creating tested tarballs of packages, `publish` for publishing a
package to an index, `yank` for disallowing new packages to
depend on a published package, `search` for searching through
packages, and `login` for saving credentials for an index (#31, #35).
- A new command `check`, along with associated alias `c`, which checks all
Idris source files but doesn't build any artifacts for them.
- A new command `add` for adding a dependency to the current project (#51).
- New fields to the manifest for use with package registries:
`package.description`, `package.homepage`, `package.repository`,
`package.readme`, and `package.keywords` (#30, #42).
- A new manifest field `package.exclude`, which specifies which files
should be ignored when checking for file changes or building a
package. Also includes entries in `.gitignore`.
- A new manifest field `scripts` along with a command `script`,
which allows for running arbitrary shell commands/scripts. A special
script, `prebuild`, is always run (if present) before a package is
built; the build will fail if the command doesn't return a success.
- A new config key `directories.data` which specifies the folder where
elba will store data files.
- A new config key `compiler` to specify the name of the compiler
executable.
- Preliminary support for the Blodwen compiler. (Note that because the
compiler is still so barebones, it can't build any packages with
dependencies or executables)
- A new direct source for packages: a package registry (#37).
- A flag `--unyank` to the `elba yank` command, allowing for unyanking
packages.
### Changed
- **BREAKING CHANGE**: the syntax for specifying a package from a custom
index has now changed to be consistent with the docs:
```toml
"index/explicit" = { version = ">= 0.1.0", index = "index+dir+../index" }
```
- **BREAKING CHANGE**: the `backend` field in `index.toml` is now
`registry`.
- "Remote backends" or "index backends" are now "registries."
- If a registry is specified for an index, the locations of each
package defaults to the registry (#37).
- Made elba check for literate Idris files when looking for modules
(#28).
- Allowed passing options to the Idris compiler with `--`.
- Fixed bug where `elba repl` wouldn't remove ibc files.
- Fixed bug where elba would allow an empty group and/or name.
- Fixed bug where, in offline mode, elba would not find packages which
were a subfolder of another package.
- Added extra Idris and backend options as part of the build hash.
- Allow for virtual packages with no build targets.
## [0.2.0]
This is a major release of elba which polishes up the 0.1.x release
series, fixing up a multitude of different bugs, adding commands
where appropriate, and making major enhancements to ergonomics
(most notably major improvements to how git dependencies work,
the addition of an offline mode, functionality enhancements to
binary targets, and added defaults for manifests).
### Added
- The `update` command, which updates all of the packages in the
lockfile (or certain packages, based on a command line flag
`--package`)
- The `print-config` command, which does exactly what it says
on the tin
- More complex logic for dealing with binary target paths; the end
result is that files which don't specify a `Main.main` function
can now still be used as binary targets, since elba can generate
files with a `Main.main` function on-the-fly.
- A flag `--offline` to enable offline mode. In offline mode, elba
will skip downloading anything entirely (to avoid waiting for
timeouts) and will only use packages available in the elba's
local cache when resolving dependencies (#23).
- A flag `--vcs` for `elba new` and `elba init`, to determine if
elba should automatically create a vcs repo when creating a
project.
- A flag `--debug-log` to print not-pretty debug logs for build
commands.
- Sensible defaults for target paths and tests (#17).
- Separate configuration options for storing binary files and elba-
internal cache files, if you're really intent on keeping your
home directory clean.
- A new flag `--ide-mode` to the `elba repl` subcommand, for
running an ide server for the current root package.
### Changed
- elba will now look through all of the current directory's
ancestors for a manifest file, rather than just the current
directory.
- When (un)installing packages, elba will now error if a spec
is ambiguous.
- When generating lockfiles, for packages located at git repos,
elba will lock the git repo to a specific commit, rather than
always trying to get the latest revision of the git repo (see
the docs for more details).
- During dependency retrieval, a package index will only be
updated iff the manifest depends on a package which cannot
be found in the cached indices or the version specified in
the manifest conflicts with that in the lockfile.
- Reduced HTTP timeout from 30 to 10 seconds.
- Prettied up and fixed elba's CLI output; elba now also respects
the `--verbose` and `--quiet` flags (#12).
- Fixed a bug where Idris would complain about `No ibc for...`
when building a bin target (#14).
- Fixed a bug where any stdout output during code generation
would cause the build process to error.
- Fixed bugs with config file parsing; elba can actually read
the `term.verbosity` key, and elba is more lenient when it
comes to missing keys in configuration.
- Fixed a bug with "unknown reference" errors when generating
test binaries.
- Fixed a bug with not erroring during a codegen invocation
when we should.
- elba no longer pollutes the home directory as much by default;
elba's internal cache files are stored in a platform-specific
cache folder if another folder isn't specified in the config.
elba still uses `~/.elba/bin` for globally-installed binaries,
however.
- elba now takes the version of the current compiler into account
when deciding if it needs to rebuild a package.
### Removed
- **BREAKING CHANGE**: The `lock` command, which has been superseded
by `update`.
## [0.1.5]
This release of elba fixes a bug with the REPL not loading
import paths correctly.
### Changed
- When launching the REPL, elba now adds the paths of all
specified targets.
## [0.1.4]
This release of elba fixes a bug with package initialization.
### Changed
- When creating a new library project, elba now adds the correct
module by default.
## [0.1.3]
This release of elba changes how it deals with tests.
### Changed
- elba can now build test targets without a library target needed.
Tests always have access to all dependencies, dev-dependencies,
and the files which share the same parent folder as the test's
Main module. If no library target is found, elba will issue a
warning.
## [0.1.2]
This release of elba fixes a critical error with tarball resolutions
and cleans up error handling a bit.
### Changed
- elba now errors when downloading a tarball resolution if the hashes
*do not* match, as opposed to before when it errored if they matched.
## [0.1.1]
This release of elba modifies the behavior of elba to interact better
with package indices overall.
### Changed
- elba now includes a default package index, located at the GitHub repo
`elba/index`.
- elba now redownloads all package indices every time it is invoked,
regardless of if they have been cached or not.
## 0.1.0
This is the initial release of elba, and contains most of the basic
functionality needed for Idris development: building, testing, and
installing packages; developing them interactively; and depending on
other packages.
### Added
- Commands for creating packages, building packages (generating a lockfile
and building all targets), testing packages, and (un)installing packages.
[Unreleased]: https://github.com/elba/elba/compare/0.3.0...HEAD
[0.3.0]: https://github.com/elba/elba/compare/0.2.0...0.3.0
[0.2.0]: https://github.com/elba/elba/compare/0.1.5...0.2.0
[0.1.5]: https://github.com/elba/elba/compare/0.1.4...0.1.5
[0.1.4]: https://github.com/elba/elba/compare/0.1.3...0.1.4
[0.1.3]: https://github.com/elba/elba/compare/0.1.2...0.1.3
[0.1.2]: https://github.com/elba/elba/compare/0.1.1...0.1.2
[0.1.1]: https://github.com/elba/elba/compare/0.1.0...0.1.1