From b0a984847082efb195b8ebb866b69372f8a594c4 Mon Sep 17 00:00:00 2001 From: Thijs Broersen Date: Fri, 15 Nov 2024 23:56:35 +0100 Subject: [PATCH] chore/refactor to projectmatrix --- .github/workflows/ci.yml | 312 ++++++--- .github/workflows/site.yml | 140 ++-- .scalafmt.conf | 24 +- README.md | 7 +- .../ParameterStoreConfigProvider.scala | 0 .../config/aws/parameterstore/package.scala | 0 build.sbt | 467 +++++-------- .../zio/config/cats/instances/package.scala | 0 .../main/scala/zio/config/cats/package.scala | 0 contributing.md | 2 +- .../scala/zio/config/project/build.properties | 1 - .../zio/config/VersionSpecificSupport.scala | 0 .../zio/config/VersionSpecificSupport.scala | 0 .../scala-2}/zio/config/TupleConversion.scala | 0 .../scala-3}/zio/config/TupleConversion.scala | 0 .../zio/config/VersionSpecificSupport.scala | 0 .../scala/zio/config/ConfigDocsModule.scala | 0 .../main/scala/zio/config/IndexedFlat.scala | 0 .../zio/config/KeyConversionFunctions.scala | 0 .../src/main/scala/zio/config/package.scala | 0 .../zio/config/syntax/ConfigSyntax.scala | 0 .../scala/zio/config/syntax/IndexKey.scala | 0 .../src/test/scala/zio/config/BaseSpec.scala | 0 .../scala/zio/config/GenerateDocsTest.scala | 0 .../scala/zio/config/IndexedFlatSpec.scala | 0 .../zio/config/derivation/NeedsDerive.scala | 0 .../zio/config/derivation/NeedsDerive.scala | 0 .../zio/config/derivation/annotations.scala | 0 .../scala/zio/config/enumeratum/package.scala | 0 .../src/main/resources/application.conf | 0 .../src/main/resources/application.yml | 0 .../config/examples/CollectAllExample.scala | 0 .../examples/ConfigSourceOrElseExample.scala | 2 +- .../config/examples/DefaultValueExample.scala | 0 .../DocsExampleConfluenceFlavoured.scala | 0 .../examples/DocsExampleGithubFlavoured.scala | 0 .../SealedTraitManualDerivation.scala | 0 .../examples/SimpleReadConfigExample.scala | 0 .../zio/config/examples/StandardPattern.scala | 0 .../zio/config/examples/TupleExample.scala | 0 .../zio/config/examples/ZioSupport.scala | 0 .../AutoDerivationCustomKeys.scala | 0 .../AutoDerivationPureConfig.scala | 0 .../AutoDerivationSealedTrait.scala | 0 .../AutoDerivationSealedTraitCustom.scala | 0 .../autoderivation/AutoDerivationSimple.scala | 4 +- .../scala/zio/config/examples/package.scala | 0 .../examples/refined/RefinedReadConfig.scala | 0 .../examples/typesafe/EitherImpureOps.scala | 0 .../examples/typesafe/HoconSimple.scala | 0 .../examples/typesafe/PureConfigInterop.scala | 3 +- .../typesafe/SealedTraitListExample.scala | 3 +- .../examples/typesafe/SubConfigExample.scala | 3 +- .../typesafe/TypesafeConfigErrors.scala | 0 .../typesafe/TypesafeConfigList.scala | 0 .../examples/typesafe/TypesafeConfigMap.scala | 0 .../typesafe/TypesafeConfigSealedTrait.scala | 0 .../typesafe/TypesafeConfigSimple.scala | 0 .../zio/config/magnolia/DeriveConfig.scala | 0 .../zio/config/magnolia/package.scala | 0 .../zio/config/magnolia/DeriveConfig.scala | 0 .../scala-3}/zio/config/magnolia/Macros.scala | 0 .../examples/AutoDerivationSimple.scala | 0 .../magnolia/examples/SampleConfig.scala | 0 .../zio/config/magnolia/package.scala | 9 +- .../config/magnolia/AutomaticConfigSpec.scala | 0 .../config/magnolia/AutomaticConfigSpec.scala | 0 .../config/magnolia/DefaultValueSpec.scala | 0 .../zio/config/magnolia/MarkdownSpec.scala | 0 project/BuildHelper.scala | 262 +------ project/Dependencies.scala | 22 + project/Versions.scala | 14 + project/plugins.sbt | 42 +- .../scala/zio/config/pureconfig/package.scala | 0 .../config/pureconfig/PureconfigTest.scala | 0 .../zio/config/refined/PartialRefined.scala | 0 .../config/refined/PartialRefinedPath.scala | 0 .../scala/zio/config/refined/package.scala | 0 .../zio/config/refined/NumericTestTypes.scala | 0 .../zio/config/refined/NumericTestTypes.scala | 0 .../zio/config/refined/NumericTestTypes.scala | 0 .../config/refined/NumericSupportTest.scala | 0 .../zio/config/refined/RefinedSpec.scala | 0 .../config/refined/RequiredNumericTypes.scala | 0 sbt | 661 ------------------ .../zio/config/scalaz/instances/package.scala | 0 .../scala/zio/config/scalaz/package.scala | 0 .../zio/config/magnolia/AnnotationsTest.scala | 4 +- .../magnolia/CoproductSealedTraitSpec.scala | 0 .../zio/config/typesafe/EitherSupport.scala | 0 .../typesafe/TypesafeConfigErrorsSpec.scala | 0 .../typesafe/TypesafeConfigListTest.scala | 0 .../typesafe/TypesafeConfigMapTest.scala | 0 .../TypesafeConfigProviderZIOTest.scala | 4 +- .../typesafe/TypesafeConfigSimpleSpec.scala | 0 .../typesafe/TypesafeConfigTestSupport.scala | 4 +- .../TypesafeRecursiveConfigTest.scala | 0 .../typesafe/TypesafeConfigProvider.scala | 0 .../scala/zio/config/typesafe/package.scala | 0 .../config/typesafe/TypesafeConfigSpec.scala | 0 .../zio/config/xml/experimental/Parsers.scala | 0 .../xml/experimental/XmlConfigProvider.scala | 0 .../config/xml/experimental/XmlObject.scala | 0 .../config/xml/experimental/XmlParser.scala | 3 +- .../zio/config/xml/experimental/package.scala | 0 .../scala/zio/config/yaml/XmlParserSpec.scala | 0 .../zio/config/yaml/XmlProviderSpec.scala | 0 .../generators/InvalidTextCharacters.scala | 0 .../zio/config/yaml/generators/Printer.scala | 0 .../zio/config/yaml/generators/Space.scala | 0 .../generators/WhiteSpacedAttributes.scala | 0 .../yaml/generators/WhiteSpacedBracket.scala | 0 .../generators/WhiteSpacedClosingTag.scala | 0 .../yaml/generators/WhiteSpacedOpenTag.scala | 0 .../yaml/generators/WhiteSpacedText.scala | 0 .../yaml/generators/WhiteSpacedXml.scala | 0 .../scala/zio/config/yaml/EnvConfigImpl.scala | 0 .../zio/config/yaml/YamlConfigProvider.scala | 0 .../main/scala/zio/config/yaml/package.scala | 0 .../zio/config/yaml/YamlConfigSpec.scala | 0 .../ParameterStoreConfigProvider.scala | 0 .../config/aws/parameterstore/package.scala | 0 122 files changed, 588 insertions(+), 1405 deletions(-) rename aws/{shared => }/src/main/scala/zio/config/aws/parameterstore/ParameterStoreConfigProvider.scala (100%) rename aws/{shared => }/src/main/scala/zio/config/aws/parameterstore/package.scala (100%) rename cats/{shared => }/src/main/scala/zio/config/cats/instances/package.scala (100%) rename cats/{shared => }/src/main/scala/zio/config/cats/package.scala (100%) delete mode 100644 core/shared/src/main/scala/zio/config/project/build.properties rename core/{shared => }/src/main/scala-2.12/zio/config/VersionSpecificSupport.scala (100%) rename core/{shared => }/src/main/scala-2.13/zio/config/VersionSpecificSupport.scala (100%) rename core/{shared/src/main/scala-2.x => src/main/scala-2}/zio/config/TupleConversion.scala (100%) rename core/{shared/src/main/scala-3.x => src/main/scala-3}/zio/config/TupleConversion.scala (100%) rename core/{shared/src/main/scala-3.x => src/main/scala-3}/zio/config/VersionSpecificSupport.scala (100%) rename core/{shared => }/src/main/scala/zio/config/ConfigDocsModule.scala (100%) rename core/{shared => }/src/main/scala/zio/config/IndexedFlat.scala (100%) rename core/{shared => }/src/main/scala/zio/config/KeyConversionFunctions.scala (100%) rename core/{shared => }/src/main/scala/zio/config/package.scala (100%) rename core/{shared => }/src/main/scala/zio/config/syntax/ConfigSyntax.scala (100%) rename core/{shared => }/src/main/scala/zio/config/syntax/IndexKey.scala (100%) rename core/{shared => }/src/test/scala/zio/config/BaseSpec.scala (100%) rename core/{shared => }/src/test/scala/zio/config/GenerateDocsTest.scala (100%) rename core/{shared => }/src/test/scala/zio/config/IndexedFlatSpec.scala (100%) rename derivation/{shared => }/src/main/scala-2.12/zio/config/derivation/NeedsDerive.scala (100%) rename derivation/{shared => }/src/main/scala-2.13/zio/config/derivation/NeedsDerive.scala (100%) rename derivation/{shared => }/src/main/scala/zio/config/derivation/annotations.scala (100%) rename enumeratum/{shared => }/src/main/scala/zio/config/enumeratum/package.scala (100%) rename examples/{shared => }/src/main/resources/application.conf (100%) rename examples/{shared => }/src/main/resources/application.yml (100%) rename examples/{shared => }/src/main/scala/zio/config/examples/CollectAllExample.scala (100%) rename examples/{shared => }/src/main/scala/zio/config/examples/ConfigSourceOrElseExample.scala (96%) rename examples/{shared => }/src/main/scala/zio/config/examples/DefaultValueExample.scala (100%) rename examples/{shared => }/src/main/scala/zio/config/examples/DocsExampleConfluenceFlavoured.scala (100%) rename examples/{shared => }/src/main/scala/zio/config/examples/DocsExampleGithubFlavoured.scala (100%) rename examples/{shared => }/src/main/scala/zio/config/examples/SealedTraitManualDerivation.scala (100%) rename examples/{shared => }/src/main/scala/zio/config/examples/SimpleReadConfigExample.scala (100%) rename examples/{shared => }/src/main/scala/zio/config/examples/StandardPattern.scala (100%) rename examples/{shared => }/src/main/scala/zio/config/examples/TupleExample.scala (100%) rename examples/{shared => }/src/main/scala/zio/config/examples/ZioSupport.scala (100%) rename examples/{shared => }/src/main/scala/zio/config/examples/autoderivation/AutoDerivationCustomKeys.scala (100%) rename examples/{shared => }/src/main/scala/zio/config/examples/autoderivation/AutoDerivationPureConfig.scala (100%) rename examples/{shared => }/src/main/scala/zio/config/examples/autoderivation/AutoDerivationSealedTrait.scala (100%) rename examples/{shared => }/src/main/scala/zio/config/examples/autoderivation/AutoDerivationSealedTraitCustom.scala (100%) rename examples/{shared => }/src/main/scala/zio/config/examples/autoderivation/AutoDerivationSimple.scala (93%) rename examples/{shared => }/src/main/scala/zio/config/examples/package.scala (100%) rename examples/{shared => }/src/main/scala/zio/config/examples/refined/RefinedReadConfig.scala (100%) rename examples/{shared => }/src/main/scala/zio/config/examples/typesafe/EitherImpureOps.scala (100%) rename examples/{shared => }/src/main/scala/zio/config/examples/typesafe/HoconSimple.scala (100%) rename examples/{shared => }/src/main/scala/zio/config/examples/typesafe/PureConfigInterop.scala (97%) rename examples/{shared => }/src/main/scala/zio/config/examples/typesafe/SealedTraitListExample.scala (95%) rename examples/{shared => }/src/main/scala/zio/config/examples/typesafe/SubConfigExample.scala (94%) rename examples/{shared => }/src/main/scala/zio/config/examples/typesafe/TypesafeConfigErrors.scala (100%) rename examples/{shared => }/src/main/scala/zio/config/examples/typesafe/TypesafeConfigList.scala (100%) rename examples/{shared => }/src/main/scala/zio/config/examples/typesafe/TypesafeConfigMap.scala (100%) rename examples/{shared => }/src/main/scala/zio/config/examples/typesafe/TypesafeConfigSealedTrait.scala (100%) rename examples/{shared => }/src/main/scala/zio/config/examples/typesafe/TypesafeConfigSimple.scala (100%) rename magnolia/{shared/src/main/scala-2.12-2.13 => src/main/scala-2}/zio/config/magnolia/DeriveConfig.scala (100%) rename magnolia/{shared/src/main/scala-2.12-2.13 => src/main/scala-2}/zio/config/magnolia/package.scala (100%) rename magnolia/{shared/src/main/scala-dotty => src/main/scala-3}/zio/config/magnolia/DeriveConfig.scala (100%) rename magnolia/{shared/src/main/scala-dotty => src/main/scala-3}/zio/config/magnolia/Macros.scala (100%) rename magnolia/{shared/src/main/scala-dotty => src/main/scala-3}/zio/config/magnolia/examples/AutoDerivationSimple.scala (100%) rename magnolia/{shared/src/main/scala-dotty => src/main/scala-3}/zio/config/magnolia/examples/SampleConfig.scala (100%) rename magnolia/{shared/src/main/scala-dotty => src/main/scala-3}/zio/config/magnolia/package.scala (71%) rename magnolia/{shared/src/test/scala-2.12-2.13 => src/test/scala-2}/zio/config/magnolia/AutomaticConfigSpec.scala (100%) rename magnolia/{shared/src/test/scala-dotty => src/test/scala-3}/zio/config/magnolia/AutomaticConfigSpec.scala (100%) rename magnolia/{shared/src/test/scala-dotty => src/test/scala-3}/zio/config/magnolia/DefaultValueSpec.scala (100%) rename magnolia/{shared/src/test/scala-dotty => src/test/scala-3}/zio/config/magnolia/MarkdownSpec.scala (100%) create mode 100644 project/Dependencies.scala create mode 100644 project/Versions.scala rename pureconfig/{shared => }/src/main/scala/zio/config/pureconfig/package.scala (100%) rename pureconfig/{shared => }/src/test/scala/zio/config/pureconfig/PureconfigTest.scala (100%) rename refined/{shared => }/src/main/scala/zio/config/refined/PartialRefined.scala (100%) rename refined/{shared => }/src/main/scala/zio/config/refined/PartialRefinedPath.scala (100%) rename refined/{shared => }/src/main/scala/zio/config/refined/package.scala (100%) rename refined/{shared => }/src/test/scala-2.12/zio/config/refined/NumericTestTypes.scala (100%) rename refined/{shared => }/src/test/scala-2.13/zio/config/refined/NumericTestTypes.scala (100%) rename refined/{shared => }/src/test/scala-3/zio/config/refined/NumericTestTypes.scala (100%) rename refined/{shared => }/src/test/scala/zio/config/refined/NumericSupportTest.scala (100%) rename refined/{shared => }/src/test/scala/zio/config/refined/RefinedSpec.scala (100%) rename refined/{shared => }/src/test/scala/zio/config/refined/RequiredNumericTypes.scala (100%) delete mode 100755 sbt rename scalaz/{shared => }/src/main/scala/zio/config/scalaz/instances/package.scala (100%) rename scalaz/{shared => }/src/main/scala/zio/config/scalaz/package.scala (100%) rename typesafe-magnolia-tests/{shared => }/src/test/scala/zio/config/magnolia/AnnotationsTest.scala (98%) rename typesafe-magnolia-tests/{shared => }/src/test/scala/zio/config/magnolia/CoproductSealedTraitSpec.scala (100%) rename typesafe-magnolia-tests/{shared => }/src/test/scala/zio/config/typesafe/EitherSupport.scala (100%) rename typesafe-magnolia-tests/{shared => }/src/test/scala/zio/config/typesafe/TypesafeConfigErrorsSpec.scala (100%) rename typesafe-magnolia-tests/{shared => }/src/test/scala/zio/config/typesafe/TypesafeConfigListTest.scala (100%) rename typesafe-magnolia-tests/{shared => }/src/test/scala/zio/config/typesafe/TypesafeConfigMapTest.scala (100%) rename typesafe-magnolia-tests/{shared => }/src/test/scala/zio/config/typesafe/TypesafeConfigProviderZIOTest.scala (93%) rename typesafe-magnolia-tests/{shared => }/src/test/scala/zio/config/typesafe/TypesafeConfigSimpleSpec.scala (100%) rename typesafe-magnolia-tests/{shared => }/src/test/scala/zio/config/typesafe/TypesafeConfigTestSupport.scala (99%) rename typesafe-magnolia-tests/{shared => }/src/test/scala/zio/config/typesafe/TypesafeRecursiveConfigTest.scala (100%) rename typesafe/{shared => }/src/main/scala/zio/config/typesafe/TypesafeConfigProvider.scala (100%) rename typesafe/{shared => }/src/main/scala/zio/config/typesafe/package.scala (100%) rename typesafe/{shared => }/src/test/scala/zio/config/typesafe/TypesafeConfigSpec.scala (100%) rename xml/{shared => }/src/main/scala/zio/config/xml/experimental/Parsers.scala (100%) rename xml/{shared => }/src/main/scala/zio/config/xml/experimental/XmlConfigProvider.scala (100%) rename xml/{shared => }/src/main/scala/zio/config/xml/experimental/XmlObject.scala (100%) rename xml/{shared => }/src/main/scala/zio/config/xml/experimental/XmlParser.scala (89%) rename xml/{shared => }/src/main/scala/zio/config/xml/experimental/package.scala (100%) rename xml/{shared => }/src/test/scala/zio/config/yaml/XmlParserSpec.scala (100%) rename xml/{shared => }/src/test/scala/zio/config/yaml/XmlProviderSpec.scala (100%) rename xml/{shared => }/src/test/scala/zio/config/yaml/generators/InvalidTextCharacters.scala (100%) rename xml/{shared => }/src/test/scala/zio/config/yaml/generators/Printer.scala (100%) rename xml/{shared => }/src/test/scala/zio/config/yaml/generators/Space.scala (100%) rename xml/{shared => }/src/test/scala/zio/config/yaml/generators/WhiteSpacedAttributes.scala (100%) rename xml/{shared => }/src/test/scala/zio/config/yaml/generators/WhiteSpacedBracket.scala (100%) rename xml/{shared => }/src/test/scala/zio/config/yaml/generators/WhiteSpacedClosingTag.scala (100%) rename xml/{shared => }/src/test/scala/zio/config/yaml/generators/WhiteSpacedOpenTag.scala (100%) rename xml/{shared => }/src/test/scala/zio/config/yaml/generators/WhiteSpacedText.scala (100%) rename xml/{shared => }/src/test/scala/zio/config/yaml/generators/WhiteSpacedXml.scala (100%) rename yaml/{shared => }/src/main/scala/zio/config/yaml/EnvConfigImpl.scala (100%) rename yaml/{shared => }/src/main/scala/zio/config/yaml/YamlConfigProvider.scala (100%) rename yaml/{shared => }/src/main/scala/zio/config/yaml/package.scala (100%) rename yaml/{shared => }/src/test/scala/zio/config/yaml/YamlConfigSpec.scala (100%) rename zio-aws/{shared => }/src/main/scala/zio/config/aws/parameterstore/ParameterStoreConfigProvider.scala (100%) rename zio-aws/{shared => }/src/main/scala/zio/config/aws/parameterstore/package.scala (100%) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 81f936ee7..8b0f50d30 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -1,120 +1,270 @@ -name: CI +# This file was autogenerated using `zio-sbt-ci` plugin via `sbt ciGenerateGithubWorkflow` +# task and should be included in the git repository. Please do not edit it manually. +name: CI env: - JDK_JAVA_OPTIONS: '-XX:+PrintCommandLineFlags -Xmx4G' # JDK_JAVA_OPTIONS is _the_ env. variable to use for modern Java - JVM_OPTS: '-XX:+PrintCommandLineFlags -Xmx4G' # for Java 8 only (sadly, it is not modern enough for JDK_JAVA_OPTIONS) - -on: - pull_request: - push: - branches: ['master', 'series/4.x'] + JDK_JAVA_OPTIONS: -XX:+PrintCommandLineFlags +'on': + workflow_dispatch: {} release: types: - published - + pull_request: + branches-ignore: + - gh-pages + push: + branches: + - master + - series/4.x +concurrency: + group: ${{ github.workflow }}-${{ github.ref == format('refs/heads/{0}', github.event.repository.default_branch) && github.run_id || github.ref }} + cancel-in-progress: true jobs: - website: - runs-on: ubuntu-22.04 - timeout-minutes: 60 + build: + name: Build + runs-on: ubuntu-latest + continue-on-error: true steps: - - name: Checkout current branch - uses: actions/checkout@v3.3.0 - - name: Setup Java - uses: actions/setup-java@v4.5.0 + - name: Git Checkout + uses: actions/checkout@v4 + with: + fetch-depth: '0' + - name: Install libuv + run: sudo apt-get update && sudo apt-get install -y libuv1-dev + - name: Setup Scala + uses: actions/setup-java@v4 with: distribution: temurin - java-version: 11 - check-latest: true - - name: Cache scala dependencies + java-version: '17' + check-latest: 'true' + - name: Cache Dependencies uses: coursier/cache-action@v6 - - name: Check Document Generation - run: ./sbt docs/compileDocs - + - name: Check all code compiles + run: sbt Test/compile + - name: Check artifacts build process + run: sbt publishLocal + - name: Check website build process + run: sbt docs/clean; sbt docs/buildWebsite lint: - runs-on: ubuntu-22.04 - timeout-minutes: 30 + name: Lint + runs-on: ubuntu-latest + continue-on-error: false steps: - - name: Checkout current branch - uses: actions/checkout@v3.3.0 + - name: Git Checkout + uses: actions/checkout@v4 with: - fetch-depth: 0 - - name: Setup Java - uses: actions/setup-java@v4.5.0 + fetch-depth: '0' + - name: Install libuv + run: sudo apt-get update && sudo apt-get install -y libuv1-dev + - name: Setup Scala + uses: actions/setup-java@v4 with: distribution: temurin - java-version: 11 - check-latest: true - - name: Cache scala dependencies + java-version: '17' + check-latest: 'true' + - name: Cache Dependencies uses: coursier/cache-action@v6 - - name: Check formatting - run: sbt fmt - - name: Check binary compatibility - run: sbt "++2.12; checkMima; ++2.13; checkMima; ++3.3; checkMima" - + - name: Check if the site workflow is up to date + run: sbt ciCheckGithubWorkflow + - name: Lint + run: sbt lint + - name: Check mima + run: sbt checkMima test: - runs-on: ubuntu-22.04 - timeout-minutes: 30 + name: Test + runs-on: ubuntu-latest + continue-on-error: false strategy: - fail-fast: false matrix: - java: ['11', '21'] - scala: ['2.12.20', '2.13.15', '3.3.4'] - platform: ['JS', 'JVM', 'Native'] + java: + - '11' + - '17' + - '21' + scalaVersion: + - 2.12.20 + - 2.13.15 + - 3.3.4 + scalaPlatform: + - JS + - JVM + - Native + fail-fast: false steps: - - name: Checkout current branch - uses: actions/checkout@v3.3.0 - with: - fetch-depth: 0 - - name: Setup Java - uses: actions/setup-java@v4.5.0 + - name: Install libuv + run: sudo apt-get update && sudo apt-get install -y libuv1-dev + - name: Setup Scala + uses: actions/setup-java@v4 with: distribution: temurin java-version: ${{ matrix.java }} - check-latest: true - - name: Cache scala dependencies + check-latest: 'true' + - name: Cache Dependencies uses: coursier/cache-action@v6 - - name: Run JS tests - if: ${{ matrix.platform == 'JS' && !startsWith(matrix.scala, '3.') }} - run: sbt ++${{ matrix.scala }}! testJS - - name: Run 2.12 JVM tests - if: ${{ matrix.platform == 'JVM' && startsWith(matrix.scala, '2.12') }} - run: sbt ++${{ matrix.scala }}! testJVM212 - - name: Run 2.13 JVM tests - if: ${{ matrix.platform == 'JVM' && startsWith(matrix.scala, '2.13') }} - run: sbt ++${{ matrix.scala }}! testJVM213 - - name: Run 3.x JVM tests - if: ${{ matrix.platform == 'JVM' && startsWith(matrix.scala, '3.') }} - run: sbt ++${{ matrix.scala }}! testJVM3x + - name: Git Checkout + uses: actions/checkout@v4 + with: + fetch-depth: '0' + - name: Test + run: sbt test${{ matrix.scalaPlatform }}${{ startsWith(matrix.scalaVersion, '2.12') && '2_12' || (startsWith(matrix.scalaVersion, '2.13') && '2_13' || (startsWith(matrix.scalaVersion, '3') && '3' || '')) }} + update-readme: + name: Update README + runs-on: ubuntu-latest + continue-on-error: false + if: ${{ github.event_name == 'push' }} + steps: + - name: Git Checkout + uses: actions/checkout@v4 + with: + fetch-depth: '0' + - name: Install libuv + run: sudo apt-get update && sudo apt-get install -y libuv1-dev + - name: Setup Scala + uses: actions/setup-java@v4 + with: + distribution: temurin + java-version: '17' + check-latest: 'true' + - name: Cache Dependencies + uses: coursier/cache-action@v6 + - name: Generate Readme + run: sbt docs/generateReadme + - name: Commit Changes + run: | + git config --local user.email "zio-assistant[bot]@users.noreply.github.com" + git config --local user.name "ZIO Assistant" + git add README.md + git commit -m "Update README.md" || echo "No changes to commit" + - name: Generate Token + id: generate-token + uses: zio/generate-github-app-token@v1.0.0 + with: + app_id: ${{ secrets.APP_ID }} + app_private_key: ${{ secrets.APP_PRIVATE_KEY }} + - name: Create Pull Request + id: cpr + uses: peter-evans/create-pull-request@v6 + with: + body: |- + Autogenerated changes after running the `sbt docs/generateReadme` command of the [zio-sbt-website](https://zio.dev/zio-sbt) plugin. + I will automatically update the README.md file whenever there is new change for README.md, e.g. + - After each release, I will update the version in the installation section. + - After any changes to the "docs/index.md" file, I will update the README.md file accordingly. + branch: zio-sbt-website/update-readme + commit-message: Update README.md + token: ${{ steps.generate-token.outputs.token }} + delete-branch: 'true' + title: Update README.md + - name: Approve PR + if: ${{ steps.cpr.outputs.pull-request-number }} + run: gh pr review "$PR_URL" --approve + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + PR_URL: ${{ steps.cpr.outputs.pull-request-url }} + - name: Enable Auto-Merge + if: ${{ steps.cpr.outputs.pull-request-number }} + run: gh pr merge --auto --squash "$PR_URL" || gh pr merge --squash "$PR_URL" + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + PR_URL: ${{ steps.cpr.outputs.pull-request-url }} ci: - runs-on: ubuntu-22.04 - needs: [website, test] + name: ci + runs-on: ubuntu-latest + continue-on-error: false + needs: + - lint + - test + - build steps: - - name: Report successful build + - name: Report Successful CI run: echo "ci passed" - - publish: - runs-on: ubuntu-22.04 - timeout-minutes: 30 - needs: [ci] - if: github.event_name != 'pull_request' + release: + name: Release + runs-on: ubuntu-latest + continue-on-error: false + needs: + - ci + if: ${{ github.event_name != 'pull_request' }} steps: - - name: Checkout current branch - uses: actions/checkout@v3.3.0 + - name: Git Checkout + uses: actions/checkout@v4 with: - fetch-depth: 0 - - name: Setup Java - uses: actions/setup-java@v4.5.0 + fetch-depth: '0' + - name: Install libuv + run: sudo apt-get update && sudo apt-get install -y libuv1-dev + - name: Setup Scala + uses: actions/setup-java@v4 with: distribution: temurin - java-version: 11 - check-latest: true - - name: Cache scala dependencies + java-version: '17' + check-latest: 'true' + - name: Cache Dependencies uses: coursier/cache-action@v6 - - name: Release artifacts + - name: Release run: sbt ci-release env: PGP_PASSPHRASE: ${{ secrets.PGP_PASSPHRASE }} PGP_SECRET: ${{ secrets.PGP_SECRET }} SONATYPE_PASSWORD: ${{ secrets.SONATYPE_PASSWORD }} SONATYPE_USERNAME: ${{ secrets.SONATYPE_USERNAME }} + CI_RELEASE: publishSigned + CI_SNAPSHOT_RELEASE: publish + release-docs: + name: Release Docs + runs-on: ubuntu-latest + continue-on-error: false + needs: + - release + if: ${{ ((github.event_name == 'release') && (github.event.action == 'published')) || (github.event_name == 'workflow_dispatch') }} + steps: + - name: Git Checkout + uses: actions/checkout@v4 + with: + fetch-depth: '0' + - name: Install libuv + run: sudo apt-get update && sudo apt-get install -y libuv1-dev + - name: Setup Scala + uses: actions/setup-java@v4 + with: + distribution: temurin + java-version: '17' + check-latest: 'true' + - name: Cache Dependencies + uses: coursier/cache-action@v6 + - name: Setup NodeJs + uses: actions/setup-node@v4 + with: + node-version: 16.x + registry-url: https://registry.npmjs.org + - name: Publish Docs to NPM Registry + run: sbt docs/publishToNpm + env: + NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }} + notify-docs-release: + name: Notify Docs Release + runs-on: ubuntu-latest + continue-on-error: false + needs: + - release-docs + if: ${{ (github.event_name == 'release') && (github.event.action == 'published') }} + steps: + - name: Git Checkout + uses: actions/checkout@v4 + with: + fetch-depth: '0' + - name: notify the main repo about the new release of docs package + run: | + PACKAGE_NAME=$(cat docs/package.json | grep '"name"' | awk -F'"' '{print $4}') + PACKAGE_VERSION=$(npm view $PACKAGE_NAME version) + curl -L \ + -X POST \ + -H "Accept: application/vnd.github+json" \ + -H "Authorization: token ${{ secrets.PAT_TOKEN }}"\ + https://api.github.com/repos/zio/zio/dispatches \ + -d '{ + "event_type":"update-docs", + "client_payload":{ + "package_name":"'"${PACKAGE_NAME}"'", + "package_version": "'"${PACKAGE_VERSION}"'" + } + }' diff --git a/.github/workflows/site.yml b/.github/workflows/site.yml index 4af492966..ae94d2610 100644 --- a/.github/workflows/site.yml +++ b/.github/workflows/site.yml @@ -1,92 +1,98 @@ -# This file was autogenerated using `zio-sbt-website` via `sbt generateGithubWorkflow` +# This file was autogenerated using `zio-sbt-website` via `sbt generateGithubWorkflow` # task and should be included in the git repository. Please do not edit it manually. name: Website -'on': +"on": workflow_dispatch: {} release: types: - - published + - published push: branches: - - main + - main pull_request: {} jobs: build: - name: Build and Test + name: Build Docs runs-on: ubuntu-latest if: ${{ github.event_name == 'pull_request' }} steps: - - name: Git Checkout - uses: actions/checkout@v3.3.0 - with: - fetch-depth: '0' - - name: Setup Scala - uses: actions/setup-java@v4.5.0 - with: - distribution: temurin - java-version: 17 - check-latest: true - - name: Check website build process - run: sbt docs/buildWebsite + - name: Checkout current branch + uses: actions/checkout@v4.2.0 + with: + fetch-depth: 0 + - name: Setup Scala and Java + uses: actions/setup-java@v4.5.0 + with: + distribution: temurin + java-version: 17 + check-latest: true + - name: Setup sbt + uses: sbt/setup-sbt@v1 + - name: Check website build process + run: sbt docs/buildWebsite publish-docs: name: Publish Docs runs-on: ubuntu-latest if: ${{ ((github.event_name == 'release') && (github.event.action == 'published')) || (github.event_name == 'workflow_dispatch') }} steps: - - name: Git Checkout - uses: actions/checkout@v3.3.0 - with: - fetch-depth: '0' - - name: Setup Scala - uses: actions/setup-java@v4.5.0 - with: - distribution: temurin - java-version: 17 - check-latest: true - - name: Setup NodeJs - uses: actions/setup-node@v3 - with: - node-version: 16.x - registry-url: https://registry.npmjs.org - - name: Publish Docs to NPM Registry - run: sbt docs/publishToNpm - env: - NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }} + - name: Git Checkout + uses: actions/checkout@v4.2.0 + with: + fetch-depth: 0 + - name: Setup Scala and Java + uses: actions/setup-java@v4.5.0 + with: + distribution: temurin + java-version: 17 + check-latest: true + - name: Setup sbt + uses: sbt/setup-sbt@v1 + - name: Setup NodeJs + uses: actions/setup-node@v3 + with: + node-version: 16.x + registry-url: https://registry.npmjs.org + - name: Publish Docs to NPM Registry + run: sbt docs/publishToNpm + env: + NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }} generate-readme: name: Generate README runs-on: ubuntu-latest if: ${{ (github.event_name == 'push') || ((github.event_name == 'release') && (github.event_name == 'published')) }} steps: - - name: Git Checkout - uses: actions/checkout@v3.3.0 - with: - ref: ${{ github.head_ref }} - fetch-depth: '0' - - name: Setup Scala - uses: actions/setup-java@v4.5.0 - with: - distribution: temurin - java-version: 17 - check-latest: true - - name: Generate Readme - run: sbt docs/generateReadme - - name: Commit Changes - run: | - git config --local user.email "github-actions[bot]@users.noreply.github.com" - git config --local user.name "github-actions[bot]" - git add README.md - git commit -m "Update README.md" || echo "No changes to commit" - - name: Create Pull Request - uses: peter-evans/create-pull-request@v4.2.3 - with: - body: |- - Autogenerated changes after running the `sbt docs/generateReadme` command of the [zio-sbt-website](https://zio.dev/zio-sbt) plugin. + - name: Git Checkout + uses: actions/checkout@v4.2.0 + with: + ref: ${{ github.head_ref }} + fetch-depth: 0 + - name: Setup Scala and Java + uses: actions/setup-java@v4.5.0 + with: + distribution: temurin + java-version: 17 + check-latest: true + - name: Setup sbt + uses: sbt/setup-sbt@v1 + - name: Generate Readme + run: sbt docs/generateReadme + - name: Commit Changes + run: | + git config --local user.email "github-actions[bot]@users.noreply.github.com" + git config --local user.name "github-actions[bot]" + git add README.md + git commit -m "Update README.md" || echo "No changes to commit" + - name: Create Pull Request + uses: peter-evans/create-pull-request@v4.2.3 + with: + body: |- + Autogenerated changes after running the `sbt docs/generateReadme` command of the [zio-sbt-website](https://zio.dev/zio-sbt) plugin. - I will automatically update the README.md file whenever there is new change for README.md, e.g. - - After each release, I will update the version in the installation section. - - After any changes to the "docs/index.md" file, I will update the README.md file accordingly. - branch: zio-sbt-website/update-readme - commit-message: Update README.md - delete-branch: true - title: Update README.md + I will automatically update the README.md file whenever there is new change for README.md, e.g. + - After each release, I will update the version in the installation section. + - After any changes to the "docs/index.md" file, I will update the README.md file accordingly. + branch: zio-sbt-website/update-readme + commit-message: Update README.md + delete-branch: true + title: Update README.md diff --git a/.scalafmt.conf b/.scalafmt.conf index 411b2b22e..65764a8b7 100644 --- a/.scalafmt.conf +++ b/.scalafmt.conf @@ -1,5 +1,27 @@ -version = "3.7.17" +version = "3.8.3" runner.dialect = scala213 + +fileOverride { + "glob:**/project/**" { + runner.dialect = scala213 + } + "glob:**/build.sbt" { + runner.dialect = scala213 + } + "glob:**/scala-2/**" { + runner.dialect = scala213 + } + "glob:**/scala-2.12/**" { + runner.dialect = scala212 + } + "glob:**/scala-2.13/**" { + runner.dialect = scala213 + } + "glob:**/scala-3/**" { + runner.dialect = scala3 + } +} + maxColumn = 120 align.preset = most continuationIndent.defnSite = 2 diff --git a/README.md b/README.md index 39fbca987..a688f0d26 100644 --- a/README.md +++ b/README.md @@ -4,11 +4,8 @@ # ZIO Config -# ZIO Config - [ZIO Config](https://zio.dev/zio-config/) is a ZIO-based library and act as an extension to core library ZIO's `Config` language. - [![Production Ready](https://img.shields.io/badge/Project%20Stage-Production%20Ready-brightgreen.svg)](https://github.com/zio/zio/wiki/Project-Stages) ![CI Badge](https://github.com/zio/zio-config/workflows/CI/badge.svg) [![Sonatype Releases](https://img.shields.io/nexus/r/https/oss.sonatype.org/dev.zio/zio-config_2.13.svg?label=Sonatype%20Release)](https://oss.sonatype.org/content/repositories/releases/dev/zio/zio-config_2.13/) [![Sonatype Snapshots](https://img.shields.io/nexus/s/https/oss.sonatype.org/dev.zio/zio-config_2.13.svg?label=Sonatype%20Snapshot)](https://oss.sonatype.org/content/repositories/snapshots/dev/zio/zio-config_2.13/) [![javadoc](https://javadoc.io/badge2/dev.zio/zio-config-docs_2.13/javadoc.svg)](https://javadoc.io/doc/dev.zio/zio-config-docs_2.13) [![ZIO Config](https://img.shields.io/github/stars/zio/zio-config?style=social)](https://github.com/zio/zio-config) Let's enumerate some key features of this library: @@ -50,11 +47,11 @@ Learn more on the [ZIO Config homepage](https://zio.dev/zio-config/)! ## Contributing -For the general guidelines, see ZIO [contributor's guide](https://zio.dev/about/contributing). +For the general guidelines, see ZIO [contributor's guide](https://zio.dev/contributor-guidelines). ## Code of Conduct -See the [Code of Conduct](https://zio.dev/about/code-of-conduct) +See the [Code of Conduct](https://zio.dev/code-of-conduct) ## Support diff --git a/aws/shared/src/main/scala/zio/config/aws/parameterstore/ParameterStoreConfigProvider.scala b/aws/src/main/scala/zio/config/aws/parameterstore/ParameterStoreConfigProvider.scala similarity index 100% rename from aws/shared/src/main/scala/zio/config/aws/parameterstore/ParameterStoreConfigProvider.scala rename to aws/src/main/scala/zio/config/aws/parameterstore/ParameterStoreConfigProvider.scala diff --git a/aws/shared/src/main/scala/zio/config/aws/parameterstore/package.scala b/aws/src/main/scala/zio/config/aws/parameterstore/package.scala similarity index 100% rename from aws/shared/src/main/scala/zio/config/aws/parameterstore/package.scala rename to aws/src/main/scala/zio/config/aws/parameterstore/package.scala diff --git a/build.sbt b/build.sbt index 38ae1917f..a94c03d70 100644 --- a/build.sbt +++ b/build.sbt @@ -1,15 +1,20 @@ -import BuildHelper.* +import Versions.{Scala212, Scala213, Scala3} -welcomeMessage +enablePlugins(ZioSbtEcosystemPlugin, ZioSbtCiPlugin) + +usefulTasksAndSettings ++= BuildHelper.usefulTasksAndSettings.value + +Global / onChangedBuildSource := ReloadOnSourceChanges Global / onChangedBuildSource := ReloadOnSourceChanges inThisBuild( List( - organization := "dev.zio", - homepage := Some(url("https://zio.dev/zio-config/")), - licenses := List("Apache-2.0" -> url("http://www.apache.org/licenses/LICENSE-2.0")), - developers := List( + name := "zio-config", + organization := "dev.zio", + homepage := Some(url("https://zio.dev/zio-config/")), + licenses := List("Apache-2.0" -> url("http://www.apache.org/licenses/LICENSE-2.0")), + developers := List( Developer( "afsalthaj", "Afsal Thaj", @@ -23,133 +28,30 @@ inThisBuild( url("http://degoes.net") ) ), - versionScheme := Some("early-semver") - ) -) - -addCommandAlias("lint", "; ++2.13; scalafmtSbtCheck; scalafmtCheck; ++3.3; scalafmtCheck") -addCommandAlias("fmt", "; ++2.13; scalafmtSbt; scalafmtAll; ++3.3; scalafmtAll") -addCommandAlias("fix", "; all compile:scalafix test:scalafix; all scalafmtSbt scalafmtAll") -addCommandAlias("compileAll", "; ++2.12; root2-12/compile; ++2.13!; root2-13/compile; ++3.3!; root3/compile;") -addCommandAlias("testAll", "; ++2.12; root2-12/test; ++2.13!; root2-13/test; ++3.3!; root3/test;") -addCommandAlias( - "testJS", - ";zioConfigJS/test" -) -addCommandAlias( - "testJVM212", - ";zioConfigJVM/test;zioConfigTypesafeJVM/test;zioConfigDerivationJVM/test;zioConfigYamlJVM/test;examplesJVM/test;zioConfigAwsJVM/test;zioConfigZioAwsJVM/test;zioConfigXmlJVM/test;zioConfigPureconfigJVM/test" -) -addCommandAlias( - "testJVM213", - ";zioConfigJVM/test;zioConfigTypesafeJVM/test;zioConfigDerivationJVM/test;zioConfigYamlJVM/test;zioConfigRefinedJVM/test;zioConfigMagnoliaJVM/test;examplesJVM/test;zioConfigTypesafeMagnoliaTestsJVM/test;zioConfigAwsJVM/test;zioConfigZioAwsJVM/test;zioConfigXmlJVM/test;zioConfigPureconfigJVM/test" -) -addCommandAlias( - "testJVM3x", - ";zioConfigJVM/test;zioConfigTypesafeJVM/test;zioConfigDerivationJVM/test;zioConfigYamlJVM/test;zioConfigMagnoliaJVM/test;zioConfigAwsJVM/test;zioConfigZioAwsJVM/test;zioConfigXmlJVM/test;zioConfigPureconfigJVM/test" -) -addCommandAlias( - "testJVM", - ";testJVM212;testJVM213;testJVM3x;" -) - -addCommandAlias( - "checkMima", - "all zioConfigJVM/mimaReportBinaryIssues zioConfigTypesafeJVM/mimaReportBinaryIssues zioConfigDerivationJVM/mimaReportBinaryIssues zioConfigYamlJVM/mimaReportBinaryIssues zioConfigMagnoliaJVM/mimaReportBinaryIssues zioConfigAwsJVM/mimaReportBinaryIssues zioConfigZioAwsJVM/mimaReportBinaryIssues zioConfigXmlJVM/mimaReportBinaryIssues" -) - -val awsVersion = "1.12.777" -val zioAwsVersion = "7.28.29.4" -val zioVersion = "2.1.12" -val magnoliaVersion = "0.17.0" -val refinedVersion = "0.11.2" -val pureconfigVersion = "0.17.7" - -lazy val magnoliaDependencies = - libraryDependencies ++= { - if (scalaVersion.value == ScalaDotty) Seq.empty // Just to make IntelliJ happy - else { - Seq( - "com.propensive" %% "magnolia" % magnoliaVersion, - "org.scala-lang" % "scala-reflect" % scalaVersion.value + versionScheme := Some("early-semver"), + scalaVersion := Versions.Scala213, + scala212 := Versions.Scala212, + scala213 := Versions.Scala213, + scala3 := Versions.Scala3, + javaPlatform := Versions.JdkReleaseVersion, + ciEnabledBranches := Seq("master", "series/4.x"), + ciDefaultJavaDistribution := "temurin", + ciLintJobs := ciLintJobs.value.map(job => + job.copy(steps = + job.steps ++ Seq( + zio.sbt.githubactionsnative.Step.SingleStep( + name = "Check mima", + run = Some("sbt checkMima") + ) + ) ) - } - } - -lazy val refinedDependencies = - libraryDependencies ++= Seq("eu.timepit" %% "refined" % refinedVersion) - -lazy val pureconfigDependencies = - libraryDependencies ++= - Seq("com.github.pureconfig" %% "pureconfig-core" % pureconfigVersion) - -lazy val scala212projects = Seq[ProjectReference]( - zioConfigJS, - zioConfigJVM, - zioConfigAwsJVM, - zioConfigNative, - zioConfigTypesafeJVM, - zioConfigDerivationJVM, - zioConfigYamlJVM, - docs, - zioConfigEnumeratumJVM, - zioConfigCatsJVM, - zioConfigRefinedJVM, - zioConfigMagnoliaJVM, - zioConfigTypesafeMagnoliaTestsJVM, - zioConfigZioAwsJVM, - zioConfigXmlJVM, - zioConfigPureconfigJVM, - examplesJVM -) - -lazy val scala213projects = scala212projects ++ Seq[ProjectReference](zioConfigScalazJVM) - -lazy val scala3projects = - Seq[ProjectReference]( - zioConfigJVM, - zioConfigAwsJVM, - zioConfigZioAwsJVM, - zioConfigCatsJVM, - zioConfigDerivationJVM, - zioConfigEnumeratumJVM, - zioConfigMagnoliaJVM, - zioConfigRefinedJVM, - zioConfigScalazJVM, - zioConfigTypesafeJVM, - zioConfigYamlJVM, - zioConfigXmlJVM, - zioConfigPureconfigJVM, - docs + ) ) +) -lazy val root = - project - .in(file(".")) - .settings(publish / skip := true) - .aggregate(scala213projects *) - -lazy val `root2-12` = - project - .in(file("2-12")) - .settings(publish / skip := true) - .aggregate(scala212projects *) - -lazy val `root2-13` = - project - .in(file("2-13")) - .settings(publish / skip := true) - .aggregate(scala213projects *) - -lazy val `root3` = - project - .in(file("3")) - .settings(publish / skip := true) - .aggregate(scala3projects *) - -lazy val zioConfig = crossProject(JSPlatform, JVMPlatform, NativePlatform) +lazy val zioConfig = projectMatrix .in(file("core")) - .settings(stdSettings("zio-config")) + .settings(stdSettings(Some("zio-config"))) .settings(crossProjectSettings) .enablePlugins(BuildInfoPlugin) .settings(buildInfoSettings("zio.config")) @@ -157,109 +59,96 @@ lazy val zioConfig = crossProject(JSPlatform, JVMPlatform, NativePlatform) .settings(enableMimaSettings) .settings( libraryDependencies ++= Seq( - "dev.zio" %% "zio" % zioVersion, - "org.scala-lang.modules" %% "scala-collection-compat" % "2.12.0", - "dev.zio" %% "zio-test" % zioVersion % Test - ), - testFrameworks := Seq(new TestFramework("zio.test.sbt.ZTestFramework")) + "dev.zio" %%% "zio" % Versions.zio, + "org.scala-lang.modules" %%% "scala-collection-compat" % "2.12.0", + "dev.zio" %%% "zio-test" % Versions.zio % Test, + "dev.zio" %%% "zio-test-sbt" % Versions.zio % Test + ) ) + .jvmPlatform(scalaVersions = Seq(Scala212, Scala213, Scala3), settings = jvmSettings) + .jsPlatform(scalaVersions = Seq(Scala212, Scala213, Scala3), settings = jsSettings) + .nativePlatform(scalaVersions = Seq(Scala212, Scala213, Scala3), settings = nativeSettings) -lazy val zioConfigJS = zioConfig.js - .settings(libraryDependencies += "dev.zio" %%% "zio-test-sbt" % zioVersion % Test) - -lazy val zioConfigJVM = zioConfig.jvm - .settings(dottySettings) - .settings(libraryDependencies += "dev.zio" %%% "zio-test-sbt" % zioVersion % Test) - -lazy val zioConfigNative = zioConfig.native - .settings(nativeSettings) - -lazy val zioConfigAws = crossProject(JVMPlatform) +lazy val zioConfigAws = projectMatrix .in(file("aws")) - .settings(stdSettings("zio-config-aws")) + .settings(stdSettings(Some("zio-config-aws"))) .settings(crossProjectSettings) - .settings(dottySettings) .settings(enableMimaSettings) .settings( libraryDependencies ++= Seq( - "com.amazonaws" % "aws-java-sdk-ssm" % awsVersion, - "dev.zio" %% "zio-streams" % zioVersion, - "dev.zio" %% "zio-test" % zioVersion % Test, - "dev.zio" %% "zio-test-sbt" % zioVersion % Test - ), - testFrameworks := Seq(new TestFramework("zio.test.sbt.ZTestFramework")) + "com.amazonaws" % "aws-java-sdk-ssm" % Versions.aws, + "dev.zio" %% "zio-streams" % Versions.zio, + "dev.zio" %% "zio-test" % Versions.zio % Test, + "dev.zio" %% "zio-test-sbt" % Versions.zio % Test + ) ) .dependsOn(zioConfig % "compile->compile;test->test") + .jvmPlatform(scalaVersions = Seq(Scala212, Scala213, Scala3), settings = jvmSettings) -lazy val zioConfigAwsJVM = zioConfigAws.jvm - -lazy val zioConfigZioAws = crossProject(JVMPlatform) +lazy val zioConfigZioAws = projectMatrix .in(file("zio-aws")) - .settings(stdSettings("zio-config-zio-aws")) + .settings(stdSettings(Some("zio-config-zio-aws"))) .settings(crossProjectSettings) - .settings(dottySettings) .settings(enableMimaSettings) .settings( libraryDependencies ++= Seq( - "dev.zio" %% "zio-aws-ssm" % zioAwsVersion, - "dev.zio" %% "zio-streams" % zioVersion, - "dev.zio" %% "zio-test" % zioVersion % Test, - "dev.zio" %% "zio-test-sbt" % zioVersion % Test - ), - testFrameworks := Seq(new TestFramework("zio.test.sbt.ZTestFramework")) + "dev.zio" %% "zio-aws-ssm" % Versions.zioAws, + "dev.zio" %% "zio-streams" % Versions.zio, + "dev.zio" %% "zio-test" % Versions.zio % Test, + "dev.zio" %% "zio-test-sbt" % Versions.zio % Test + ) ) .dependsOn(zioConfig % "compile->compile;test->test") + .jvmPlatform(scalaVersions = Seq(Scala212, Scala213, Scala3), settings = jvmSettings) -lazy val zioConfigZioAwsJVM = zioConfigZioAws.jvm - -lazy val zioConfigRefined = crossProject(JVMPlatform) +lazy val zioConfigRefined = projectMatrix .in(file("refined")) - .settings(stdSettings("zio-config-refined")) + .settings(stdSettings(Some("zio-config-refined"))) .settings(crossProjectSettings) - .settings(dottySettings) .settings( - refinedDependencies, + Dependencies.refined, libraryDependencies ++= Seq( - "dev.zio" %% "zio-test" % zioVersion % Test, - "dev.zio" %% "zio-test-sbt" % zioVersion % Test - ), - testFrameworks := Seq(new TestFramework("zio.test.sbt.ZTestFramework")) + "dev.zio" %%% "zio-test" % Versions.zio % Test, + "dev.zio" %%% "zio-test-sbt" % Versions.zio % Test + ) ) .dependsOn(zioConfigMagnolia % "compile->compile;test->test") + .jvmPlatform(scalaVersions = Seq(Scala212, Scala213, Scala3), settings = jvmSettings) + .jsPlatform(scalaVersions = Seq(Scala212, Scala213, Scala3), settings = jsSettings) + .nativePlatform(scalaVersions = Seq(Scala3), settings = nativeSettings) -lazy val zioConfigRefinedJVM = zioConfigRefined.jvm - -lazy val zioConfigPureconfig = crossProject(JVMPlatform) +lazy val zioConfigPureconfig = projectMatrix .in(file("pureconfig")) - .settings(stdSettings("zio-config-pureconfig")) + .settings(stdSettings(Some("zio-config-pureconfig"))) .settings(crossProjectSettings) - .settings(dottySettings) - .settings(enableMimaSettings) .settings( - pureconfigDependencies, + enableMimaSettings ++ Seq( + checkMima / skip := true + ) + ) + .settings( + Dependencies.pureconfig, libraryDependencies ++= Seq( - "dev.zio" %% "zio-test" % zioVersion % Test, - "dev.zio" %% "zio-test-sbt" % zioVersion % Test - ), - testFrameworks := Seq(new TestFramework("zio.test.sbt.ZTestFramework")) + "dev.zio" %% "zio-test" % Versions.zio % Test, + "dev.zio" %% "zio-test-sbt" % Versions.zio % Test + ) ) - .dependsOn(zioConfig % "compile->compile;test->test", zioConfigTypesafe) - -lazy val zioConfigPureconfigJVM = zioConfigPureconfig.jvm + .dependsOn(zioConfig % "test->test", zioConfigTypesafe) + .jvmPlatform(scalaVersions = Seq(Scala212, Scala213, Scala3), settings = jvmSettings) lazy val runAllExamples = taskKey[Unit]("Run all main classes in examples module") -lazy val examples = crossProject(JVMPlatform) +lazy val examples = projectMatrix .in(file("examples")) - .settings(stdSettings("zio-config-examples")) + .settings(stdSettings(Some("zio-config-examples"))) .settings(crossProjectSettings) .settings( publish / skip := true, fork := true, - magnoliaDependencies, - refinedDependencies, + Dependencies.magnolia, + Dependencies.refined, runAllExamples := Def .taskDyn({ @@ -277,200 +166,186 @@ lazy val examples = crossProject(JVMPlatform) .value ) .dependsOn(zioConfig, zioConfigMagnolia, zioConfigRefined, zioConfigTypesafe, zioConfigYaml) + .jvmPlatform(scalaVersions = Seq(Scala212, Scala213, Scala3), settings = jvmSettings) -lazy val examplesJVM = examples.jvm - -lazy val zioConfigDerivation = crossProject(JVMPlatform) +lazy val zioConfigDerivation = projectMatrix .in(file("derivation")) - .settings(stdSettings("zio-config-derivation")) + .settings(stdSettings(Some("zio-config-derivation"))) .settings(crossProjectSettings) - .settings(dottySettings) .settings(enableMimaSettings) .dependsOn(zioConfig) + .jvmPlatform(scalaVersions = Seq(Scala212, Scala213, Scala3), settings = jvmSettings) + .jsPlatform(scalaVersions = Seq(Scala212, Scala213, Scala3), settings = jsSettings) + .nativePlatform(scalaVersions = Seq(Scala212, Scala213, Scala3), settings = nativeSettings) -lazy val zioConfigDerivationJVM = zioConfigDerivation.jvm - -lazy val zioConfigMagnolia = crossProject(JVMPlatform) +// FIXME: annotations for Scala 3 are not implemented, tests in zioConfigTypesafeMagnoliaTests fail +lazy val zioConfigMagnolia = projectMatrix .in(file("magnolia")) - .settings(stdSettings("zio-config-magnolia")) + .settings(stdSettings(Some("zio-config-magnolia"))) .settings(crossProjectSettings) - .settings(dottySettings) .settings(enableMimaSettings) .settings( - magnoliaDependencies, + Dependencies.magnolia, scalacOptions ++= { - if (scalaVersion.value == ScalaDotty) { - Seq("-Xmax-inlines", "64") - } else { + if (scalaVersion.value == Scala3) + Seq.empty + else Seq("-language:experimental.macros") - } }, libraryDependencies ++= Seq( - "dev.zio" %% "zio-test" % zioVersion % Test, - "dev.zio" %% "zio-test-sbt" % zioVersion % Test - ), - testFrameworks := Seq(new TestFramework("zio.test.sbt.ZTestFramework")) + "dev.zio" %%% "zio-test" % Versions.zio % Test, + "dev.zio" %%% "zio-test-sbt" % Versions.zio % Test + ) ) .dependsOn(zioConfig % "compile->compile;test->test", zioConfigDerivation) + .jvmPlatform(scalaVersions = Seq(Scala212, Scala213, Scala3), settings = jvmSettings) + .jsPlatform(scalaVersions = Seq(Scala212, Scala213, Scala3), settings = jsSettings) + .nativePlatform(scalaVersions = Seq(Scala3), settings = nativeSettings) -lazy val zioConfigMagnoliaJVM = zioConfigMagnolia.jvm - -lazy val zioConfigTypesafe = crossProject(JVMPlatform) +lazy val zioConfigTypesafe = projectMatrix .in(file("typesafe")) - .settings(stdSettings("zio-config-typesafe")) + .settings(stdSettings(Some("zio-config-typesafe"))) .settings(crossProjectSettings) - .settings(dottySettings) .settings(enableMimaSettings) .settings( libraryDependencies ++= Seq( "com.typesafe" % "config" % "1.4.3", - "dev.zio" %% "zio-test" % zioVersion % Test, - "dev.zio" %% "zio-test-sbt" % zioVersion % Test - ), - testFrameworks := Seq(new TestFramework("zio.test.sbt.ZTestFramework")) + "dev.zio" %% "zio-test" % Versions.zio % Test, + "dev.zio" %% "zio-test-sbt" % Versions.zio % Test + ) ) .dependsOn(zioConfig % "compile->compile;test->test") + .jvmPlatform(scalaVersions = Seq(Scala212, Scala213, Scala3), settings = jvmSettings) -lazy val zioConfigTypesafeJVM = zioConfigTypesafe.jvm - -lazy val zioConfigYaml = crossProject(JVMPlatform) +lazy val zioConfigYaml = projectMatrix .in(file("yaml")) - .settings(stdSettings("zio-config-yaml")) + .settings(stdSettings(Some("zio-config-yaml"))) .settings(crossProjectSettings) .settings(enableMimaSettings) .settings( libraryDependencies ++= Seq( - "org.snakeyaml" % "snakeyaml-engine" % "2.7", - "dev.zio" %% "zio-test" % zioVersion % Test, - "dev.zio" %% "zio-test-sbt" % zioVersion % Test - ), - testFrameworks := Seq(new TestFramework("zio.test.sbt.ZTestFramework")) + "org.snakeyaml" % "snakeyaml-engine" % "2.8", + "dev.zio" %% "zio-test" % Versions.zio % Test, + "dev.zio" %% "zio-test-sbt" % Versions.zio % Test + ) ) .dependsOn(zioConfig % "compile->compile;test->test") + .jvmPlatform(scalaVersions = Seq(Scala212, Scala213, Scala3)) -lazy val zioConfigYamlJVM = zioConfigYaml.jvm - .settings(dottySettings) - -lazy val zioConfigXml = crossProject(JVMPlatform) +lazy val zioConfigXml = projectMatrix .in(file("xml")) - .settings(stdSettings("zio-config-xml")) + .settings(stdSettings(Some("zio-config-xml"))) .settings(crossProjectSettings) .settings(enableMimaSettings) .settings( libraryDependencies ++= Seq( - "dev.zio" %% "zio-parser" % "0.1.9", - "dev.zio" %% "zio-test" % zioVersion % Test, - "dev.zio" %% "zio-test-sbt" % zioVersion % Test - ), - testFrameworks := Seq(new TestFramework("zio.test.sbt.ZTestFramework")) + "dev.zio" %%% "zio-parser" % "0.1.10", + "dev.zio" %%% "zio-test" % Versions.zio % Test, + "dev.zio" %%% "zio-test-sbt" % Versions.zio % Test + ) ) .dependsOn(zioConfig % "compile->compile;test->test") + .jvmPlatform(scalaVersions = Seq(Scala212, Scala213, Scala3), settings = jvmSettings) + .jsPlatform(scalaVersions = Seq(Scala212, Scala213, Scala3), settings = jsSettings) +// .nativePlatform(scalaVersions = Seq(Scala212, Scala213, Scala3), settings = nativeSettings) // Note: zio-parser is not available for Scala Native 0.5 -lazy val zioConfigXmlJVM = zioConfigXml.jvm - .settings(dottySettings) - -lazy val zioConfigScalaz = crossProject(JSPlatform, JVMPlatform, NativePlatform) +lazy val zioConfigScalaz = projectMatrix .in(file("scalaz")) - .settings(stdSettings("zio-config-scalaz")) + .settings(stdSettings(Some("zio-config-scalaz"))) .settings(crossProjectSettings) .settings( - crossScalaVersions --= Seq(Scala212), libraryDependencies ++= Seq( - "org.scalaz" %% "scalaz-core" % "7.4.0-M15", - "dev.zio" %% "zio-test" % zioVersion % Test, - "dev.zio" %% "zio-test-sbt" % zioVersion % Test - ), - testFrameworks := Seq(new TestFramework("zio.test.sbt.ZTestFramework")) + "org.scalaz" %%% "scalaz-core" % "7.4.0-M15", + "dev.zio" %%% "zio-test" % Versions.zio % Test, + "dev.zio" %%% "zio-test-sbt" % Versions.zio % Test + ) ) .dependsOn(zioConfig % "compile->compile;test->test") + .jvmPlatform(scalaVersions = Seq(Scala213, Scala3), settings = jvmSettings) + .jsPlatform(scalaVersions = Seq(Scala213, Scala3), settings = jsSettings) + .nativePlatform(scalaVersions = Seq(Scala213, Scala3), settings = nativeSettings) -lazy val zioConfigScalazJVM = zioConfigScalaz.jvm - .settings(dottySettings) - -lazy val zioConfigCats = crossProject(JSPlatform, JVMPlatform, NativePlatform) +lazy val zioConfigCats = projectMatrix .in(file("cats")) - .settings(stdSettings("zio-config-cats")) + .settings(stdSettings(Some("zio-config-cats"))) .settings(crossProjectSettings) .settings( libraryDependencies ++= Seq( - "org.typelevel" %% "cats-core" % "2.12.0", - "dev.zio" %% "zio-test" % zioVersion % Test, - "dev.zio" %% "zio-test-sbt" % zioVersion % Test - ), - testFrameworks := Seq(new TestFramework("zio.test.sbt.ZTestFramework")) + "org.typelevel" %%% "cats-core" % "2.12.0", + "dev.zio" %%% "zio-test" % Versions.zio % Test, + "dev.zio" %%% "zio-test-sbt" % Versions.zio % Test + ) ) .dependsOn(zioConfig % "compile->compile;test->test") + .jvmPlatform(scalaVersions = Seq(Scala212, Scala213, Scala3), settings = jvmSettings) + .jsPlatform(scalaVersions = Seq(Scala212, Scala213, Scala3), settings = jsSettings) + .nativePlatform(scalaVersions = Seq(Scala212, Scala213, Scala3), settings = nativeSettings) -lazy val zioConfigCatsJVM = zioConfigCats.jvm - .settings(dottySettings) - -lazy val zioConfigEnumeratum = crossProject(JSPlatform, JVMPlatform, NativePlatform) +lazy val zioConfigEnumeratum = projectMatrix .in(file("enumeratum")) - .settings(stdSettings("zio-config-enumeratum")) + .settings(stdSettings(Some("zio-config-enumeratum"))) .settings(crossProjectSettings) .settings( libraryDependencies ++= Seq( - "com.beachape" %% "enumeratum" % "1.7.5", - "dev.zio" %% "zio-test" % zioVersion % Test, - "dev.zio" %% "zio-test-sbt" % zioVersion % Test - ), - testFrameworks := Seq(new TestFramework("zio.test.sbt.ZTestFramework")) + "com.beachape" %%% "enumeratum" % "1.7.5", + "dev.zio" %%% "zio-test" % Versions.zio % Test, + "dev.zio" %%% "zio-test-sbt" % Versions.zio % Test + ) ) .dependsOn(zioConfig % "compile->compile;test->test") + .jvmPlatform(scalaVersions = Seq(Scala212, Scala213, Scala3), settings = jvmSettings) + .jsPlatform(scalaVersions = Seq(Scala212, Scala213, Scala3), settings = jsSettings) + .nativePlatform(scalaVersions = Seq(Scala212, Scala213, Scala3), settings = nativeSettings) -lazy val zioConfigEnumeratumJVM = zioConfigEnumeratum.jvm - -lazy val zioConfigTypesafeMagnoliaTests = crossProject(JVMPlatform) +lazy val zioConfigTypesafeMagnoliaTests = projectMatrix .in(file("typesafe-magnolia-tests")) - .settings(stdSettings("zio-config-typesafe-magnolia-tests")) + .settings(stdSettings(Some("zio-config-typesafe-magnolia-tests"))) .settings(crossProjectSettings) .settings( publish / skip := true, libraryDependencies ++= Seq( "com.typesafe" % "config" % "1.4.3", - "dev.zio" %% "zio-test" % zioVersion % Test, - "dev.zio" %% "zio-test-sbt" % zioVersion % Test - ), - testFrameworks := Seq(new TestFramework("zio.test.sbt.ZTestFramework")) + "dev.zio" %% "zio-test" % Versions.zio % Test, + "dev.zio" %% "zio-test-sbt" % Versions.zio % Test + ) ) .dependsOn(zioConfig % "compile->compile;test->test", zioConfigTypesafe, zioConfigMagnolia, zioConfigDerivation) -lazy val zioConfigTypesafeMagnoliaTestsJVM = zioConfigTypesafeMagnoliaTests.jvm + .jvmPlatform(scalaVersions = Seq(Scala212, Scala213, Scala3), settings = jvmSettings) -lazy val docs = project +lazy val docs = projectMatrix .in(file("zio-config-docs")) .settings( moduleName := "zio-config-docs", scalacOptions -= "-Yno-imports", scalacOptions -= "-Xfatal-warnings", - magnoliaDependencies, - refinedDependencies, - crossScalaVersions := (zioConfigJVM / crossScalaVersions).value, + Dependencies.magnolia, + Dependencies.refined, projectName := "ZIO Config", - mainModuleName := (zioConfigJVM / moduleName).value, + mainModuleName := (zioConfig.jvm(Scala213) / moduleName).value, projectStage := ProjectStage.ProductionReady, ScalaUnidoc / unidoc / unidocProjectFilter := inProjects( - zioConfigJVM, - zioConfigTypesafeJVM, - zioConfigDerivationJVM, - zioConfigYamlJVM, - zioConfigRefinedJVM, - zioConfigMagnoliaJVM + Seq(zioConfig, zioConfigTypesafe, zioConfigDerivation, zioConfigYaml, zioConfigRefined, zioConfigMagnolia) + .map(_.jvm(Scala213).project): _* ) ) .settings(macroDefinitionSettings) + .jvmPlatform(scalaVersions = Seq(Scala213), settings = jvmSettings) .dependsOn( - zioConfigJVM, - zioConfigTypesafeJVM, - zioConfigDerivationJVM, - zioConfigYamlJVM, - zioConfigRefinedJVM, - zioConfigMagnoliaJVM + zioConfig, + zioConfigTypesafe, + zioConfigDerivation, + zioConfigYaml, + zioConfigRefined, + zioConfigMagnolia ) .enablePlugins(WebsitePlugin) +val checkMima = taskKey[Unit]("Check mima") + lazy val enableMimaSettings = Def.settings( + checkMima := { if (isScalaJVM.value && !(checkMima / skip).value) mimaReportBinaryIssues.value else () }, mimaFailOnProblem := true, mimaPreviousArtifacts := previousStableVersion.value.map(organization.value %% moduleName.value % _).toSet, mimaBinaryIssueFilters := Seq() diff --git a/cats/shared/src/main/scala/zio/config/cats/instances/package.scala b/cats/src/main/scala/zio/config/cats/instances/package.scala similarity index 100% rename from cats/shared/src/main/scala/zio/config/cats/instances/package.scala rename to cats/src/main/scala/zio/config/cats/instances/package.scala diff --git a/cats/shared/src/main/scala/zio/config/cats/package.scala b/cats/src/main/scala/zio/config/cats/package.scala similarity index 100% rename from cats/shared/src/main/scala/zio/config/cats/package.scala rename to cats/src/main/scala/zio/config/cats/package.scala diff --git a/contributing.md b/contributing.md index 953b0c697..cbce30f26 100644 --- a/contributing.md +++ b/contributing.md @@ -31,6 +31,6 @@ that all assertions in the example holds true even after your change. ``` cd zio-config -./sbt docs/buildWebsite +sbt docs/buildWebsite ``` diff --git a/core/shared/src/main/scala/zio/config/project/build.properties b/core/shared/src/main/scala/zio/config/project/build.properties deleted file mode 100644 index 7de0a9382..000000000 --- a/core/shared/src/main/scala/zio/config/project/build.properties +++ /dev/null @@ -1 +0,0 @@ -sbt.version=1.4.4 diff --git a/core/shared/src/main/scala-2.12/zio/config/VersionSpecificSupport.scala b/core/src/main/scala-2.12/zio/config/VersionSpecificSupport.scala similarity index 100% rename from core/shared/src/main/scala-2.12/zio/config/VersionSpecificSupport.scala rename to core/src/main/scala-2.12/zio/config/VersionSpecificSupport.scala diff --git a/core/shared/src/main/scala-2.13/zio/config/VersionSpecificSupport.scala b/core/src/main/scala-2.13/zio/config/VersionSpecificSupport.scala similarity index 100% rename from core/shared/src/main/scala-2.13/zio/config/VersionSpecificSupport.scala rename to core/src/main/scala-2.13/zio/config/VersionSpecificSupport.scala diff --git a/core/shared/src/main/scala-2.x/zio/config/TupleConversion.scala b/core/src/main/scala-2/zio/config/TupleConversion.scala similarity index 100% rename from core/shared/src/main/scala-2.x/zio/config/TupleConversion.scala rename to core/src/main/scala-2/zio/config/TupleConversion.scala diff --git a/core/shared/src/main/scala-3.x/zio/config/TupleConversion.scala b/core/src/main/scala-3/zio/config/TupleConversion.scala similarity index 100% rename from core/shared/src/main/scala-3.x/zio/config/TupleConversion.scala rename to core/src/main/scala-3/zio/config/TupleConversion.scala diff --git a/core/shared/src/main/scala-3.x/zio/config/VersionSpecificSupport.scala b/core/src/main/scala-3/zio/config/VersionSpecificSupport.scala similarity index 100% rename from core/shared/src/main/scala-3.x/zio/config/VersionSpecificSupport.scala rename to core/src/main/scala-3/zio/config/VersionSpecificSupport.scala diff --git a/core/shared/src/main/scala/zio/config/ConfigDocsModule.scala b/core/src/main/scala/zio/config/ConfigDocsModule.scala similarity index 100% rename from core/shared/src/main/scala/zio/config/ConfigDocsModule.scala rename to core/src/main/scala/zio/config/ConfigDocsModule.scala diff --git a/core/shared/src/main/scala/zio/config/IndexedFlat.scala b/core/src/main/scala/zio/config/IndexedFlat.scala similarity index 100% rename from core/shared/src/main/scala/zio/config/IndexedFlat.scala rename to core/src/main/scala/zio/config/IndexedFlat.scala diff --git a/core/shared/src/main/scala/zio/config/KeyConversionFunctions.scala b/core/src/main/scala/zio/config/KeyConversionFunctions.scala similarity index 100% rename from core/shared/src/main/scala/zio/config/KeyConversionFunctions.scala rename to core/src/main/scala/zio/config/KeyConversionFunctions.scala diff --git a/core/shared/src/main/scala/zio/config/package.scala b/core/src/main/scala/zio/config/package.scala similarity index 100% rename from core/shared/src/main/scala/zio/config/package.scala rename to core/src/main/scala/zio/config/package.scala diff --git a/core/shared/src/main/scala/zio/config/syntax/ConfigSyntax.scala b/core/src/main/scala/zio/config/syntax/ConfigSyntax.scala similarity index 100% rename from core/shared/src/main/scala/zio/config/syntax/ConfigSyntax.scala rename to core/src/main/scala/zio/config/syntax/ConfigSyntax.scala diff --git a/core/shared/src/main/scala/zio/config/syntax/IndexKey.scala b/core/src/main/scala/zio/config/syntax/IndexKey.scala similarity index 100% rename from core/shared/src/main/scala/zio/config/syntax/IndexKey.scala rename to core/src/main/scala/zio/config/syntax/IndexKey.scala diff --git a/core/shared/src/test/scala/zio/config/BaseSpec.scala b/core/src/test/scala/zio/config/BaseSpec.scala similarity index 100% rename from core/shared/src/test/scala/zio/config/BaseSpec.scala rename to core/src/test/scala/zio/config/BaseSpec.scala diff --git a/core/shared/src/test/scala/zio/config/GenerateDocsTest.scala b/core/src/test/scala/zio/config/GenerateDocsTest.scala similarity index 100% rename from core/shared/src/test/scala/zio/config/GenerateDocsTest.scala rename to core/src/test/scala/zio/config/GenerateDocsTest.scala diff --git a/core/shared/src/test/scala/zio/config/IndexedFlatSpec.scala b/core/src/test/scala/zio/config/IndexedFlatSpec.scala similarity index 100% rename from core/shared/src/test/scala/zio/config/IndexedFlatSpec.scala rename to core/src/test/scala/zio/config/IndexedFlatSpec.scala diff --git a/derivation/shared/src/main/scala-2.12/zio/config/derivation/NeedsDerive.scala b/derivation/src/main/scala-2.12/zio/config/derivation/NeedsDerive.scala similarity index 100% rename from derivation/shared/src/main/scala-2.12/zio/config/derivation/NeedsDerive.scala rename to derivation/src/main/scala-2.12/zio/config/derivation/NeedsDerive.scala diff --git a/derivation/shared/src/main/scala-2.13/zio/config/derivation/NeedsDerive.scala b/derivation/src/main/scala-2.13/zio/config/derivation/NeedsDerive.scala similarity index 100% rename from derivation/shared/src/main/scala-2.13/zio/config/derivation/NeedsDerive.scala rename to derivation/src/main/scala-2.13/zio/config/derivation/NeedsDerive.scala diff --git a/derivation/shared/src/main/scala/zio/config/derivation/annotations.scala b/derivation/src/main/scala/zio/config/derivation/annotations.scala similarity index 100% rename from derivation/shared/src/main/scala/zio/config/derivation/annotations.scala rename to derivation/src/main/scala/zio/config/derivation/annotations.scala diff --git a/enumeratum/shared/src/main/scala/zio/config/enumeratum/package.scala b/enumeratum/src/main/scala/zio/config/enumeratum/package.scala similarity index 100% rename from enumeratum/shared/src/main/scala/zio/config/enumeratum/package.scala rename to enumeratum/src/main/scala/zio/config/enumeratum/package.scala diff --git a/examples/shared/src/main/resources/application.conf b/examples/src/main/resources/application.conf similarity index 100% rename from examples/shared/src/main/resources/application.conf rename to examples/src/main/resources/application.conf diff --git a/examples/shared/src/main/resources/application.yml b/examples/src/main/resources/application.yml similarity index 100% rename from examples/shared/src/main/resources/application.yml rename to examples/src/main/resources/application.yml diff --git a/examples/shared/src/main/scala/zio/config/examples/CollectAllExample.scala b/examples/src/main/scala/zio/config/examples/CollectAllExample.scala similarity index 100% rename from examples/shared/src/main/scala/zio/config/examples/CollectAllExample.scala rename to examples/src/main/scala/zio/config/examples/CollectAllExample.scala diff --git a/examples/shared/src/main/scala/zio/config/examples/ConfigSourceOrElseExample.scala b/examples/src/main/scala/zio/config/examples/ConfigSourceOrElseExample.scala similarity index 96% rename from examples/shared/src/main/scala/zio/config/examples/ConfigSourceOrElseExample.scala rename to examples/src/main/scala/zio/config/examples/ConfigSourceOrElseExample.scala index 445478e8c..62f24c5ba 100644 --- a/examples/shared/src/main/scala/zio/config/examples/ConfigSourceOrElseExample.scala +++ b/examples/src/main/scala/zio/config/examples/ConfigSourceOrElseExample.scala @@ -88,7 +88,7 @@ object ConfigSourceOrElseExample extends App { object Hi extends App { val runner = ConfigProvider - .fromMap(Map("afsal.thaj" -> "damn", "afsal.thaj.hi" -> "sd", "afsal.thaj.bi" -> "sd2")) + .fromMap(Map("afsal.thaj" -> "damn")) .load(Config.table("afsal.thaj", Config.string)) println(Unsafe.unsafe { implicit u => diff --git a/examples/shared/src/main/scala/zio/config/examples/DefaultValueExample.scala b/examples/src/main/scala/zio/config/examples/DefaultValueExample.scala similarity index 100% rename from examples/shared/src/main/scala/zio/config/examples/DefaultValueExample.scala rename to examples/src/main/scala/zio/config/examples/DefaultValueExample.scala diff --git a/examples/shared/src/main/scala/zio/config/examples/DocsExampleConfluenceFlavoured.scala b/examples/src/main/scala/zio/config/examples/DocsExampleConfluenceFlavoured.scala similarity index 100% rename from examples/shared/src/main/scala/zio/config/examples/DocsExampleConfluenceFlavoured.scala rename to examples/src/main/scala/zio/config/examples/DocsExampleConfluenceFlavoured.scala diff --git a/examples/shared/src/main/scala/zio/config/examples/DocsExampleGithubFlavoured.scala b/examples/src/main/scala/zio/config/examples/DocsExampleGithubFlavoured.scala similarity index 100% rename from examples/shared/src/main/scala/zio/config/examples/DocsExampleGithubFlavoured.scala rename to examples/src/main/scala/zio/config/examples/DocsExampleGithubFlavoured.scala diff --git a/examples/shared/src/main/scala/zio/config/examples/SealedTraitManualDerivation.scala b/examples/src/main/scala/zio/config/examples/SealedTraitManualDerivation.scala similarity index 100% rename from examples/shared/src/main/scala/zio/config/examples/SealedTraitManualDerivation.scala rename to examples/src/main/scala/zio/config/examples/SealedTraitManualDerivation.scala diff --git a/examples/shared/src/main/scala/zio/config/examples/SimpleReadConfigExample.scala b/examples/src/main/scala/zio/config/examples/SimpleReadConfigExample.scala similarity index 100% rename from examples/shared/src/main/scala/zio/config/examples/SimpleReadConfigExample.scala rename to examples/src/main/scala/zio/config/examples/SimpleReadConfigExample.scala diff --git a/examples/shared/src/main/scala/zio/config/examples/StandardPattern.scala b/examples/src/main/scala/zio/config/examples/StandardPattern.scala similarity index 100% rename from examples/shared/src/main/scala/zio/config/examples/StandardPattern.scala rename to examples/src/main/scala/zio/config/examples/StandardPattern.scala diff --git a/examples/shared/src/main/scala/zio/config/examples/TupleExample.scala b/examples/src/main/scala/zio/config/examples/TupleExample.scala similarity index 100% rename from examples/shared/src/main/scala/zio/config/examples/TupleExample.scala rename to examples/src/main/scala/zio/config/examples/TupleExample.scala diff --git a/examples/shared/src/main/scala/zio/config/examples/ZioSupport.scala b/examples/src/main/scala/zio/config/examples/ZioSupport.scala similarity index 100% rename from examples/shared/src/main/scala/zio/config/examples/ZioSupport.scala rename to examples/src/main/scala/zio/config/examples/ZioSupport.scala diff --git a/examples/shared/src/main/scala/zio/config/examples/autoderivation/AutoDerivationCustomKeys.scala b/examples/src/main/scala/zio/config/examples/autoderivation/AutoDerivationCustomKeys.scala similarity index 100% rename from examples/shared/src/main/scala/zio/config/examples/autoderivation/AutoDerivationCustomKeys.scala rename to examples/src/main/scala/zio/config/examples/autoderivation/AutoDerivationCustomKeys.scala diff --git a/examples/shared/src/main/scala/zio/config/examples/autoderivation/AutoDerivationPureConfig.scala b/examples/src/main/scala/zio/config/examples/autoderivation/AutoDerivationPureConfig.scala similarity index 100% rename from examples/shared/src/main/scala/zio/config/examples/autoderivation/AutoDerivationPureConfig.scala rename to examples/src/main/scala/zio/config/examples/autoderivation/AutoDerivationPureConfig.scala diff --git a/examples/shared/src/main/scala/zio/config/examples/autoderivation/AutoDerivationSealedTrait.scala b/examples/src/main/scala/zio/config/examples/autoderivation/AutoDerivationSealedTrait.scala similarity index 100% rename from examples/shared/src/main/scala/zio/config/examples/autoderivation/AutoDerivationSealedTrait.scala rename to examples/src/main/scala/zio/config/examples/autoderivation/AutoDerivationSealedTrait.scala diff --git a/examples/shared/src/main/scala/zio/config/examples/autoderivation/AutoDerivationSealedTraitCustom.scala b/examples/src/main/scala/zio/config/examples/autoderivation/AutoDerivationSealedTraitCustom.scala similarity index 100% rename from examples/shared/src/main/scala/zio/config/examples/autoderivation/AutoDerivationSealedTraitCustom.scala rename to examples/src/main/scala/zio/config/examples/autoderivation/AutoDerivationSealedTraitCustom.scala diff --git a/examples/shared/src/main/scala/zio/config/examples/autoderivation/AutoDerivationSimple.scala b/examples/src/main/scala/zio/config/examples/autoderivation/AutoDerivationSimple.scala similarity index 93% rename from examples/shared/src/main/scala/zio/config/examples/autoderivation/AutoDerivationSimple.scala rename to examples/src/main/scala/zio/config/examples/autoderivation/AutoDerivationSimple.scala index 2376413f4..958b3be90 100644 --- a/examples/shared/src/main/scala/zio/config/examples/autoderivation/AutoDerivationSimple.scala +++ b/examples/src/main/scala/zio/config/examples/autoderivation/AutoDerivationSimple.scala @@ -29,7 +29,7 @@ object MyConfig { case class Aud(dollars: Double) extends Price final case class Aws(region: String, credentials: Credentials) - final case class DbUrl(value: String) extends AnyVal + final case class DbUrl(value: String) } object AutomaticConfig extends App { @@ -42,7 +42,7 @@ object AutomaticConfig extends App { "aws.credentials.Token.value" -> "token", "port" -> "10", "default" -> "12", - "dburl" -> "some url", + "dburl.value" -> "some url", "amount" -> "3.14", "quanity" -> "30.0", "price.Inr.value" -> "1000", diff --git a/examples/shared/src/main/scala/zio/config/examples/package.scala b/examples/src/main/scala/zio/config/examples/package.scala similarity index 100% rename from examples/shared/src/main/scala/zio/config/examples/package.scala rename to examples/src/main/scala/zio/config/examples/package.scala diff --git a/examples/shared/src/main/scala/zio/config/examples/refined/RefinedReadConfig.scala b/examples/src/main/scala/zio/config/examples/refined/RefinedReadConfig.scala similarity index 100% rename from examples/shared/src/main/scala/zio/config/examples/refined/RefinedReadConfig.scala rename to examples/src/main/scala/zio/config/examples/refined/RefinedReadConfig.scala diff --git a/examples/shared/src/main/scala/zio/config/examples/typesafe/EitherImpureOps.scala b/examples/src/main/scala/zio/config/examples/typesafe/EitherImpureOps.scala similarity index 100% rename from examples/shared/src/main/scala/zio/config/examples/typesafe/EitherImpureOps.scala rename to examples/src/main/scala/zio/config/examples/typesafe/EitherImpureOps.scala diff --git a/examples/shared/src/main/scala/zio/config/examples/typesafe/HoconSimple.scala b/examples/src/main/scala/zio/config/examples/typesafe/HoconSimple.scala similarity index 100% rename from examples/shared/src/main/scala/zio/config/examples/typesafe/HoconSimple.scala rename to examples/src/main/scala/zio/config/examples/typesafe/HoconSimple.scala diff --git a/examples/shared/src/main/scala/zio/config/examples/typesafe/PureConfigInterop.scala b/examples/src/main/scala/zio/config/examples/typesafe/PureConfigInterop.scala similarity index 97% rename from examples/shared/src/main/scala/zio/config/examples/typesafe/PureConfigInterop.scala rename to examples/src/main/scala/zio/config/examples/typesafe/PureConfigInterop.scala index 45e7e6d7d..f048fe6ce 100644 --- a/examples/shared/src/main/scala/zio/config/examples/typesafe/PureConfigInterop.scala +++ b/examples/src/main/scala/zio/config/examples/typesafe/PureConfigInterop.scala @@ -1,4 +1,5 @@ -package zio.config.examples.typesafe +package zio.config.examples +package typesafe import zio.ConfigProvider import zio.config._ diff --git a/examples/shared/src/main/scala/zio/config/examples/typesafe/SealedTraitListExample.scala b/examples/src/main/scala/zio/config/examples/typesafe/SealedTraitListExample.scala similarity index 95% rename from examples/shared/src/main/scala/zio/config/examples/typesafe/SealedTraitListExample.scala rename to examples/src/main/scala/zio/config/examples/typesafe/SealedTraitListExample.scala index a7a60fc9d..9fd3b26bb 100644 --- a/examples/shared/src/main/scala/zio/config/examples/typesafe/SealedTraitListExample.scala +++ b/examples/src/main/scala/zio/config/examples/typesafe/SealedTraitListExample.scala @@ -1,4 +1,5 @@ -package zio.config.examples.typesafe +package zio.config.examples +package typesafe import zio.ConfigProvider import zio.config.derivation.discriminator diff --git a/examples/shared/src/main/scala/zio/config/examples/typesafe/SubConfigExample.scala b/examples/src/main/scala/zio/config/examples/typesafe/SubConfigExample.scala similarity index 94% rename from examples/shared/src/main/scala/zio/config/examples/typesafe/SubConfigExample.scala rename to examples/src/main/scala/zio/config/examples/typesafe/SubConfigExample.scala index 0124c2e3e..61b66eccd 100644 --- a/examples/shared/src/main/scala/zio/config/examples/typesafe/SubConfigExample.scala +++ b/examples/src/main/scala/zio/config/examples/typesafe/SubConfigExample.scala @@ -1,4 +1,5 @@ -package zio.config.examples.typesafe +package zio.config.examples +package typesafe import zio.ConfigProvider import zio.config._ diff --git a/examples/shared/src/main/scala/zio/config/examples/typesafe/TypesafeConfigErrors.scala b/examples/src/main/scala/zio/config/examples/typesafe/TypesafeConfigErrors.scala similarity index 100% rename from examples/shared/src/main/scala/zio/config/examples/typesafe/TypesafeConfigErrors.scala rename to examples/src/main/scala/zio/config/examples/typesafe/TypesafeConfigErrors.scala diff --git a/examples/shared/src/main/scala/zio/config/examples/typesafe/TypesafeConfigList.scala b/examples/src/main/scala/zio/config/examples/typesafe/TypesafeConfigList.scala similarity index 100% rename from examples/shared/src/main/scala/zio/config/examples/typesafe/TypesafeConfigList.scala rename to examples/src/main/scala/zio/config/examples/typesafe/TypesafeConfigList.scala diff --git a/examples/shared/src/main/scala/zio/config/examples/typesafe/TypesafeConfigMap.scala b/examples/src/main/scala/zio/config/examples/typesafe/TypesafeConfigMap.scala similarity index 100% rename from examples/shared/src/main/scala/zio/config/examples/typesafe/TypesafeConfigMap.scala rename to examples/src/main/scala/zio/config/examples/typesafe/TypesafeConfigMap.scala diff --git a/examples/shared/src/main/scala/zio/config/examples/typesafe/TypesafeConfigSealedTrait.scala b/examples/src/main/scala/zio/config/examples/typesafe/TypesafeConfigSealedTrait.scala similarity index 100% rename from examples/shared/src/main/scala/zio/config/examples/typesafe/TypesafeConfigSealedTrait.scala rename to examples/src/main/scala/zio/config/examples/typesafe/TypesafeConfigSealedTrait.scala diff --git a/examples/shared/src/main/scala/zio/config/examples/typesafe/TypesafeConfigSimple.scala b/examples/src/main/scala/zio/config/examples/typesafe/TypesafeConfigSimple.scala similarity index 100% rename from examples/shared/src/main/scala/zio/config/examples/typesafe/TypesafeConfigSimple.scala rename to examples/src/main/scala/zio/config/examples/typesafe/TypesafeConfigSimple.scala diff --git a/magnolia/shared/src/main/scala-2.12-2.13/zio/config/magnolia/DeriveConfig.scala b/magnolia/src/main/scala-2/zio/config/magnolia/DeriveConfig.scala similarity index 100% rename from magnolia/shared/src/main/scala-2.12-2.13/zio/config/magnolia/DeriveConfig.scala rename to magnolia/src/main/scala-2/zio/config/magnolia/DeriveConfig.scala diff --git a/magnolia/shared/src/main/scala-2.12-2.13/zio/config/magnolia/package.scala b/magnolia/src/main/scala-2/zio/config/magnolia/package.scala similarity index 100% rename from magnolia/shared/src/main/scala-2.12-2.13/zio/config/magnolia/package.scala rename to magnolia/src/main/scala-2/zio/config/magnolia/package.scala diff --git a/magnolia/shared/src/main/scala-dotty/zio/config/magnolia/DeriveConfig.scala b/magnolia/src/main/scala-3/zio/config/magnolia/DeriveConfig.scala similarity index 100% rename from magnolia/shared/src/main/scala-dotty/zio/config/magnolia/DeriveConfig.scala rename to magnolia/src/main/scala-3/zio/config/magnolia/DeriveConfig.scala diff --git a/magnolia/shared/src/main/scala-dotty/zio/config/magnolia/Macros.scala b/magnolia/src/main/scala-3/zio/config/magnolia/Macros.scala similarity index 100% rename from magnolia/shared/src/main/scala-dotty/zio/config/magnolia/Macros.scala rename to magnolia/src/main/scala-3/zio/config/magnolia/Macros.scala diff --git a/magnolia/shared/src/main/scala-dotty/zio/config/magnolia/examples/AutoDerivationSimple.scala b/magnolia/src/main/scala-3/zio/config/magnolia/examples/AutoDerivationSimple.scala similarity index 100% rename from magnolia/shared/src/main/scala-dotty/zio/config/magnolia/examples/AutoDerivationSimple.scala rename to magnolia/src/main/scala-3/zio/config/magnolia/examples/AutoDerivationSimple.scala diff --git a/magnolia/shared/src/main/scala-dotty/zio/config/magnolia/examples/SampleConfig.scala b/magnolia/src/main/scala-3/zio/config/magnolia/examples/SampleConfig.scala similarity index 100% rename from magnolia/shared/src/main/scala-dotty/zio/config/magnolia/examples/SampleConfig.scala rename to magnolia/src/main/scala-3/zio/config/magnolia/examples/SampleConfig.scala diff --git a/magnolia/shared/src/main/scala-dotty/zio/config/magnolia/package.scala b/magnolia/src/main/scala-3/zio/config/magnolia/package.scala similarity index 71% rename from magnolia/shared/src/main/scala-dotty/zio/config/magnolia/package.scala rename to magnolia/src/main/scala-3/zio/config/magnolia/package.scala index 4fccb3835..fdf61dbb5 100644 --- a/magnolia/shared/src/main/scala-dotty/zio/config/magnolia/package.scala +++ b/magnolia/src/main/scala-3/zio/config/magnolia/package.scala @@ -6,7 +6,8 @@ import zio.IO import scala.deriving.Mirror package object magnolia { - def deriveConfig[A](implicit ev: DeriveConfig[A]) = + + def deriveConfig[A](using ev: DeriveConfig[A]) = ev.desc type describe = derivation.describe @@ -18,11 +19,11 @@ package object magnolia { type discriminator = derivation.discriminator val discriminator: derivation.discriminator.type = derivation.discriminator - // If you happen to define a Config directly as an implicit, then automatically DeriveConfig will be available - implicit def deriveConfigFromConfig[A](implicit ev: Config[A]): DeriveConfig[A] = +// If you happen to define a Config directly as an implicit, then automatically DeriveConfig will be available + given deriveConfigFromConfig[A](using ev: Config[A]): DeriveConfig[A] = DeriveConfig(ev, None) - implicit class ConfigProviderOps[A](configProvider: ConfigProvider) { + implicit class ConfigProviderOps(configProvider: ConfigProvider) { def autoLoad[A: DeriveConfig]: IO[Config.Error, A] = configProvider.load(DeriveConfig[A].desc) } diff --git a/magnolia/shared/src/test/scala-2.12-2.13/zio/config/magnolia/AutomaticConfigSpec.scala b/magnolia/src/test/scala-2/zio/config/magnolia/AutomaticConfigSpec.scala similarity index 100% rename from magnolia/shared/src/test/scala-2.12-2.13/zio/config/magnolia/AutomaticConfigSpec.scala rename to magnolia/src/test/scala-2/zio/config/magnolia/AutomaticConfigSpec.scala diff --git a/magnolia/shared/src/test/scala-dotty/zio/config/magnolia/AutomaticConfigSpec.scala b/magnolia/src/test/scala-3/zio/config/magnolia/AutomaticConfigSpec.scala similarity index 100% rename from magnolia/shared/src/test/scala-dotty/zio/config/magnolia/AutomaticConfigSpec.scala rename to magnolia/src/test/scala-3/zio/config/magnolia/AutomaticConfigSpec.scala diff --git a/magnolia/shared/src/test/scala-dotty/zio/config/magnolia/DefaultValueSpec.scala b/magnolia/src/test/scala-3/zio/config/magnolia/DefaultValueSpec.scala similarity index 100% rename from magnolia/shared/src/test/scala-dotty/zio/config/magnolia/DefaultValueSpec.scala rename to magnolia/src/test/scala-3/zio/config/magnolia/DefaultValueSpec.scala diff --git a/magnolia/shared/src/test/scala-dotty/zio/config/magnolia/MarkdownSpec.scala b/magnolia/src/test/scala-3/zio/config/magnolia/MarkdownSpec.scala similarity index 100% rename from magnolia/shared/src/test/scala-dotty/zio/config/magnolia/MarkdownSpec.scala rename to magnolia/src/test/scala-3/zio/config/magnolia/MarkdownSpec.scala diff --git a/project/BuildHelper.scala b/project/BuildHelper.scala index 1534d1ec3..5a739d756 100644 --- a/project/BuildHelper.scala +++ b/project/BuildHelper.scala @@ -5,89 +5,10 @@ import sbt.Keys.* import sbtbuildinfo.* import sbtbuildinfo.BuildInfoKeys.* import sbtcrossproject.CrossPlugin.autoImport.* +import sbtprojectmatrix.ProjectMatrixKeys.virtualAxes import scalafix.sbt.ScalafixPlugin.autoImport.* object BuildHelper { - private val versions: String => String = { - import org.snakeyaml.engine.v2.api.{Load, LoadSettings} - - import java.util.{List as JList, Map as JMap} - import scala.jdk.CollectionConverters.* - - val doc = new Load(LoadSettings.builder().build()) - .loadFromReader(scala.io.Source.fromFile(".github/workflows/ci.yml").bufferedReader()) - val yaml = doc.asInstanceOf[JMap[String, JMap[String, JMap[String, JMap[String, JMap[String, JList[String]]]]]]] - val list = yaml.get("jobs").get("test").get("strategy").get("matrix").get("scala").asScala - val map = list.map(v => (v.split('.').take(2).mkString("."), v)).toMap - - (prefix: String) => map.find(_._1.startsWith(prefix)).map(_._2).get - } - val Scala212: String = versions("2.12") - val Scala213: String = versions("2.13") - val ScalaDotty: String = versions("3") - - private val stdOptions = Seq( - "-deprecation", - "-encoding", - "UTF-8", - "-feature", - "-unchecked" - ) ++ - Seq("-Xfatal-warnings") - - private val std2xOptions = Seq( - "-language:higherKinds", - "-language:existentials", - "-explaintypes", - "-Yrangepos", - "-Xlint:_,-missing-interpolator,-type-parameter-shadow", - "-Ywarn-numeric-widen", - "-Ywarn-value-discard" - ) - - private def optimizerOptions(optimize: Boolean) = - if (optimize) - Seq( - "-opt:l:inline", - "-opt-inline-from:zio.internal.**" - ) - else Nil - - def buildInfoSettings(packageName: String) = - Seq( - buildInfoKeys := Seq[BuildInfoKey](organization, moduleName, name, version, scalaVersion, sbtVersion, isSnapshot), - buildInfoPackage := packageName - ) - - val dottySettings = Seq( - crossScalaVersions += ScalaDotty, - scalacOptions --= { - if (scalaVersion.value == ScalaDotty) - Seq("-Xfatal-warnings") - else - Seq("-Xprint:typer") - }, - Compile / doc / sources := { - val old = (Compile / doc / sources).value - if (scalaVersion.value == ScalaDotty) { - Nil - } else { - old - } - }, - Test / parallelExecution := { - val old = (Test / parallelExecution).value - if (scalaVersion.value == ScalaDotty) { - false - } else { - old - } - } - ) - - val scalaReflectSettings = Seq( - libraryDependencies ++= Seq("dev.zio" %%% "izumi-reflect" % "1.0.0-M10") - ) // Keep this consistent with the version in .core-tests/shared/src/test/scala/REPLSpec.scala val replSettings = makeReplSettings { @@ -128,183 +49,16 @@ object BuildHelper { Compile / console / initialCommands := initialCommandsStr ) - def extraOptions(scalaVersion: String, optimize: Boolean) = - CrossVersion.partialVersion(scalaVersion) match { - case Some((3, _)) => - Seq( - "-language:implicitConversions", - "-Xignore-scala2-macros" - ) - case Some((2, 13)) => - Seq( - "-Wunused:params,-implicits,-nowarn" - ) ++ std2xOptions ++ optimizerOptions(optimize) - case Some((2, 12)) => - Seq( - "-opt-warnings", - "-Ywarn-extra-implicit", - "-Ywarn-unused:_,imports", - "-Ywarn-unused:imports", - "-Ypartial-unification", - "-Yno-adapted-args", - "-Ywarn-inaccessible", - "-Ywarn-infer-any", - "-Ywarn-nullary-override", - "-Ywarn-nullary-unit", - "-Ywarn-unused:params,-implicits", - "-Xfuture", - "-Xsource:2.13", - "-Xmax-classfile-name", - "242" - ) ++ std2xOptions ++ optimizerOptions(optimize) - case _ => Seq.empty - } + lazy val jsSettings = Seq() - def platformSpecificSources(platform: String, conf: String, baseDirectory: File)(versions: String*) = for { - platform <- List("shared", platform) - version <- "scala" :: versions.toList.map("scala-" + _) - result = baseDirectory.getParentFile / platform.toLowerCase / "src" / conf / version - if result.exists - } yield result + lazy val jvmSettings = Seq() - def crossPlatformSources(scalaVer: String, platform: String, conf: String, baseDir: File) = { - val versions = CrossVersion.partialVersion(scalaVer) match { - case Some((2, 12)) => - List("2.12", "2.12+", "2.12-2.13", "2.x") - case Some((2, 13)) => - List("2.13", "2.12+", "2.13+", "2.12-2.13", "2.x") - case Some((3, _)) => - List("dotty", "2.12+", "2.13+", "3.x") - case _ => - List() - } - platformSpecificSources(platform, conf, baseDir)(versions: _*) - } - - lazy val crossProjectSettings = Seq( - resolvers += - "Sonatype OSS Snapshots" at "https://oss.sonatype.org/content/repositories/snapshots", - Compile / unmanagedSourceDirectories ++= { - crossPlatformSources( - scalaVersion.value, - crossProjectPlatform.value.identifier, - "main", - baseDirectory.value - ) - }, - Test / unmanagedSourceDirectories ++= { - crossPlatformSources( - scalaVersion.value, - crossProjectPlatform.value.identifier, - "test", - baseDirectory.value - ) - } - ) + lazy val nativeSettings = Seq() - def stdSettings(prjName: String) = Seq( - resolvers += - "Sonatype OSS Snapshots" at "https://oss.sonatype.org/content/repositories/snapshots", - name := s"$prjName", - crossScalaVersions := Seq(Scala212, Scala213), - ThisBuild / scalaVersion := Scala213, - scalacOptions := stdOptions ++ extraOptions(scalaVersion.value, optimize = !isSnapshot.value), - libraryDependencies ++= { - if (scalaVersion.value == ScalaDotty) - Seq.empty - else - Seq( - compilerPlugin("org.typelevel" %% "kind-projector" % "0.13.3" cross CrossVersion.full) - ) - }, - semanticdbEnabled := scalaVersion.value != ScalaDotty, // enable SemanticDB - semanticdbOptions += "-P:semanticdb:synthetics:on", - semanticdbVersion := scalafixSemanticdb.revision, // use Scalafix compatible version - ThisBuild / scalafixDependencies ++= List( - "com.github.liancheng" %% "organize-imports" % "0.6.0", - "com.github.vovapolu" %% "scaluzzi" % "0.1.23" - ), - Test / parallelExecution := true, - incOptions ~= (_.withLogRecompileOnMacro(false)), - autoAPIMappings := true, - unusedCompileDependenciesFilter -= moduleFilter("org.scala-js", "scalajs-library") - ) - - def macroExpansionSettings = Seq( - scalacOptions ++= { - CrossVersion.partialVersion(scalaVersion.value) match { - case Some((2, 13)) => Seq("-Ymacro-annotations") - case _ => Seq.empty - } - }, - libraryDependencies ++= { - CrossVersion.partialVersion(scalaVersion.value) match { - case Some((2, x)) if x <= 12 => - Seq(compilerPlugin(("org.scalamacros" % "paradise" % "2.1.1").cross(CrossVersion.full))) - case _ => Seq.empty - } - } - ) - - def macroDefinitionSettings = Seq( - scalacOptions += "-language:experimental.macros", - libraryDependencies ++= { - if (scalaVersion.value == ScalaDotty) Seq() - else - Seq( - "org.scala-lang" % "scala-reflect" % scalaVersion.value % "provided", - "org.scala-lang" % "scala-compiler" % scalaVersion.value % "provided" - ) - } - ) - - def jsSettings = Seq( - libraryDependencies += "io.github.cquiroz" %%% "scala-java-time" % "2.2.2", - libraryDependencies += "io.github.cquiroz" %%% "scala-java-time-tzdb" % "2.2.2" - ) - - def nativeSettings = Seq( - Test / skip := true, - doc / skip := true, - Compile / doc / sources := Seq.empty - ) - - val scalaReflectTestSettings: List[Setting[_]] = List( - libraryDependencies ++= { - if (scalaVersion.value == ScalaDotty) - Seq("org.scala-lang" % "scala-reflect" % Scala213 % Test) - else - Seq("org.scala-lang" % "scala-reflect" % scalaVersion.value % Test) - } - ) - - def welcomeMessage = onLoadMessage := { - import scala.Console - - def header(text: String): String = s"${Console.RED}$text${Console.RESET}" - - def item(text: String): String = s"${Console.GREEN}> ${Console.CYAN}$text${Console.RESET}" - def subItem(text: String): String = s" ${Console.YELLOW}> ${Console.CYAN}$text${Console.RESET}" - - s"""|${header(" ________ ___")} - |${header("|__ /_ _/ _ \\")} - |${header(" / / | | | | |")} - |${header(" / /_ | | |_| |")} - |${header(s"/____|___\\___/ ${version.value}")} - | - |Useful sbt tasks: - |${item("compileAll")} - Prepares sources & compiles. - |${item("testAll")} - Prepares sources & runs all tests. - |${item("fix")} - Fixes sources files using scalafix - |${item("fmt")} - Formats source files using scalafmt - |${item("testJVM")} - Runs all JVM tests - |${item("testJS")} - Runs all ScalaJS tests - |${item("testOnly *.YourSpec -- -t \"YourLabel\"")} - Only runs tests with matching term e.g. - |${item("docs/docusaurusCreateSite")} - Generates the ZIO microsite - """.stripMargin + def usefulTasksAndSettings: Def.Initialize[Seq[(String, String)]] = Def.setting { + Seq( + "docs/docusaurusCreateSite" -> "Generates the ZIO microsite." + ) } - implicit class ModuleHelper(p: Project) { - def module: Project = p.in(file(p.id)).settings(stdSettings(p.id)) - } } diff --git a/project/Dependencies.scala b/project/Dependencies.scala new file mode 100644 index 000000000..8dcc0ff8a --- /dev/null +++ b/project/Dependencies.scala @@ -0,0 +1,22 @@ +import org.portablescala.sbtplatformdeps.PlatformDepsPlugin.autoImport._ +import sbt._ +import sbt.Keys._ + +object Dependencies { + val magnolia = libraryDependencies ++= { + if (scalaVersion.value == Versions.Scala3) Seq.empty // Just to make IntelliJ happy + else { + Seq( + "com.propensive" %%% "magnolia" % Versions.magnolia, + "org.scala-lang" % "scala-reflect" % scalaVersion.value + ) + } + } + + lazy val refined = + libraryDependencies ++= Seq("eu.timepit" %%% "refined" % Versions.refined) + + lazy val pureconfig = + libraryDependencies ++= + Seq("com.github.pureconfig" %% "pureconfig-core" % Versions.pureconfig) +} diff --git a/project/Versions.scala b/project/Versions.scala new file mode 100644 index 000000000..c53958598 --- /dev/null +++ b/project/Versions.scala @@ -0,0 +1,14 @@ +object Versions { + val Scala212 = "2.12.20" + val Scala213 = "2.13.15" + val Scala3 = "3.3.4" + + val JdkReleaseVersion = "11" + + val aws = "1.12.777" + val zioAws = "7.28.29.4" + val zio = "2.1.9" + val magnolia = "0.17.0" + val refined = "0.11.2" + val pureconfig = "0.17.7" +} diff --git a/project/plugins.sbt b/project/plugins.sbt index 21cb797b1..6ba6cb900 100644 --- a/project/plugins.sbt +++ b/project/plugins.sbt @@ -1,23 +1,23 @@ -addSbtPlugin("ch.epfl.scala" % "sbt-bloop" % "2.0.5") -addSbtPlugin("ch.epfl.scala" % "sbt-scalafix" % "0.13.0") -addSbtPlugin("com.eed3si9n" % "sbt-buildinfo" % "0.13.1") -addSbtPlugin("com.github.sbt" % "sbt-unidoc" % "0.5.0") -addSbtPlugin("com.github.sbt" % "sbt-ci-release" % "1.9.0") -addSbtPlugin("com.github.cb372" % "sbt-explicit-dependencies" % "0.3.1") -addSbtPlugin("com.thoughtworks.sbt-api-mappings" % "sbt-api-mappings" % "3.0.2") -addSbtPlugin("com.typesafe" % "sbt-mima-plugin" % "1.1.4") -addSbtPlugin("de.heikoseeberger" % "sbt-header" % "5.10.0") -addSbtPlugin("org.portable-scala" % "sbt-scala-native-crossproject" % "1.3.2") -addSbtPlugin("org.portable-scala" % "sbt-scalajs-crossproject" % "1.3.2") -addSbtPlugin("org.scala-js" % "sbt-scalajs" % "1.17.0") -addSbtPlugin("org.scala-native" % "sbt-scala-native" % "0.5.5") -addSbtPlugin("org.scalameta" % "sbt-mdoc" % "2.6.1") -addSbtPlugin("org.scalameta" % "sbt-scalafmt" % "2.5.2") -addSbtPlugin("pl.project13.scala" % "sbt-jcstress" % "0.2.0") -addSbtPlugin("pl.project13.scala" % "sbt-jmh" % "0.4.7") -addSbtPlugin("dev.zio" % "zio-sbt-website" % "0.4.0-alpha.28") -addDependencyTreePlugin +val zioSbtVersion = "0.0.0+524-5fdf568b-SNAPSHOT" -libraryDependencies += "org.snakeyaml" % "snakeyaml-engine" % "2.7" +addSbtPlugin("ch.epfl.scala" % "sbt-bloop" % "2.0.5") +addSbtPlugin("ch.epfl.scala" % "sbt-scalafix" % "0.13.0") +addSbtPlugin("com.eed3si9n" % "sbt-buildinfo" % "0.12.0") +addSbtPlugin("com.github.sbt" % "sbt-unidoc" % "0.5.0") +addSbtPlugin("com.github.sbt" % "sbt-ci-release" % "1.6.1") +addSbtPlugin("com.github.cb372" % "sbt-explicit-dependencies" % "0.3.1") +addSbtPlugin("com.thoughtworks.sbt-api-mappings" % "sbt-api-mappings" % "3.0.2") +addSbtPlugin("com.typesafe" % "sbt-mima-plugin" % "1.1.4") +addSbtPlugin("de.heikoseeberger" % "sbt-header" % "5.10.0") +addSbtPlugin("org.scala-js" % "sbt-scalajs" % "1.17.0") +addSbtPlugin("org.scala-native" % "sbt-scala-native" % "0.5.5") +addSbtPlugin("org.scalameta" % "sbt-mdoc" % "2.6.1") +addSbtPlugin("org.scalameta" % "sbt-scalafmt" % "2.5.2") +addSbtPlugin("pl.project13.scala" % "sbt-jcstress" % "0.2.0") +addSbtPlugin("pl.project13.scala" % "sbt-jmh" % "0.4.7") +addSbtPlugin("nl.thijsbroersen" % "zio-sbt-ci" % zioSbtVersion) +addSbtPlugin("nl.thijsbroersen" % "zio-sbt-ecosystem" % zioSbtVersion) +addSbtPlugin("nl.thijsbroersen" % "zio-sbt-website" % zioSbtVersion) +addSbtPlugin("com.eed3si9n" % "sbt-projectmatrix" % "0.10.0") -resolvers ++= Resolver.sonatypeOssRepos("public") +resolvers ++= Resolver.sonatypeOssRepos("snapshots") diff --git a/pureconfig/shared/src/main/scala/zio/config/pureconfig/package.scala b/pureconfig/src/main/scala/zio/config/pureconfig/package.scala similarity index 100% rename from pureconfig/shared/src/main/scala/zio/config/pureconfig/package.scala rename to pureconfig/src/main/scala/zio/config/pureconfig/package.scala diff --git a/pureconfig/shared/src/test/scala/zio/config/pureconfig/PureconfigTest.scala b/pureconfig/src/test/scala/zio/config/pureconfig/PureconfigTest.scala similarity index 100% rename from pureconfig/shared/src/test/scala/zio/config/pureconfig/PureconfigTest.scala rename to pureconfig/src/test/scala/zio/config/pureconfig/PureconfigTest.scala diff --git a/refined/shared/src/main/scala/zio/config/refined/PartialRefined.scala b/refined/src/main/scala/zio/config/refined/PartialRefined.scala similarity index 100% rename from refined/shared/src/main/scala/zio/config/refined/PartialRefined.scala rename to refined/src/main/scala/zio/config/refined/PartialRefined.scala diff --git a/refined/shared/src/main/scala/zio/config/refined/PartialRefinedPath.scala b/refined/src/main/scala/zio/config/refined/PartialRefinedPath.scala similarity index 100% rename from refined/shared/src/main/scala/zio/config/refined/PartialRefinedPath.scala rename to refined/src/main/scala/zio/config/refined/PartialRefinedPath.scala diff --git a/refined/shared/src/main/scala/zio/config/refined/package.scala b/refined/src/main/scala/zio/config/refined/package.scala similarity index 100% rename from refined/shared/src/main/scala/zio/config/refined/package.scala rename to refined/src/main/scala/zio/config/refined/package.scala diff --git a/refined/shared/src/test/scala-2.12/zio/config/refined/NumericTestTypes.scala b/refined/src/test/scala-2.12/zio/config/refined/NumericTestTypes.scala similarity index 100% rename from refined/shared/src/test/scala-2.12/zio/config/refined/NumericTestTypes.scala rename to refined/src/test/scala-2.12/zio/config/refined/NumericTestTypes.scala diff --git a/refined/shared/src/test/scala-2.13/zio/config/refined/NumericTestTypes.scala b/refined/src/test/scala-2.13/zio/config/refined/NumericTestTypes.scala similarity index 100% rename from refined/shared/src/test/scala-2.13/zio/config/refined/NumericTestTypes.scala rename to refined/src/test/scala-2.13/zio/config/refined/NumericTestTypes.scala diff --git a/refined/shared/src/test/scala-3/zio/config/refined/NumericTestTypes.scala b/refined/src/test/scala-3/zio/config/refined/NumericTestTypes.scala similarity index 100% rename from refined/shared/src/test/scala-3/zio/config/refined/NumericTestTypes.scala rename to refined/src/test/scala-3/zio/config/refined/NumericTestTypes.scala diff --git a/refined/shared/src/test/scala/zio/config/refined/NumericSupportTest.scala b/refined/src/test/scala/zio/config/refined/NumericSupportTest.scala similarity index 100% rename from refined/shared/src/test/scala/zio/config/refined/NumericSupportTest.scala rename to refined/src/test/scala/zio/config/refined/NumericSupportTest.scala diff --git a/refined/shared/src/test/scala/zio/config/refined/RefinedSpec.scala b/refined/src/test/scala/zio/config/refined/RefinedSpec.scala similarity index 100% rename from refined/shared/src/test/scala/zio/config/refined/RefinedSpec.scala rename to refined/src/test/scala/zio/config/refined/RefinedSpec.scala diff --git a/refined/shared/src/test/scala/zio/config/refined/RequiredNumericTypes.scala b/refined/src/test/scala/zio/config/refined/RequiredNumericTypes.scala similarity index 100% rename from refined/shared/src/test/scala/zio/config/refined/RequiredNumericTypes.scala rename to refined/src/test/scala/zio/config/refined/RequiredNumericTypes.scala diff --git a/sbt b/sbt deleted file mode 100755 index c0615706e..000000000 --- a/sbt +++ /dev/null @@ -1,661 +0,0 @@ -#!/usr/bin/env bash -# -# A more capable sbt runner, coincidentally also called sbt. -# Author: Paul Phillips -# https://github.com/paulp/sbt-extras -# -# Generated from http://www.opensource.org/licenses/bsd-license.php -# Copyright (c) 2011, Paul Phillips. All rights reserved. -# -# Redistribution and use in source and binary forms, with or without -# modification, are permitted provided that the following conditions are -# met: -# -# * Redistributions of source code must retain the above copyright -# notice, this list of conditions and the following disclaimer. -# * Redistributions in binary form must reproduce the above copyright -# notice, this list of conditions and the following disclaimer in the -# documentation and/or other materials provided with the distribution. -# * Neither the name of the author nor the names of its contributors -# may be used to endorse or promote products derived from this software -# without specific prior written permission. -# -# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -# HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED -# TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -# PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -# LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -# NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -set -o pipefail - -declare -r sbt_release_version="1.7.1" -declare -r sbt_unreleased_version="1.7.1" - -declare -r latest_213="2.13.8" -declare -r latest_212="2.12.16" -declare -r latest_211="2.11.12" -declare -r latest_210="2.10.7" -declare -r latest_29="2.9.3" -declare -r latest_28="2.8.2" - -declare -r buildProps="project/build.properties" - -declare -r sbt_launch_ivy_release_repo="https://repo.typesafe.com/typesafe/ivy-releases" -declare -r sbt_launch_ivy_snapshot_repo="https://repo.scala-sbt.org/scalasbt/ivy-snapshots" -declare -r sbt_launch_mvn_release_repo="https://repo1.maven.org/maven2" -declare -r sbt_launch_mvn_snapshot_repo="https://repo.scala-sbt.org/scalasbt/maven-snapshots" - -declare -r default_jvm_opts_common="-Xms512m -Xss2m -XX:MaxInlineLevel=18" -declare -r noshare_opts="-Dsbt.global.base=project/.sbtboot -Dsbt.boot.directory=project/.boot -Dsbt.ivy.home=project/.ivy -Dsbt.coursier.home=project/.coursier" - -declare sbt_jar sbt_dir sbt_create sbt_version sbt_script sbt_new -declare sbt_explicit_version -declare verbose noshare batch trace_level - -declare java_cmd="java" -declare sbt_launch_dir="$HOME/.sbt/launchers" -declare sbt_launch_repo - -# pull -J and -D options to give to java. -declare -a java_args scalac_args sbt_commands residual_args - -# args to jvm/sbt via files or environment variables -declare -a extra_jvm_opts extra_sbt_opts - -echoerr() { echo >&2 "$@"; } -vlog() { [[ -n "$verbose" ]] && echoerr "$@"; } -die() { - echo "Aborting: $*" - exit 1 -} - -setTrapExit() { - # save stty and trap exit, to ensure echo is re-enabled if we are interrupted. - SBT_STTY="$(stty -g 2>/dev/null)" - export SBT_STTY - - # restore stty settings (echo in particular) - onSbtRunnerExit() { - [ -t 0 ] || return - vlog "" - vlog "restoring stty: $SBT_STTY" - stty "$SBT_STTY" - } - - vlog "saving stty: $SBT_STTY" - trap onSbtRunnerExit EXIT -} - -# this seems to cover the bases on OSX, and someone will -# have to tell me about the others. -get_script_path() { - local path="$1" - [[ -L "$path" ]] || { - echo "$path" - return - } - - local -r target="$(readlink "$path")" - if [[ "${target:0:1}" == "/" ]]; then - echo "$target" - else - echo "${path%/*}/$target" - fi -} - -script_path="$(get_script_path "${BASH_SOURCE[0]}")" -declare -r script_path -script_name="${script_path##*/}" -declare -r script_name - -init_default_option_file() { - local overriding_var="${!1}" - local default_file="$2" - if [[ ! -r "$default_file" && "$overriding_var" =~ ^@(.*)$ ]]; then - local envvar_file="${BASH_REMATCH[1]}" - if [[ -r "$envvar_file" ]]; then - default_file="$envvar_file" - fi - fi - echo "$default_file" -} - -sbt_opts_file="$(init_default_option_file SBT_OPTS .sbtopts)" -sbtx_opts_file="$(init_default_option_file SBTX_OPTS .sbtxopts)" -jvm_opts_file="$(init_default_option_file JVM_OPTS .jvmopts)" - -build_props_sbt() { - [[ -r "$buildProps" ]] && - grep '^sbt\.version' "$buildProps" | tr '=\r' ' ' | awk '{ print $2; }' -} - -set_sbt_version() { - sbt_version="${sbt_explicit_version:-$(build_props_sbt)}" - [[ -n "$sbt_version" ]] || sbt_version=$sbt_release_version - export sbt_version -} - -url_base() { - local version="$1" - - case "$version" in - 0.7.*) echo "https://storage.googleapis.com/google-code-archive-downloads/v2/code.google.com/simple-build-tool" ;; - 0.10.*) echo "$sbt_launch_ivy_release_repo" ;; - 0.11.[12]) echo "$sbt_launch_ivy_release_repo" ;; - 0.*-[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]-[0-9][0-9][0-9][0-9][0-9][0-9]) # ie "*-yyyymmdd-hhMMss" - echo "$sbt_launch_ivy_snapshot_repo" ;; - 0.*) echo "$sbt_launch_ivy_release_repo" ;; - *-[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]T[0-9][0-9][0-9][0-9][0-9][0-9]) # ie "*-yyyymmddThhMMss" - echo "$sbt_launch_mvn_snapshot_repo" ;; - *) echo "$sbt_launch_mvn_release_repo" ;; - esac -} - -make_url() { - local version="$1" - - local base="${sbt_launch_repo:-$(url_base "$version")}" - - case "$version" in - 0.7.*) echo "$base/sbt-launch-0.7.7.jar" ;; - 0.10.*) echo "$base/org.scala-tools.sbt/sbt-launch/$version/sbt-launch.jar" ;; - 0.11.[12]) echo "$base/org.scala-tools.sbt/sbt-launch/$version/sbt-launch.jar" ;; - 0.*) echo "$base/org.scala-sbt/sbt-launch/$version/sbt-launch.jar" ;; - *) echo "$base/org/scala-sbt/sbt-launch/$version/sbt-launch-${version}.jar" ;; - esac -} - -addJava() { - vlog "[addJava] arg = '$1'" - java_args+=("$1") -} -addSbt() { - vlog "[addSbt] arg = '$1'" - sbt_commands+=("$1") -} -addScalac() { - vlog "[addScalac] arg = '$1'" - scalac_args+=("$1") -} -addResidual() { - vlog "[residual] arg = '$1'" - residual_args+=("$1") -} - -addResolver() { addSbt "set resolvers += $1"; } - -addDebugger() { addJava "-Xdebug" && addJava "-Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=$1"; } - -setThisBuild() { - vlog "[addBuild] args = '$*'" - local key="$1" && shift - addSbt "set $key in ThisBuild := $*" -} -setScalaVersion() { - [[ "$1" == *"-SNAPSHOT" ]] && addResolver 'Resolver.sonatypeRepo("snapshots")' - addSbt "++ $1" -} -setJavaHome() { - java_cmd="$1/bin/java" - setThisBuild javaHome "_root_.scala.Some(file(\"$1\"))" - export JAVA_HOME="$1" - export JDK_HOME="$1" - export PATH="$JAVA_HOME/bin:$PATH" -} - -getJavaVersion() { - local -r str=$("$1" -version 2>&1 | grep -E -e '(java|openjdk) version' | awk '{ print $3 }' | tr -d '"') - - # java -version on java8 says 1.8.x - # but on 9 and 10 it's 9.x.y and 10.x.y. - if [[ "$str" =~ ^1\.([0-9]+)(\..*)?$ ]]; then - echo "${BASH_REMATCH[1]}" - elif [[ "$str" =~ ^([0-9]+)(\..*)?$ ]]; then - echo "${BASH_REMATCH[1]}" - elif [[ -n "$str" ]]; then - echoerr "Can't parse java version from: $str" - fi -} - -checkJava() { - # Warn if there is a Java version mismatch between PATH and JAVA_HOME/JDK_HOME - - [[ -n "$JAVA_HOME" && -e "$JAVA_HOME/bin/java" ]] && java="$JAVA_HOME/bin/java" - [[ -n "$JDK_HOME" && -e "$JDK_HOME/lib/tools.jar" ]] && java="$JDK_HOME/bin/java" - - if [[ -n "$java" ]]; then - pathJavaVersion=$(getJavaVersion java) - homeJavaVersion=$(getJavaVersion "$java") - if [[ "$pathJavaVersion" != "$homeJavaVersion" ]]; then - echoerr "Warning: Java version mismatch between PATH and JAVA_HOME/JDK_HOME, sbt will use the one in PATH" - echoerr " Either: fix your PATH, remove JAVA_HOME/JDK_HOME or use -java-home" - echoerr " java version from PATH: $pathJavaVersion" - echoerr " java version from JAVA_HOME/JDK_HOME: $homeJavaVersion" - fi - fi -} - -java_version() { - local -r version=$(getJavaVersion "$java_cmd") - vlog "Detected Java version: $version" - echo "$version" -} - -is_apple_silicon() { [[ "$(uname -s)" == "Darwin" && "$(uname -m)" == "arm64" ]]; } - -# MaxPermSize critical on pre-8 JVMs but incurs noisy warning on 8+ -default_jvm_opts() { - local -r v="$(java_version)" - if [[ $v -ge 10 ]]; then - if is_apple_silicon; then - # As of Dec 2020, JVM for Apple Silicon (M1) doesn't support JVMCI - echo "$default_jvm_opts_common" - else - echo "$default_jvm_opts_common -XX:+UnlockExperimentalVMOptions -XX:+UseJVMCICompiler" - fi - elif [[ $v -ge 8 ]]; then - echo "$default_jvm_opts_common" - else - echo "-XX:MaxPermSize=384m $default_jvm_opts_common" - fi -} - -execRunner() { - # print the arguments one to a line, quoting any containing spaces - vlog "# Executing command line:" && { - for arg; do - if [[ -n "$arg" ]]; then - if printf "%s\n" "$arg" | grep -q ' '; then - printf >&2 "\"%s\"\n" "$arg" - else - printf >&2 "%s\n" "$arg" - fi - fi - done - vlog "" - } - - setTrapExit - - if [[ -n "$batch" ]]; then - "$@" /dev/null 2>&1; then - curl --fail --silent --location "$url" --output "$jar" - elif command -v wget >/dev/null 2>&1; then - wget -q -O "$jar" "$url" - fi - } && [[ -r "$jar" ]] -} - -acquire_sbt_jar() { - { - sbt_jar="$(jar_file "$sbt_version")" - [[ -r "$sbt_jar" ]] - } || { - sbt_jar="$HOME/.ivy2/local/org.scala-sbt/sbt-launch/$sbt_version/jars/sbt-launch.jar" - [[ -r "$sbt_jar" ]] - } || { - sbt_jar="$(jar_file "$sbt_version")" - jar_url="$(make_url "$sbt_version")" - - echoerr "Downloading sbt launcher for ${sbt_version}:" - echoerr " From ${jar_url}" - echoerr " To ${sbt_jar}" - - download_url "${jar_url}" "${sbt_jar}" - - case "${sbt_version}" in - 0.*) - vlog "SBT versions < 1.0 do not have published MD5 checksums, skipping check" - echo "" - ;; - *) verify_sbt_jar "${sbt_jar}" ;; - esac - } -} - -verify_sbt_jar() { - local jar="${1}" - local md5="${jar}.md5" - md5url="$(make_url "${sbt_version}").md5" - - echoerr "Downloading sbt launcher ${sbt_version} md5 hash:" - echoerr " From ${md5url}" - echoerr " To ${md5}" - - download_url "${md5url}" "${md5}" >/dev/null 2>&1 - - if command -v md5sum >/dev/null 2>&1; then - if echo "$(cat "${md5}") ${jar}" | md5sum -c -; then - rm -rf "${md5}" - return 0 - else - echoerr "Checksum does not match" - return 1 - fi - elif command -v md5 >/dev/null 2>&1; then - if [ "$(md5 -q "${jar}")" == "$(cat "${md5}")" ]; then - rm -rf "${md5}" - return 0 - else - echoerr "Checksum does not match" - return 1 - fi - elif command -v openssl >/dev/null 2>&1; then - if [ "$(openssl md5 -r "${jar}" | awk '{print $1}')" == "$(cat "${md5}")" ]; then - rm -rf "${md5}" - return 0 - else - echoerr "Checksum does not match" - return 1 - fi - else - echoerr "Could not find an MD5 command" - return 1 - fi -} - -usage() { - set_sbt_version - cat < display stack traces with a max of frames (default: -1, traces suppressed) - -debug-inc enable debugging log for the incremental compiler - -no-colors disable ANSI color codes - -sbt-create start sbt even if current directory contains no sbt project - -sbt-dir path to global settings/plugins directory (default: ~/.sbt/) - -sbt-boot path to shared boot directory (default: ~/.sbt/boot in 0.11+) - -ivy path to local Ivy repository (default: ~/.ivy2) - -no-share use all local caches; no sharing - -offline put sbt in offline mode - -jvm-debug Turn on JVM debugging, open at the given port. - -batch Disable interactive mode - -prompt Set the sbt prompt; in expr, 's' is the State and 'e' is Extracted - -script Run the specified file as a scala script - - # sbt version (default: sbt.version from $buildProps if present, otherwise $sbt_release_version) - -sbt-version use the specified version of sbt (default: $sbt_release_version) - -sbt-force-latest force the use of the latest release of sbt: $sbt_release_version - -sbt-dev use the latest pre-release version of sbt: $sbt_unreleased_version - -sbt-jar use the specified jar as the sbt launcher - -sbt-launch-dir directory to hold sbt launchers (default: $sbt_launch_dir) - -sbt-launch-repo repo url for downloading sbt launcher jar (default: $(url_base "$sbt_version")) - - # scala version (default: as chosen by sbt) - -28 use $latest_28 - -29 use $latest_29 - -210 use $latest_210 - -211 use $latest_211 - -212 use $latest_212 - -213 use $latest_213 - -scala-home use the scala build at the specified directory - -scala-version use the specified version of scala - -binary-version use the specified scala version when searching for dependencies - - # java version (default: java from PATH, currently $(java -version 2>&1 | grep version)) - -java-home alternate JAVA_HOME - - # passing options to the jvm - note it does NOT use JAVA_OPTS due to pollution - # The default set is used if JVM_OPTS is unset and no -jvm-opts file is found - $(default_jvm_opts) - JVM_OPTS environment variable holding either the jvm args directly, or - the reference to a file containing jvm args if given path is prepended by '@' (e.g. '@/etc/jvmopts') - Note: "@"-file is overridden by local '.jvmopts' or '-jvm-opts' argument. - -jvm-opts file containing jvm args (if not given, .jvmopts in project root is used if present) - -Dkey=val pass -Dkey=val directly to the jvm - -J-X pass option -X directly to the jvm (-J is stripped) - - # passing options to sbt, OR to this runner - SBT_OPTS environment variable holding either the sbt args directly, or - the reference to a file containing sbt args if given path is prepended by '@' (e.g. '@/etc/sbtopts') - Note: "@"-file is overridden by local '.sbtopts' or '-sbt-opts' argument. - -sbt-opts file containing sbt args (if not given, .sbtopts in project root is used if present) - -S-X add -X to sbt's scalacOptions (-S is stripped) - - # passing options exclusively to this runner - SBTX_OPTS environment variable holding either the sbt-extras args directly, or - the reference to a file containing sbt-extras args if given path is prepended by '@' (e.g. '@/etc/sbtxopts') - Note: "@"-file is overridden by local '.sbtxopts' or '-sbtx-opts' argument. - -sbtx-opts file containing sbt-extras args (if not given, .sbtxopts in project root is used if present) -EOM - exit 0 -} - -process_args() { - require_arg() { - local type="$1" - local opt="$2" - local arg="$3" - - if [[ -z "$arg" ]] || [[ "${arg:0:1}" == "-" ]]; then - die "$opt requires <$type> argument" - fi - } - while [[ $# -gt 0 ]]; do - case "$1" in - -h | -help) usage ;; - -v) verbose=true && shift ;; - -d) addSbt "--debug" && shift ;; - -w) addSbt "--warn" && shift ;; - -q) addSbt "--error" && shift ;; - -x) shift ;; # currently unused - -trace) require_arg integer "$1" "$2" && trace_level="$2" && shift 2 ;; - -debug-inc) addJava "-Dxsbt.inc.debug=true" && shift ;; - - -no-colors) addJava "-Dsbt.log.noformat=true" && addJava "-Dsbt.color=false" && shift ;; - -sbt-create) sbt_create=true && shift ;; - -sbt-dir) require_arg path "$1" "$2" && sbt_dir="$2" && shift 2 ;; - -sbt-boot) require_arg path "$1" "$2" && addJava "-Dsbt.boot.directory=$2" && shift 2 ;; - -ivy) require_arg path "$1" "$2" && addJava "-Dsbt.ivy.home=$2" && shift 2 ;; - -no-share) noshare=true && shift ;; - -offline) addSbt "set offline in Global := true" && shift ;; - -jvm-debug) require_arg port "$1" "$2" && addDebugger "$2" && shift 2 ;; - -batch) batch=true && shift ;; - -prompt) require_arg "expr" "$1" "$2" && setThisBuild shellPrompt "(s => { val e = Project.extract(s) ; $2 })" && shift 2 ;; - -script) require_arg file "$1" "$2" && sbt_script="$2" && addJava "-Dsbt.main.class=sbt.ScriptMain" && shift 2 ;; - - -sbt-version) require_arg version "$1" "$2" && sbt_explicit_version="$2" && shift 2 ;; - -sbt-force-latest) sbt_explicit_version="$sbt_release_version" && shift ;; - -sbt-dev) sbt_explicit_version="$sbt_unreleased_version" && shift ;; - -sbt-jar) require_arg path "$1" "$2" && sbt_jar="$2" && shift 2 ;; - -sbt-launch-dir) require_arg path "$1" "$2" && sbt_launch_dir="$2" && shift 2 ;; - -sbt-launch-repo) require_arg path "$1" "$2" && sbt_launch_repo="$2" && shift 2 ;; - - -28) setScalaVersion "$latest_28" && shift ;; - -29) setScalaVersion "$latest_29" && shift ;; - -210) setScalaVersion "$latest_210" && shift ;; - -211) setScalaVersion "$latest_211" && shift ;; - -212) setScalaVersion "$latest_212" && shift ;; - -213) setScalaVersion "$latest_213" && shift ;; - - -scala-version) require_arg version "$1" "$2" && setScalaVersion "$2" && shift 2 ;; - -binary-version) require_arg version "$1" "$2" && setThisBuild scalaBinaryVersion "\"$2\"" && shift 2 ;; - -scala-home) require_arg path "$1" "$2" && setThisBuild scalaHome "_root_.scala.Some(file(\"$2\"))" && shift 2 ;; - -java-home) require_arg path "$1" "$2" && setJavaHome "$2" && shift 2 ;; - -sbt-opts) require_arg path "$1" "$2" && sbt_opts_file="$2" && shift 2 ;; - -sbtx-opts) require_arg path "$1" "$2" && sbtx_opts_file="$2" && shift 2 ;; - -jvm-opts) require_arg path "$1" "$2" && jvm_opts_file="$2" && shift 2 ;; - - -D*) addJava "$1" && shift ;; - -J*) addJava "${1:2}" && shift ;; - -S*) addScalac "${1:2}" && shift ;; - - new) sbt_new=true && : ${sbt_explicit_version:=$sbt_release_version} && addResidual "$1" && shift ;; - - *) addResidual "$1" && shift ;; - esac - done -} - -# process the direct command line arguments -process_args "$@" - -# skip #-styled comments and blank lines -readConfigFile() { - local end=false - until $end; do - read -r || end=true - [[ $REPLY =~ ^# ]] || [[ -z $REPLY ]] || echo "$REPLY" - done <"$1" -} - -# if there are file/environment sbt_opts, process again so we -# can supply args to this runner -if [[ -r "$sbt_opts_file" ]]; then - vlog "Using sbt options defined in file $sbt_opts_file" - while read -r opt; do extra_sbt_opts+=("$opt"); done < <(readConfigFile "$sbt_opts_file") -elif [[ -n "$SBT_OPTS" && ! ("$SBT_OPTS" =~ ^@.*) ]]; then - vlog "Using sbt options defined in variable \$SBT_OPTS" - IFS=" " read -r -a extra_sbt_opts <<<"$SBT_OPTS" -else - vlog "No extra sbt options have been defined" -fi - -# if there are file/environment sbtx_opts, process again so we -# can supply args to this runner -if [[ -r "$sbtx_opts_file" ]]; then - vlog "Using sbt options defined in file $sbtx_opts_file" - while read -r opt; do extra_sbt_opts+=("$opt"); done < <(readConfigFile "$sbtx_opts_file") -elif [[ -n "$SBTX_OPTS" && ! ("$SBTX_OPTS" =~ ^@.*) ]]; then - vlog "Using sbt options defined in variable \$SBTX_OPTS" - IFS=" " read -r -a extra_sbt_opts <<<"$SBTX_OPTS" -else - vlog "No extra sbt options have been defined" -fi - -[[ -n "${extra_sbt_opts[*]}" ]] && process_args "${extra_sbt_opts[@]}" - -# reset "$@" to the residual args -set -- "${residual_args[@]}" -argumentCount=$# - -# set sbt version -set_sbt_version - -checkJava - -# only exists in 0.12+ -setTraceLevel() { - case "$sbt_version" in - "0.7."* | "0.10."* | "0.11."*) echoerr "Cannot set trace level in sbt version $sbt_version" ;; - *) setThisBuild traceLevel "$trace_level" ;; - esac -} - -# set scalacOptions if we were given any -S opts -[[ ${#scalac_args[@]} -eq 0 ]] || addSbt "set scalacOptions in ThisBuild += \"${scalac_args[*]}\"" - -[[ -n "$sbt_explicit_version" && -z "$sbt_new" ]] && addJava "-Dsbt.version=$sbt_explicit_version" -vlog "Detected sbt version $sbt_version" - -if [[ -n "$sbt_script" ]]; then - residual_args=("$sbt_script" "${residual_args[@]}") -else - # no args - alert them there's stuff in here - ((argumentCount > 0)) || { - vlog "Starting $script_name: invoke with -help for other options" - residual_args=(shell) - } -fi - -# verify this is an sbt dir, -create was given or user attempts to run a scala script -[[ -r ./build.sbt || -d ./project || -n "$sbt_create" || -n "$sbt_script" || -n "$sbt_new" ]] || { - cat <