Skip to content

Commit 91280a8

Browse files
committed
CI with GitHub Actions
- adds github actions build definition - fixes ConstantsSetBuilderSpecTest issue causing test to randomly fail - fixes logic-based tests with dynamic predicates and functions
1 parent 0c5ab35 commit 91280a8

File tree

7 files changed

+92
-35
lines changed

7 files changed

+92
-35
lines changed

.github/workflows/main.yml

+53
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,53 @@
1+
name: build
2+
3+
on: [push, pull_request]
4+
5+
jobs:
6+
build:
7+
8+
runs-on: ubuntu-latest
9+
10+
steps:
11+
- uses: actions/checkout@v2
12+
with:
13+
fetch-depth: 1
14+
- name: Fetch example data
15+
shell: bash
16+
run: git submodule update --init
17+
- name: Set up JDK 1.8
18+
uses: actions/setup-java@v1
19+
with:
20+
java-version: 1.8
21+
- name: Install lp_solve
22+
run: sudo apt update && sudo apt install -y bash lp-solve wget zip unzip && sudo rm -rf /var/lib/apt/lists/*
23+
- name: Install lp_solve java
24+
run: (cd /tmp && wget https://sourceforge.net/projects/lpsolve/files/lpsolve/5.5.2.5/lp_solve_5.5.2.5_java.zip && unzip lp_solve_5.5.2.5_java.zip && sudo cp lp_solve_5.5_java/lib/ux64/liblpsolve55j.so /usr/lib/lp_solve && sudo ldconfig && sudo rm -rf /tmp/lp_solve_5.5_java && rm /tmp/lp_solve_5.5.2.5_java.zip)
25+
- name: Docker login
26+
uses: azure/docker-login@v1
27+
with:
28+
login-server: 'docker.pkg.github.com'
29+
username: ${GITHUB_ACTOR}
30+
password: ${{ secrets.GITHUB_TOKEN }}
31+
- name: Cache SBT ivy cache
32+
uses: actions/cache@v1
33+
with:
34+
path: ~/.ivy2/cache
35+
key: ${{ runner.os }}-sbt-ivy-cache-${{ hashFiles('**/build.sbt') }}
36+
- name: Cache SBT
37+
uses: actions/cache@v1
38+
with:
39+
path: ~/.sbt
40+
key: ${{ runner.os }}-sbt-${{ hashFiles('**/build.sbt') }}
41+
- name: Build for Scala 2.12
42+
run: sbt ++2.12.10 clean compile
43+
- name: Run Tests
44+
run: sbt ++2.12.10 test
45+
- name: Create Docker Image
46+
run: sbt ++2.12.10 docker
47+
- name: Push docker images
48+
if: github.event_name != 'pull_request'
49+
run: sbt ++2.12.10 dockerPush
50+
env:
51+
_JAVA_OPTIONS: "-Xms512m -Xmx4g"
52+
REPOSITORY_OWNER: ${{ github.repository }}
53+
LD_LIBRARY_PATH: "/usr/lib/lp_solve"

README.md

