packages feed

hetzner 0.5.0.0 → 0.6.0.0

raw patch · 5 files changed

+68/−20 lines, 5 filesPVP ok

version bump matches the API change (PVP)

API changes (from Hackage documentation)

+ Hetzner.Cloud: [imageArchitecture] :: Image -> Architecture
+ Hetzner.Cloud: [imageName] :: Image -> Text
- Hetzner.Cloud: Image :: ZonedTime -> Maybe ZonedTime -> Maybe ZonedTime -> Text -> Int -> ImageID -> LabelMap -> OSFlavor -> ImageType -> Image
+ Hetzner.Cloud: Image :: ImageID -> Text -> Text -> OSFlavor -> Architecture -> ImageType -> Int -> ZonedTime -> Maybe ZonedTime -> Maybe ZonedTime -> LabelMap -> Image

Files

apps/Docs.hs view
@@ -4,6 +4,7 @@ -- base import Data.Foldable (forM_) import Data.List (sortOn)+import Data.Maybe (isNothing) -- hetzner import Hetzner.Cloud qualified as Hetzner -- bytestring@@ -24,14 +25,14 @@   token <- maybe (fail "HETZNER_API_TOKEN is not set") pure mtoken   now <- round <$> getPOSIXTime :: IO Int   -- Server types-  let dir = "public/server-types"-  createDirectoryIfMissing True dir+  let serverTypesFP = "public/server-types"+  createDirectoryIfMissing True serverTypesFP   serverTypes0 <- Hetzner.streamToList $ Hetzner.streamPages $ Hetzner.getServerTypes token   let maxPrice = maximum . (:) 0                . fmap (Hetzner.grossPrice . Hetzner.monthlyPrice)                . Hetzner.serverPricing   let serverTypes = sortOn maxPrice $ filter (not . Hetzner.serverDeprecated) serverTypes0-  ByteString.writeFile (dir ++ "/index.html") $ renderHtml $ H.docTypeHtml $ do+  ByteString.writeFile (serverTypesFP ++ "/index.html") $ renderHtml $ H.docTypeHtml $ do     H.head $ do       H.title "Hetzner Server Type List"       H.link ! A.rel "stylesheet" ! A.href "https://use.typekit.net/yxf7kgr.css"@@ -47,7 +48,7 @@           H.th "Cores"           H.th "Memory"           H.th "Disk"-          H.th "Included Traffic (TB)"+          H.th "Included Traffic"           H.th "CPU Type"           H.th "Max Monthly Price"         forM_ serverTypes $ \serverType -> H.tr $ do@@ -63,6 +64,41 @@             Hetzner.SharedCPU -> "Shared" :: String             Hetzner.DedicatedCPU -> "Dedicated"           H.td $ toHtml $ show (maxPrice serverType) ++ " €"+    H.p $ H.em $ do+      "Updated "+      H.script $ preEscapedToHtml $+        "const date = new Date(" ++ show (now * 1000) ++ "); "+        ++ "document.write(date.toLocaleString());"+      "."+  -- Images+  let imagesFP = "public/images"+  createDirectoryIfMissing True imagesFP+  images0 <- Hetzner.streamToList $ Hetzner.streamPages $ Hetzner.getImages token+  let images = sortOn (show . Hetzner.imageName)+             $ filter (isNothing . Hetzner.imageDeprecated) images0+  print images+  ByteString.writeFile (imagesFP ++ "/index.html") $ renderHtml $ H.docTypeHtml $ do+    H.head $ do+      H.title "Hetzner Image List"+      H.link ! A.rel "stylesheet" ! A.href "https://use.typekit.net/yxf7kgr.css"+      H.link ! A.rel "stylesheet" ! A.href "../common.css"+    H.body $ do+      H.h1 "Hetzner Image List"+      H.p "These are the images available by default. Your project might have other images available in addition to these."+      H.hr+      H.table $ do+        H.tr ! A.class_ "hrow" $ do+          H.th "Image ID"+          H.th "Name"+          H.th "OS Flavor"+          H.th "Architecture"+          H.th "Size"+        forM_ images $ \image -> H.tr $ do+          H.td $ (\(Hetzner.ImageID i) -> toHtml i) $ Hetzner.imageID image+          H.td $ toHtml $ Hetzner.imageName image+          H.td $ toHtml $ show $ Hetzner.imageOSFlavor image+          H.td $ toHtml $ show $ Hetzner.imageArchitecture image+          H.td $ toHtml $ show (Hetzner.imageDiskSize image) ++ " GB"     H.p $ H.em $ do       "Updated "       H.script $ preEscapedToHtml $
changelog.md view
@@ -1,3 +1,7 @@+## 0.6.0.0+* Add new fields to the `Image` type: `imageArchitecture`, `imageName`.+* Add [image list webpage](https://daniel-casanueva.gitlab.io/haskell/hetzner/images).+ ## 0.5.0.0 * Do not export internal fingerprint parser. * Wrap `Fingerprint` with a newtype to provide custom
hetzner.cabal view
@@ -2,7 +2,7 @@ category: Cloud synopsis: Hetzner Cloud and DNS library. description: Hetzner Cloud and DNS library. Check the readme and documentation for more details.-version: 0.5.0.0+version: 0.6.0.0 cabal-version: 1.18 build-type: Simple author: Daniel Casanueva (daniel.casanueva `at` proton.me)
readme.md view
@@ -15,5 +15,5 @@  ## Documentation -Access documentation from the main (potentially unreleased) branch+Find documentation from the main (potentially unreleased) branch [here](https://daniel-casanueva.gitlab.io/haskell/hetzner/doc).
src/Hetzner/Cloud.hs view
@@ -19,9 +19,9 @@ -- -- > streamPages $ getServers token :: ConduitT i Server m () -----   Or to get all actions as a stream:+--   Or to get all volumes as a stream: ----- > streamPages $ getActions token :: ConduitT i Action m ()+-- > streamPages $ getVolumes token :: ConduitT i Action m () -- --   If you are not interested in the streaming functionality, you --   can simply use 'streamToList' to turn the stream into a list:@@ -1276,16 +1276,19 @@  -- | An image that can be mounted to a server. data Image = Image-  { imageCreated :: ZonedTime-  , imageDeleted :: Maybe ZonedTime-  , imageDeprecated :: Maybe ZonedTime+  { -- | Image identifier.+    imageID :: ImageID+  , imageName :: Text   , imageDescription :: Text+  , imageOSFlavor :: OSFlavor+  , imageArchitecture :: Architecture+  , imageType :: ImageType     -- | Size of the disk contained in the image in GB.   , imageDiskSize :: Int-  , imageID :: ImageID+  , imageCreated :: ZonedTime+  , imageDeleted :: Maybe ZonedTime+  , imageDeprecated :: Maybe ZonedTime   , imageLabels :: LabelMap-  , imageOSFlavor :: OSFlavor-  , imageType :: ImageType     } deriving Show  instance FromJSON Image where@@ -1299,17 +1302,22 @@                 "temporary" -> pure Temporary                 _ -> fail $ "Unknown image type: " ++ Text.unpack t     Image-      <$> o .: "created"-      <*> o .: "deleted"-      <*> o .: "deprecated"+      <$> o .: "id"+      <*> o .: "name"       <*> o .: "description"-      <*> o .: "disk_size"-      <*> o .: "id"-      <*> o .: "labels"       <*> o .: "os_flavor"+      <*> o .: "architecture"       <*> pure typ+      <*> o .: "disk_size"+      <*> o .: "created"+      <*> o .: "deleted"+      <*> o .: "deprecated"+      <*> o .: "labels"  -- | Get images.+--+--   A regularly updated list of images can be found+--   [here](https://daniel-casanueva.gitlab.io/haskell/hetzner/images). getImages   :: Token   -> Maybe Int -- ^ Page.