From de414efb41a45826cc6001340d17501de321ab54 Mon Sep 17 00:00:00 2001 From: Jack Lynch Date: Tue, 29 Apr 2025 15:09:17 +0100 Subject: [PATCH 1/5] FDN-729 Provide support for loading configuration from s3 uri --- .../apibuilder/validation/MultiService.scala | 22 ++++++++++++------- 1 file changed, 14 insertions(+), 8 deletions(-) diff --git a/src/main/scala/io/apibuilder/validation/MultiService.scala b/src/main/scala/io/apibuilder/validation/MultiService.scala index 133dd76..64c01be 100644 --- a/src/main/scala/io/apibuilder/validation/MultiService.scala +++ b/src/main/scala/io/apibuilder/validation/MultiService.scala @@ -167,14 +167,20 @@ object MultiService { } } + /** + * Allow a client to read from for example s3 by providing a reader already constructed from the + * stream. + */ + def fromZipFileReader(reader: ZipFileReader): ValidatedNec[String, Seq[ApiBuilderService]] = { + val fileSorter = FileOrder(reader.entries.find(_.name.toLowerCase() == OrderByFileName).map(_.file)) + reader.entries + .filter { e => ZipFileReader.isJsonFile(e.name) } + .sortBy { e => fileSorter.sortOrder(e.name) } + .map { e => ApiBuilderService.fromFile(e.file) } + .sequence + } + private def servicesFromZip(url: String): ValidatedNec[String, Seq[ApiBuilderService]] = { - ZipFileReader.fromUrl(url).andThen { reader => - val fileSorter = FileOrder(reader.entries.find(_.name.toLowerCase() == OrderByFileName).map(_.file)) - reader.entries - .filter { e => ZipFileReader.isJsonFile(e.name) } - .sortBy { e => fileSorter.sortOrder(e.name) } - .map { e => ApiBuilderService.fromFile(e.file) } - .sequence - } + ZipFileReader.fromUrl(url).andThen(fromZipFileReader) } } From 0d50f365a7c71ddc8832ffc46f3af9213c1718cc Mon Sep 17 00:00:00 2001 From: Jack Lynch Date: Tue, 29 Apr 2025 15:18:11 +0100 Subject: [PATCH 2/5] Add sbt to CI --- .github/workflows/ci.yml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 46baec3..9c73a83 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -24,6 +24,8 @@ jobs: distribution: 'zulu' - name: print Java version run: java -version + - name: Setup sbt launcher + uses: sbt/setup-sbt@v1 - name: setup apibuilder config run: mkdir ~/.apibuilder && echo "[default]" > ~/.apibuilder/config - name: Build From e0a99f1bdb6378fe7dc9d520ea0f364eb52dba78 Mon Sep 17 00:00:00 2001 From: Jack Lynch Date: Tue, 29 Apr 2025 15:23:28 +0100 Subject: [PATCH 3/5] spec --- .github/workflows/ci.yml | 11 ++++++----- .../apibuilder/validation/MultiServiceZipSpec.scala | 10 ++++------ 2 files changed, 10 insertions(+), 11 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 9c73a83..0ca7122 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -16,12 +16,13 @@ jobs: java: [ '13' ] scala: [ '2.13.10' ] steps: - - uses: actions/checkout@v2 + - uses: actions/checkout@v4 - name: Set up JDK - uses: actions/setup-java@v2 - with: - java-version: ${{ matrix.java }} - distribution: 'zulu' + uses: actions/setup-java@v4 + with: + distribution: temurin + java-version: ${{matrix.java}} + cache: sbt - name: print Java version run: java -version - name: Setup sbt launcher diff --git a/src/test/scala/io/apibuilder/validation/MultiServiceZipSpec.scala b/src/test/scala/io/apibuilder/validation/MultiServiceZipSpec.scala index 3db5bf8..41b10e2 100644 --- a/src/test/scala/io/apibuilder/validation/MultiServiceZipSpec.scala +++ b/src/test/scala/io/apibuilder/validation/MultiServiceZipSpec.scala @@ -1,14 +1,15 @@ package io.apibuilder.validation -import java.io.File import io.apibuilder.builders.ApiBuilderServiceBuilders +import io.apibuilder.helpers._ import io.apibuilder.spec.v0.models.json._ import io.apibuilder.spec.v0.models.{Method, Service} import io.apibuilder.validation.zip.ZipFileBuilder -import io.apibuilder.helpers._ -import play.api.libs.json._ import org.scalatest.matchers.must.Matchers import org.scalatest.wordspec.AnyWordSpec +import play.api.libs.json._ + +import java.io.File class MultiServiceZipSpec extends AnyWordSpec with Matchers with ApiBuilderServiceBuilders @@ -60,9 +61,6 @@ class MultiServiceZipSpec extends AnyWordSpec with Matchers } "Able to download service from the internet" in { - expectValidNec { - MultiService.fromUrl("file:///tmp/specs/api.spec.billing.json") - } expectValidNec { MultiService.fromUrl("https://cdn.flow.io/util/lib-apibuilder/specs.zip") } From f8371e1e2791d7fd9a49ea095fbeb60ca7daf5b6 Mon Sep 17 00:00:00 2001 From: Jack Lynch Date: Tue, 29 Apr 2025 15:37:51 +0100 Subject: [PATCH 4/5] indent --- .github/workflows/ci.yml | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 0ca7122..2ea48e6 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -19,10 +19,10 @@ jobs: - uses: actions/checkout@v4 - name: Set up JDK uses: actions/setup-java@v4 - with: - distribution: temurin - java-version: ${{matrix.java}} - cache: sbt + with: + distribution: temurin + java-version: ${{matrix.java}} + cache: sbt - name: print Java version run: java -version - name: Setup sbt launcher From 58c55204e1d761c98a0727a440607396eb0d3fb5 Mon Sep 17 00:00:00 2001 From: Jack Lynch Date: Tue, 29 Apr 2025 15:39:54 +0100 Subject: [PATCH 5/5] version --- .github/workflows/ci.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 2ea48e6..3f7fcc3 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -13,8 +13,8 @@ jobs: runs-on: ubuntu-latest strategy: matrix: - java: [ '13' ] - scala: [ '2.13.10' ] + java: [ '17' ] + scala: [ '2.13.15' ] steps: - uses: actions/checkout@v4 - name: Set up JDK