packages feed

document-build-0.2.0.0: changelog.md

# Changelog

## 0.2.0.0

* Depend on filepather 0.8, and replace the optics of every data type with
  the classy optics recipe of claude-haskell: each data type has a class,
  `TLike`, whose method is its own name (`commandLine`, `buildError`,
  `directories`, `target`, `context`, `gitDetails`, `imageInfo`,
  `outputFile`), each field and constructor has a name, a class in its own
  module under Document.Build.Name, and each data type has a manifest
  (`lawNamesT`), a synonym and function of inheritance (`InheritT`,
  `inheritT`) and, where it holds another data type, a check of inheritance
  (`inheritsT`)
* Remove the GetX, HasX, ReviewX and AsX classes, and the Field and Injection
  instances of every data type; the field lenses keep their names
  (`commandLineProgram`, `outputDirectory`, `gitCommitHash`, `imageWidth`,
  `outputPath` and so on), and are read with `view (cloneLens n)`
* `ReviewBuildError e` is a constraint synonym for
  `BuildErrorLike Tagged Identity e e`, the class of BuildError at
  `review`; it needs FlexibleContexts
* The constructors of BuildError with two or more fields each hold a product
  type of their own, in a module under Document.Build.Error: ProcessFailed,
  ProcessOutputUnrecognised, OutputFileMissing, StringsMissing,
  FileTypeUnsupported, InputFilesTooFew and OutputNotInDirectory, held by
  BuildErrorProcessFailed and so on; the prisms `_ProcessFailed` and so on
  are the names `processFailed`, `inputFileMissing`, `cycle` and so on, and
  BuildError inherits the names of the types it holds, such as `file` and
  `commandLine`, as affine traversals
* Move CommandLine to Document.Build.CommandLine, Directories to
  Document.Build.Directories, Target to Document.Build.Target, GitDetails to
  Document.Build.GitDetails, ImageInfo to Document.Build.ImageInfo and
  OutputFile to Document.Build.OutputFile; the prisms `_TargetFile`,
  `_TargetDirectory` and `_TargetComplete` are the names `targetFile`,
  `targetDirectory` and `targetComplete`, and the lenses
  `contextDirectories` and `contextTarget` are `directories` and `target`
* Rename the operations gitDetails and imageInfo to readGitDetails and
  readImageInfo, because `gitDetails` and `imageInfo` are the names of
  GitDetails and ImageInfo
* Document.Build exports the name `cycle`, which has the same name as
  Prelude.cycle
* Remove the dependency on either-n, and depend on tagged
* Build with -Werror=incomplete-patterns, and without
  -Wredundant-constraints
* Add hedgehog tests of the classy optics: generators in the shape of each
  manifest, the coverage of each sum, the manifest laws, and the laws of the
  kind of every instance of every name

## 0.1.0.0

* Start again, replacing the earlier prototype, with the project layout,
  linting and CI of either-n
* Depend on filepather 0.7, in this repository, for FilePather and Tracked
  build steps
* Add Document.Build.Build: Build and Command, running builds, running
  processes, and the assertions requireInput, requireDirectory and
  requirePath
* Add Document.Build.Error: BuildError and CommandLine, with prisms,
  lenses, exit codes and classy optics, including BuildCycle for a chain of
  build steps that would go round in a cycle, and OutputNotInDirectory for a
  build step that makes a file outside the output directory, and
  ShallowRepository for a git history that is too shallow to give the last
  commit of each file
* Add operations for PDF (Document.Build.Pdf), LibreOffice
  (Document.Build.LibreOffice), pandoc (Document.Build.Pandoc), images
  (Document.Build.Image), git (Document.Build.Git), hashes
  (Document.Build.Hash), string replacement (Document.Build.Replace) and
  files (Document.Build.File), every one a FilePather value; operations
  that take several input files (pdfJoin, pdfConcatenate, pdftk,
  imageAppend) take the directory they are in
* Add Document.Build.Operations, which exports every operation
* Add Document.Build.Project: projectPath, placeholders from environment
  variables and of each file, from the last commit to change it rather than
  of the repository, placeholder aliases, prepareFile, and project fonts
* Add Document.Build.Context: the Directories of a build and the Context
  that rules run in, as data with optics, Rules, buildStep, and combinators
  that choose the files rules apply to
* Add Document.Build.Rules: rules that prepare, convert, join, split,
  count, extract pages of and resize the files of a project, archive files
  and write the tree of output files, each with its settings as arguments,
  and no defaults
* Add Document.Build.Documents: build and buildProject, which run rules over
  the directories of a project until they make no more files, then once
  more when the build is complete
* Add Document.Build.Output: the tree of output files of a build, with the
  hash, git details, page count and image information of each file, in JSON
  and an HTML page
* Add build.hs, the build file of a set of projects, a cabal script with
  the settings of every project, and exceptions for some
* Add hedgehog property tests for the laws of the optics, doctests, and
  criterion benchmarks