Skip to content

Commit

Permalink
Setup nix build, drop pwa feature
Browse files Browse the repository at this point in the history
  • Loading branch information
gregor-i committed Oct 24, 2024
1 parent 8023ef2 commit 76212be
Show file tree
Hide file tree
Showing 12 changed files with 271 additions and 153 deletions.
4 changes: 3 additions & 1 deletion .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -23,4 +23,6 @@ node_modules/

backend/public

temp/
temp/
result
result/
36 changes: 0 additions & 36 deletions build.sbt
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,6 @@ lazy val nutria = project
`shader-builder`.js,
`shader-builder`.jvm,
frontend,
`service-worker`,
backend,
`static-renderer`
)
Expand Down Expand Up @@ -75,20 +74,6 @@ val frontend = project
scalatest
)

val `service-worker` = project
.in(file("service-worker"))
.enablePlugins(ScalaJSPlugin)
.settings(scalaJSUseMainModuleInitializer := true)
.enablePlugins(BuildInfoPlugin)
.settings(
buildInfoKeys := Seq(
BuildInfoKey.action("buildTime") { System.currentTimeMillis },
BuildInfoKey.action("assetFiles") { "ls backend/public/assets".!! }
),
scalacOptions += "-P:scalajs:nowarnGlobalExecutionContext"
)
.settings(scalaJsDom)

lazy val backend = project
.in(file("backend"))
.dependsOn(core.jvm)
Expand Down Expand Up @@ -140,29 +125,9 @@ val `static-renderer` = project
outputFile
}

(`service-worker` / compile) := {
val ret = (`service-worker` / Compile / compile).value
val buildSw = (`service-worker` / Compile / fastOptJS).value.data
val outputFile = (backend / baseDirectory).value / "public" / "assets" / "sw.js"
streams.value.log.info("integrating service-worker (fastOptJS)")
val buildLog = Seq("cp", buildSw.toString, outputFile.toString).!!
streams.value.log.info(buildLog)
ret
}

(`service-worker` / stage) := {
val buildSw = (`service-worker` / Compile / fullOptJS).value.data
val outputFile = (backend / baseDirectory).value / "public" / "assets" / "sw.js"
streams.value.log.info("integrating service-worker (fullOptJS)")
val buildLog = Seq("cp", buildSw.toString, outputFile.toString).!!
streams.value.log.info(buildLog)
outputFile
}

(nutria / Compile / compile) := Def
.sequential(
frontend / Compile / compile,
`service-worker` / Compile / compile,
`static-renderer` / Compile / compile,
backend / Compile / compile
)
Expand All @@ -171,7 +136,6 @@ val `static-renderer` = project
(nutria / stage) := Def
.sequential(
frontend / stage,
`service-worker` / stage,
backend / stage
)
.value
Expand Down
4 changes: 0 additions & 4 deletions dockerfile

This file was deleted.

98 changes: 98 additions & 0 deletions flake.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

