diff --git a/.github/GitHub-Actions.org b/.github/GitHub-Actions.org new file mode 100644 index 0000000..1c882b8 --- /dev/null +++ b/.github/GitHub-Actions.org @@ -0,0 +1,41 @@ +* Deploying using Github Actions + +** Actions definition: workflow/sonatype-deploy.yml + +When a GitHub Release is created, usually from a tag, this action will trigger. + +Using JDK8 the software will be packaged, including running any tests. + +Then the Deploy script will sign the created artifacts then deploy them according to the distributionManagement configuration in the `pom.xml`. + +** Deploy Script + +Uses a signing key provided from the GitHub Actions Secrets as an environment variable to sign the artifact(s) before they are then deployed. + +*** Inputs + +**** DEPLOY_PROJECTS (optional) + +An optional list of modules in a multi-module project to be deployed. If this value is not specified, then all projects will be deployed. + +** Maven Configuration + +Picks up the credentials from Environment variables for authenticating both with GPG and with the target deployment server (e.g. sonatype-nexus). + +*** Inputs + +**** NEXUS_USERNAME + +The username for your account on the deployment server. + +**** NEXUS_PASSWORD + +The password for your account on the deployement server. + +**** GPG_KEYNAME + +The key to use when signing. + +**** GPG_PASSPHRASE + +The passphrase to unlock the key to use when signing. diff --git a/.github/NOTES b/.github/NOTES new file mode 100644 index 0000000..64253c9 --- /dev/null +++ b/.github/NOTES @@ -0,0 +1,53 @@ +Add subkeys: + +???? + +Publish: + +gpg --send-keys --keyserver keyserver.ubuntu.com $KEYID +gpg --send-keys --keyserver pgp.mit.edu $KEYID +gpg --send-keys --keyserver pool.sks-keyservers.net $KEYID + +Backup: + +gpg --export --armor pcampbell@kemitix.net > gpg-key-backup.asc +gpg --export-secret-keys --armor pcampbell@kemitix.net >> gpg-key-backup.asc + +Export sub-keys: + +gpg --export-secret-subkeys pcampbell@kemitix.net > subkeys + +Remove master keys: + +gpg --delete-secret-key pcampbell@kemitix.net + +Import sub-keys and clean up: + +gpg --import subkeys + +shred --remove subkeys + +Delete any encryption subkeys: + +gpg --edit-key pcampbell@kemitix.net + +2 +delkey +save + +Change passphrase: + +gpg --edit-key pcampbell@kemitix.net +passwd +save + +Export keys: + +gpg --export --armor pcampbell@kemitix.net > codesigning.asc +gpg --export-secret-keys --armor pcampbell@kemitix.net >> codesigning.asc + +Encrypt keys: + +gpg --symmetric --cipher-algo AES256 codesigning.asc + +shred codesigning.asc diff --git a/.github/codesigning.asc.gpg b/.github/codesigning.asc.gpg new file mode 100644 index 0000000..f5c71e0 Binary files /dev/null and b/.github/codesigning.asc.gpg differ diff --git a/.github/settings.xml b/.github/settings.xml new file mode 100644 index 0000000..8791e47 --- /dev/null +++ b/.github/settings.xml @@ -0,0 +1,28 @@ + + + + + sonatype-nexus-snapshots + ${env.NEXUS_USERNAME} + ${env.NEXUS_PASSWORD} + + + sonatype-nexus-staging + ${env.NEXUS_USERNAME} + ${env.NEXUS_PASSWORD} + + + + + gpg-sign + + true + + + gpg + ${env.GPG_KEYNAME} + ${env.GPG_PASSPHRASE} + + + + diff --git a/.github/workflows/maven-build.yml b/.github/workflows/maven-build.yml new file mode 100644 index 0000000..0c2b94e --- /dev/null +++ b/.github/workflows/maven-build.yml @@ -0,0 +1,26 @@ +# This workflow will build a Java project with Maven +# For more information see: https://help.github.com/actions/language-and-framework-guides/building-and-testing-java-with-maven + +name: maven + +on: + push: + branches: '*' + pull_request: + branches: '*' + +jobs: + build: + runs-on: ubuntu-latest + strategy: + matrix: + java: [ 8 ] + steps: + - uses: kamiazya/setup-graphviz@v1 + - uses: actions/checkout@v2 + - name: setup-jdk-${{ matrix.java }} + uses: actions/setup-java@v1 + with: + java-version: ${{ matrix.java }} + - name: build-jar + run: mvn -B install diff --git a/.github/workflows/scala.yml b/.github/workflows/scala.yml deleted file mode 100644 index f82c12d..0000000 --- a/.github/workflows/scala.yml +++ /dev/null @@ -1,21 +0,0 @@ -name: Scala CI - -on: - push: - branches: '*' - pull_request: - branches: '*' - -jobs: - build: - - runs-on: ubuntu-latest - - steps: - - uses: actions/checkout@v1 - - name: Set up JDK 1.8 - uses: actions/setup-java@v1 - with: - java-version: 1.8 - - name: Build with Scala Build Tool - run: sbt test diff --git a/.github/workflows/sonatype-deploy.yml b/.github/workflows/sonatype-deploy.yml new file mode 100644 index 0000000..63b14fe --- /dev/null +++ b/.github/workflows/sonatype-deploy.yml @@ -0,0 +1,38 @@ +name: Deploy to Sonatype Nexus + +on: + release: + types: [created] + +jobs: + deploy: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v2 + - name: Set up JDK 1.8 + uses: actions/setup-java@v1 + with: + java-version: 1.8 + - name: Build with Maven + run: mvn -B install + - name: Nexus Repo Publish + run: | + gpg --quiet \ + --batch \ + --yes \ + --decrypt \ + --passphrase="${{ secrets.GPG_PASSPHRASE }}" \ + --output codesigning.asc \ + .github/codesigning.asc.gpg + gpg --batch \ + --fast-import codesigning.asc + mvn --settings .github/settings.xml \ + -Dskip-Tests=true \ + -P release \ + -B \ + deploy + env: + NEXUS_USERNAME: ${{ secrets.NEXUS_USERNAME }} + NEXUS_PASSWORD: ${{ secrets.NEXUS_PASSWORD }} + GPG_KEYNAME: ${{ secrets.GPG_KEYNAME }} + GPG_PASSPHRASE: ${{ secrets.GPG_PASSPHRASE }} diff --git a/README.org b/README.md similarity index 63% rename from README.org rename to README.md index eca299f..24d54b9 100644 --- a/README.org +++ b/README.md @@ -1,20 +1,18 @@ -* thorp +# thorp Synchronisation of files with S3 using the hash of the file contents. -[[https://www.codacy.com/app/kemitix/thorp][file:https://img.shields.io/codacy/grade/c1719d44f1f045a8b71e1665a6d3ce6c.svg?style=for-the-badge]] -[[https://search.maven.org/search?q=net.kemitix.thorp][file:https://img.shields.io/maven-central/v/net.kemitix.thorp/thorp_2.12.svg?style=for-the-badge]] +[![Maven Central](https://img.shields.io/maven-central/v/net.kemitix.thorp/thorp_2.12.svg?style=for-the-badge)](https://search.maven.org/search?q=net.kemitix.thorp) -Originally based on Alex Kudlick's [[https://github.com/akud/aws-s3-sync-by-hash][aws-s3-sync-by-hash]]. +Originally based on Alex Kudlick's [aws-s3-sync-by-hash](https://github.com/akud/aws-s3-sync-by-hash). -The normal ~aws s3 sync ...~ command only uses the time stamp of files +The normal `aws s3 sync ...` command only uses the time stamp of files to decide what files need to be copied. This utility looks at the md5 hash of the file contents. -* Usage +# Usage - #+begin_example - thorp + $ thorp Usage: thorp [options] -V, --version Display the version and quit @@ -28,65 +26,66 @@ hash of the file contents. -d, --debug Enable debug logging --no-global Ignore global configuration --no-user Ignore user configuration - #+end_example -If you don't provide a ~source~ the current diretory will be used. +If you don't provide a `source` the current directory will be used. -The ~--include~ and ~--exclude~ parameters can be used more than once. +The `--include` and `--exclude` parameters can be used more than once. -The ~--source~ parameter can be used more than once, in which case, +The `--source` parameter can be used more than once, in which case, all files in all sources will be consolidated into the same bucket/prefix. -** Batch mode +## Batch mode Batch mode disable the ANSI console display and logs simple messages that can be written to a file. -* Configuration +# Configuration Configuration will be read from these files: - - Global: ~/etc/thorp.conf~ - - User: ~ ~/.config/thorp.conf~ - - Source: ~${source}/.thorp.conf~ + - Global: `/etc/thorp.conf` + - User: `~/.config/thorp.conf` + - Source: `${source}/.thorp.conf` Command line arguments override those in Source, which override those in User, which override those Global, which override any built-in config. - When there is more than one source, only the first ".thorp.conf" + When there is more than one source, only the first `.thorp.conf` file found will be used. Built-in config consists of using the current working directory as - the ~source~. + the `source`. Note, that ~include~ and ~exclude~ are cumulative across all configuration files. -* Caching +# Caching The last modified time for files is used to decide whether to calculate the hash values for the file. If a file has not been updated, then the hash values stored in the `.thorp.cache` file located in the root of the source is used. Otherwise the file will be read to caculate the the new hashes. -* Behaviour +# Behaviour When considering a local file, the following table governs what should happen: -|---+------------+------------+------------------+--------------------+---------------------| | # | local file | remote key | hash of same key | hash of other keys | action | -|---+------------+------------+------------------+--------------------+---------------------| +|---|------------|------------|------------------|--------------------|---------------------| | 1 | exists | exists | matches | - | do nothing | | 2 | exists | is missing | - | matches | copy from other key | | 3 | exists | is missing | - | no matches | upload | | 4 | exists | exists | no match | matches | copy from other key | | 5 | exists | exists | no match | no matches | upload | | 6 | is missing | exists | - | - | delete | -|---+------------+------------+------------------+--------------------+---------------------| -* Executable JAR +# Executable JAR -To build as an executable jar, perform `sbt assembly` +To build as an executable jar, perform `mvn package` -This will create the file `cli/target/scala-2.13/thorp` +This will create the file `app/target/thorp-${version}-jar-with-dependencies.jar` -Copy this file to your `PATH`. +Copy and rename this file into your `PATH`. + +# Structure/Dependencies + +![Dependency Graph](docs/images/reactor-graph.png) diff --git a/app/pom.xml b/app/pom.xml new file mode 100644 index 0000000..c29cae9 --- /dev/null +++ b/app/pom.xml @@ -0,0 +1,100 @@ + + 4.0.0 + + + net.kemitix.thorp + thorp-parent + DEV-SNAPSHOT + ../parent/pom.xml + + + thorp + thorp + + + + + net.kemitix.thorp + thorp-cli + + + net.kemitix.thorp + thorp-config + + + net.kemitix.thorp + thorp-domain + + + net.kemitix.thorp + thorp-filesystem + + + net.kemitix.thorp + thorp-lib + + + net.kemitix.thorp + thorp-storage + + + net.kemitix.thorp + thorp-storage-aws + + + net.kemitix.thorp + thorp-uishell + + + + + com.github.scopt + scopt_2.13 + + + + + org.scala-lang + scala-library + + + + + net.kemitix + eip-zio_2.13 + + + + + + + net.alchim31.maven + scala-maven-plugin + + + org.apache.maven.plugins + maven-assembly-plugin + 3.3.0 + + + jar-with-dependencies + + + + net.kemitix.thorp.Main + + + + + + package + + single + + + + + + + + \ No newline at end of file diff --git a/app/src/main/scala/net/kemitix/thorp/Program.scala b/app/src/main/scala/net/kemitix/thorp/Program.scala index 271943d..2ceb731 100644 --- a/app/src/main/scala/net/kemitix/thorp/Program.scala +++ b/app/src/main/scala/net/kemitix/thorp/Program.scala @@ -22,7 +22,8 @@ import scala.io.AnsiColor.{WHITE, RESET} trait Program { - lazy val version = s"${WHITE}Thorp v${thorp.BuildInfo.version}$RESET" + val version = "0.11.0" + lazy val versionLabel = s"${WHITE}Thorp v${version}$RESET" def run(args: List[String]): ZIO[ Storage with Console with Config with Clock with FileSystem with Hasher with FileScanner, @@ -32,7 +33,7 @@ trait Program { cli <- CliArgs.parse(args) config <- ConfigurationBuilder.buildConfig(cli) _ <- Config.set(config) - _ <- Console.putStrLn(version) + _ <- Console.putStrLn(versionLabel) _ <- ZIO.when(!showVersion(cli))(executeWithUI.catchAll(handleErrors)) } yield () } diff --git a/cli/pom.xml b/cli/pom.xml new file mode 100644 index 0000000..6b6550a --- /dev/null +++ b/cli/pom.xml @@ -0,0 +1,53 @@ + + 4.0.0 + + + net.kemitix.thorp + thorp-parent + DEV-SNAPSHOT + ../parent/pom.xml + + + thorp-cli + cli + + + + + net.kemitix.thorp + thorp-config + + + net.kemitix.thorp + thorp-filesystem + + + + + org.scala-lang + scala-library + + + + + org.scalatest + scalatest_2.13 + test + + + org.scalamock + scalamock_2.13 + test + + + + + + + net.alchim31.maven + scala-maven-plugin + + + + + \ No newline at end of file diff --git a/config/pom.xml b/config/pom.xml new file mode 100644 index 0000000..9b3a429 --- /dev/null +++ b/config/pom.xml @@ -0,0 +1,69 @@ + + 4.0.0 + + + net.kemitix.thorp + thorp-parent + DEV-SNAPSHOT + ../parent/pom.xml + + + thorp-config + config + + + + + net.kemitix.thorp + thorp-domain + + + net.kemitix.thorp + thorp-filesystem + + + + + com.github.scopt + scopt_2.13 + + + + + org.scala-lang + scala-library + + + + + dev.zio + zio_2.13 + + + dev.zio + zio-streams_2.13 + + + + + org.scalatest + scalatest_2.13 + test + + + org.scalamock + scalamock_2.13 + test + + + + + + + net.alchim31.maven + scala-maven-plugin + + + + + \ No newline at end of file diff --git a/console/pom.xml b/console/pom.xml new file mode 100644 index 0000000..8e32b2c --- /dev/null +++ b/console/pom.xml @@ -0,0 +1,47 @@ + + 4.0.0 + + + net.kemitix.thorp + thorp-parent + DEV-SNAPSHOT + ../parent/pom.xml + + + thorp-console + console + + + + + net.kemitix.thorp + thorp-domain + + + + + org.scala-lang + scala-library + + + + + dev.zio + zio_2.13 + + + dev.zio + zio-streams_2.13 + + + + + + + net.alchim31.maven + scala-maven-plugin + + + + + \ No newline at end of file diff --git a/docs/images/reactor-graph.png b/docs/images/reactor-graph.png new file mode 100644 index 0000000..cbeefc6 Binary files /dev/null and b/docs/images/reactor-graph.png differ diff --git a/domain/pom.xml b/domain/pom.xml new file mode 100644 index 0000000..00d57e8 --- /dev/null +++ b/domain/pom.xml @@ -0,0 +1,59 @@ + + 4.0.0 + + + net.kemitix.thorp + thorp-parent + DEV-SNAPSHOT + ../parent/pom.xml + + + thorp-domain + domain + + + + + org.scala-lang + scala-library + + + + + net.kemitix + eip-zio_2.13 + + + + + dev.zio + zio_2.13 + + + dev.zio + zio-streams_2.13 + + + + + org.scalatest + scalatest_2.13 + test + + + org.scalamock + scalamock_2.13 + test + + + + + + + net.alchim31.maven + scala-maven-plugin + + + + + \ No newline at end of file diff --git a/domain/src/test/scala/net/kemitix/thorp/domain/MD5HashData.scala b/domain/src/main/scala/net/kemitix/thorp/domain/MD5HashData.scala similarity index 100% rename from domain/src/test/scala/net/kemitix/thorp/domain/MD5HashData.scala rename to domain/src/main/scala/net/kemitix/thorp/domain/MD5HashData.scala diff --git a/domain/src/test/scala/net/kemitix/thorp/domain/TemporaryFolder.scala b/domain/src/main/scala/net/kemitix/thorp/domain/TemporaryFolder.scala similarity index 100% rename from domain/src/test/scala/net/kemitix/thorp/domain/TemporaryFolder.scala rename to domain/src/main/scala/net/kemitix/thorp/domain/TemporaryFolder.scala diff --git a/filesystem/pom.xml b/filesystem/pom.xml new file mode 100644 index 0000000..9efae37 --- /dev/null +++ b/filesystem/pom.xml @@ -0,0 +1,59 @@ + + 4.0.0 + + + net.kemitix.thorp + thorp-parent + DEV-SNAPSHOT + ../parent/pom.xml + + + thorp-filesystem + filesystem + + + + + net.kemitix.thorp + thorp-domain + + + + + org.scala-lang + scala-library + + + + + dev.zio + zio_2.13 + + + dev.zio + zio-streams_2.13 + + + + + org.scalatest + scalatest_2.13 + test + + + org.scalamock + scalamock_2.13 + test + + + + + + + net.alchim31.maven + scala-maven-plugin + + + + + \ No newline at end of file diff --git a/filesystem/src/main/scala/net/kemitix/thorp/filesystem/Resource.scala b/filesystem/src/main/scala/net/kemitix/thorp/filesystem/Resource.scala new file mode 100644 index 0000000..bf493cd --- /dev/null +++ b/filesystem/src/main/scala/net/kemitix/thorp/filesystem/Resource.scala @@ -0,0 +1,15 @@ +package net.kemitix.thorp.filesystem + +import java.io.File +import java.nio.file.{Path, Paths} + +final case class Resource( + cls: Object, + file: String +) { + + def toPath: Path = Paths.get(cls.getClass.getResource(file).getPath) + def toFile: File = toPath.toFile + def getCanonicalPath: String = toPath.toFile.getCanonicalPath + def length: Long = toFile.length() +} diff --git a/lib/pom.xml b/lib/pom.xml new file mode 100644 index 0000000..6a3bcd2 --- /dev/null +++ b/lib/pom.xml @@ -0,0 +1,71 @@ + + 4.0.0 + + + net.kemitix.thorp + thorp-parent + DEV-SNAPSHOT + ../parent/pom.xml + + + thorp-lib + lib + + + + + net.kemitix.thorp + thorp-domain + + + net.kemitix.thorp + thorp-filesystem + + + net.kemitix.thorp + thorp-config + + + net.kemitix.thorp + thorp-console + + + net.kemitix.thorp + thorp-storage + + + + + com.github.scopt + scopt_2.13 + + + + + org.scala-lang + scala-library + + + + + org.scalatest + scalatest_2.13 + test + + + org.scalamock + scalamock_2.13 + test + + + + + + + net.alchim31.maven + scala-maven-plugin + + + + + \ No newline at end of file diff --git a/parent/pom.xml b/parent/pom.xml new file mode 100644 index 0000000..941ca2d --- /dev/null +++ b/parent/pom.xml @@ -0,0 +1,183 @@ + + + 4.0.0 + + net.kemitix + kemitix-parent + 5.3.0 + + + + net.kemitix.thorp + thorp-parent + DEV-SNAPSHOT + pom + + + 4.4.0 + 2.16 + 2.7.0 + 2.13.0 + + + + + + + net.kemitix.thorp + thorp-domain + ${project.version} + + + net.kemitix.thorp + thorp-filesystem + ${project.version} + + + net.kemitix.thorp + thorp-config + ${project.version} + + + net.kemitix.thorp + thorp-console + ${project.version} + + + net.kemitix.thorp + thorp-uishell + ${project.version} + + + net.kemitix.thorp + thorp-storage + ${project.version} + + + net.kemitix.thorp + thorp-lib + ${project.version} + + + net.kemitix.thorp + thorp-storage-aws + ${project.version} + + + net.kemitix.thorp + thorp-cli + ${project.version} + + + net.kemitix.thorp + thorp-app + ${project.version} + + + + + org.scala-lang + scala-library + ${scala-library.version} + + + + dev.zio + zio_2.13 + 1.0.0-RC16 + + + dev.zio + zio-streams_2.13 + 1.0.0-RC16 + + + + net.kemitix + eip-zio_2.13 + 0.3.2 + + + + com.github.scopt + scopt_2.13 + 4.0.0-RC2 + + + + org.scalatest + scalatest_2.13 + 3.0.8 + + + org.scalamock + scalamock_2.13 + 4.4.0 + + + + + + + + + net.alchim31.maven + scala-maven-plugin + ${scala-maven-plugin.version} + + + -Ywarn-unused:imports + -Xfatal-warnings + -feature + -deprecation + -unchecked + -language:postfixOps + -language:higherKinds + + + + + scala-compile-first + process-resources + + add-source + compile + + + + scala-test-compile + process-test-resources + + testCompile + + + + + + + + + io.repaint.maven + tiles-maven-plugin + ${tiles-maven-plugin.version} + true + + + net.kemitix.tiles:maven-plugins:${kemitix-maven-tiles.version} + net.kemitix.tiles:enforcer:${kemitix-maven-tiles.version} + net.kemitix.tiles:compiler-jdk-8:${kemitix-maven-tiles.version} + net.kemitix.tiles:huntbugs:${kemitix-maven-tiles.version} + net.kemitix.tiles:pmd:${kemitix-maven-tiles.version} + net.kemitix.tiles:digraph:${kemitix-maven-tiles.version} + net.kemitix.tiles:testing:${kemitix-maven-tiles.version} + + + + + + + + + \ No newline at end of file diff --git a/pom.xml b/pom.xml new file mode 100644 index 0000000..fdce387 --- /dev/null +++ b/pom.xml @@ -0,0 +1,53 @@ + + 4.0.0 + + net.kemitix.thorp + thorp-root + DEV-SNAPSHOT + pom + + + parent + domain + filesystem + config + console + uishell + storage + lib + storage-aws + cli + app + + + + 1.45 + + + + + + org.fusesource.mvnplugins + maven-graph-plugin + ${maven-graph-plugin.version} + + + validate + + reactor + + + + + TB + true + true + true + test,provided + ${project.basedir}/docs/images/reactor-graph.png + + + + + + diff --git a/storage-aws/pom.xml b/storage-aws/pom.xml new file mode 100644 index 0000000..a2309f4 --- /dev/null +++ b/storage-aws/pom.xml @@ -0,0 +1,83 @@ + + 4.0.0 + + + net.kemitix.thorp + thorp-parent + DEV-SNAPSHOT + ../parent/pom.xml + + + thorp-storage-aws + storage-aws + + + + + net.kemitix.thorp + thorp-storage + + + net.kemitix.thorp + thorp-filesystem + + + net.kemitix.thorp + thorp-console + + + net.kemitix.thorp + thorp-lib + + + + + org.scala-lang + scala-library + + + + + com.amazonaws + aws-java-sdk-s3 + 1.11.792 + + + com.fasterxml.jackson.core + jackson-databind + 2.10.4 + + + com.fasterxml.jackson.dataformat + jackson-dataformat-cbor + 2.10.4 + + + javax.xml.bind + jaxb-api + 2.3.1 + + + + + org.scalatest + scalatest_2.13 + test + + + org.scalamock + scalamock_2.13 + test + + + + + + + net.alchim31.maven + scala-maven-plugin + + + + + \ No newline at end of file diff --git a/storage-aws/src/test/scala/net/kemitix/thorp/storage/aws/UploaderTest.scala b/storage-aws/src/test/scala/net/kemitix/thorp/storage/aws/UploaderTest.scala index 4b10edf..71fe84e 100644 --- a/storage-aws/src/test/scala/net/kemitix/thorp/storage/aws/UploaderTest.scala +++ b/storage-aws/src/test/scala/net/kemitix/thorp/storage/aws/UploaderTest.scala @@ -25,8 +25,8 @@ class UploaderTest extends FreeSpec with MockFactory { val uiChannel: UChannel[Any, UIEvent] = zioMessage => () "upload" - { - val aSource: File = Resource(this, "") - val aFile: File = Resource(this, "small-file") + val aSource: File = Resource(this, "").toFile + val aFile: File = Resource(this, "small-file").toFile val aHash = MD5Hash("aHash") val hashes = Map[HashType, MD5Hash](MD5 -> aHash) val remoteKey = RemoteKey("aRemoteKey") diff --git a/storage/pom.xml b/storage/pom.xml new file mode 100644 index 0000000..529fd2f --- /dev/null +++ b/storage/pom.xml @@ -0,0 +1,51 @@ + + 4.0.0 + + + net.kemitix.thorp + thorp-parent + DEV-SNAPSHOT + ../parent/pom.xml + + + thorp-storage + storage + + + + + net.kemitix.thorp + thorp-uishell + + + net.kemitix.thorp + thorp-domain + + + + + org.scala-lang + scala-library + + + + + dev.zio + zio_2.13 + + + dev.zio + zio-streams_2.13 + + + + + + + net.alchim31.maven + scala-maven-plugin + + + + + \ No newline at end of file diff --git a/uishell/pom.xml b/uishell/pom.xml new file mode 100644 index 0000000..bb40c29 --- /dev/null +++ b/uishell/pom.xml @@ -0,0 +1,73 @@ + + 4.0.0 + + + net.kemitix.thorp + thorp-parent + DEV-SNAPSHOT + ../parent/pom.xml + + + thorp-uishell + uishell + + + + + net.kemitix.thorp + thorp-config + + + net.kemitix.thorp + thorp-console + + + net.kemitix.thorp + thorp-filesystem + + + + + org.scala-lang + scala-library + + + + + net.kemitix + eip-zio_2.13 + + + + + dev.zio + zio_2.13 + + + dev.zio + zio-streams_2.13 + + + + + org.scalatest + scalatest_2.13 + test + + + org.scalamock + scalamock_2.13 + test + + + + + + + net.alchim31.maven + scala-maven-plugin + + + + + \ No newline at end of file