diff --git a/modules/mod/build.gradle.kts b/modules/mod/build.gradle.kts index 5124676..81595ce 100644 --- a/modules/mod/build.gradle.kts +++ b/modules/mod/build.gradle.kts @@ -8,7 +8,6 @@ plugins { val projectId: String by project.extra - val tsSrcDir = layout.projectDirectory.dir("src/main/typescript") val modBuildDir = layout.buildDirectory.dir(projectId).get() @@ -17,45 +16,46 @@ node { } val tstlTask = tasks.register("typescriptToLua") { - description = "Typescript To Lua" + description = "Convert Typescript To Lua" group = projectId dependsOn(tasks.npmInstall) execOverrides { standardOutput = System.out } - npmCommand.set(listOf( - "run", - "build", -// "--workspace=factorio-web-map-mod", - )) + npmCommand.set(listOf("run", "build")) - inputs.dir(node.nodeProjectDir) + inputs.dir(node.nodeProjectDir.asFileTree) + .skipWhenEmpty() + .withPropertyName("sourceFiles") + .withPathSensitivity(PathSensitivity.RELATIVE) val outputDir = modBuildDir.dir("typescriptToLua") - outputs.dir(outputDir) args.set(parseSpaceSeparatedArgs("-- --outDir $outputDir")) -// args.set(listOf( -// "--", -// "--outDir $outputDir", -// "--workspace=factorio-web-map-mod", -// )) + outputs.dir(outputDir) + .withPropertyName("outputDir") + ignoreExitValue.set(false) -// workingDir.set(tsSrcDir.asFile) -// inputs.dir("node_modules") -// inputs.dir(fileTree("src")) -// inputs.files( -// "tsconfig.json", -// "package.json", -// ) -// outputs.dir("$buildDir/factorio-web-map/") -// outputs.dir("$buildDir/npm-output") -// outputs.upToDateWhen { false } } +//val typescriptSrc = +// project.objects.sourceDirectorySet("typescript", "typescript").apply { +// srcDir( +// layout.projectDirectory.dir("src/main/typescript") +// ) +// destinationDirectory.set( +// modBuildDir.dir("typescriptToLua") +// ) +// compiledBy(tstlTask) { +// project.objects.directoryProperty().apply { +// set( modBuildDir.dir("typescriptToLua")) +// } +// } +// } + val modPackageTask = tasks.register("package") { - description = "Package mod" + description = "Package mod files into ZIP" group = projectId dependsOn(tstlTask) @@ -63,14 +63,14 @@ val modPackageTask = tasks.register("package") { from( layout.projectDirectory.dir("src/main/resources/mod-data"), rootProject.layout.projectDirectory.file("LICENSE"), - tstlTask, + tstlTask.get().outputs.files.filter { it.extension == "lua" }, ) into(rootProject.name) // Factorio required format is: // - filename: `mod-name_version.zip` - // - zip contains dir `mod-name` + // - zip contains one directory, `mod-name` archiveFileName.set("${rootProject.name}_${rootProject.version}.zip") destinationDirectory.set(modBuildDir.dir("dist")) } @@ -79,7 +79,7 @@ val modPackageTask = tasks.register("package") { val copyModToServerTask = tasks.register("copyModToServer") { description = "Copy the mod to the Factorio Docker server" - group = projectId + group = "$projectId.factorioServer" dependsOn(modPackageTask) @@ -87,9 +87,31 @@ val copyModToServerTask = tasks.register("copyModToServer") { into(layout.projectDirectory.dir("src/test/resources/server/data/mods").asFile) } +val serverUpTask = tasks.register("dockerUp") { + group = "$projectId.factorioServer" + + workingDir = layout.projectDirectory.dir("src/test/resources/server/").asFile + commandLine = parseSpaceSeparatedArgs("docker-compose up") +} + + +//val serverRestartTask = tasks.register("dockerRestart") { +// group = "$projectId.factorioServer" +// +// workingDir = layout.projectDirectory.dir("src/test/resources/server/").asFile +// commandLine = parseSpaceSeparatedArgs("docker-compose restart") +//} + +tasks.register("dockerStop") { + group = "$projectId.factorioServer" + + workingDir = layout.projectDirectory.dir("src/test/resources/server/").asFile + commandLine = parseSpaceSeparatedArgs("docker-compose stop") +} + val copyModToClientTask = tasks.register("copyModToClient") { description = "Copy the mod to the Factorio client" - group = projectId + group = "$projectId.factorioClient" dependsOn(modPackageTask) @@ -97,25 +119,55 @@ val copyModToClientTask = tasks.register("copyModToClient") { into("""D:\Users\Adam\AppData\Roaming\Factorio\mods""") } -val serverRestartTask = tasks.register("serverRestart") { - group = projectId - - workingDir = layout.projectDirectory.dir("src/test/resources/server/").asFile - commandLine = parseSpaceSeparatedArgs("docker-compose restart") -} - -tasks.register("serverStop") { - group = projectId - - workingDir = layout.projectDirectory.dir("src/test/resources/server/").asFile - commandLine = parseSpaceSeparatedArgs("docker-compose stop") -} +//val factorioClientLaunch = tasks.register("launch") { +// description = "Run Factorio client" +// group = "$projectId.factorioClient" +// +// dependsOn( +// serverRestartTask, +// copyModToClientTask +// ) +// +//// workingDir = layout.projectDirectory.dir("src/test/resources/server/").asFile +// commandLine = parseSpaceSeparatedArgs( +// """explorer "steam://rungameid/427520 --mp-connect localhost" """ +// ) +//} val launch = tasks.register("modLauncher") { + description = "Build the mod, upload to Server and Client, and start both" group = projectId dependsOn( copyModToServerTask, copyModToClientTask, - serverRestartTask, + serverUpTask, +// factorioClientLaunch, ) } + +tasks.register("downloadFactorioApiDocs") { + group = projectId + + val target = uri("https://lua-api.factorio.com/latest/runtime-api.json") + val apiFilename = File(target.path).name + val downloadedFile = file(temporaryDir.path + "/" + apiFilename) + + val apiFile = modBuildDir.file(apiFilename) + outputs.file(apiFile) + + doLast { + + ant.invokeMethod("get", mapOf( + "src" to target, + "dest" to downloadedFile, + "verbose" to true, + )) + + val json = downloadedFile.readText() + val prettyJson = groovy.json.JsonOutput.prettyPrint(json) + + apiFile.asFile.writeText(prettyJson) + + logger.lifecycle("Downloaded Factorio API json: $apiFile") + } +}