Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 3 additions & 3 deletions .gitattributes
Original file line number Diff line number Diff line change
@@ -1,9 +1,9 @@
* text=auto
.git* text export-ignore

*.sbt text
*.scala text
*.java text
*.sbt text eol=lf
*.scala text eol=lf
*.java text eol=lf
*.txt text

.classpath -text whitespace=cr-at-eol merge=union
Expand Down
100 changes: 99 additions & 1 deletion .github/workflows/build.yml
Original file line number Diff line number Diff line change
Expand Up @@ -119,6 +119,104 @@ jobs:
path: '**/target/test-reports/TEST-*.xml'
reporter: java-junit

build-jvm-macos:
runs-on: macos-latest
strategy:
fail-fast: false
matrix:
java: [ '21' ]
scala: [ '2.12', '2.13', '3' ]
steps:
- uses: actions/checkout@v4
- uses: actions/setup-java@v4
with:
distribution: temurin
java-version: ${{ matrix.java }}
- uses: sbt/setup-sbt@v1
- uses: VirtusLab/scala-cli-setup@v1
- name: Generate Build Files
run: scala-cli ./sbtgen/ --java-home "$JAVA_HOME" --server=false --main-class Izumi
- name: Build and Test
env:
_JAVA_OPTIONS: '-Xmx4000M -XX:ReservedCodeCacheSize=384M -XX:NonProfiledCodeHeapSize=256M -XX:MaxMetaspaceSize=1024M'
run: |
sbt -batch -no-colors -v \
"++ ${{ matrix.scala }} clean" \
"++ ${{ matrix.scala }} Test/compile" \
"++ ${{ matrix.scala }} test"

build-js-macos:
runs-on: macos-latest
strategy:
fail-fast: false
matrix:
java: [ '21' ]
scala: [ '2.12', '2.13', '3' ]
steps:
- uses: actions/checkout@v4
- uses: actions/setup-java@v4
with:
distribution: temurin
java-version: ${{ matrix.java }}
- uses: sbt/setup-sbt@v1
- uses: VirtusLab/scala-cli-setup@v1
- name: Generate Build Files
run: scala-cli ./sbtgen/ --java-home "$JAVA_HOME" --server=false --main-class Izumi -- --nojvm --js
- name: Build and Test
env:
_JAVA_OPTIONS: '-Xmx4000M -XX:ReservedCodeCacheSize=384M -XX:NonProfiledCodeHeapSize=256M -XX:MaxMetaspaceSize=1024M'
run: |
sbt -batch -no-colors -v \
"++ ${{ matrix.scala }} clean" \
"++ ${{ matrix.scala }} Test/compile" \
"++ ${{ matrix.scala }} test"

build-jvm-windows:
runs-on: windows-latest
strategy:
fail-fast: false
matrix:
java: [ '21' ]
scala: [ '2.12', '2.13', '3' ]
steps:
- run: git config --global core.autocrlf false
- uses: actions/checkout@v4
- uses: actions/setup-java@v4
with:
distribution: temurin
java-version: ${{ matrix.java }}
- uses: sbt/setup-sbt@v1
- uses: VirtusLab/scala-cli-setup@v1
- name: Generate Build Files
run: scala-cli ./sbtgen/ --java-home "$env:JAVA_HOME" --server=false --main-class Izumi
- name: Build and Test
env:
_JAVA_OPTIONS: '-Xmx4000M -XX:ReservedCodeCacheSize=384M -XX:NonProfiledCodeHeapSize=256M -XX:MaxMetaspaceSize=1024M'
run: sbt -batch -no-colors -v "++ ${{ matrix.scala }} clean" "++ ${{ matrix.scala }} Test/compile" "++ ${{ matrix.scala }} test"

build-js-windows:
runs-on: windows-latest
strategy:
fail-fast: false
matrix:
java: [ '21' ]
scala: [ '2.12', '2.13', '3' ]
steps:
- run: git config --global core.autocrlf false
- uses: actions/checkout@v4
- uses: actions/setup-java@v4
with:
distribution: temurin
java-version: ${{ matrix.java }}
- uses: sbt/setup-sbt@v1
- uses: VirtusLab/scala-cli-setup@v1
- name: Generate Build Files
run: scala-cli ./sbtgen/ --java-home "$env:JAVA_HOME" --server=false --main-class Izumi -- --nojvm --js
- name: Build and Test
env:
_JAVA_OPTIONS: '-Xmx4000M -XX:ReservedCodeCacheSize=384M -XX:NonProfiledCodeHeapSize=256M -XX:MaxMetaspaceSize=1024M'
run: sbt -batch -no-colors -v "++ ${{ matrix.scala }} clean" "++ ${{ matrix.scala }} Test/compile" "++ ${{ matrix.scala }} test"