50 changes: 50 additions & 0 deletions flake.nix
Original file line number Diff line number Diff line change
@@ -0,0 +1,50 @@
{
inputs = {
nixpkgs.url = "github:NixOS/nixpkgs/nixos-23.11";
utils.url = "github:numtide/flake-utils";
sbtDerivation.url = "github:zaninime/sbt-derivation";
sbtDerivation.inputs.nixpkgs.follows = "nixpkgs";
};

outputs = { self, nixpkgs, utils, sbtDerivation }:
utils.lib.eachDefaultSystem (system:
let
pkgs = import nixpkgs { inherit system; };
fs = pkgs.lib.fileset;
mkSbtDerivation = sbtDerivation.mkSbtDerivation.${system};
sbt = pkgs.sbt;

assets = pkgs.callPackage nix/assets.nix { inherit fs pkgs; };
frontend = pkgs.callPackage nix/frontend.nix {
inherit pkgs mkSbtDerivation fs sbt assets;
};

allAssets = pkgs.symlinkJoin {
name = "assets";
paths = [ assets frontend ];
postBuild = "mv $out/nutria.js $out/assets/.";
};

backend = pkgs.callPackage nix/backend.nix {
inherit mkSbtDerivation fs sbt allAssets;
};

dockerImage = pkgs.dockerTools.buildLayeredImage {
name = "gregor23/nutria";
tag = self.rev or "dirty";
config.Cmd = [
"${pkgs.jdk_headless}/bin/java"
"-cp"
"${backend}/stage/lib/*:${backend}/stage/conf/"
"play.core.server.ProdServerStart"
];
};

in {
packages = { inherit assets frontend allAssets backend dockerImage; };

devShells.default = pkgs.mkShell { buildInputs = [ sbt ]; };

formatter = pkgs.nixfmt;
});
}
26 changes: 0 additions & 26 deletions frontend/src/main/scala/nutria/frontend/Main.scala
Original file line number Diff line number Diff line change
Expand Up @@ -11,9 +11,6 @@ import scala.util.{Failure, Success}

object Main {
def main(args: Array[String]): Unit = {
if (dom.document.location.hostname != "localhost")
installServiceWorker()

dom.document.addEventListener[dom.Event](
"DOMContentLoaded",
(_: js.Any) => {
Expand All @@ -22,27 +19,4 @@ object Main {
}
)
}

private def installServiceWorker(): Unit =
(for {
navigator <- Future {
dom.window.navigator.serviceWorker
}.filter(!js.isUndefined(_))
registration <- navigator
.register("/assets/sw.js", Dynamic.literal(scope = "/").asInstanceOf[ServiceWorkerRegistrationOptions])
.toFuture
_ = registration.addEventListener(
"updatefound",
(_: js.Any) => {
dom.console.debug("new service worker found. page reload!")
dom.window.location.reload()
}
)
} yield registration)
.onComplete {
case Success(_) =>
dom.console.log("[Service Worker] registration successful")
case Failure(_) =>
dom.console.log("[Service Worker] registration failed")
}
}
14 changes: 0 additions & 14 deletions frontend/src/main/static/manifest.json

This file was deleted.

30 changes: 30 additions & 0 deletions nix/assets.nix
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
{ pkgs, fs }:
pkgs.buildNpmPackage {
pname = "nutria-assets";
version = "0.1.0";
npmDepsHash = "sha256-vF6+lhVOgUxBFHbbU9C7DkZpo2yU5S01HatJ6NfNGVg=";

src = fs.toSource {
root = ./..;
fileset = fs.unions [
../package.json
../package-lock.json
../frontend/src/main/css
../frontend/src/main/html
../frontend/src/main/img
];
};

dontNpmBuild = true;

installPhase = ''
mkdir -p backend/public/html
mkdir -p backend/public/assets
npm run build-css
npm run build-html
npm run build-img
npm run build-fonts
cp -r backend/public $out
'';
}
35 changes: 35 additions & 0 deletions nix/backend.nix
Original file line number Diff line number Diff line change
@@ -0,0 +1,35 @@
{ mkSbtDerivation, fs, sbt, allAssets }:
mkSbtDerivation {
pname = "nutria-backend";
version = "0.1.0";
depsSha256 = "sha256-G4K++AEcKNCNUNEbMmYIY8MDm+oj9VGX+y6r2/AWFkI=";

src = fs.toSource {
root = ./..;
fileset = fs.unions [
../build.sbt
../project/build.properties
../project/plugins.sbt
../backend/app
../backend/conf
../core/src/main
../macros/src/main
../shader-builder/src/main
];
};

depsWarmupCommand = "sbt backend/stage";

assets = allAssets;

buildInputs = [ sbt ];
buildPhase = ''
mkdir -p backend/public
cp -r $assets/* backend/public/.
sbt backend/stage
'';

installPhase = ''
cp -r backend/target/universal $out
'';
}
Loading

0 comments on commit 76212be

Please sign in to comment.