## [_Unreleased_](https://github.com/freckle/freckle-app/compare/v1.8.0.0...main) ## [v1.8.0.0](https://github.com/freckle/freckle-app/compare/v1.7.1.0...v1.8.0.0) - Fix bug: gauges not being published. - Add HasVaultData type class to remove the dependency on Yesod's MonadHandler ## [v1.7.1.0](https://github.com/freckle/freckle-app/compare/v1.7.0.0...v1.7.1.0) - Add Incremental CSV parsing ## [v1.7.0.0](https://github.com/freckle/freckle-app/compare/v1.6.0.3...v1.7.0.0) - Add XRay and EKG support to freckle-app's runDB. This involves an breaking change in `runDB`'s constraints, thus the major version bump. ## [v1.6.0.3](https://github.com/freckle/freckle-app/compare/v1.6.0.2...v1.6.0.3) - Revert regrouping of `SqlError` by `url` Consider `/foos/1` vs `/foos/2`: grouping naively by `url` makes these two errors when we wanted them to be one. This can't be solved without knowledge of the routing system, so we can't do it from within this library as-is. Therefore, we've reverted the feature for now. ## [v1.6.0.2](https://github.com/freckle/freckle-app/compare/v1.6.0.1...v1.6.0.2) - Strip query string from URLs used to group timeout exceptions in Bugsnag. ## [v1.6.0.1](https://github.com/freckle/freckle-app/compare/v1.6.0.0...v1.6.0.1) - The built-in Bugsnag `BeforeNotify` will further group `SqlError`s that are timeouts (57014) by Request URL (when request info is present in the `Event`) ## [v1.6.0.0](https://github.com/freckle/freckle-app/compare/v1.5.0.1...v1.6.0.0) - Remove `AppVersion` This also removes the `test-git` flag. This was over-engineered, in our opinion. If you're making use of the conventional `DD_` variables that the `Stats` module expects, you should be able to: - Replace any `appVersion :: AppVersion` with `appVersion :: Text` - Replace `appVersion <- getAppVersion` with `appVersion <- maybe "unknown" pack <$> lookupEnv "DD_VERSION"` - Replace `avName appVersion` with `appVersion` - Remove uses of `avCreatedAt` - Add `Freckle.App.Dotenv`, wrapping [`dotenv`](https://hackage.haskell.org/package/dotenv) And move `Freckle.App.Test.withApp` to use it instead of `LoadEnv`. This is behavior-neutral except: - We no longer load `.env` after `.env.test`, we only load `.env.test` Missing variables should generate errors prompting you to copy values from the former to the latter as required. - We will verify the `.env` file against an `.env.example` if present. - Add `Freckle.App.Bugsnag.Metadata` ## [v1.5.0.1](https://github.com/freckle/freckle-app/compare/v1.5.0.1...v1.5.1.0) - Export `Freckle.App.Stats.tagsL` ## [v1.5.0.1](https://github.com/freckle/freckle-app/compare/v1.5.0.0...v1.5.0.1) - Relax lower bound on `primitive` ## [v1.5.0.0](https://github.com/freckle/freckle-app/compare/v1.4.0.0...v1.5.0.0) - Remove `Freckle.App.Datadog` modules for `Freckle.App.Stats` equivalents It's not a drop-in, but the required changes should be mechanical: - Instead of `HasDogStats{Client,Tags}`, implement a single `HasStatsClient` - Instead of `mkStatsClient` use `withStatsClient` (the new style of `runApp` had will enable that) - Use `tagged` instead of extra arguments to metric sends - Move to the new `Rts`, `Gauge`, and `Middleware.Stats` modules - Change signature of `runApp` and `withApp` Instead of passing a loaded `App` (or a function that loads an `App`) to `runApp` and `withApp`, you should now pass a function that _takes a function_ and calls it on the loaded `App`. This is necessary for apps that hold onto values that require cleanup, like `withStatsClient`. ```hs -- This doesn't work loadApp :: IO App loadApp = do -- ... withStatsClient $ \appStatsClient -> do -- ??? -- This does loadApp :: (App -> IO a) -> IO a loadApp f = do -- ... withStatsClient $ \appStatsClient -> do f App { .. } ``` The old form can be trivially converted to the new form like so, ```hs loadApp :: (App -> IO a) -> IO a loadApp f = f =<< loadApp' loadApp' :: IO App loadApp' = -- old code ``` - Add functions that check properties that we like to commonly test. ## [v1.4.0.0](https://github.com/freckle/freckle-app/compare/v1.3.0.0...v1.4.0.0) - Remove `runCapturedLoggingT` We can use `Blammo.Logging.Logger.newTestLogger` instead. See `MemcachedSpec` as an example. - Compatibility down to LTS 12.26 / GHC 8.4 ## [v1.3.0.0](https://github.com/freckle/freckle-app/compare/v1.2.0.2...v1.3.0.0) - Adjust `Freckle.App.Test` interface - Remove `runAppTest` - Add `appExample` for making a expectation concretely `AppExample` - Add `expectationFailure`, and `pending(With)` helpers in `MonadIO` ## [v1.2.0.2](https://github.com/freckle/freckle-app/compare/v1.2.0.1...v1.2.0.2) - `Env.kept` compatibility with envparse-0.5 ## [v1.2.0.1](https://github.com/freckle/freckle-app/compare/v1.2.0.0...v1.2.0.1) - Use `Env.kept` with parsing that occurs in `makePostgresPool` This ensure all `PG` variables are kept in the environment after parsing, to again match pre-v1.1 behavior. If you would prefer not to keep these variables, parse them yourself (e.g. with `envParseDatabaseConf`) and use `makePostgresPoolWith`. - Add `Freckle.App.Env.kept` to re-define a `Parser` so that all variables are kept after reading. Not doing this can break tests if you are re-parsing the environment for each example. Replace `Env.parse f` with `Env.parse f $ Env.kept` to recover how this module behaved prior to v1.1. ## [v1.2.0.0](https://github.com/freckle/freckle-app/compare/v1.1.0.0...v1.2.0.0) - Remove `Freckle.App.Logging`, integrate with [blammo][] instead. This will require the following end-user changes: - Remove `HasLogging` instance and add `HasLogger` This will require storing a `Logger` on your runtime `App` type, instead of a `LogLevel` (et al) in your static `AppSettings` type. (Or move to `runSimpleLoggingT`.) - Replace WAI middleware with [Blammo integration][blammo-wai] - Replace Yesod functions with [Blammo integration][blammo-yesod] And changes to environment variable values: - If using `LOG_OUTPUT=std(out|err)`, use `LOG_DESTINATION=std(out|err)` (note that `stdout` is the default) - If using `LOG_OUTPUT=file`, use `LOG_DESTINATION=@fancy.log` (yes, that's this option did) - If using `LOG_FORMAT=terminal`, use `LOG_FORMAT=tty` (note that this is the defualt) [blammo]: https://hackage.haskell.org/package/Blammo [blammo-wai]: https://github.com/freckle/blammo/#integration-with-wai [blammo-yesode]: https://github.com/freckle/blammo/#integration-with-yesod ## [v1.1.0.0](https://github.com/freckle/freckle-app/compare/v1.0.4.0...v1.1.0.0) - Require `MonadLoggerIO` in `makePostgresPool` (and so respect that logging context from DB activities). Previous behavior can be recovered by using `runNoLoggingT makePostgresPool`. - Re-implement `FronRow.App.Env` via external library, `envparse` Some conversions will be required: - `Reader a` should now be `Reader Error a` - `Parser a` should now be `Parser Error a` - `parse` should now be `parse id` - `var x X nonEmpty` should now be `var (x <=< nonempty) X mempty` Note that `(str <=< nonempty)` is redundant. - `var (f <$> g) X m` should now be `f <$> var g X m` Note that `def` will now need a value the same type as `g`, not `f`. - `switch` and `flag` no longer accept `def` (the non-active value is an implicit default; the previous behavior was kind of surprising and ambiguous). - `handleEither` has been removed. Users will have to parse a complete value and then further validate/throw externally. - Previously, we always behaved as if `keep` was applied. Add that explicitly if you need that behavior. ## [v1.0.4.0](https://github.com/freckle/freckle-app/compare/v1.0.3.0...v1.0.4.0) - Add `Freckle.App.Bugsnag` for Bugsnag logging in applications. - Increased default PG poolsize to 10. ## [v1.0.3.0](https://github.com/freckle/freckle-app/compare/v1.0.2.10...v1.0.3.0) - Add `Freckle.App.Memcache` for using memcached in Apps - Add `Freckle.App.Scientist` for using [scientist][] in Apps [scientist]: https://github.com/freckle/scientist-hs#readme ## [v1.0.2.10](https://github.com/freckle/freckle-app/compare/v1.0.2.9...v1.0.2.10) - Support GHC 9.0 and 9.2 - Change `Wai` function arguments for producing `RouteName` and `TraceId` to tags To maintain the same behavior, replace ```hs makeLoggingMiddleware app getRouteName getTraceId ... ``` With ```hs makeLoggingMiddleware app getTags ... where getTags req = catMaybes [ ("route", ) <$> getRouteName req , ("trace_id", ) <$> getTraceId req ] ``` And similar for `makeRequestMetricsMiddleware`. ## [v1.0.2.9](https://github.com/freckle/freckle-app/compare/v1.0.2.8...v1.0.2.9) - Add some common textual encoding functions to prelude ## [v1.0.2.8](https://github.com/freckle/freckle-app/compare/v1.0.2.7...v1.0.2.8) - Don't allow `aeson-2.0` ## [v1.0.2.7](https://github.com/freckle/freckle-app/compare/v1.0.2.6...v1.0.2.7) - Remove explicit `--region` in IAM DB token call - Relax lower-bounds throughout ## [v1.0.2.6](https://github.com/freckle/freckle-app/compare/v1.0.2.5...v1.0.2.6) - Add a looser lower-bound on `containers` ## [v1.0.2.5](https://github.com/freckle/freckle-app/compare/v1.0.2.4...v1.0.2.5) - Add a looser lower-bound on `bytestring` - Add a looser lower-bound on `template-haskell` ## [v1.0.2.4](https://github.com/freckle/freckle-app/compare/v1.0.2.3...v1.0.2.4) - Add a looser lower-bound on `base` ## [v1.0.2.3](https://github.com/freckle/freckle-app/compare/v1.0.2.2...v1.0.2.3) - Add Freckle-specific prelude. ## [v1.0.2.2](https://github.com/freckle/freckle-app/compare/v1.0.2.1...v1.0.2.2) - Target `hspec-junit-formatter-1.0.3.0` (use `1.1.0.0` in development) ## [v1.0.2.1](https://github.com/freckle/freckle-app/compare/v1.0.2.0...v1.0.2.1) - Add `denyFrameEmbeddingMiddleware` for denying HTML frame embedding. ## [v1.0.2.0](https://github.com/freckle/freckle-app/compare/v1.0.1.0...v1.0.2.0) - Add 'Freckle.App.Yesod.Route' to allow printing route names. ## [v1.0.1.0](https://github.com/freckle/freckle-app/compare/v1.0.0.4...v1.0.1.0) - Added `Freckle.App.Datadog.Gauge` for client side stateful gauges. - Added `Freckle.App.Datadog.Rts` for sending RTS statistics to DataDog. ## [v1.0.0.4](https://github.com/freckle/freckle-app/compare/v1.0.0.3...v1.0.0.4) - Support seconds or milliseconds in `PGSTATEMENTTIMEOUT` NOTE: We consider this a non-breaking change because the environment variable interface is backwards-compatible. By normal Haskell rules, it would be major since it's changing the type of something exported. - Add `respondQueryCanceled` Yesod Middlewares - Add `makeRequestMetricsMiddleware` ## [v1.0.0.3](https://github.com/freckle/freckle-app/compare/v1.0.0.2...v1.0.0.3) - Add `package.yaml` to `extra-source-files`. ## [v1.0.0.2](https://github.com/freckle/freckle-app/compare/v1.0.0.1...v1.0.0.2) - Extract tests that require `git` into a new suite. ## [v1.0.0.1](https://github.com/freckle/freckle-app/compare/v1.0.0.0...v1.0.0.1) - Ensure `release` GitHub Action completes properly. ## [v1.0.0.0](https://github.com/freckle/freckle-app/tree/v1.0.0.0) First tagged release.