+2
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,5 @@
1+
[![Build](https://github.com/anskarl/lomrf/workflows/build/badge.svg?branch=master)](https://github.com/anskarl/lomrf/actions)
2+
13
<pre>
24
o o o o o
35
| o | |\ /| | /

project/Dependencies.scala

+1-3
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,6 @@ object Dependencies {
3232
final val JANSI = "1.11"
3333

3434
final val ScalaTest = "3.0.5"
35-
final val ScalaCheck = "1.14.1"
3635

3736
final val Trove4j = "3.0.3" // todo upgrade to 3.1
3837
final val JTS = "1.14.0"
@@ -62,8 +61,7 @@ object Dependencies {
6261

6362
// ScalaTest got Unit testing
6463
lazy val Testing = Seq(
65-
"org.scalatest" %% "scalatest" % v.ScalaTest % "test",
66-
"org.scalacheck" %% "scalacheck" % v.ScalaCheck % "test"
64+
"org.scalatest" %% "scalatest" % v.ScalaTest % "test"
6765
)
6866

6967
lazy val Utils = Seq(

project/LoMRFBuild.scala

+27-21
Original file line numberDiff line numberDiff line change
@@ -166,7 +166,7 @@ object LoMRFBuild extends AutoPlugin {
166166
scalaBinaryVersion.value match {
167167

168168
case "2.11" =>
169-
// Scala compiler settings for Scala 2.12.x
169+
// Scala compiler settings for Scala 2.11.x
170170
Seq(
171171
"-deprecation", // Emit warning and location for usages of deprecated APIs.
172172
"-unchecked", // Enable additional warnings where generated code depends on assumptions.
@@ -213,43 +213,49 @@ object LoMRFBuild extends AutoPlugin {
213213
new Dockerfile {
214214

215215
// Base image
216-
from("frolvlad/alpine-oraclejdk8")
216+
from("openjdk:11-slim")
217217

218218
// Copy to docker
219219
copy(universalBuildDir, targetDir)
220220

221221
// Add Bash support
222-
runRaw("apk add --update bash")
223222

224-
// clean up package cache to reduce space
225-
runRaw("rm -rf /var/cache/apk/*")
223+
runRaw("apt update && apt install -y bash lp-solve wget zip unzip && rm -rf /var/lib/apt/lists/*")
226224

227-
// Make consumer script executable
228-
runRaw(s"chmod +x $targetDir/bin/lomrf")
225+
runRaw (
226+
"cd /tmp && " +
227+
"wget https://sourceforge.net/projects/lpsolve/files/lpsolve/5.5.2.5/lp_solve_5.5.2.5_java.zip && " +
228+
"unzip lp_solve_5.5.2.5_java.zip && " +
229+
"cp lp_solve_5.5_java/lib/ux64/liblpsolve55j.so /usr/lib/lp_solve && " +
230+
"ldconfig && " +
231+
"rm -rf /tmp/lp_solve_5.5_java && " +
232+
"rm /tmp/lp_solve_5.5.2.5_java.zip"
233+
)
229234

235+
env("LD_LIBRARY_PATH", "/usr/lib/lp_solve")
230236

237+
runRaw(s"chmod +x $targetDir/bin/lomrf")
231238
runRaw("mkdir /data")
232-
// set working dir
233239
workDir(s"/data")
234-
235240
volume("/data")
236-
237241
entryPoint(s"$targetDir/bin/lomrf")
238242
}
239243
},
240244

241245
imageNames in docker := {
242-
val localTag = ImageName(s"${name.value.toLowerCase}:latest")
243-
244-
// Set a name with a tag that contains the project version.
245-
val versionTag = ImageName(s"${organization.value}/${name.value.toLowerCase}:${version.value}")
246-
247-
// Set a name with the latest tag, only for stable versions.
248-
if(!isSnapshot.value) {
249-
val latestTag = ImageName(s"${organization.value}/${name.value.toLowerCase}:latest")
250-
Seq(versionTag, latestTag, localTag)
251-
}
252-
else Seq(versionTag, localTag)
246+
val tags =
247+
sys.env.get("REPOSITORY_OWNER") match {
248+
case Some(repositoryOwner) =>
249+
Seq(
250+
s"docker.pkg.github.com/${repositoryOwner.toLowerCase}/lomrf:${version.value}",
251+
s"docker.pkg.github.com/${repositoryOwner.toLowerCase}/lomrf:latest")
252+
case None =>
253+
Seq(
254+
s"lomrf:${version.value}",
255+
s"lomrf:latest")
256+
}
257+
258+
tags.map(tag => ImageName(tag))
253259

254260
},
255261

src/test/scala/lomrf/logic/compile/PredicateCompletionSpecTest.scala

+2-2
Original file line numberDiff line numberDiff line change
@@ -220,15 +220,15 @@ final class PredicateCompletionSpecTest extends FunSpec with Matchers {
220220
val expected = Set(
221221
parser.parseWeightedFormula(
222222
"""
223-
| (Exist t1 Happens(inactive(x),t) ^ !Happens(walking(y),t1) ^ lessThan(t1,t)) v
223+
| (Exist t1 Happens(inactive(x),t) ^ !Happens(walking(y),t1) ^ LessThan(t1,t)) v
224224
| (Happens(active(x),t) ^ Happens(inactive(y),t)) =>
225225
| HoldsAt(meet(x, y), t++).
226226
""".stripMargin
227227
),
228228
parser.parseWeightedFormula(
229229
"""
230230
| !HoldsAt(meet(x, y),t) ^
231-
| !((Exist t1 Happens(inactive(x),t) ^ !Happens(walking(y),t1) ^ lessThan(t1,t)) v
231+
| !((Exist t1 Happens(inactive(x),t) ^ !Happens(walking(y),t1) ^ LessThan(t1,t)) v
232232
| (Happens(active(x),t) ^ Happens(inactive(y),t))) =>
233233
| !HoldsAt(meet(x, y),t++)
234234
""".stripMargin

src/test/scala/lomrf/logic/parser/KBParserSpecTest.scala

+1-1
Original file line numberDiff line numberDiff line change
@@ -501,7 +501,7 @@ final class KBParserSpecTest extends FunSpec with Matchers {
501501
parsed.functions.size shouldEqual 0
502502
}
503503

504-
val dynamicFormula7 = "HoldsAt(f, t) <=> substr(Meet, f)."
504+
val dynamicFormula7 = "HoldsAt(f, t) <=> Substr(Meet, f)."
505505
it(s"$dynamicFormula7 should be a valid FOL sentence") {
506506
val parsed = parser.parseLogicalSentence(dynamicFormula7)
507507

src/test/scala/lomrf/mln/model/builders/ConstantsSetBuilderSpecTest.scala

+6-8
Original file line numberDiff line numberDiff line change
@@ -20,16 +20,16 @@
2020

2121
package lomrf.mln.model.builders
2222

23-
import org.scalacheck.Gen
24-
import org.scalatest.prop.PropertyChecks
25-
import org.scalatest.{FunSpec, Matchers}
23+
import org.scalatest.{ FunSpec, Matchers }
24+
25+
import scala.util.Random
2626

2727
/**
2828
* A series of specification test for constants set builder.
2929
*
3030
* @see [[lomrf.mln.model.builders.ConstantsSetBuilder]]
3131
*/
32-
final class ConstantsSetBuilderSpecTest extends FunSpec with Matchers with PropertyChecks {
32+
final class ConstantsSetBuilderSpecTest extends FunSpec with Matchers {
3333

3434
describe("An empty builder") {
3535
val builder = ConstantsSetBuilder()
@@ -83,10 +83,8 @@ final class ConstantsSetBuilderSpecTest extends FunSpec with Matchers with Prope
8383

8484
describe("A builder holding a more constant symbols") {
8585

86-
var constants = List.empty[String]
87-
forAll(Gen.alphaNumStr) { symbol: String =>
88-
constants = symbol :: constants
89-
}
86+
val constants =
87+
for (idx <- 1 to 10) yield s"C${idx}" + Random.alphanumeric.take(5).toString()
9088

9189
val builder = ConstantsSetBuilder(constants)
9290

0 commit comments

Comments
 (0)