git.iko.soy/typeable/minio-hs
on master help sign in
New release (#140)
d2a78dfAditya Manthramurthy
.travis.yml+4−5
@@ -16,7 +16,6 @@ matrix:
16 include:
16 include:
17
17
18 # Cabal
18 # Cabal
19− - ghc: 8.2.2
20 - ghc: 8.4.4
19 - ghc: 8.4.4
21 - ghc: 8.6.5
20 - ghc: 8.6.5
22 - ghc: 8.8.1
21 - ghc: 8.8.1
@@ -40,22 +39,22 @@ install:
40 ghc --version
39 ghc --version
41 cabal --version
40 cabal --version
42 cabal new-update
41 cabal new-update
43− cabal new-build --enable-tests --enable-benchmarks
42+ cabal new-build --enable-tests --enable-benchmarks -fexamples
44 else
43 else
45 # install stack
44 # install stack
46 curl -sSL https://get.haskellstack.org/ | sh
45 curl -sSL https://get.haskellstack.org/ | sh
47
46
48 # build project with stack
47 # build project with stack
49 stack --version
48 stack --version
50− stack build --system-ghc --test --bench --no-run-tests --no-run-benchmarks
49+ stack build --system-ghc --test --bench --no-run-tests --no-run-benchmarks --flag minio-hs:examples
51 fi
50 fi
52
51
53script:
52script:
54 - |
53 - |
55 if [ -z "$STACK_YAML" ]; then
54 if [ -z "$STACK_YAML" ]; then
56− MINIO_LOCAL=1 MINIO_SECURE=1 cabal new-test --enable-tests
55+ MINIO_LOCAL=1 MINIO_SECURE=1 cabal new-test --enable-tests -flive-test
57 else
56 else
58− MINIO_LOCAL=1 MINIO_SECURE=1 stack test --system-ghc
57+ MINIO_LOCAL=1 MINIO_SECURE=1 stack test --system-ghc --flag minio-hs:live-test
59 fi
58 fi
60
59
61notifications:
60notifications:
CHANGELOG.md+7
@@ -1,6 +1,13 @@
1Changelog
1Changelog
2==========
2==========
3
3
4+## Version 1.5.2
5+
6+* Fix region `us-west-2` for AWS S3 (#139)
7+* Build examples in CI
8+* Disable live-server tests by default, but run them in CI
9+* Drop support for GHC 8.2.x
10+
4## Version 1.5.1
11## Version 1.5.1
5
12
6* Add support for GHC 8.8
13* Add support for GHC 8.8
README.md+71−25
@@ -8,43 +8,42 @@ The MinIO Haskell Client SDK provides simple APIs to access [MinIO](https://min.
8
8
9## Installation
9## Installation
10
10
11−```sh
11+### Add to your project
12−git clone https://github.com/minio/minio-hs.git
13
12
14−cd minio-hs/
13+Simply add `minio-hs` to your project's `.cabal` dependencies section or if you are using hpack, to your `package.yaml` file as usual.
15
14
16−stack install
15+### Try it out directly with `ghci`
17−```
18
16
19−Tests can be run with:
17+From your home folder or any non-haskell project directory, just run:
20
18
21```sh
19```sh
22
20
23−stack test
21+stack install minio-hs
24
22
25```
23```
26
24
27−A section of the tests use the remote MinIO Play server at
25+Then start an interpreter session and browse the available APIs with:
28−`https://play.min.io` by default. For library development,
29−using this remote server maybe slow. To run the tests against a
30−locally running MinIO live server at `http://localhost:9000`, just set
31−the environment `MINIO_LOCAL` to any value (and unset it to switch
32−back to Play).
33−
34−Documentation can be locally built with:
35
26
36```sh
27```sh
37
28
38−stack haddock
29+$ stack ghci
39−
30+> :browse Network.Minio
40```
31```
41
32
33+## Examples
34+
35+The [examples](https://github.com/minio/minio-hs/tree/master/examples) folder contains many examples that you can try out and use to learn and to help with developing your own projects.
36+
42−## Quick-Start Example - File Uploader
37+### Quick-Start Example - File Uploader
38+
39+This example program connects to a MinIO object storage server, makes a bucket on the server and then uploads a file to the bucket.
40+
41+We will use the MinIO server running at https://play.min.io in this example. Feel free to use this service for testing and development. Access credentials are present in the library and are open to the public.
43
42
44### FileUploader.hs
43### FileUploader.hs
45``` haskell
44``` haskell
46#!/usr/bin/env stack
45#!/usr/bin/env stack
47−-- stack --resolver lts-11.1 runghc --package minio-hs --package optparse-applicative --package filepath
46+-- stack --resolver lts-14.11 runghc --package minio-hs --package optparse-applicative --package filepath
48
47
49--
48--
50-- MinIO Haskell SDK, (C) 2017-2019 MinIO, Inc.
49-- MinIO Haskell SDK, (C) 2017-2019 MinIO, Inc.
@@ -106,16 +105,19 @@ main = do
106 res <- runMinio minioPlayCI $ do
105 res <- runMinio minioPlayCI $ do
107 -- Make a bucket; catch bucket already exists exception if thrown.
106 -- Make a bucket; catch bucket already exists exception if thrown.
108 bErr <- try $ makeBucket bucket Nothing
107 bErr <- try $ makeBucket bucket Nothing
108+
109+ -- If the bucket already exists, we would get a specific
110+ -- `ServiceErr` exception thrown.
109 case bErr of
111 case bErr of
110− Left (MErrService BucketAlreadyOwnedByYou) -> return ()
112+ Left BucketAlreadyOwnedByYou -> return ()
111− Left e -> throwIO e
113+ Left e -> throwIO e
112− Right _ -> return ()
114+ Right _ -> return ()
113
115
114− -- Upload filepath to bucket; object is derived from filepath.
116+ -- Upload filepath to bucket; object name is derived from filepath.
115− fPutObject bucket object filepath def
117+ fPutObject bucket object filepath defaultPutObjectOptions
116
118
117 case res of
119 case res of
118− Left e -> putStrLn $ "file upload failed due to " ++ (show e)
120+ Left e -> putStrLn $ "file upload failed due to " ++ show e
119 Right () -> putStrLn "file upload succeeded."
121 Right () -> putStrLn "file upload succeeded."
120```
122```
121
123
@@ -129,3 +131,47 @@ main = do
129## Contribute
131## Contribute
130
132
131[Contributors Guide](https://github.com/minio/minio-hs/blob/master/CONTRIBUTING.md)
133[Contributors Guide](https://github.com/minio/minio-hs/blob/master/CONTRIBUTING.md)
134+
135+### Development
136+
137+To setup:
138+
139+```sh
140+git clone https://github.com/minio/minio-hs.git
141+
142+cd minio-hs/
143+
144+stack install
145+```
146+
147+Tests can be run with:
148+
149+```sh
150+
151+stack test
152+
153+```
154+
155+A section of the tests use the remote MinIO Play server at `https://play.min.io` by default. For library development, using this remote server maybe slow. To run the tests against a locally running MinIO live server at `http://localhost:9000`, just set the environment `MINIO_LOCAL` to any value (and unset it to switch back to Play).
156+
157+To run the live server tests, set a build flag as shown below:
158+
159+```sh
160+
161+stack test --flag minio-hs:live-test
162+
163+# OR against a local MinIO server with:
164+
165+MINIO_LOCAL=1 stack test --flag minio-hs:live-test
166+
167+```
168+
169+The configured CI system always runs both test-suites for every change.
170+
171+Documentation can be locally built with:
172+
173+```sh
174+
175+stack haddock
176+
177+```
examples/BucketExists.hs+1−1
@@ -1,5 +1,5 @@
1#!/usr/bin/env stack
1#!/usr/bin/env stack
2−-- stack --resolver lts-11.1 runghc --package minio-hs
2+-- stack --resolver lts-14.11 runghc --package minio-hs
3
3
4--
4--
5-- MinIO Haskell SDK, (C) 2017, 2018 MinIO, Inc.
5-- MinIO Haskell SDK, (C) 2017, 2018 MinIO, Inc.
examples/CopyObject.hs+10−9
@@ -1,5 +1,5 @@
1#!/usr/bin/env stack
1#!/usr/bin/env stack
2−-- stack --resolver lts-11.1 runghc --package minio-hs
2+-- stack --resolver lts-14.11 runghc --package minio-hs
3
3
4--
4--
5-- MinIO Haskell SDK, (C) 2017, 2018 MinIO, Inc.
5-- MinIO Haskell SDK, (C) 2017, 2018 MinIO, Inc.
@@ -20,8 +20,7 @@
20{-# LANGUAGE OverloadedStrings #-}
20{-# LANGUAGE OverloadedStrings #-}
21import Network.Minio
21import Network.Minio
22
22
23−import Control.Monad.Catch (catchIf)
23+import UnliftIO.Exception (catch, throwIO)
24−import Prelude
25
24
26-- | The following example uses minio's play server at
25-- | The following example uses minio's play server at
27-- https://play.min.io. The endpoint and associated
26-- https://play.min.io. The endpoint and associated
@@ -30,9 +29,6 @@ import Prelude
30-- > minioPlayCI :: ConnectInfo
29-- > minioPlayCI :: ConnectInfo
31--
30--
32
31
33−ignoreMinioErr :: ServiceErr -> Minio ()
34−ignoreMinioErr = return . const ()
35−
36main :: IO ()
32main :: IO ()
37main = do
33main = do
38 let
34 let
@@ -43,13 +39,18 @@ main = do
43
39
44 res1 <- runMinio minioPlayCI $ do
40 res1 <- runMinio minioPlayCI $ do
45 -- 1. Make a bucket; Catch BucketAlreadyOwnedByYou exception.
41 -- 1. Make a bucket; Catch BucketAlreadyOwnedByYou exception.
46− catchIf (== BucketAlreadyOwnedByYou) (makeBucket bucket Nothing) ignoreMinioErr
42+ catch (makeBucket bucket Nothing) (
43+ \e -> case e of
44+ BucketAlreadyOwnedByYou -> return ()
45+ _ -> throwIO e
46+ )
47
47
48 -- 2. Upload a file to bucket/object.
48 -- 2. Upload a file to bucket/object.
49− fPutObject bucket object localFile
49+ fPutObject bucket object localFile defaultPutObjectOptions
50
50
51 -- 3. Copy bucket/object to bucket/objectCopy.
51 -- 3. Copy bucket/object to bucket/objectCopy.
52− copyObject def {dstBucket = bucket, dstObject = objectCopy} def { srcBucket = bucket , srcObject = object }
52+ copyObject defaultDestinationInfo {dstBucket = bucket, dstObject = objectCopy}
53+ defaultSourceInfo { srcBucket = bucket , srcObject = object }
53
54
54 case res1 of
55 case res1 of
55 Left e -> putStrLn $ "copyObject failed." ++ show e
56 Left e -> putStrLn $ "copyObject failed." ++ show e
examples/FileUploader.hs+6−5
@@ -1,5 +1,5 @@
1#!/usr/bin/env stack
1#!/usr/bin/env stack
2−-- stack --resolver lts-11.1 runghc --package minio-hs --package optparse-applicative --package filepath
2+-- stack --resolver lts-14.11 runghc --package minio-hs --package optparse-applicative --package filepath
3
3
4--
4--
5-- MinIO Haskell SDK, (C) 2017, 2018 MinIO, Inc.
5-- MinIO Haskell SDK, (C) 2017, 2018 MinIO, Inc.
@@ -43,6 +43,7 @@ fileNameArgs = strArgument
43 (metavar "FILENAME"
43 (metavar "FILENAME"
44 <> help "Name of file to upload to AWS S3 or a MinIO server")
44 <> help "Name of file to upload to AWS S3 or a MinIO server")
45
45
46+cmdParser :: ParserInfo FilePath
46cmdParser = info
47cmdParser = info
47 (helper <*> fileNameArgs)
48 (helper <*> fileNameArgs)
48 (fullDesc
49 (fullDesc
@@ -62,12 +63,12 @@ main = do
62 -- Make a bucket; catch bucket already exists exception if thrown.
63 -- Make a bucket; catch bucket already exists exception if thrown.
63 bErr <- try $ makeBucket bucket Nothing
64 bErr <- try $ makeBucket bucket Nothing
64 case bErr of
65 case bErr of
65− Left (MErrService BucketAlreadyOwnedByYou) -> return ()
66+ Left BucketAlreadyOwnedByYou -> return ()
66− Left e -> throwIO e
67+ Left e -> throwIO e
67− Right _ -> return ()
68+ Right _ -> return ()
68
69
69 -- Upload filepath to bucket; object is derived from filepath.
70 -- Upload filepath to bucket; object is derived from filepath.
70− fPutObject bucket object filepath def
71+ fPutObject bucket object filepath defaultPutObjectOptions
71
72
72 case res of
73 case res of
73 Left e -> putStrLn $ "file upload failed due to " ++ (show e)
74 Left e -> putStrLn $ "file upload failed due to " ++ (show e)
examples/GetConfig.hs+2−2
@@ -1,5 +1,5 @@
1#!/usr/bin/env stack
1#!/usr/bin/env stack
2−-- stack --resolver lts-11.1 runghc --package minio-hs
2+-- stack --resolver lts-14.11 runghc --package minio-hs
3
3
4--
4--
5-- MinIO Haskell SDK, (C) 2017, 2018 MinIO, Inc.
5-- MinIO Haskell SDK, (C) 2017, 2018 MinIO, Inc.
@@ -25,6 +25,6 @@ import Prelude
25
25
26main :: IO ()
26main :: IO ()
27main = do
27main = do
28− res <- runMinio def $
28+ res <- runMinio minioPlayCI $
29 getConfig
29 getConfig
30 print res
30 print res
examples/GetObject.hs+3−3
@@ -1,5 +1,5 @@
1#!/usr/bin/env stack
1#!/usr/bin/env stack
2−-- stack --resolver lts-11.1 runghc --package minio-hs
2+-- stack --resolver lts-14.11 runghc --package minio-hs
3
3
4--
4--
5-- MinIO Haskell SDK, (C) 2017, 2018 MinIO, Inc.
5-- MinIO Haskell SDK, (C) 2017, 2018 MinIO, Inc.
@@ -38,8 +38,8 @@ main = do
38 bucket = "my-bucket"
38 bucket = "my-bucket"
39 object = "my-object"
39 object = "my-object"
40 res <- runMinio minioPlayCI $ do
40 res <- runMinio minioPlayCI $ do
41− src <- getObject bucket object def
41+ src <- getObject bucket object defaultGetObjectOptions
42− C.connect src $ CB.sinkFileCautious "/tmp/my-object"
42+ C.connect (gorObjectStream src) $ CB.sinkFileCautious "/tmp/my-object"
43
43
44 case res of
44 case res of
45 Left e -> putStrLn $ "getObject failed." ++ (show e)
45 Left e -> putStrLn $ "getObject failed." ++ (show e)
examples/HeadObject.hs+2−2
@@ -1,5 +1,5 @@
1#!/usr/bin/env stack
1#!/usr/bin/env stack
2−-- stack --resolver lts-11.1 runghc --package minio-hs
2+-- stack --resolver lts-14.11 runghc --package minio-hs
3
3
4--
4--
5-- MinIO Haskell SDK, (C) 2017, 2018 MinIO, Inc.
5-- MinIO Haskell SDK, (C) 2017, 2018 MinIO, Inc.
@@ -36,7 +36,7 @@ main = do
36 bucket = "test"
36 bucket = "test"
37 object = "passwd"
37 object = "passwd"
38 res <- runMinio minioPlayCI $
38 res <- runMinio minioPlayCI $
39− headObject bucket object
39+ headObject bucket object []
40
40
41 case res of
41 case res of
42 Left e -> putStrLn $ "headObject failed." ++ show e
42 Left e -> putStrLn $ "headObject failed." ++ show e
examples/Heal.hs+2−2
@@ -1,5 +1,5 @@
1#!/usr/bin/env stack
1#!/usr/bin/env stack
2−-- stack --resolver lts-11.1 runghc --package minio-hs
2+-- stack --resolver lts-14.11 runghc --package minio-hs
3
3
4--
4--
5-- MinIO Haskell SDK, (C) 2017, 2018 MinIO, Inc.
5-- MinIO Haskell SDK, (C) 2017, 2018 MinIO, Inc.
@@ -25,7 +25,7 @@ import Prelude
25
25
26main :: IO ()
26main :: IO ()
27main = do
27main = do
28− res <- runMinio def $
28+ res <- runMinio minioPlayCI $
29 do
29 do
30 hsr <- startHeal Nothing Nothing HealOpts { hoRecursive = True
30 hsr <- startHeal Nothing Nothing HealOpts { hoRecursive = True
31 , hoDryRun = False
31 , hoDryRun = False
examples/ListBuckets.hs+1−1
@@ -1,5 +1,5 @@
1#!/usr/bin/env stack
1#!/usr/bin/env stack
2−-- stack --resolver lts-11.1 runghc --package minio-hs
2+-- stack --resolver lts-14.11 runghc --package minio-hs
3
3
4--
4--
5-- MinIO Haskell SDK, (C) 2017, 2018 MinIO, Inc.
5-- MinIO Haskell SDK, (C) 2017, 2018 MinIO, Inc.
examples/ListIncompleteUploads.hs+1−1
@@ -1,5 +1,5 @@
1#!/usr/bin/env stack
1#!/usr/bin/env stack
2−-- stack --resolver lts-11.1 runghc --package minio-hs
2+-- stack --resolver lts-14.11 runghc --package minio-hs
3
3
4--
4--
5-- MinIO Haskell SDK, (C) 2017, 2018 MinIO, Inc.
5-- MinIO Haskell SDK, (C) 2017, 2018 MinIO, Inc.
examples/ListObjects.hs+1−1
@@ -1,5 +1,5 @@
1#!/usr/bin/env stack
1#!/usr/bin/env stack
2−-- stack --resolver lts-11.1 runghc --package minio-hs
2+-- stack --resolver lts-14.11 runghc --package minio-hs
3
3
4--
4--
5-- MinIO Haskell SDK, (C) 2017, 2018 MinIO, Inc.
5-- MinIO Haskell SDK, (C) 2017, 2018 MinIO, Inc.
examples/MakeBucket.hs+1−1
@@ -1,5 +1,5 @@
1#!/usr/bin/env stack
1#!/usr/bin/env stack
2−-- stack --resolver lts-11.1 runghc --package minio-hs
2+-- stack --resolver lts-14.11 runghc --package minio-hs
3
3
4--
4--
5-- MinIO Haskell SDK, (C) 2017, 2018 MinIO, Inc.
5-- MinIO Haskell SDK, (C) 2017, 2018 MinIO, Inc.
examples/PresignedGetObject.hs+4−4
@@ -1,5 +1,5 @@
1#!/usr/bin/env stack
1#!/usr/bin/env stack
2−-- stack --resolver lts-11.1 runghc --package minio-hs
2+-- stack --resolver lts-14.11 runghc --package minio-hs
3
3
4--
4--
5-- MinIO Haskell SDK, (C) 2017, 2018 MinIO, Inc.
5-- MinIO Haskell SDK, (C) 2017, 2018 MinIO, Inc.
@@ -47,11 +47,11 @@ main = do
47
47
48 res <- runMinio minioPlayCI $ do
48 res <- runMinio minioPlayCI $ do
49 liftIO $ B.putStrLn "Upload a file that we will fetch with a presigned URL..."
49 liftIO $ B.putStrLn "Upload a file that we will fetch with a presigned URL..."
50− putObject bucket object (CC.repeat "a") (Just kb15) def
50+ putObject bucket object (CC.repeat "a") (Just kb15) defaultPutObjectOptions
51 liftIO $ putStrLn $ "Done. Object created at: my-bucket/my-object"
51 liftIO $ putStrLn $ "Done. Object created at: my-bucket/my-object"
52
52
53 -- Extract Etag of uploaded object
53 -- Extract Etag of uploaded object
54− oi <- statObject bucket object
54+ oi <- statObject bucket object defaultGetObjectOptions
55 let etag = oiETag oi
55 let etag = oiETag oi
56
56
57 -- Set header to add an if-match constraint - this makes sure
57 -- Set header to add an if-match constraint - this makes sure
@@ -68,7 +68,7 @@ main = do
68
68
69 case res of
69 case res of
70 Left e -> putStrLn $ "presignedPutObject URL failed." ++ show e
70 Left e -> putStrLn $ "presignedPutObject URL failed." ++ show e
71− Right (headers, etag, url) -> do
71+ Right (headers, _, url) -> do
72
72
73 -- We generate a curl command to demonstrate usage of the signed
73 -- We generate a curl command to demonstrate usage of the signed
74 -- URL.
74 -- URL.
examples/PresignedPostPolicy.hs+4−4
@@ -1,5 +1,5 @@
1#!/usr/bin/env stack
1#!/usr/bin/env stack
2−-- stack --resolver lts-11.1 runghc --package minio-hs
2+-- stack --resolver lts-14.11 runghc --package minio-hs
3
3
4--
4--
5-- MinIO Haskell SDK, (C) 2017, 2018 MinIO, Inc.
5-- MinIO Haskell SDK, (C) 2017, 2018 MinIO, Inc.
@@ -38,7 +38,7 @@ main = do
38 now <- Time.getCurrentTime
38 now <- Time.getCurrentTime
39 let
39 let
40 bucket = "my-bucket"
40 bucket = "my-bucket"
41− object = "my-object"
41+ object = "photos/my-object"
42
42
43 -- set an expiration time of 10 days
43 -- set an expiration time of 10 days
44 expireTime = Time.addUTCTime (3600 * 24 * 10) now
44 expireTime = Time.addUTCTime (3600 * 24 * 10) now
@@ -47,9 +47,9 @@ main = do
47 -- conditions are validated, newPostPolicy returns an Either value
47 -- conditions are validated, newPostPolicy returns an Either value
48 policyE = newPostPolicy expireTime
48 policyE = newPostPolicy expireTime
49 [ -- set the object name condition
49 [ -- set the object name condition
50− ppCondKey "photos/my-object"
50+ ppCondKey object
51 -- set the bucket name condition
51 -- set the bucket name condition
52− , ppCondBucket "my-bucket"
52+ , ppCondBucket bucket
53 -- set the size range of object as 1B to 10MiB
53 -- set the size range of object as 1B to 10MiB
54 , ppCondContentLengthRange 1 (10*1024*1024)
54 , ppCondContentLengthRange 1 (10*1024*1024)
55 -- set content type as jpg image
55 -- set content type as jpg image
examples/PresignedPutObject.hs+1−1
@@ -1,5 +1,5 @@
1#!/usr/bin/env stack
1#!/usr/bin/env stack
2−-- stack --resolver lts-11.1 runghc --package minio-hs
2+-- stack --resolver lts-14.11 runghc --package minio-hs
3
3
4--
4--
5-- MinIO Haskell SDK, (C) 2017, 2018 MinIO, Inc.
5-- MinIO Haskell SDK, (C) 2017, 2018 MinIO, Inc.
examples/PutObject.hs+3−3
@@ -1,5 +1,5 @@
1#!/usr/bin/env stack
1#!/usr/bin/env stack
2−-- stack --resolver lts-11.1 runghc --package minio-hs
2+-- stack --resolver lts-14.11 runghc --package minio-hs
3
3
4--
4--
5-- MinIO Haskell SDK, (C) 2017, 2018 MinIO, Inc.
5-- MinIO Haskell SDK, (C) 2017, 2018 MinIO, Inc.
@@ -41,14 +41,14 @@ main = do
41
41
42 -- Eg 1. Upload a stream of repeating "a" using putObject with default options.
42 -- Eg 1. Upload a stream of repeating "a" using putObject with default options.
43 res1 <- runMinio minioPlayCI $
43 res1 <- runMinio minioPlayCI $
44− putObject bucket object (CC.repeat "a") (Just kb15) def
44+ putObject bucket object (CC.repeat "a") (Just kb15) defaultPutObjectOptions
45 case res1 of
45 case res1 of
46 Left e -> putStrLn $ "putObject failed." ++ show e
46 Left e -> putStrLn $ "putObject failed." ++ show e
47 Right () -> putStrLn "putObject succeeded."
47 Right () -> putStrLn "putObject succeeded."
48
48
49 -- Eg 2. Upload a file using fPutObject with default options.
49 -- Eg 2. Upload a file using fPutObject with default options.
50 res2 <- runMinio minioPlayCI $
50 res2 <- runMinio minioPlayCI $
51− fPutObject bucket object localFile def
51+ fPutObject bucket object localFile defaultPutObjectOptions
52 case res2 of
52 case res2 of
53 Left e -> putStrLn $ "fPutObject failed." ++ show e
53 Left e -> putStrLn $ "fPutObject failed." ++ show e
54 Right () -> putStrLn "fPutObject succeeded."
54 Right () -> putStrLn "fPutObject succeeded."
examples/README.mdnew file+17
@@ -0,0 +1,17 @@
1+# Examples
2+
3+The examples in this directory illustrate usage of various APIs provided by this library. Each file is self-contained and can be run like a script directly.
4+
5+To build the examples, the build flag `examples` needs to be turned on:
6+
7+```sh
8+stack build --flag minio-hs:examples
9+```
10+
11+Now to run and example script [BucketExists.hs](https://github.com/minio/minio-hs/blob/master/examples/BucketExists.hs):
12+
13+```sh
14+stack exec BucketExists
15+```
16+
17+The CI system is configured to build these examples with every change, so they should be current.
examples/RemoveBucket.hs+1−1
@@ -1,5 +1,5 @@
1#!/usr/bin/env stack
1#!/usr/bin/env stack
2−-- stack --resolver lts-11.1 runghc --package minio-hs
2+-- stack --resolver lts-14.11 runghc --package minio-hs
3
3
4--
4--
5-- MinIO Haskell SDK, (C) 2017, 2018 MinIO, Inc.
5-- MinIO Haskell SDK, (C) 2017, 2018 MinIO, Inc.
examples/RemoveIncompleteUpload.hs+1−1
@@ -1,5 +1,5 @@
1#!/usr/bin/env stack
1#!/usr/bin/env stack
2−-- stack --resolver lts-11.1 runghc --package minio-hs
2+-- stack --resolver lts-14.11 runghc --package minio-hs
3
3
4--
4--
5-- MinIO Haskell SDK, (C) 2017, 2018 MinIO, Inc.
5-- MinIO Haskell SDK, (C) 2017, 2018 MinIO, Inc.
examples/RemoveObject.hs+1−1
@@ -1,5 +1,5 @@
1#!/usr/bin/env stack
1#!/usr/bin/env stack
2−-- stack --resolver lts-11.1 runghc --package minio-hs
2+-- stack --resolver lts-14.11 runghc --package minio-hs
3
3
4--
4--
5-- MinIO Haskell SDK, (C) 2017, 2018 MinIO, Inc.
5-- MinIO Haskell SDK, (C) 2017, 2018 MinIO, Inc.
examples/SelectObject.hs+1−2
@@ -1,5 +1,5 @@
1#!/usr/bin/env stack
1#!/usr/bin/env stack
2−-- stack --resolver lts-13.1 runghc --package minio-hs
2+-- stack --resolver lts-14.11 runghc --package minio-hs
3
3
4--
4--
5-- MinIO Haskell SDK, (C) 2019 MinIO, Inc.
5-- MinIO Haskell SDK, (C) 2019 MinIO, Inc.
@@ -22,7 +22,6 @@ import Network.Minio
22
22
23import qualified Conduit as C
23import qualified Conduit as C
24import Control.Monad (when)
24import Control.Monad (when)
25−import qualified Data.ByteString.Lazy as LB
26
25
27import Prelude
26import Prelude
28
27
examples/ServerInfo.hs+2−2
@@ -1,5 +1,5 @@
1#!/usr/bin/env stack
1#!/usr/bin/env stack
2−-- stack --resolver lts-11.1 runghc --package minio-hs
2+-- stack --resolver lts-14.11 runghc --package minio-hs
3
3
4--
4--
5-- MinIO Haskell SDK, (C) 2017, 2018 MinIO, Inc.
5-- MinIO Haskell SDK, (C) 2017, 2018 MinIO, Inc.
@@ -25,6 +25,6 @@ import Prelude
25
25
26main :: IO ()
26main :: IO ()
27main = do
27main = do
28− res <- runMinio def $
28+ res <- runMinio minioPlayCI $
29 getServerInfo
29 getServerInfo
30 print res
30 print res
examples/ServiceSendRestart.hs+2−2
@@ -1,5 +1,5 @@
1#!/usr/bin/env stack
1#!/usr/bin/env stack
2−-- stack --resolver lts-11.1 runghc --package minio-hs
2+-- stack --resolver lts-14.11 runghc --package minio-hs
3
3
4--
4--
5-- MinIO Haskell SDK, (C) 2017, 2018 MinIO, Inc.
5-- MinIO Haskell SDK, (C) 2017, 2018 MinIO, Inc.
@@ -25,6 +25,6 @@ import Prelude
25
25
26main :: IO ()
26main :: IO ()
27main = do
27main = do
28− res <- runMinio def $
28+ res <- runMinio minioPlayCI $
29 serviceSendAction ServiceActionRestart
29 serviceSendAction ServiceActionRestart
30 print res
30 print res
examples/ServiceSendStop.hs+2−2
@@ -1,5 +1,5 @@
1#!/usr/bin/env stack
1#!/usr/bin/env stack
2−-- stack --resolver lts-11.1 runghc --package minio-hs
2+-- stack --resolver lts-14.11 runghc --package minio-hs
3
3
4--
4--
5-- MinIO Haskell SDK, (C) 2017, 2018 MinIO, Inc.
5-- MinIO Haskell SDK, (C) 2017, 2018 MinIO, Inc.
@@ -25,6 +25,6 @@ import Prelude
25
25
26main :: IO ()
26main :: IO ()
27main = do
27main = do
28− res <- runMinio def $
28+ res <- runMinio minioPlayCI $
29 serviceSendAction ServiceActionStop
29 serviceSendAction ServiceActionStop
30 print res
30 print res
examples/ServiceStatus.hs+2−2
@@ -1,5 +1,5 @@
1#!/usr/bin/env stack
1#!/usr/bin/env stack
2−-- stack --resolver lts-11.1 runghc --package minio-hs
2+-- stack --resolver lts-14.11 runghc --package minio-hs
3
3
4--
4--
5-- MinIO Haskell SDK, (C) 2017, 2018 MinIO, Inc.
5-- MinIO Haskell SDK, (C) 2017, 2018 MinIO, Inc.
@@ -25,6 +25,6 @@ import Prelude
25
25
26main :: IO ()
26main :: IO ()
27main = do
27main = do
28− res <- runMinio def $
28+ res <- runMinio minioPlayCI $
29 serviceStatus
29 serviceStatus
30 print res
30 print res
examples/SetConfig.hs+2−2
@@ -1,5 +1,5 @@
1#!/usr/bin/env stack
1#!/usr/bin/env stack
2−-- stack --resolver lts-11.1 runghc --package minio-hs
2+-- stack --resolver lts-14.11 runghc --package minio-hs
3
3
4--
4--
5-- MinIO Haskell SDK, (C) 2017, 2018 MinIO, Inc.
5-- MinIO Haskell SDK, (C) 2017, 2018 MinIO, Inc.
@@ -25,7 +25,7 @@ import Prelude
25
25
26main :: IO ()
26main :: IO ()
27main = do
27main = do
28− res <- runMinio def $
28+ res <- runMinio minioPlayCI $
29 do
29 do
30 let config = "{\"version\":\"25\",\"credential\":{\"accessKey\":\"minio\",\"secretKey\":\"minio123\"},\"region\":\"\",\"browser\":\"on\",\"worm\":\"off\",\"domain\":\"\",\"storageclass\":{\"standard\":\"\",\"rrs\":\"\"},\"cache\":{\"drives\":[],\"expiry\":90,\"exclude\":[]},\"notify\":{\"amqp\":{\"2\":{\"enable\":false,\"url\":\"amqp://guest:guest@localhost:5672/\",\"exchange\":\"minio\",\"routingKey\":\"minio\",\"exchangeType\":\"direct\",\"deliveryMode\":0,\"mandatory\":false,\"immediate\":false,\"durable\":false,\"internal\":false,\"noWait\":false,\"autoDeleted\":false}},\"elasticsearch\":{\"1\":{\"enable\":false,\"format\":\"namespace\",\"url\":\"http://localhost:9200\",\"index\":\"minio_events\"}},\"kafka\":{\"1\":{\"enable\":false,\"brokers\":null,\"topic\":\"\"}},\"mqtt\":{\"1\":{\"enable\":false,\"broker\":\"\",\"topic\":\"\",\"qos\":0,\"clientId\":\"\",\"username\":\"\",\"password\":\"\",\"reconnectInterval\":0,\"keepAliveInterval\":0}},\"mysql\":{\"1\":{\"enable\":false,\"format\":\"namespace\",\"dsnString\":\"\",\"table\":\"\",\"host\":\"\",\"port\":\"\",\"user\":\"\",\"password\":\"\",\"database\":\"\"}},\"nats\":{\"1\":{\"enable\":false,\"address\":\"\",\"subject\":\"\",\"username\":\"\",\"password\":\"\",\"token\":\"\",\"secure\":false,\"pingInterval\":0,\"streaming\":{\"enable\":false,\"clusterID\":\"\",\"clientID\":\"\",\"async\":false,\"maxPubAcksInflight\":0}}},\"postgresql\":{\"1\":{\"enable\":false,\"format\":\"namespace\",\"connectionString\":\"\",\"table\":\"\",\"host\":\"\",\"port\":\"\",\"user\":\"\",\"password\":\"\",\"database\":\"\"}},\"redis\":{\"test1\":{\"enable\":true,\"format\":\"namespace\",\"address\":\"127.0.0.1:6379\",\"password\":\"\",\"key\":\"bucketevents_ns\"},\"test2\":{\"enable\":true,\"format\":\"access\",\"address\":\"127.0.0.1:6379\",\"password\":\"\",\"key\":\"bucketevents_log\"}},\"webhook\":{\"1\":{\"enable\":true,\"endpoint\":\"http://localhost:3000\"},\"2\":{\"enable\":true,\"endpoint\":\"http://localhost:3001\"}}}}"
30 let config = "{\"version\":\"25\",\"credential\":{\"accessKey\":\"minio\",\"secretKey\":\"minio123\"},\"region\":\"\",\"browser\":\"on\",\"worm\":\"off\",\"domain\":\"\",\"storageclass\":{\"standard\":\"\",\"rrs\":\"\"},\"cache\":{\"drives\":[],\"expiry\":90,\"exclude\":[]},\"notify\":{\"amqp\":{\"2\":{\"enable\":false,\"url\":\"amqp://guest:guest@localhost:5672/\",\"exchange\":\"minio\",\"routingKey\":\"minio\",\"exchangeType\":\"direct\",\"deliveryMode\":0,\"mandatory\":false,\"immediate\":false,\"durable\":false,\"internal\":false,\"noWait\":false,\"autoDeleted\":false}},\"elasticsearch\":{\"1\":{\"enable\":false,\"format\":\"namespace\",\"url\":\"http://localhost:9200\",\"index\":\"minio_events\"}},\"kafka\":{\"1\":{\"enable\":false,\"brokers\":null,\"topic\":\"\"}},\"mqtt\":{\"1\":{\"enable\":false,\"broker\":\"\",\"topic\":\"\",\"qos\":0,\"clientId\":\"\",\"username\":\"\",\"password\":\"\",\"reconnectInterval\":0,\"keepAliveInterval\":0}},\"mysql\":{\"1\":{\"enable\":false,\"format\":\"namespace\",\"dsnString\":\"\",\"table\":\"\",\"host\":\"\",\"port\":\"\",\"user\":\"\",\"password\":\"\",\"database\":\"\"}},\"nats\":{\"1\":{\"enable\":false,\"address\":\"\",\"subject\":\"\",\"username\":\"\",\"password\":\"\",\"token\":\"\",\"secure\":false,\"pingInterval\":0,\"streaming\":{\"enable\":false,\"clusterID\":\"\",\"clientID\":\"\",\"async\":false,\"maxPubAcksInflight\":0}}},\"postgresql\":{\"1\":{\"enable\":false,\"format\":\"namespace\",\"connectionString\":\"\",\"table\":\"\",\"host\":\"\",\"port\":\"\",\"user\":\"\",\"password\":\"\",\"database\":\"\"}},\"redis\":{\"test1\":{\"enable\":true,\"format\":\"namespace\",\"address\":\"127.0.0.1:6379\",\"password\":\"\",\"key\":\"bucketevents_ns\"},\"test2\":{\"enable\":true,\"format\":\"access\",\"address\":\"127.0.0.1:6379\",\"password\":\"\",\"key\":\"bucketevents_log\"}},\"webhook\":{\"1\":{\"enable\":true,\"endpoint\":\"http://localhost:3000\"},\"2\":{\"enable\":true,\"endpoint\":\"http://localhost:3001\"}}}}"
31 setConfig config
31 setConfig config
minio-hs.cabal+180−154
@@ -1,5 +1,6 @@
1+cabal-version: 2.2
1name: minio-hs
2name: minio-hs
2−version: 1.5.1
3+version: 1.5.2
3synopsis: A MinIO Haskell Library for Amazon S3 compatible cloud
4synopsis: A MinIO Haskell Library for Amazon S3 compatible cloud
4 storage.
5 storage.
5description: The MinIO Haskell client library provides simple APIs to
6description: The MinIO Haskell client library provides simple APIs to
@@ -21,14 +22,21 @@ extra-source-files:
21 README.md
22 README.md
22 stack.yaml
23 stack.yaml
23
24
24−cabal-version: >=1.10
25
25
26−library
26+common base-settings
27− hs-source-dirs: src
28 ghc-options: -Wall
27 ghc-options: -Wall
29− exposed-modules: Network.Minio
28+ default-language: Haskell2010
30− , Network.Minio.AdminAPI
29+ default-extensions: BangPatterns
31− , Network.Minio.S3API
30+ , FlexibleContexts
31+ , FlexibleInstances
32+ , MultiParamTypeClasses
33+ , MultiWayIf
34+ , NoImplicitPrelude
35+ , OverloadedStrings
36+ , RankNTypes
37+ , ScopedTypeVariables
38+ , TypeFamilies
39+ , TupleSections
32 other-modules: Lib.Prelude
40 other-modules: Lib.Prelude
33 , Network.Minio.API
41 , Network.Minio.API
34 , Network.Minio.APICommon
42 , Network.Minio.APICommon
@@ -79,193 +87,211 @@ library
79 , unliftio-core >= 0.1
87 , unliftio-core >= 0.1
80 , unordered-containers >= 0.2
88 , unordered-containers >= 0.2
81 , xml-conduit >= 1.8
89 , xml-conduit >= 1.8
82− default-language: Haskell2010
90+
83− default-extensions: BangPatterns
91+library
84− , FlexibleContexts
92+ import: base-settings
85− , FlexibleInstances
93+ hs-source-dirs: src
86− , MultiParamTypeClasses
94+ exposed-modules: Network.Minio
87− , MultiWayIf
95+ , Network.Minio.AdminAPI
88− , NoImplicitPrelude
96+ , Network.Minio.S3API
89− , OverloadedStrings
90− , RankNTypes
91− , ScopedTypeVariables
92− , TypeFamilies
93− , TupleSections
94
97
95Flag live-test
98Flag live-test
99+ Description: Build the test suite that runs against a live MinIO server
96− Default: True
100+ Default: False
97 Manual: True
101 Manual: True
98
102
99test-suite minio-hs-live-server-test
103test-suite minio-hs-live-server-test
104+ import: base-settings
100 type: exitcode-stdio-1.0
105 type: exitcode-stdio-1.0
101 hs-source-dirs: test, src
106 hs-source-dirs: test, src
102 main-is: LiveServer.hs
107 main-is: LiveServer.hs
103 ghc-options: -Wall -threaded -rtsopts -with-rtsopts=-N
108 ghc-options: -Wall -threaded -rtsopts -with-rtsopts=-N
104− default-language: Haskell2010
105− default-extensions: BangPatterns
106− , FlexibleContexts
107− , FlexibleInstances
108− , MultiParamTypeClasses
109− , MultiWayIf
110− , NoImplicitPrelude
111− , OverloadedStrings
112− , RankNTypes
113− , ScopedTypeVariables
114− , TupleSections
115− , TypeFamilies
116− other-modules: Lib.Prelude
117− , Network.Minio
109+ other-modules: Network.Minio
118− , Network.Minio.API
110+ , Network.Minio.S3API
119− , Network.Minio.API.Test
120− , Network.Minio.APICommon
121 , Network.Minio.AdminAPI
111 , Network.Minio.AdminAPI
122− , Network.Minio.CopyObject
112+ , Network.Minio.API.Test
123− , Network.Minio.Data
124− , Network.Minio.Data.ByteString
125− , Network.Minio.Data.Crypto
126− , Network.Minio.Data.Time
127− , Network.Minio.Errors
128− , Network.Minio.JsonParser
129 , Network.Minio.JsonParser.Test
113 , Network.Minio.JsonParser.Test
130− , Network.Minio.ListOps
131− , Network.Minio.PresignedOperations
132− , Network.Minio.PutObject
133− , Network.Minio.S3API
134− , Network.Minio.SelectAPI
135− , Network.Minio.Sign.V4
136 , Network.Minio.TestHelpers
114 , Network.Minio.TestHelpers
137− , Network.Minio.Utils
138 , Network.Minio.Utils.Test
115 , Network.Minio.Utils.Test
139− , Network.Minio.XmlGenerator
140 , Network.Minio.XmlGenerator.Test
116 , Network.Minio.XmlGenerator.Test
141− , Network.Minio.XmlParser
142 , Network.Minio.XmlParser.Test
117 , Network.Minio.XmlParser.Test
143− build-depends: base >= 4.7 && < 5
118+ build-depends: minio-hs
144− , minio-hs
145− , protolude >= 0.1.6
146− , QuickCheck
147− , aeson
148− , base64-bytestring
149− , binary
150− , bytestring
151− , case-insensitive
152− , conduit
153− , conduit-extra
154− , connection
155− , cryptonite
156− , cryptonite-conduit
157− , digest
158− , directory
159− , exceptions
160− , filepath
161− , http-client
162− , http-client-tls
163− , http-conduit
164− , http-types
165− , ini
166− , memory
167− , raw-strings-qq >= 1
168− , resourcet
169− , retry
170 , tasty
119 , tasty
171 , tasty-hunit
120 , tasty-hunit
172 , tasty-quickcheck
121 , tasty-quickcheck
173 , tasty-smallcheck
122 , tasty-smallcheck
174− , temporary
123+ , QuickCheck
175− , text
176− , time
177− , transformers
178− , unliftio
179− , unliftio-core
180− , unordered-containers
181− , xml-conduit
182 if !flag(live-test)
124 if !flag(live-test)
183 buildable: False
125 buildable: False
184
126
185test-suite minio-hs-test
127test-suite minio-hs-test
128+ import: base-settings
186 type: exitcode-stdio-1.0
129 type: exitcode-stdio-1.0
187 hs-source-dirs: test, src
130 hs-source-dirs: test, src
188 main-is: Spec.hs
131 main-is: Spec.hs
189− build-depends: base >= 4.7 && < 5
132+ build-depends: minio-hs
190− , minio-hs
191− , protolude >= 0.1.6
192 , QuickCheck
133 , QuickCheck
193− , aeson
194− , base64-bytestring
195− , binary
196− , bytestring
197− , case-insensitive
198− , conduit
199− , conduit-extra
200− , connection
201− , cryptonite
202− , cryptonite-conduit
203− , digest
204− , directory
205− , exceptions
206− , filepath
207− , http-client
208− , http-client-tls
209− , http-conduit
210− , http-types
211− , ini
212− , memory
213− , raw-strings-qq >= 1
214− , resourcet
215− , retry
216 , tasty
134 , tasty
217 , tasty-hunit
135 , tasty-hunit
218 , tasty-quickcheck
136 , tasty-quickcheck
219 , tasty-smallcheck
137 , tasty-smallcheck
220− , temporary
221− , text
222− , time
223− , transformers
224− , unliftio
225− , unliftio-core
226− , unordered-containers
227− , xml-conduit
228 ghc-options: -Wall -threaded -rtsopts -with-rtsopts=-N
138 ghc-options: -Wall -threaded -rtsopts -with-rtsopts=-N
229− default-language: Haskell2010
230− default-extensions: BangPatterns
231− , FlexibleContexts
232− , FlexibleInstances
233− , MultiParamTypeClasses
234− , MultiWayIf
235− , NoImplicitPrelude
236− , OverloadedStrings
237− , RankNTypes
238− , ScopedTypeVariables
239− , TupleSections
240− , TypeFamilies
241 other-modules: Lib.Prelude
139 other-modules: Lib.Prelude
242 , Network.Minio
140 , Network.Minio
243− , Network.Minio.API
244− , Network.Minio.API.Test
245− , Network.Minio.APICommon
246− , Network.Minio.AdminAPI
247− , Network.Minio.CopyObject
248− , Network.Minio.Data
249− , Network.Minio.Data.ByteString
250− , Network.Minio.Data.Crypto
251− , Network.Minio.Data.Time
252− , Network.Minio.Errors
253− , Network.Minio.JsonParser
254− , Network.Minio.JsonParser.Test
255− , Network.Minio.ListOps
256− , Network.Minio.PresignedOperations
257− , Network.Minio.PutObject
258 , Network.Minio.S3API
141 , Network.Minio.S3API
259− , Network.Minio.SelectAPI
142+ , Network.Minio.AdminAPI
260− , Network.Minio.Sign.V4
261 , Network.Minio.TestHelpers
143 , Network.Minio.TestHelpers
262− , Network.Minio.Utils
144+ , Network.Minio.API.Test
145+ , Network.Minio.JsonParser.Test
263 , Network.Minio.Utils.Test
146 , Network.Minio.Utils.Test
264− , Network.Minio.XmlGenerator
265 , Network.Minio.XmlGenerator.Test
147 , Network.Minio.XmlGenerator.Test
266− , Network.Minio.XmlParser
267 , Network.Minio.XmlParser.Test
148 , Network.Minio.XmlParser.Test
268
149
150+Flag examples
151+ Description: Build the examples
152+ Default: False
153+ Manual: True
154+
155+common examples-settings
156+ ghc-options: -Wall -threaded -rtsopts -with-rtsopts=-N
157+ default-language: Haskell2010
158+ default-extensions: OverloadedStrings
159+ build-depends: base >= 4.7 && < 5
160+ , bytestring
161+ , case-insensitive
162+ , conduit
163+ , conduit-extra
164+ , filepath
165+ , minio-hs
166+ , optparse-applicative
167+ , text
168+ , time
169+ , unliftio
170+ , unordered-containers
171+ hs-source-dirs: examples
172+ if !flag(examples)
173+ buildable: False
174+
175+executable BucketExists
176+ import: examples-settings
177+ scope: private
178+ main-is: BucketExists.hs
179+
180+executable CopyObject
181+ import: examples-settings
182+ scope: private
183+ main-is: CopyObject.hs
184+
185+executable FileUploader
186+ import: examples-settings
187+ scope: private
188+ main-is: FileUploader.hs
189+
190+executable GetConfig
191+ import: examples-settings
192+ scope: private
193+ main-is: GetConfig.hs
194+
195+executable GetObject
196+ import: examples-settings
197+ scope: private
198+ main-is: GetObject.hs
199+
200+executable HeadObject
201+ import: examples-settings
202+ scope: private
203+ main-is: HeadObject.hs
204+
205+executable Heal
206+ import: examples-settings
207+ scope: private
208+ main-is: Heal.hs
209+
210+executable ListBuckets
211+ import: examples-settings
212+ scope: private
213+ main-is: ListBuckets.hs
214+
215+executable ListIncompleteUploads
216+ import: examples-settings
217+ scope: private
218+ main-is: ListIncompleteUploads.hs
219+
220+executable ListObjects
221+ import: examples-settings
222+ scope: private
223+ main-is: ListObjects.hs
224+
225+executable MakeBucket
226+ import: examples-settings
227+ scope: private
228+ main-is: MakeBucket.hs
229+
230+executable PresignedGetObject
231+ import: examples-settings
232+ scope: private
233+ main-is: PresignedGetObject.hs
234+
235+executable PresignedPostPolicy
236+ import: examples-settings
237+ scope: private
238+ main-is: PresignedPostPolicy.hs
239+
240+executable PresignedPutObject
241+ import: examples-settings
242+ scope: private
243+ main-is: PresignedPutObject.hs
244+
245+executable PutObject
246+ import: examples-settings
247+ scope: private
248+ main-is: PutObject.hs
249+
250+executable RemoveBucket
251+ import: examples-settings
252+ scope: private
253+ main-is: RemoveBucket.hs
254+
255+executable RemoveIncompleteUpload
256+ import: examples-settings
257+ scope: private
258+ main-is: RemoveIncompleteUpload.hs
259+
260+executable RemoveObject
261+ import: examples-settings
262+ scope: private
263+ main-is: RemoveObject.hs
264+
265+executable SelectObject
266+ import: examples-settings
267+ scope: private
268+ main-is: SelectObject.hs
269+
270+executable ServerInfo
271+ import: examples-settings
272+ scope: private
273+ main-is: ServerInfo.hs
274+
275+executable ServiceSendRestart
276+ import: examples-settings
277+ scope: private
278+ main-is: ServiceSendRestart.hs
279+
280+executable ServiceSendStop
281+ import: examples-settings
282+ scope: private
283+ main-is: ServiceSendStop.hs
284+
285+executable ServiceStatus
286+ import: examples-settings
287+ scope: private
288+ main-is: ServiceStatus.hs
289+
290+executable SetConfig
291+ import: examples-settings
292+ scope: private
293+ main-is: SetConfig.hs
294+
269source-repository head
295source-repository head
270 type: git
296 type: git
271 location: https://github.com/minio/minio-hs
297 location: https://github.com/minio/minio-hs