elba 0.3.0

elba is a package manager for Idris
Documentation
# 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