* Minimal test suite
- Add support for urls with file: schema; both absolute (file:/path) and
relative (file:path) paths are supported.
- Log curl invocation in case of failure
- Rename fetchRemoteAsset to fetchURL
- Add verbosity flag
- Bump GHC to 9.4.7
- Bump flake inputs
* Apply suggestions from code review
Co-authored-by: Michael Peyton Jones <me@michaelpj.com>
* Add short option '-v' for '--verbosity'
* Whitespace
* Add comment explaining why the dot
* Rename withFixture to inTemporaryDirectoryWithFixture
* Small refactor of PrepareSource
* Rename TarballSource to URISource
- Move sourceUrl to Foliage.Meta.packageVersionSourceToUri
* Simplify inTemporaryDirectoryWithFixture
* Document tar and cp flags
* Reformat
---------
Co-authored-by: Michael Peyton Jones <me@michaelpj.com>
Unfortunately hackage-security constructs these using lazy bytestrings
and they are therefore liable to hold open fds longer than necessary,
resulting in fd exhaustion.
Fixes another manifestation of #35.
- Fold most of getPackageVersions into preparePackageVersion
We pass to preparePackageVersion the metadata file we are dealing with
so it can be mentioned in case of errors.
- Replace `fail` by `error`. Shake uses exceptions to signal build
failures. It turns out `error` gets displayed slightly better when
caught by shake. Also we can use it in pure code.
The function preparePackageVersion is now responsible for doing
everything we need to do to be able to include the package in the index.
The function also returns a denormalised view of the package information
which can be taken as a proof that everything is consistent.
Lazy IO tends to keep file handles open until the entire file is read,
which in this case may never happen. This leads to the process exceeding
the system's file descriptor limit, resulting in #35.
Implement a new flag "--write-metadata" which will create, in the output
directory, a file "foliage/packages.json" with metadata about the
package provenance.
The file package.json file looks like this
```
{
"Win32-network-0.1.0.0": {
"source": {
"url": "github:input-output-hk/Win32-network/3825d3abf75f83f406c1f7161883c438dac7277d"
},
"timestamp": "2022-10-17T00:00:00Z"
},
"Win32-network-0.1.1.0": {
...
```
The idea is that tools fetching the repo can also fetch this file to
obtain information about the package provenance.