on master help sign in
.github/pull_request_template.md+2
since splitsnapshots
unifiedsplit
@@ -3,6 +3,8 @@
3I have:
3I have:
4
4
5 - [ ] Based work on latest `develop` branch
5 - [ ] Based work on latest `develop` branch
6+ - [ ] Followed the [contribution guide](https://github.com/obsidiansystems/obelisk/blob/develop/CONTRIBUTING.md#submitting-changes)
6 - [ ] Looked for lint in my changes with `hlint .` (lint found code you did not write can be left alone)
7 - [ ] Looked for lint in my changes with `hlint .` (lint found code you did not write can be left alone)
7 - [ ] Run the test suite: `$(nix-build -A selftest --no-out-link)`
8 - [ ] Run the test suite: `$(nix-build -A selftest --no-out-link)`
9+ - [ ] [Updated the changelog](https://github.com/obsidiansystems/obelisk/blob/develop/CONTRIBUTING.md#in-the-changelog)
8 - [ ] (Optional) Run CI tests locally: `nix-build release.nix -A build.x86_64-linux --no-out-link` (or `x86_64-darwin` on macOS)
10 - [ ] (Optional) Run CI tests locally: `nix-build release.nix -A build.x86_64-linux --no-out-link` (or `x86_64-darwin` on macOS)
ChangeLog.md+19−1
@@ -2,8 +2,26 @@
2
2
3This project's release branch is `master`. This log is written from the perspective of the release branch: when changes hit `master`, they are considered released.
3This project's release branch is `master`. This log is written from the perspective of the release branch: when changes hit `master`, they are considered released.
4
4
5−## Unreleased
5+## v0.9.1.0
6
6
7+* [#801](https://github.com/obsidiansystems/obelisk/pull/801): Remove errors and warning for local packages without a library component
8+* [#812](https://github.com/obsidiansystems/obelisk/pull/812): Add support for `NoImplicitPrelude` and other extensions disabled via `No`
9+* Pinned version bumps:
10+ * reflex-platform [0.7.0.0](https://github.com/reflex-frp/reflex-platform/releases/tag/v0.7.0.0)
11+ * hnix 0.8.0
12+* [#787](https://github.com/obsidiansystems/obelisk/pull/787): Set `immutable` cache control directive when serving content-addressed static assets
13+* Use iOS SDK 13.2
14+
15+
16+## v0.9.0.1
17+
18+* ([#810](https://github.com/obsidiansystems/obelisk/pull/810)) Fix loading of `all.js` in fully compiled web apps.
19+
20+## v0.9.0.0
21+
22+* **(Breaking change)** Backport nixpkgs upgrades to ACME/Let's Encrypt handling so that HTTPS deployments continue to work flawlessly. If your deployment is having trouble renewing [Let's Encrypt](https://letsencrypt.org/) certificates, upgrade to this version.
23+ * **IMPORTANT:** In order to use [Let's Encrypt](https://letsencrypt.org/) you must now accept their [terms of service](https://letsencrypt.org/repository/). To do that, add `terms.security.acme.acceptTerms = true;` to the `import ./.obelisk/impl {` section in your `default.nix`. The new skeleton application may serve as an [example](https://github.com/obsidiansystems/obelisk/blob/4759342ab3570888c027d4c58cb5694cb832d624/skeleton/default.nix#L13).
24+* Update reflex-platform dependency to v0.6.0.0
7* ([#715](https://github.com/obsidiansystems/obelisk/pull/715)) In `Obelisk.Route` deprecate `isoEncoder` and `prismEncoder` in favor of more precisely named `viewEncoder` and `reviewEncoder` (respectively) and improve documentation regarding contravariance of `reviewEncoder`.
25* ([#715](https://github.com/obsidiansystems/obelisk/pull/715)) In `Obelisk.Route` deprecate `isoEncoder` and `prismEncoder` in favor of more precisely named `viewEncoder` and `reviewEncoder` (respectively) and improve documentation regarding contravariance of `reviewEncoder`.
8* ([#739](https://github.com/obsidiansystems/obelisk/pull/739)) Improve `ob shell` by allowing commands to be passed verbatim after a `--` argument. For example, `ob shell 'run command'` can now be written `ob shell -- run command`.
26* ([#739](https://github.com/obsidiansystems/obelisk/pull/739)) Improve `ob shell` by allowing commands to be passed verbatim after a `--` argument. For example, `ob shell 'run command'` can now be written `ob shell -- run command`.
9* ([#735](https://github.com/obsidiansystems/obelisk/pull/735)) Fix regression causing custom `Prelude`s to break `ob run`/`ob watch`/`ob repl`.
27* ([#735](https://github.com/obsidiansystems/obelisk/pull/735)) Fix regression causing custom `Prelude`s to break `ob run`/`ob watch`/`ob repl`.
README.md+6−3
@@ -66,7 +66,10 @@ Obelisk assumes basic knowledge of [Haskell](https://www.haskell.org/) and [Refl
66 sudo launchctl stop org.nixos.nix-daemon
66 sudo launchctl stop org.nixos.nix-daemon
67 sudo launchctl start org.nixos.nix-daemon
67 sudo launchctl start org.nixos.nix-daemon
68 ```
68 ```
69+1. Install obelisk:
70+ ```bash
69−1. Install obelisk: `nix-env -f https://github.com/obsidiansystems/obelisk/archive/master.tar.gz -iA command`
71+ nix-env -f https://github.com/obsidiansystems/obelisk/archive/master.tar.gz -iA command
72+ ```
70
73
71### Accessing private repositories
74### Accessing private repositories
72
75
@@ -111,7 +114,7 @@ First create a new EC2 instance:
1111. Launch a NixOS 19.09 EC2 instance (we recommend [this AMI](https://console.aws.amazon.com/ec2/v2/home?region=us-east-1#LaunchInstanceWizard:ami=ami-00a8eeaf232a74f84))
1141. Launch a NixOS 19.09 EC2 instance (we recommend [this AMI](https://console.aws.amazon.com/ec2/v2/home?region=us-east-1#LaunchInstanceWizard:ami=ami-00a8eeaf232a74f84))
1121. In the instance configuration wizard ensure that your instance has at least 1GB RAM and 10GB disk space.
1151. In the instance configuration wizard ensure that your instance has at least 1GB RAM and 10GB disk space.
1131. When prompted save your AWS private key (`~/myaws.pem`) somewhere safe. We'll need it later during deployment.
1161. When prompted save your AWS private key (`~/myaws.pem`) somewhere safe. We'll need it later during deployment.
114−1. Go to "Security Groups", select your instance's security group and under "Inbound" tab add a new rule for HTTP port 80 and 443.
117+1. Go to "Security Groups", select your instance's security group and under "Inbound" tab add a new rule for HTTP port 80 and HTTPS port 443.
115
118
116At this stage your instance should be booting and become accessible shortly. Note down the hostname of your EC2 instance.
119At this stage your instance should be booting and become accessible shortly. Note down the hostname of your EC2 instance.
117
120
@@ -218,7 +221,7 @@ Your account must also belong to an Apple Developer Team, if you want to access
2181. Click accept to authorize on both the computer and the iPhone.
2211. Click accept to authorize on both the computer and the iPhone.
219
222
220##### Xcode
223##### Xcode
221−Install Xcode 8.2 (contains iOS SDK 10.2) and open it so that it runs its post install tool setup.
224+Install Xcode 11.2 (contains iOS SDK 13.2) and open it so that it runs its post install tool setup.
222
225
223These versions will work out of the box but iOS SDKs prior to 11.3 should also work. You can choose another installed version in `default.nix`
226These versions will work out of the box but iOS SDKs prior to 11.3 should also work. You can choose another installed version in `default.nix`
224
227
all-builds.nix+1−1
@@ -1,6 +1,6 @@
1{ self-args ? {
1{ self-args ? {
2 config.android_sdk.accept_license = true;
2 config.android_sdk.accept_license = true;
3− iosSdkVersion = "10.2";
3+ iosSdkVersion = "13.2";
4 }
4 }
5, local-self ? import ./. self-args
5, local-self ? import ./. self-args
6, supportedSystems ? [ builtins.currentSystem ]
6, supportedSystems ? [ builtins.currentSystem ]
default.nix+8−3
@@ -1,7 +1,10 @@
1{ system ? builtins.currentSystem
1{ system ? builtins.currentSystem
2, profiling ? false
2, profiling ? false
3−, iosSdkVersion ? "10.2"
3+, iosSdkVersion ? "13.2"
4, config ? {}
4, config ? {}
5+, terms ? { # Accepted terms, conditions, and licenses
6+ security.acme.acceptTerms = false;
7+ }
5, reflex-platform-func ? import ./dep/reflex-platform
8, reflex-platform-func ? import ./dep/reflex-platform
6}:
9}:
7let
10let
@@ -114,7 +117,7 @@ in rec {
114 "${routeHost}".email = adminEmail;
117 "${routeHost}".email = adminEmail;
115 } else {};
118 } else {};
116
119
117− security.acme.${if enableHttps then "acceptTerms" else null} = true;
120+ security.acme.${if enableHttps && (terms.security.acme.acceptTerms or false) then "acceptTerms" else null} = true;
118 };
121 };
119
122
120 mkObeliskApp =
123 mkObeliskApp =
@@ -183,7 +186,9 @@ in rec {
183 set -eux
186 set -eux
184 ln -s '${if profiling then backend else haskellLib.justStaticExecutables backend}'/bin/* $out/
187 ln -s '${if profiling then backend else haskellLib.justStaticExecutables backend}'/bin/* $out/
185 ln -s '${mkAssets assets}' $out/static.assets
188 ln -s '${mkAssets assets}' $out/static.assets
186− ln -s '${mkAssets (compressedJs frontend optimizationLevel)}'/* $out
189+ for d in '${mkAssets (compressedJs frontend optimizationLevel)}'/*/; do
190+ ln -s "$d" "$out"/"$(basename "$d").assets"
191+ done
187 echo ${version} > $out/version
192 echo ${version} > $out/version
188 '';
193 '';
189
194
dep/reflex-platform/github.json+3−3
@@ -1,8 +1,8 @@
1{
1{
2 "owner": "reflex-frp",
2 "owner": "reflex-frp",
3 "repo": "reflex-platform",
3 "repo": "reflex-platform",
4− "branch": "develop",
4+ "branch": "release/0.7.0.0",
5 "private": false,
5 "private": false,
6− "rev": "c21ec7036c8351185cd2feef9ce577b6a61c4f22",
6+ "rev": "27a7851a780ff21472d85f9a02fb84635ef9027a",
7− "sha256": "0m4sdpz6qvngralpyprrbvsyi2zmfh2l3q5vhihwfp3842blvbfg"
7+ "sha256": "1m4zlw91dpjlbdchjyxhvhv3k7lilm0qa17dhhww868xxc27sann"
8}
8}
haskell-overlays/misc-deps.nix+8−2
@@ -9,8 +9,14 @@ let
9in
9in
10
10
11{
11{
12− hnix = haskellLib.dontCheck (haskellLib.doJailbreak (self.callCabal2nix "hnix" (hackGet ../dep/hnix) {}));
12+ regex-base = self.callHackage "regex-base" "0.94.0.0" {};
13+ regex-posix = self.callHackage "regex-posix" "0.96.0.0" {};
14+ regex-tdfa = self.callHackage "regex-tdfa" "1.3.1.0" {};
15+ test-framework = haskellLib.dontCheck (self.callHackage "test-framework" "0.8.2.0" {});
16+ hnix = haskellLib.dontCheck (self.callHackage "hnix" "0.8.0" {});
13− hnix-store-core = self.callHackage "hnix-store-core" "0.1.0.0" {};
17+ hnix-store-core = self.callHackage "hnix-store-core" "0.2.0.0" {};
18+
19+ aeson-gadt-th = self.callHackage "aeson-gadt-th" "0.2.4" {};
14
20
15 ghcid = self.callCabal2nix "ghcid" (hackGet ../dep/ghcid) {};
21 ghcid = self.callCabal2nix "ghcid" (hackGet ../dep/ghcid) {};
16 # Exports more internals
22 # Exports more internals
lib/command/obelisk-command.cabal+1−1
@@ -1,5 +1,5 @@
1name: obelisk-command
1name: obelisk-command
2−version: 0.8.0.0
2+version: 0.9.0.1
3cabal-version: >= 1.8
3cabal-version: >= 1.8
4build-type: Simple
4build-type: Simple
5
5
lib/command/src/Obelisk/Command/Preprocessor.hs+3−2
@@ -47,7 +47,8 @@ applyPackages origPath inPath outPath packagePaths' = do
47 Left err -> do
47 Left err -> do
48 hPutStrLn stderr $ "Error: Unable to parse cabal package " <> packagePath <> "; Skipping preprocessor on " <> origPath <> ". Error: " <> show err
48 hPutStrLn stderr $ "Error: Unable to parse cabal package " <> packagePath <> "; Skipping preprocessor on " <> origPath <> ". Error: " <> show err
49 pure Nothing
49 pure Nothing
50− Right (_, packageInfo) -> pure $ Just packageInfo
50+ Right (Just (_, packageInfo)) -> pure $ Just packageInfo
51+ Right Nothing -> pure Nothing
51
52
52 writeOutput packageInfo' inPath outPath
53 writeOutput packageInfo' inPath outPath
53
54
@@ -75,7 +76,7 @@ generateHeader origPath packageInfo =
75 ext -> (TL.fromString (show ext) :)
76 ext -> (TL.fromString (show ext) :)
76 showExt = \case
77 showExt = \case
77 EnableExtension ext -> [TL.fromString (show ext)]
78 EnableExtension ext -> [TL.fromString (show ext)]
78− DisableExtension _ -> []
79+ DisableExtension ext -> ["No" <> TL.fromString (show ext)]
79 UnknownExtension ext -> [TL.fromString ext]
80 UnknownExtension ext -> [TL.fromString ext]
80
81
81 ghcOptions =
82 ghcOptions =
lib/command/src/Obelisk/Command/Run.hs+9−11
@@ -14,7 +14,7 @@ module Obelisk.Command.Run where
14import Control.Arrow ((&&&))
14import Control.Arrow ((&&&))
15import Control.Exception (Exception, bracket)
15import Control.Exception (Exception, bracket)
16import Control.Lens (ifor, (.~), (&))
16import Control.Lens (ifor, (.~), (&))
17−import Control.Monad (filterM, unless)
17+import Control.Monad (filterM)
18import Control.Monad.Except (runExceptT, throwError)
18import Control.Monad.Except (runExceptT, throwError)
19import Control.Monad.IO.Class (liftIO)
19import Control.Monad.IO.Class (liftIO)
20import Control.Monad.Reader (MonadIO)
20import Control.Monad.Reader (MonadIO)
@@ -304,15 +304,16 @@ parseCabalPackage
304 -> m (Maybe CabalPackageInfo)
304 -> m (Maybe CabalPackageInfo)
305parseCabalPackage dir = parseCabalPackage' dir >>= \case
305parseCabalPackage dir = parseCabalPackage' dir >>= \case
306 Left err -> Nothing <$ putLog Error err
306 Left err -> Nothing <$ putLog Error err
307− Right (warnings, pkgInfo) -> do
307+ Right (Just (warnings, pkgInfo)) -> do
308 for_ warnings $ putLog Warning . T.pack . show
308 for_ warnings $ putLog Warning . T.pack . show
309 pure $ Just pkgInfo
309 pure $ Just pkgInfo
310+ Right Nothing -> pure Nothing
310
311
311-- | Like 'parseCabalPackage' but returns errors and warnings directly so as to avoid 'MonadObelisk'.
312-- | Like 'parseCabalPackage' but returns errors and warnings directly so as to avoid 'MonadObelisk'.
312parseCabalPackage'
313parseCabalPackage'
313 :: (MonadIO m)
314 :: (MonadIO m)
314 => FilePath -- ^ Package directory
315 => FilePath -- ^ Package directory
315− -> m (Either T.Text ([Dist.PWarning], CabalPackageInfo))
316+ -> m (Either T.Text (Maybe ([Dist.PWarning], CabalPackageInfo)))
316parseCabalPackage' pkg = runExceptT $ do
317parseCabalPackage' pkg = runExceptT $ do
317 (cabalContents, packageFile, packageName) <- guessCabalPackageFile pkg >>= \case
318 (cabalContents, packageFile, packageName) <- guessCabalPackageFile pkg >>= \case
318 Left GuessPackageFileError_NotFound -> throwError $ "No .cabal or package.yaml file found in " <> T.pack pkg
319 Left GuessPackageFileError_NotFound -> throwError $ "No .cabal or package.yaml file found in " <> T.pack pkg
@@ -340,7 +341,7 @@ parseCabalPackage' pkg = runExceptT $ do
340 case condLibrary <$> result of
341 case condLibrary <$> result of
341 Right (Just condLib) -> do
342 Right (Just condLib) -> do
342 let (_, lib) = simplifyCondTree evalConfVar condLib
343 let (_, lib) = simplifyCondTree evalConfVar condLib
343− pure $ (warnings,) $ CabalPackageInfo
344+ pure $ Just $ (warnings,) $ CabalPackageInfo
344 { _cabalPackageInfo_packageName = T.pack packageName
345 { _cabalPackageInfo_packageName = T.pack packageName
345 , _cabalPackageInfo_packageFile = packageFile
346 , _cabalPackageInfo_packageFile = packageFile
346 , _cabalPackageInfo_packageRoot = takeDirectory packageFile
347 , _cabalPackageInfo_packageRoot = takeDirectory packageFile
@@ -354,17 +355,17 @@ parseCabalPackage' pkg = runExceptT $ do
354 , _cabalPackageInfo_compilerOptions = options $ libBuildInfo lib
355 , _cabalPackageInfo_compilerOptions = options $ libBuildInfo lib
355 , _cabalPackageInfo_cppOptions = cppOptions $ libBuildInfo lib
356 , _cabalPackageInfo_cppOptions = cppOptions $ libBuildInfo lib
356 }
357 }
357− Right Nothing -> throwError "Haskell package has no library component"
358+ Right Nothing -> pure Nothing
358 Left (_, errors) ->
359 Left (_, errors) ->
359 throwError $ T.pack $ "Failed to parse " <> packageFile <> ":\n" <> unlines (map show errors)
360 throwError $ T.pack $ "Failed to parse " <> packageFile <> ":\n" <> unlines (map show errors)
360
361
361parsePackagesOrFail :: (MonadObelisk m, Foldable f) => f FilePath -> m (NE.NonEmpty CabalPackageInfo)
362parsePackagesOrFail :: (MonadObelisk m, Foldable f) => f FilePath -> m (NE.NonEmpty CabalPackageInfo)
362parsePackagesOrFail dirs' = do
363parsePackagesOrFail dirs' = do
363− (pkgDirErrs, packageInfos') <- fmap partitionEithers $ for dirs $ \dir -> do
364+ packageInfos' <- fmap catMaybes $ for dirs $ \dir -> do
364 flip fmap (parseCabalPackage dir) $ \case
365 flip fmap (parseCabalPackage dir) $ \case
365 Just packageInfo
366 Just packageInfo
366− | _cabalPackageInfo_buildable packageInfo -> Right packageInfo
367+ | _cabalPackageInfo_buildable packageInfo -> Just packageInfo
367− _ -> Left dir
368+ _ -> Nothing
368
369
369 -- Sort duplicate packages such that we prefer shorter paths, but fall back to alphabetical ordering.
370 -- Sort duplicate packages such that we prefer shorter paths, but fall back to alphabetical ordering.
370 let packagesByName = Map.map (NE.sortBy $ comparing $ \p -> let n = _cabalPackageInfo_packageFile p in (length n, n))
371 let packagesByName = Map.map (NE.sortBy $ comparing $ \p -> let n = _cabalPackageInfo_packageFile p in (length n, n))
@@ -386,9 +387,6 @@ parsePackagesOrFail dirs' = do
386 "No valid, buildable packages found" <> (if null dirs then "" else " in " <> intercalate ", " dirs)
387 "No valid, buildable packages found" <> (if null dirs then "" else " in " <> intercalate ", " dirs)
387 Just xs -> pure xs
388 Just xs -> pure xs
388
389
389− unless (null pkgDirErrs) $
390− putLog Warning $ T.pack $ "Failed to find buildable packages in " <> intercalate ", " pkgDirErrs
391−
392 pure packageInfos
390 pure packageInfos
393 where
391 where
394 dirs = toList dirs'
392 dirs = toList dirs'
lib/executable-config/lookup/src/Obelisk/Configs.hs+2
@@ -22,6 +22,7 @@ import Control.Applicative (Alternative)
22import Control.Monad (MonadPlus)
22import Control.Monad (MonadPlus)
23import Control.Monad.Base (MonadBase)
23import Control.Monad.Base (MonadBase)
24import Control.Monad.Catch (MonadThrow)
24import Control.Monad.Catch (MonadThrow)
25+import Control.Monad.Fail (MonadFail)
25import Control.Monad.Fix (MonadFix)
26import Control.Monad.Fix (MonadFix)
26import Control.Monad.IO.Class (MonadIO)
27import Control.Monad.IO.Class (MonadIO)
27import Control.Monad.Morph (MFunctor)
28import Control.Monad.Morph (MFunctor)
@@ -87,6 +88,7 @@ newtype ConfigsT m a = ConfigsT { unConfigsT :: ReaderT (Map Text ByteString) m
87 , Monad
88 , Monad
88 , MonadPlus
89 , MonadPlus
89 , Alternative
90 , Alternative
91+ , MonadFail
90 , MonadFix
92 , MonadFix
91 , MonadThrow
93 , MonadThrow
92 , MonadIO
94 , MonadIO
lib/route/src/Obelisk/Route.hs+3−2
@@ -170,6 +170,7 @@ import Data.Text (Text)
170import qualified Data.Text as T
170import qualified Data.Text as T
171import qualified Data.Text.Encoding as T
171import qualified Data.Text.Encoding as T
172import Data.Text.Lens (IsText, packed, unpacked)
172import Data.Text.Lens (IsText, packed, unpacked)
173+import Data.Type.Equality
173import Data.Universe
174import Data.Universe
174import Data.Universe.Some
175import Data.Universe.Some
175import Network.HTTP.Types.URI
176import Network.HTTP.Types.URI
@@ -1038,8 +1039,8 @@ someSumEncoder = Encoder $ pure $ EncoderImpl
1038
1039
1039data Void1 :: * -> * where {}
1040data Void1 :: * -> * where {}
1040
1041
1041−instance Universe (Some Void1) where
1042+instance UniverseSome Void1 where
1042− universe = []
1043+ universeSome = []
1043
1044
1044void1Encoder :: (Applicative check, MonadError Text parse) => Encoder check parse (Some Void1) a
1045void1Encoder :: (Applicative check, MonadError Text parse) => Encoder check parse (Some Void1) a
1045void1Encoder = Encoder $ pure $ EncoderImpl
1046void1Encoder = Encoder $ pure $ EncoderImpl
lib/run/src/Obelisk/Run.hs+3−3
@@ -144,9 +144,9 @@ runWidget conf configs frontend validFullEncoder = do
144
144
145 cert <- X509.newX509 >>= X509Request.makeX509FromReq certRequest
145 cert <- X509.newX509 >>= X509Request.makeX509FromReq certRequest
146 _ <- X509.setPublicKey cert privateKey
146 _ <- X509.setPublicKey cert privateKey
147− now <- getCurrentTime
147+ timenow <- getCurrentTime
148− _ <- X509.setNotBefore cert $ addUTCTime (-1) now
148+ _ <- X509.setNotBefore cert $ addUTCTime (-1) timenow
149− _ <- X509.setNotAfter cert $ addUTCTime (365 * 24 * 60 * 60) now
149+ _ <- X509.setNotAfter cert $ addUTCTime (365 * 24 * 60 * 60) timenow
150 _ <- X509.signX509 cert privateKey Nothing
150 _ <- X509.signX509 cert privateKey Nothing
151
151
152 certByteString <- BSUTF8.fromString <$> PEM.writeX509 cert
152 certByteString <- BSUTF8.fromString <$> PEM.writeX509 cert
lib/snap-extras/src/Obelisk/Snap/Extras.hs+1−1
@@ -17,7 +17,7 @@ import System.Directory
17-- | Set response header for "permanent" caching
17-- | Set response header for "permanent" caching
18cachePermanently :: MonadSnap m => m ()
18cachePermanently :: MonadSnap m => m ()
19cachePermanently = do
19cachePermanently = do
20− modifyResponse $ setHeader "Cache-Control" "public, max-age=315360000"
20+ modifyResponse $ setHeader "Cache-Control" "public, max-age=315360000, immutable"
21 modifyResponse $ setHeader "Expires" "Tue, 01 Feb 2050 00:00:00 GMT" --TODO: This should be set to "approximately one year from the time the response is sent"
21 modifyResponse $ setHeader "Expires" "Tue, 01 Feb 2050 00:00:00 GMT" --TODO: This should be set to "approximately one year from the time the response is sent"
22
22
23-- | Set response header to not cache
23-- | Set response header to not cache
skeleton/backend/backend.cabal+2−2
@@ -14,12 +14,12 @@ library
14 , obelisk-route
14 , obelisk-route
15 exposed-modules:
15 exposed-modules:
16 Backend
16 Backend
17− ghc-options: -Wall -Wredundant-constraints -Wincomplete-uni-patterns -Wincomplete-record-updates -O
17+ ghc-options: -Wall -Wredundant-constraints -Wincomplete-uni-patterns -Wincomplete-record-updates -O -fno-show-valid-hole-fits
18
18
19executable backend
19executable backend
20 main-is: main.hs
20 main-is: main.hs
21 hs-source-dirs: src-bin
21 hs-source-dirs: src-bin
22− ghc-options: -Wall -Wredundant-constraints -Wincomplete-uni-patterns -Wincomplete-record-updates -O -threaded
22+ ghc-options: -Wall -Wredundant-constraints -Wincomplete-uni-patterns -Wincomplete-record-updates -O -threaded -fno-show-valid-hole-fits
23 if impl(ghcjs)
23 if impl(ghcjs)
24 buildable: False
24 buildable: False
25 build-depends: base
25 build-depends: base
skeleton/common/common.cabal+1−1
@@ -12,4 +12,4 @@ library
12 exposed-modules:
12 exposed-modules:
13 Common.Api
13 Common.Api
14 Common.Route
14 Common.Route
15− ghc-options: -Wall -Wredundant-constraints -Wincomplete-uni-patterns -Wincomplete-record-updates -O
15+ ghc-options: -Wall -Wredundant-constraints -Wincomplete-uni-patterns -Wincomplete-record-updates -O -fno-show-valid-hole-fits
skeleton/default.nix+10−3
@@ -1,10 +1,17 @@
1−{ obelisk ? import ./.obelisk/impl {
2− system = builtins.currentSystem;
1+{ system ? builtins.currentSystem
2+, obelisk ? import ./.obelisk/impl {
3+ inherit system;
3− iosSdkVersion = "10.2";
4+ iosSdkVersion = "13.2";
5+
4 # You must accept the Android Software Development Kit License Agreement at
6 # You must accept the Android Software Development Kit License Agreement at
5 # https://developer.android.com/studio/terms in order to build Android apps.
7 # https://developer.android.com/studio/terms in order to build Android apps.
6 # Uncomment and set this to `true` to indicate your acceptance:
8 # Uncomment and set this to `true` to indicate your acceptance:
7 # config.android_sdk.accept_license = false;
9 # config.android_sdk.accept_license = false;
10+
11+ # In order to use Let's Encrypt for HTTPS deployments you must accept
12+ # their terms of service at https://letsencrypt.org/repository/.
13+ # Uncomment and set this to `true` to indicate your acceptance:
14+ # terms.security.acme.acceptTerms = false;
8 }
15 }
9}:
16}:
10with obelisk;
17with obelisk;
skeleton/frontend/frontend.cabal+2−2
@@ -16,7 +16,7 @@ library
16 , text
16 , text
17 exposed-modules:
17 exposed-modules:
18 Frontend
18 Frontend
19− ghc-options: -Wall -Wredundant-constraints -Wincomplete-uni-patterns -Wincomplete-record-updates -O
19+ ghc-options: -Wall -Wredundant-constraints -Wincomplete-uni-patterns -Wincomplete-record-updates -O -fno-show-valid-hole-fits
20
20
21executable frontend
21executable frontend
22 main-is: main.hs
22 main-is: main.hs
@@ -28,7 +28,7 @@ executable frontend
28 , reflex-dom
28 , reflex-dom
29 , obelisk-generated-static
29 , obelisk-generated-static
30 , frontend
30 , frontend
31− ghc-options: -threaded -O -Wall -Wredundant-constraints -Wincomplete-uni-patterns -Wincomplete-record-updates
31+ ghc-options: -threaded -O -Wall -Wredundant-constraints -Wincomplete-uni-patterns -Wincomplete-record-updates -fno-show-valid-hole-fits
32 if impl(ghcjs)
32 if impl(ghcjs)
33 ghc-options: -dedupe
33 ghc-options: -dedupe
34 cpp-options: -DGHCJS_BROWSER
34 cpp-options: -DGHCJS_BROWSER