diff options
author | Eduardo Julian | 2022-03-14 22:54:32 -0400 |
---|---|---|
committer | Eduardo Julian | 2022-03-14 22:54:32 -0400 |
commit | 4ef1ac1dfe0edd1a11bb7f1fd13c8b6cb8f1bab4 (patch) | |
tree | 715a0d1c18460eda24e49aea837f59d120169318 | |
parent | 41495e32d3f5f88b5f189f48dd4fdbfa883c6ac0 (diff) |
Using a fake console in Aedifex if the system console is unavailable.
-rw-r--r-- | .github/workflows/test.yml | 46 | ||||
-rw-r--r-- | stdlib/source/program/aedifex.lux | 202 |
2 files changed, 134 insertions, 114 deletions
diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index 51b51ece0..9f7c37116 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -6,7 +6,7 @@ jobs: steps: - uses: actions/checkout@v2 # Setup Aedifex - - run: wget https://github.com/LuxLang/lux/releases/download/0.6.5/aedifex.jar + - run: wget https://github.com/LuxLang/lux/releases/download/0.6.5/aedifex_do_not_touch_0.jar && mv aedifex_do_not_touch_0.jar aedifex.jar - run: mv ./shell/lux.sh ./lux.sh # Test on the JVM # https://github.com/actions/setup-java @@ -15,26 +15,26 @@ jobs: distribution: 'temurin' java-version: '17' - run: cd ./stdlib/ && ../lux.sh clean && ../lux.sh with jvm with bibliotheca test && cd .. - # Test on Node - - uses: actions/setup-node@v2 - with: - node-version: '14' - - run: cd ./stdlib/ && ../lux.sh clean && ../lux.sh with js with bibliotheca test && cd .. - # Test on Lua - # https://github.com/marketplace/actions/setup-lua-luajit - - uses: xpol/setup-lua@v1 - - run: cd ./stdlib/ && ../lux.sh clean && ../lux.sh with lua with bibliotheca test && cd .. - # Test on Python - # https://github.com/actions/setup-python - - uses: actions/setup-python@v2 - with: - python-version: '3.9' - architecture: 'x64' - - run: cd ./stdlib/ && ../lux.sh clean && ../lux.sh with python with bibliotheca test && cd .. - # Test on Ruby - # https://github.com/actions/setup-ruby - - uses: actions/setup-ruby@v1 - with: - ruby-version: '2.6' - - run: cd ./stdlib/ && ../lux.sh clean && ../lux.sh with ruby with bibliotheca test && cd .. +# # Test on Node +# - uses: actions/setup-node@v2 +# with: +# node-version: '14' +# - run: cd ./stdlib/ && ../lux.sh clean && ../lux.sh with js with bibliotheca test && cd .. +# # Test on Lua +# # https://github.com/marketplace/actions/setup-lua-luajit +# - uses: xpol/setup-lua@v0.3 +# - run: cd ./stdlib/ && ../lux.sh clean && ../lux.sh with lua with bibliotheca test && cd .. +# # Test on Python +# # https://github.com/actions/setup-python +# - uses: actions/setup-python@v2 +# with: +# python-version: '3.9' +# architecture: 'x64' +# - run: cd ./stdlib/ && ../lux.sh clean && ../lux.sh with python with bibliotheca test && cd .. +# # Test on Ruby +# # https://github.com/actions/setup-ruby +# - uses: actions/setup-ruby@v1 +# with: +# ruby-version: '2.6' +# - run: cd ./stdlib/ && ../lux.sh clean && ../lux.sh with ruby with bibliotheca test && cd .. diff --git a/stdlib/source/program/aedifex.lux b/stdlib/source/program/aedifex.lux index 4145bb9c5..a92340ce3 100644 --- a/stdlib/source/program/aedifex.lux +++ b/stdlib/source/program/aedifex.lux @@ -7,6 +7,7 @@ [monad {"+" do}]] [control ["[0]" io {"+" IO}] + ["[0]" maybe] ["[0]" try {"+" Try} ("[1]#[0]" functor)] ["[0]" exception {"+" exception:}] [parser @@ -111,100 +112,119 @@ (def: (command action) (All (_ a) (-> (Async (Try a)) (IO Any))) - (exec (do async.monad - [outcome action] - (async.future - (case outcome - {try.#Success _} - ..succeed! - - {try.#Failure error} - (..fail! error)))) + (exec + (do async.monad + [outcome action] + (async.future + (case outcome + {try.#Success _} + ..succeed! + + {try.#Failure error} + (..fail! error)))) (# io.monad in []))) +(exception: .public invalid_operation) + +(`` (implementation: write_only + (Console IO) + + (~~ (template [<name>] + [(def: (<name> _) + (io.io (exception.except ..invalid_operation [])))] + + [read] + [read_line] + [close] + )) + + (def: (write it) + (<| io.io + {try.#Success} + debug.log! + (if (text.ends_with? text.\n it) + (maybe.trusted (text.clip 0 (-- (text.size it)) it)) + it))))) + (program: [[profiles operation] /cli.command] (do [! io.monad] - [?console console.default] - (case (try#each console.async ?console) - {try.#Failure error} - (..fail! error) - - {try.#Success console} - (case operation - {/cli.#Version} - (..command - (/command/version.do! console (# /.monoid identity))) - - _ - (do ! - [?profile (/input.read io.monad file.default profiles)] - (case ?profile - {try.#Failure error} - (..fail! error) - - {try.#Success profile} - (let [program (program.async program.default)] - (case operation - {/cli.#Version} - (in []) - - {/cli.#Clean} - (..command - (/command/clean.do! console (file.async file.default) profile)) - - {/cli.#POM} - (..command - (/command/pom.do! console (file.async file.default) profile)) - - {/cli.#Install} - (..command - (let [fs (file.async file.default)] - (/command/install.do! console fs (/repository/local.repository program fs) profile))) - - {/cli.#Deploy repository identity} - (..command - (case (the /.#identity profile) - {.#Some artifact} - (case (dictionary.value repository (the /.#deploy_repositories profile)) - {.#Some repository} - (/command/deploy.do! console - (/repository.async (/repository/remote.repository http.default {.#Some identity} repository)) - (file.async file.default) - artifact - profile) - - {.#None} - (async#in (exception.except ..cannot_find_repository [repository (the /.#deploy_repositories profile)]))) + [console (# ! each (|>> (try.else ..write_only) console.async) + console.default)] + (case operation + {/cli.#Version} + (..command + (/command/version.do! console (# /.monoid identity))) + + _ + (do ! + [?profile (/input.read io.monad file.default profiles)] + (case ?profile + {try.#Failure error} + (..fail! error) + + {try.#Success profile} + (let [program (program.async program.default)] + (case operation + {/cli.#Version} + (in []) + + {/cli.#Clean} + (..command + (/command/clean.do! console (file.async file.default) profile)) + + {/cli.#POM} + (..command + (/command/pom.do! console (file.async file.default) profile)) + + {/cli.#Install} + (..command + (let [fs (file.async file.default)] + (/command/install.do! console fs (/repository/local.repository program fs) profile))) + + {/cli.#Deploy repository identity} + (..command + (case (the /.#identity profile) + {.#Some artifact} + (case (dictionary.value repository (the /.#deploy_repositories profile)) + {.#Some repository} + (/command/deploy.do! console + (/repository.async (/repository/remote.repository http.default {.#Some identity} repository)) + (file.async file.default) + artifact + profile) {.#None} - (async#in (exception.except /.no_identity [])))) - - {/cli.#Dependencies} - (..command - (/command/deps.do! console - (/repository/local.repository program (file.async file.default)) - (..repositories profile) - (|>> (/repository/remote.repository http.default {.#None}) - /repository.async) - profile)) - - {/cli.#Compilation compilation} - (case compilation - {/cli.#Build} (..command - (..with_dependencies program console /command/build.do! profile)) - {/cli.#Test} (..command - (..with_dependencies program console /command/test.do! profile))) - - {/cli.#Auto auto} - (do ! - [?watcher watch.default] - (case ?watcher - {try.#Failure error} - (..fail! error) - - {try.#Success watcher} - (..command - (case auto - {/cli.#Build} (..with_dependencies program console (/command/auto.do! /command/auto.delay watcher /command/build.do!) profile) - {/cli.#Test} (..with_dependencies program console (/command/auto.do! /command/auto.delay watcher /command/test.do!) profile))))))) - )))))) + (async#in (exception.except ..cannot_find_repository [repository (the /.#deploy_repositories profile)]))) + + {.#None} + (async#in (exception.except /.no_identity [])))) + + {/cli.#Dependencies} + (..command + (/command/deps.do! console + (/repository/local.repository program (file.async file.default)) + (..repositories profile) + (|>> (/repository/remote.repository http.default {.#None}) + /repository.async) + profile)) + + {/cli.#Compilation compilation} + (case compilation + {/cli.#Build} (..command + (..with_dependencies program console /command/build.do! profile)) + {/cli.#Test} (..command + (..with_dependencies program console /command/test.do! profile))) + + {/cli.#Auto auto} + (do ! + [?watcher watch.default] + (case ?watcher + {try.#Failure error} + (..fail! error) + + {try.#Success watcher} + (..command + (case auto + {/cli.#Build} (..with_dependencies program console (/command/auto.do! /command/auto.delay watcher /command/build.do!) profile) + {/cli.#Test} (..with_dependencies program console (/command/auto.do! /command/auto.delay watcher /command/test.do!) profile))))))) + ))))) |