test-site:
runs-on: ubuntu-latest
strategy:
Expand Down Expand Up @@ -192,7 +290,7 @@ jobs:
all-good:
if: always()
runs-on: ubuntu-latest
needs: [ 'build-jvm', 'build-js', 'test-site' ]
needs: [ 'build-jvm', 'build-js', 'build-jvm-macos', 'build-js-macos', 'build-jvm-windows', 'build-js-windows', 'test-site' ]
steps:
- name: Decide whether the needed jobs succeeded or failed
uses: re-actors/alls-green@release/v1
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,8 @@ package izumi.fundamentals.platform.jvm

import izumi.fundamentals.platform.IzPlatformEffectfulUtil

import java.net.{URLClassLoader, URLDecoder}
import java.io.File
import java.net.URLClassLoader
import scala.annotation.tailrec

trait IzClasspath extends IzPlatformEffectfulUtil {
Expand All @@ -11,7 +12,7 @@ trait IzClasspath extends IzPlatformEffectfulUtil {

Seq(
classLoaderCp,
System.getProperty("java.class.path").split(':').toSeq,
System.getProperty("java.class.path").split(File.pathSeparatorChar).toSeq,
).flatten
}

Expand All @@ -33,7 +34,7 @@ trait IzClasspath extends IzPlatformEffectfulUtil {
val clCp = classLoader match {
case Some(u: URLClassLoader) =>
u.getURLs
.map(u => URLDecoder.decode(u.getFile, "UTF-8"))
.map(u => new File(u.toURI).getPath)
.toSeq
case _ =>
Seq.empty
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
package izumi.fundamentals.platform

import java.nio.file.Paths
import java.io.File

import izumi.fundamentals.platform.files.IzZip
import izumi.fundamentals.platform.jvm.IzJvm
Expand All @@ -10,10 +10,11 @@ class IzZipTest extends AnyWordSpec {

"zip tools" should {
"be able to find files in jars" in {
val files = IzJvm.safeClasspathSeq().map(p => Paths.get(p).toFile)
val files = IzJvm.safeClasspathSeq().map(p => new File(p))

for (_ <- 1 to 2) {
val maybeObjContent = IzZip.findInZips(files, p => p.toString == Paths.get("/scala/Predef.class").toString)
// Zip filesystem paths always use forward slashes, so compare with string directly
val maybeObjContent = IzZip.findInZips(files, p => p.toString == "/scala/Predef.class")
assert(maybeObjContent.headOption.exists(_._2.nonEmpty))
}
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -21,8 +21,10 @@ object FileServiceImpl {

private def filePath = Paths.get(name)

private def fileSrc = Try {
Source.fromFile(this.name)
private def withFileSrc[A](f: Source => A): A = {
val src = Source.fromFile(this.name)
try f(src)
finally src.close()
}

private val outputSink = {
Expand All @@ -38,11 +40,11 @@ object FileServiceImpl {
}

override def size: Int = {
fileSrc.map(_.getLines().size).get
withFileSrc(_.getLines().size)
}

override def getContent: Iterable[String] = {
fileSrc.map(_.getLines().toList).get
withFileSrc(_.getLines().toList)
}

override def append(item: String): Unit = {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,7 @@ object FileServiceUtils {
implicit class FileServiceOps[T <: LogFile](svc: FileService[T]) {
def withPreparedData(f: => List[(FileIdentity, List[String])]): Unit = {
val st = svc.storage
st.values.foreach(_.beforeDelete())
st.clear()
f.foreach {
case (id, msgs) =>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -58,7 +58,7 @@ class BasicLoggingTest extends AnyWordSpec {
|is a
|multiline ${m -> "message"}""".stripMargin
)
assert(message1.template.parts.toList == List("This\nis a\nmultiline ", ""))
assert(message1.template.parts.map(_.replace("\r\n", "\n")).toList == List("This\nis a\nmultiline ", ""))
assert(message1.args == List(LogArg(Seq("message"), m, hiddenName = false, Some(LogstageCodec.LogstageCodecString))))

val message2 = Message("single line with stripMargin".stripMargin)
Expand Down
Loading