Commit 2ee662 initial

13 files Merged and Committed by Richard Marko 2 years ago
initial

    
1 @@ -0,0 +1,1 @@
2 + .stack-work
 1 @@ -0,0 +1,30 @@
 2 + Copyright Author name here (c) 2017
 3 + 
 4 + All rights reserved.
 5 + 
 6 + Redistribution and use in source and binary forms, with or without
 7 + modification, are permitted provided that the following conditions are met:
 8 + 
 9 +     * Redistributions of source code must retain the above copyright
10 +       notice, this list of conditions and the following disclaimer.
11 + 
12 +     * Redistributions in binary form must reproduce the above
13 +       copyright notice, this list of conditions and the following
14 +       disclaimer in the documentation and/or other materials provided
15 +       with the distribution.
16 + 
17 +     * Neither the name of Author name here nor the names of other
18 +       contributors may be used to endorse or promote products derived
19 +       from this software without specific prior written permission.
20 + 
21 + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
22 + "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
23 + LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
24 + A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
25 + OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
26 + SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
27 + LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
28 + DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
29 + THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
30 + (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
31 + OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 
32 \ No newline at end of file
  1 @@ -0,0 +1,125 @@
  2 + * set of repositories
  3 + * namespaces
  4 + * DSL
  5 + * depsolving
  6 + * overlays
  7 + 
  8 + * templates provided by dependencies or higher abstraction like nix
  9 +   - 
 10 + 
 11 + web.apache
 12 + 
 13 + DB
 14 +     MySQL
 15 +     PostgreSQL
 16 +     ODBC
 17 + 
 18 + HTTP
 19 +     Apache
 20 +       VirtualHost
 21 +     Nginx
 22 +     SNIProxy
 23 + 
 24 + STMP
 25 +     Postfix
 26 + 
 27 + IMAP
 28 +     Dovecot
 29 + 
 30 + 
 31 + 
 32 + db.pg
 33 + db.maria
 34 + db.sqlite
 35 + 
 36 + net.sshd
 37 + net.apache
 38 + net.postfix
 39 + net.dovecot
 40 + 
 41 + net.mail.postfix - alias_net.postfix or alias net.postfix to net.mail.postfix
 42 + 
 43 + cert.dummy
 44 + cert.le
 45 + 
 46 + yaml2json
 47 + 
 48 + infer:
 49 + os_distro
 50 + os_version
 51 + os_version_min
 52 + 
 53 + el: os_distro in ["centos", "rhel"]
 54 + fed: os_distro == "fedora"
 55 + deb: os_distro == "debian"
 56 + 
 57 + -- common includes
 58 + include repo
 59 + include pkg
 60 + 
 61 + -- play
 62 + 
 63 + hostname: srv01
 64 + domain: example.org
 65 + selinux: true
 66 + 
 67 + pkg:
 68 +   - vim
 69 + 
 70 + selinux?
 71 +   pkg:
 72 +   - policykit-python
 73 + 
 74 + include hosts
 75 + include resolv
 76 + include distro
 77 + include cron
 78 + include mailserver
 79 + include mailman
 80 + include pagure
 81 + 
 82 + 
 83 + -- pkg
 84 + def pkg args:
 85 +   el || fed?
 86 +     shell "yum install -y {{ args|words }}"
 87 +   deb?
 88 +     shell "apt-get install -y {{ args|words }}"
 89 + 
 90 + -- hosts
 91 + template hosts.t /etc/hosts
 92 + 
 93 + -- resolv
 94 + template resolv.t /etc/resolv
 95 + 
 96 + -- cron
 97 + allow_users: false
 98 + 
 99 + allow_users?
100 +   rm /etc/cron.deny
101 + 
102 + -- distro
103 + fedora?
104 +   svc-off dnf-makecache
105 +   svc-off dnf-makecache.timer
106 + 
107 + el?
108 +   include epel
109 + 
110 + -- epel
111 + enable: false
112 + epel_repo_url: "https://dl.fedoraproject.org/pub/epel/epel-release-latest-{{ os_version }}.noarch.rpm"
113 + epel_key_path: "/etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL-{{ os_version }}"
114 + 
115 + repo: url=epel_repo_url key_path=epel_key_path
116 + 
117 + 
118 + 
119 + !!! output should show path e.g.
120 + conf.net.resolv:
121 +   diff:
122 +     +
123 +     -
124 + 
125 + concise output if not changed
126 + conf.net.resolve: up to date
1 @@ -0,0 +1,2 @@
2 + import Distribution.Simple
3 + main = defaultMain
TODO +11
 1 @@ -0,0 +1,11 @@
 2 + fetch 
 3 + 
 4 + https://raw.githubusercontent.com/grafana/grafana/master/conf/defaults.ini
 5 + 
 6 + 
 7 + build_role grafana
 8 + 
 9 + -- fetch git
10 + -- create defaults templates/etc_grafana_grafana.yml
11 + -- tasks file?
12 + 
 1 @@ -0,0 +1,68 @@
 2 + {-# LANGUAGE OverloadedStrings #-}
 3 + import Prelude hiding (readFile, unlines, putStrLn, concat)
 4 + import Control.Applicative
 5 + import Data.Attoparsec.Text
 6 + import Data.Monoid
 7 + import Data.Text hiding (head, map)
 8 + import Data.Text.IO
 9 + import Data.Ini
10 + import Data.Ini.Preprocess
11 + import qualified Data.HashMap.Strict as M
12 + 
13 + import System.Environment
14 + 
15 + repDot = replace "." "__"
16 + 
17 + wrapJinja x = concat ["{{ ", x, " }}"]
18 + 
19 + mkStandaloneVar ns a = concat [ns, "_", repDot a]
20 + mkStandalone ns = M.mapWithKey (\k v -> wrapJinja $ mkStandaloneVar ns k)
21 + 
22 + mkTemplateVar ns a b = concat [ns, "_", repDot a, "_", repDot b]
23 + 
24 + mkTemplate ns = Ini . M.mapWithKey (
25 +   \sectionKey vals ->
26 +     M.mapWithKey (\k v -> wrapJinja $ mkTemplateVar ns sectionKey k) vals) . unIni
27 + 
28 + mkDefKeys ns block = map (\(k, v) -> (mkTemplateVar ns block k, v))
29 + mkDefKeysStandalone ns = map (\(k, v) -> (mkStandaloneVar ns k, v))
30 + 
31 + 
32 + iniSettings = WriteIniSettings
33 +   { writeIniKeySeparator = EqualsKeySeparator }
34 + 
35 + defSettings = WriteIniSettings
36 +   { writeIniKeySeparator = ColonKeySeparator }
37 + 
38 + printDefaults ns wis (Ini ini) =
39 +   concat $ "---":(map (buildSection ns wis) (M.toList ini))
40 + 
41 + buildSection ns wis (name,pairs) =
42 +           "\n#[" <> name <> "]\n" <>
43 +           concat (map (buildPair wis) (mkDefKeys ns name $ M.toList pairs))
44 + 
45 + buildPair wis (name,value) =
46 +   name <> (separator wis) <> value <> "\n"
47 + separator wis = case writeIniKeySeparator wis of
48 +   ColonKeySeparator  -> ": "
49 +   EqualsKeySeparator -> "="
50 + 
51 + -- handle global keys
52 + parseIni' = parseOnly $ (\x y -> (M.fromList x, y)) <$> many keyValueParser <*> iniParser
53 + 
54 + main :: IO ()
55 + main = do
56 +   args <- getArgs
57 +   let ns = "grafana"
58 +   f <- readFile (head args) -- "test.ini"
59 +   case unCommentVariables f of
60 +     Left err -> print "preprocessing parse error"
61 +     Right x -> do
62 +       putStrLn (unlines x)
63 +       case parseIni' (unlines x) of
64 +         Left err -> print "ini parsing error"
65 +         Right (kvs, ini) -> do
66 +           putStrLn $ concat . map (buildPair iniSettings) . M.toList $ mkStandalone ns kvs
67 +           putStrLn $ printIniWith iniSettings $ mkTemplate ns ini
68 +           putStrLn $ printDefaults ns defSettings ini
69 +           putStrLn $ concat . map (buildPair iniSettings) . (mkDefKeysStandalone ns) .  M.toList kvs
1 @@ -0,0 +1,4 @@
2 + module Main where
3 + 
4 + main :: IO ()
5 + main = return ()
  1 @@ -0,0 +1,313 @@
  2 + ##################### Grafana Configuration Example #####################
  3 + #
  4 + # Everything has defaults so you only need to uncomment things you want to
  5 + # change
  6 + 
  7 + # possible values : production, development
  8 + ; app_mode = production
  9 + 
 10 + # instance name, defaults to HOSTNAME environment variable value or hostname if HOSTNAME var is empty
 11 + ; instance_name = ${HOSTNAME}
 12 + 
 13 + #################################### Paths ####################################
 14 + [paths]
 15 + # Path to where grafana can store temp files, sessions, and the sqlite3 db (if that is used)
 16 + #
 17 + ;data = /var/lib/grafana
 18 + #
 19 + # Directory where grafana can store logs
 20 + #
 21 + ;logs = /var/log/grafana
 22 + #
 23 + # Directory where grafana will automatically scan and look for plugins
 24 + #
 25 + ;plugins = /var/lib/grafana/plugins
 26 + 
 27 + #
 28 + #################################### Server ####################################
 29 + [server]
 30 + # Protocol (http or https)
 31 + ;protocol = http
 32 + 
 33 + # The ip address to bind to, empty will bind to all interfaces
 34 + ;http_addr =
 35 + 
 36 + # The http port  to use
 37 + http_port = 80
 38 + 
 39 + # The public facing domain name used to access grafana from a browser
 40 + ;domain = localhost
 41 + 
 42 + # Redirect to correct domain if host header does not match domain
 43 + # Prevents DNS rebinding attacks
 44 + ;enforce_domain = false
 45 + 
 46 + # The full public facing url
 47 + ;root_url = %(protocol)s://%(domain)s:%(http_port)s/
 48 + 
 49 + # Log web requests
 50 + ;router_logging = false
 51 + 
 52 + # the path relative working path
 53 + ;static_root_path = public
 54 + 
 55 + # enable gzip
 56 + ;enable_gzip = false
 57 + 
 58 + # https certs & key file
 59 + ;cert_file =
 60 + ;cert_key =
 61 + 
 62 + #################################### Database ####################################
 63 + [database]
 64 + # Either "mysql", "postgres" or "sqlite3", it's your choice
 65 + ;type = sqlite3
 66 + ;host = 127.0.0.1:3306
 67 + ;name = grafana
 68 + ;user = root
 69 + ;password =
 70 + 
 71 + # For "postgres" only, either "disable", "require" or "verify-full"
 72 + ;ssl_mode = disable
 73 + 
 74 + # For "sqlite3" only, path relative to data_path setting
 75 + ;path = grafana.db
 76 + 
 77 + #################################### Session ####################################
 78 + [session]
 79 + # Either "memory", "file", "redis", "mysql", "postgres", default is "file"
 80 + ;provider = file
 81 + 
 82 + # Provider config options
 83 + # memory: not have any config yet
 84 + # file: session dir path, is relative to grafana data_path
 85 + # redis: config like redis server e.g. `addr=127.0.0.1:6379,pool_size=100,db=grafana`
 86 + # mysql: go-sql-driver/mysql dsn config string, e.g. `user:password@tcp(127.0.0.1:3306)/database_name`
 87 + # postgres: user=a password=b host=localhost port=5432 dbname=c sslmode=disable
 88 + ;provider_config = sessions
 89 + 
 90 + # Session cookie name
 91 + ;cookie_name = grafana_sess
 92 + 
 93 + # If you use session in https only, default is false
 94 + ;cookie_secure = false
 95 + 
 96 + # Session life time, default is 86400
 97 + ;session_life_time = 86400
 98 + 
 99 + #################################### Analytics ####################################
100 + [analytics]
101 + # Server reporting, sends usage counters to stats.grafana.org every 24 hours.
102 + # No ip addresses are being tracked, only simple counters to track
103 + # running instances, dashboard and error counts. It is very helpful to us.
104 + # Change this option to false to disable reporting.
105 + ;reporting_enabled = true
106 + 
107 + # Set to false to disable all checks to https://grafana.net
108 + # for new vesions (grafana itself and plugins), check is used
109 + # in some UI views to notify that grafana or plugin update exists
110 + # This option does not cause any auto updates, nor send any information
111 + # only a GET request to http://grafana.net to get latest versions
112 + check_for_updates = true
113 + 
114 + # Google Analytics universal tracking code, only enabled if you specify an id here
115 + ;google_analytics_ua_id =
116 + 
117 + #################################### Security ####################################
118 + [security]
119 + # default admin user, created on startup
120 + ;admin_user = admin
121 + 
122 + # default admin password, can be changed before first start of grafana,  or in profile settings
123 + ;admin_password = admin
124 + 
125 + # used for signing
126 + ;secret_key = SW2YcwTIb9zpOOhoPsMm
127 + 
128 + # Auto-login remember days
129 + ;login_remember_days = 7
130 + ;cookie_username = grafana_user
131 + ;cookie_remember_name = grafana_remember
132 + 
133 + # disable gravatar profile images
134 + ;disable_gravatar = false
135 + 
136 + # data source proxy whitelist (ip_or_domain:port separated by spaces)
137 + ;data_source_proxy_whitelist =
138 + 
139 + [snapshots]
140 + # snapshot sharing options
141 + ;external_enabled = true
142 + ;external_snapshot_url = https://snapshots-origin.raintank.io
143 + ;external_snapshot_name = Publish to snapshot.raintank.io
144 + 
145 + #################################### Users ####################################
146 + [users]
147 + # disable user signup / registration
148 + ;allow_sign_up = true
149 + 
150 + # Allow non admin users to create organizations
151 + ;allow_org_create = true
152 + 
153 + # Set to true to automatically assign new users to the default organization (id 1)
154 + ;auto_assign_org = true
155 + 
156 + # Default role new users will be automatically assigned (if disabled above is set to true)
157 + ;auto_assign_org_role = Viewer
158 + 
159 + # Background text for the user field on the login page
160 + ;login_hint = email or username
161 + 
162 + # Default UI theme ("dark" or "light")
163 + ;default_theme = dark
164 + 
165 + #################################### Anonymous Auth ##########################
166 + [auth.anonymous]
167 + # enable anonymous access
168 + ;enabled = false
169 + 
170 + # specify organization name that should be used for unauthenticated users
171 + ;org_name = Main Org.
172 + 
173 + # specify role for unauthenticated users
174 + ;org_role = Viewer
175 + 
176 + #################################### Github Auth ##########################
177 + [auth.github]
178 + ;enabled = false
179 + ;allow_sign_up = false
180 + ;client_id = some_id
181 + ;client_secret = some_secret
182 + ;scopes = user:email,read:org
183 + ;auth_url = https://github.com/login/oauth/authorize
184 + ;token_url = https://github.com/login/oauth/access_token
185 + ;api_url = https://api.github.com/user
186 + ;team_ids =
187 + ;allowed_organizations =
188 + 
189 + #################################### Google Auth ##########################
190 + [auth.google]
191 + ;enabled = false
192 + ;allow_sign_up = false
193 + ;client_id = some_client_id
194 + ;client_secret = some_client_secret
195 + ;scopes = https://www.googleapis.com/auth/userinfo.profile https://www.googleapis.com/auth/userinfo.email
196 + ;auth_url = https://accounts.google.com/o/oauth2/auth
197 + ;token_url = https://accounts.google.com/o/oauth2/token
198 + ;api_url = https://www.googleapis.com/oauth2/v1/userinfo
199 + ;allowed_domains =
200 + 
201 + #################################### Auth Proxy ##########################
202 + [auth.proxy]
203 + ;enabled = false
204 + ;header_name = X-WEBAUTH-USER
205 + ;header_property = username
206 + ;auto_sign_up = true
207 + 
208 + #################################### Basic Auth ##########################
209 + [auth.basic]
210 + ;enabled = true
211 + 
212 + #################################### Auth LDAP ##########################
213 + [auth.ldap]
214 + ;enabled = false
215 + ;config_file = /etc/grafana/ldap.toml
216 + 
217 + #################################### SMTP / Emailing ##########################
218 + [smtp]
219 + ;enabled = false
220 + ;host = localhost:25
221 + ;user =
222 + ;password =
223 + ;cert_file =
224 + ;key_file =
225 + ;skip_verify = false
226 + ;from_address = admin@grafana.localhost
227 + 
228 + [emails]
229 + ;welcome_email_on_sign_up = false
230 + 
231 + #################################### Logging ##########################
232 + [log]
233 + # Either "console", "file", "syslog". Default is console and  file
234 + # Use space to separate multiple modes, e.g. "console file"
235 + ;mode = console, file
236 + 
237 + # Either "trace", "debug", "info", "warn", "error", "critical", default is "info"
238 + ;level = info
239 + 
240 + # For "console" mode only
241 + [log.console]
242 + ;level =
243 + 
244 + # log line format, valid options are text, console and json
245 + ;format = console
246 + 
247 + # For "file" mode only
248 + [log.file]
249 + ;level =
250 + 
251 + # log line format, valid options are text, console and json
252 + ;format = text
253 + 
254 + # This enables automated log rotate(switch of following options), default is true
255 + ;log_rotate = true
256 + 
257 + # Max line number of single file, default is 1000000
258 + ;max_lines = 1000000
259 + 
260 + # Max size shift of single file, default is 28 means 1 << 28, 256MB
261 + ;max_size_shift = 28
262 + 
263 + # Segment log daily, default is true
264 + ;daily_rotate = true
265 + 
266 + # Expired days of log file(delete after max days), default is 7
267 + ;max_days = 7
268 + 
269 + [log.syslog]
270 + ;level =
271 + 
272 + # log line format, valid options are text, console and json
273 + ;format = text
274 + 
275 + # Syslog network type and address. This can be udp, tcp, or unix. If left blank, the default unix endpoints will be used.
276 + ;network =
277 + ;address =
278 + 
279 + # Syslog facility. user, daemon and local0 through local7 are valid.
280 + ;facility =
281 + 
282 + # Syslog tag. By default, the process' argv[0] is used.
283 + ;tag =
284 + 
285 + 
286 + #################################### AMQP Event Publisher ##########################
287 + [event_publisher]
288 + ;enabled = false
289 + ;rabbitmq_url = amqp://localhost/
290 + ;exchange = grafana_events
291 + 
292 + ;#################################### Dashboard JSON files ##########################
293 + [dashboards.json]
294 + ;enabled = false
295 + ;path = /var/lib/grafana/dashboards
296 + 
297 + #################################### Internal Grafana Metrics ##########################
298 + # Metrics available at HTTP API Url /api/metrics
299 + [metrics]
300 + # Disable / Enable internal metrics
301 + ;enabled           = true
302 + 
303 + # Publish interval
304 + ;interval_seconds  = 10
305 + 
306 + # Send internal metrics to Graphite
307 + ; [metrics.graphite]
308 + ; address = localhost:2003
309 + ; prefix = prod.grafana.%(instance_name)s.
310 + 
311 + #################################### Internal Grafana Metrics ##########################
312 + # Url used to to import dashboards directly from Grafana.net
313 + [grafana_net]
314 + url = https://grafana.net
 1 @@ -0,0 +1,59 @@
 2 + name:                config-assembly
 3 + version:             0.1.0.0
 4 + synopsis:            Initial project template from stack
 5 + description:         Please see README.md
 6 + homepage:            https://github.com/githubuser/config-assembly#readme
 7 + license:             BSD3
 8 + license-file:        LICENSE
 9 + author:              Author name here
10 + maintainer:          example@example.com
11 + copyright:           2017 Author name here
12 + category:            Web
13 + build-type:          Simple
14 + extra-source-files:  README.md
15 + cabal-version:       >=1.10
16 + 
17 + library
18 +   hs-source-dirs:      src
19 +   exposed-modules:     Data.Ini.Preprocess
20 +   build-depends:       base >= 4.7 && < 5
21 +                      , attoparsec
22 +                      , text
23 +                      , ini
24 +                      , yaml
25 +   default-language:    Haskell2010
26 + 
27 + --executable config-assembly-exe
28 + --  hs-source-dirs:      app
29 + --  main-is:             Main.hs
30 + --  ghc-options:         -threaded -rtsopts -with-rtsopts=-N
31 + --  build-depends:       base
32 + --                     , config-assembly
33 + --                     , yaml
34 + --  default-language:    Haskell2010
35 + 
36 + executable cfgenfromini
37 +   hs-source-dirs:      app
38 +   main-is:             Fromini.hs
39 +   ghc-options:         -threaded -rtsopts -with-rtsopts=-N
40 +   build-depends:       base
41 +                      , config-assembly
42 +                      , yaml
43 +                      , ini
44 +                      , text
45 +                      , attoparsec
46 +                      , unordered-containers
47 +   default-language:    Haskell2010
48 + 
49 + test-suite config-assembly-test
50 +   type:                exitcode-stdio-1.0
51 +   hs-source-dirs:      test
52 +   main-is:             Spec.hs
53 +   build-depends:       base
54 +                      , config-assembly
55 +   ghc-options:         -threaded -rtsopts -with-rtsopts=-N
56 +   default-language:    Haskell2010
57 + 
58 + source-repository head
59 +   type:     git
60 +   location: https://github.com/githubuser/config-assembly
 1 @@ -0,0 +1,22 @@
 2 + module Data.Ini.Preprocess where
 3 + 
 4 + import Control.Applicative
 5 + import Data.Attoparsec.Text -- hiding (space, take)
 6 + import Data.Attoparsec.Combinator
 7 + 
 8 + -- strip comments preceding variables
 9 + --
10 + -- systemd uses '#SomeVar=Val', comments are '# comment'
11 + -- grafana ;var=val
12 + 
13 + 
14 + unCommentVariables xs = parseOnly (many1 (procLine <* endOfLine)) xs
15 + 
16 + procLine =
17 +   (    grafana
18 +    <|> systemd
19 +    <|> (lookAhead anyChar)) *> takeTill isEndOfLine
20 + 
21 + grafana = char ';' *> lookAhead (satisfy $ inClass " a-z")
22 + systemd = char '#' *> lookAhead (satisfy $ inClass "A-Z")
23 + 
1 @@ -0,0 +1,6 @@
2 + module Lib
3 +     ( someFunc
4 +     ) where
5 + 
6 + someFunc :: IO ()
7 + someFunc = putStrLn "someFunc"
 1 @@ -0,0 +1,66 @@
 2 + # This file was automatically generated by 'stack init'
 3 + # 
 4 + # Some commonly used options have been documented as comments in this file.
 5 + # For advanced use and comprehensive documentation of the format, please see:
 6 + # http://docs.haskellstack.org/en/stable/yaml_configuration/
 7 + 
 8 + # Resolver to choose a 'specific' stackage snapshot or a compiler version.
 9 + # A snapshot resolver dictates the compiler version and the set of packages
10 + # to be used for project dependencies. For example:
11 + # 
12 + # resolver: lts-3.5
13 + # resolver: nightly-2015-09-21
14 + # resolver: ghc-7.10.2
15 + # resolver: ghcjs-0.1.0_ghc-7.10.2
16 + # resolver:
17 + #  name: custom-snapshot
18 + #  location: "./custom-snapshot.yaml"
19 + resolver: lts-7.14
20 + 
21 + # User packages to be built.
22 + # Various formats can be used as shown in the example below.
23 + # 
24 + # packages:
25 + # - some-directory
26 + # - https://example.com/foo/bar/baz-0.0.2.tar.gz
27 + # - location:
28 + #    git: https://github.com/commercialhaskell/stack.git
29 + #    commit: e7b331f14bcffb8367cd58fbfc8b40ec7642100a
30 + # - location: https://github.com/commercialhaskell/stack/commit/e7b331f14bcffb8367cd58fbfc8b40ec7642100a
31 + #   extra-dep: true
32 + #  subdirs:
33 + #  - auto-update
34 + #  - wai
35 + # 
36 + # A package marked 'extra-dep: true' will only be built if demanded by a
37 + # non-dependency (i.e. a user package), and its test suites and benchmarks
38 + # will not be run. This is useful for tweaking upstream packages.
39 + packages:
40 + - '.'
41 + # Dependency packages to be pulled from upstream that are not in the resolver
42 + # (e.g., acme-missiles-0.3)
43 + extra-deps: []
44 + 
45 + # Override default flag values for local packages and extra-deps
46 + flags: {}
47 + 
48 + # Extra package databases containing global packages
49 + extra-package-dbs: []
50 + 
51 + # Control whether we use the GHC we find on the path
52 + # system-ghc: true
53 + # 
54 + # Require a specific version of stack, using version ranges
55 + # require-stack-version: -any # Default
56 + # require-stack-version: ">=1.1"
57 + # 
58 + # Override the architecture used by stack, especially useful on Windows
59 + # arch: i386
60 + # arch: x86_64
61 + # 
62 + # Extra directories used by stack for building
63 + # extra-include-dirs: [/path/to/dir]
64 + # extra-lib-dirs: [/path/to/dir]
65 + # 
66 + # Allow a newer minor version of GHC than the snapshot specifies
67 + # compiler-check: newer-minor 
68 \ No newline at end of file
1 @@ -0,0 +1,2 @@
2 + main :: IO ()
3 + main = putStrLn "Test suite not yet implemented"