Disabled external gits
This commit is contained in:
98
cs320-clp/project/StudentPlugin.scala
Normal file
98
cs320-clp/project/StudentPlugin.scala
Normal file
@@ -0,0 +1,98 @@
|
||||
/** Adapted from student-build/project/StudentPlugin.scala in the moocs repo */
|
||||
package ch.epfl.lara
|
||||
|
||||
import java.io.{File, FileInputStream, IOException}
|
||||
|
||||
import sbt.Keys._
|
||||
import sbt._
|
||||
|
||||
/**
|
||||
* Provides tasks for submitting the assignment
|
||||
*/
|
||||
object StudentPlugin extends AutoPlugin {
|
||||
|
||||
override lazy val projectSettings = Seq(
|
||||
packageSubmissionSetting
|
||||
) ++ packageSubmissionZipSettings
|
||||
|
||||
/** **********************************************************
|
||||
* SUBMITTING A SOLUTION TO COURSERA
|
||||
*/
|
||||
|
||||
val packageSourcesOnly = TaskKey[File]("packageSourcesOnly", "Package the sources of the project")
|
||||
|
||||
val packageSubmissionZip = TaskKey[File]("packageSubmissionZip")
|
||||
|
||||
val packageSubmissionZipSettings = Seq(
|
||||
packageSubmissionZip := {
|
||||
val submission = crossTarget.value / "submission.zip"
|
||||
val sources = (packageSourcesOnly in Compile).value
|
||||
val binaries = (packageBin in Compile).value
|
||||
IO.zip(Seq(sources -> "sources.zip", binaries -> "binaries.jar"), submission)
|
||||
submission
|
||||
},
|
||||
// Exclude resources from binaries
|
||||
mappings in (Compile, packageBin) := {
|
||||
val relativePaths =
|
||||
(unmanagedResources in Compile).value.flatMap(Path.relativeTo((unmanagedResourceDirectories in Compile).value)(_))
|
||||
(mappings in (Compile, packageBin)).value.filterNot { case (_, path) => relativePaths.contains(path) }
|
||||
},
|
||||
artifactClassifier in packageSourcesOnly := Some("sources")
|
||||
) ++ inConfig(Compile)(Defaults.packageTaskSettings(packageSourcesOnly, Defaults.sourceMappings))
|
||||
|
||||
val maxSubmitFileSize = {
|
||||
val mb = 1024 * 1024
|
||||
10 * mb
|
||||
}
|
||||
|
||||
/** Check that the jar exists, isn't empty, isn't crazy big, and can be read
|
||||
*/
|
||||
def checkJar(jar: File, s: TaskStreams): Unit = {
|
||||
val errPrefix = "Error submitting assignment jar: "
|
||||
val fileLength = jar.length()
|
||||
if (!jar.exists()) {
|
||||
s.log.error(errPrefix + "jar archive does not exist\n" + jar.getAbsolutePath)
|
||||
failSubmit()
|
||||
} else if (fileLength == 0L) {
|
||||
s.log.error(errPrefix + "jar archive is empty\n" + jar.getAbsolutePath)
|
||||
failSubmit()
|
||||
} else if (fileLength > maxSubmitFileSize) {
|
||||
s.log.error(errPrefix + "jar archive is too big. Allowed size: " +
|
||||
maxSubmitFileSize + " bytes, found " + fileLength + " bytes.\n" +
|
||||
jar.getAbsolutePath)
|
||||
failSubmit()
|
||||
} else {
|
||||
val bytes = new Array[Byte](fileLength.toInt)
|
||||
val sizeRead = try {
|
||||
val is = new FileInputStream(jar)
|
||||
val read = is.read(bytes)
|
||||
is.close()
|
||||
read
|
||||
} catch {
|
||||
case ex: IOException =>
|
||||
s.log.error(errPrefix + "failed to read sources jar archive\n" + ex.toString)
|
||||
failSubmit()
|
||||
}
|
||||
if (sizeRead != bytes.length) {
|
||||
s.log.error(errPrefix + "failed to read the sources jar archive, size read: " + sizeRead)
|
||||
failSubmit()
|
||||
} else () // used to be: `encodeBase64(bytes)`
|
||||
}
|
||||
}
|
||||
|
||||
/** Task to package solution to a given file path */
|
||||
val packageSubmission = inputKey[Unit]("package solution as an archive file")
|
||||
lazy val packageSubmissionSetting = packageSubmission := {
|
||||
val s: TaskStreams = streams.value // for logging
|
||||
val jar = (packageSubmissionZip in Compile).value
|
||||
|
||||
checkJar(jar, s)
|
||||
|
||||
val path = baseDirectory.value / "submission.zip"
|
||||
IO.copyFile(jar, path)
|
||||
}
|
||||
|
||||
def failSubmit(): Nothing = {
|
||||
sys.error("Packaging failed")
|
||||
}
|
||||
}
|
1
cs320-clp/project/build.properties
Normal file
1
cs320-clp/project/build.properties
Normal file
@@ -0,0 +1 @@
|
||||
sbt.version=1.3.5
|
Reference in New Issue
Block a user