Spaces:
Runtime error
Runtime error
Anooj
commited on
Commit
•
1c6a4dd
1
Parent(s):
a1e5d79
added precompilation
Browse files- Dockerfile +8 -2
- Manifest.toml +27 -0
- Project.toml +2 -0
- make.jl +10 -0
- packages.jl +30 -0
- precompile.jl +47 -0
Dockerfile
CHANGED
@@ -4,9 +4,15 @@ RUN useradd --create-home --shell /bin/bash genie
|
|
4 |
RUN mkdir /home/genie/app
|
5 |
COPY . /home/genie/app
|
6 |
WORKDIR /home/genie/app
|
|
|
|
|
|
|
|
|
7 |
RUN chown -R genie:genie /home/
|
8 |
USER genie
|
9 |
|
|
|
|
|
10 |
EXPOSE 8000
|
11 |
EXPOSE 80
|
12 |
ENV JULIA_DEPOT_PATH "/home/genie/.julia"
|
@@ -18,6 +24,6 @@ ENV WSPORT "8000"
|
|
18 |
RUN julia -e 'using Pkg; Pkg.add(url="https://github.com/anoojpatel/Chess.jl"); Pkg.activate("."); Pkg.add("Stipple"); Pkg.precompile()'
|
19 |
|
20 |
# Compile app
|
21 |
-
|
22 |
|
23 |
-
ENTRYPOINT julia --project -e 'using Pkg; Pkg.instantiate(); using Genie; Genie.loadapp(); up(async=false);;'
|
|
|
4 |
RUN mkdir /home/genie/app
|
5 |
COPY . /home/genie/app
|
6 |
WORKDIR /home/genie/app
|
7 |
+
|
8 |
+
# C compiler for PackageCompiler before non-root user is set
|
9 |
+
RUN apt-get update && apt-get install -y g++
|
10 |
+
|
11 |
RUN chown -R genie:genie /home/
|
12 |
USER genie
|
13 |
|
14 |
+
|
15 |
+
|
16 |
EXPOSE 8000
|
17 |
EXPOSE 80
|
18 |
ENV JULIA_DEPOT_PATH "/home/genie/.julia"
|
|
|
24 |
RUN julia -e 'using Pkg; Pkg.add(url="https://github.com/anoojpatel/Chess.jl"); Pkg.activate("."); Pkg.add("Stipple"); Pkg.precompile()'
|
25 |
|
26 |
# Compile app
|
27 |
+
RUN julia --project make.jl
|
28 |
|
29 |
+
ENTRYPOINT julia --project --sysimage=sysimg.so -e 'using Pkg; Pkg.instantiate(); using Genie; Genie.loadapp(); up(async=false);;'
|
Manifest.toml
CHANGED
@@ -303,6 +303,10 @@ git-tree-sha1 = "f2355693d6778a178ade15952b7ac47a4ff97996"
|
|
303 |
uuid = "b964fa9f-0449-5b57-a5c2-d3ea65f4040f"
|
304 |
version = "1.3.0"
|
305 |
|
|
|
|
|
|
|
|
|
306 |
[[deps.LibCURL]]
|
307 |
deps = ["LibCURL_jll", "MozillaCACerts_jll"]
|
308 |
uuid = "b27032c2-a3e7-50c8-80cd-2d36dbcbfd21"
|
@@ -442,6 +446,12 @@ git-tree-sha1 = "85f8e6578bf1f9ee0d11e7bb1b1456435479d47c"
|
|
442 |
uuid = "bac558e1-5e72-5ebc-8fee-abe8a469f55d"
|
443 |
version = "1.4.1"
|
444 |
|
|
|
|
|
|
|
|
|
|
|
|
|
445 |
[[deps.Parameters]]
|
446 |
deps = ["OrderedCollections", "UnPack"]
|
447 |
git-tree-sha1 = "34c0e9ad262e5f7fc75b10a9952ca7692cfc5fbe"
|
@@ -464,6 +474,11 @@ git-tree-sha1 = "a6062fe4063cdafe78f4a0a81cfffb89721b30e7"
|
|
464 |
uuid = "2dfb63ee-cc39-5dd5-95bd-886bf059d720"
|
465 |
version = "1.4.2"
|
466 |
|
|
|
|
|
|
|
|
|
|
|
467 |
[[deps.Preferences]]
|
468 |
deps = ["TOML"]
|
469 |
git-tree-sha1 = "47e5f437cc0e7ef2ce8406ce1e7e24d44915f88d"
|
@@ -493,6 +508,12 @@ git-tree-sha1 = "45e428421666073eab6f2da5c9d310d99bb12f9b"
|
|
493 |
uuid = "189a3867-3050-52da-a836-e630ba90ab69"
|
494 |
version = "1.2.2"
|
495 |
|
|
|
|
|
|
|
|
|
|
|
|
|
496 |
[[deps.Requires]]
|
497 |
deps = ["UUIDs"]
|
498 |
git-tree-sha1 = "838a3a4188e2ded87a4f9f184b4b0d78a1e91cb7"
|
@@ -520,6 +541,12 @@ git-tree-sha1 = "2c761a91fb503e94bd0130fcf4352166c3c555bc"
|
|
520 |
uuid = "76ed43ae-9a5d-5a62-8c75-30186b810ce8"
|
521 |
version = "3.40.0+1"
|
522 |
|
|
|
|
|
|
|
|
|
|
|
|
|
523 |
[[deps.Serialization]]
|
524 |
uuid = "9e88b42a-f829-5b0c-bbe9-9e923198166b"
|
525 |
|
|
|
303 |
uuid = "b964fa9f-0449-5b57-a5c2-d3ea65f4040f"
|
304 |
version = "1.3.0"
|
305 |
|
306 |
+
[[deps.LazyArtifacts]]
|
307 |
+
deps = ["Artifacts", "Pkg"]
|
308 |
+
uuid = "4af54fe1-eca0-43a8-85a7-787d91b784e3"
|
309 |
+
|
310 |
[[deps.LibCURL]]
|
311 |
deps = ["LibCURL_jll", "MozillaCACerts_jll"]
|
312 |
uuid = "b27032c2-a3e7-50c8-80cd-2d36dbcbfd21"
|
|
|
446 |
uuid = "bac558e1-5e72-5ebc-8fee-abe8a469f55d"
|
447 |
version = "1.4.1"
|
448 |
|
449 |
+
[[deps.PackageCompiler]]
|
450 |
+
deps = ["Artifacts", "LazyArtifacts", "Libdl", "Pkg", "Printf", "RelocatableFolders", "TOML", "UUIDs"]
|
451 |
+
git-tree-sha1 = "b7042b6eff5434407d8bc4b48470ac4c708b1f8c"
|
452 |
+
uuid = "9b87118b-4619-50d2-8e1e-99f35a4d4d9d"
|
453 |
+
version = "2.1.3"
|
454 |
+
|
455 |
[[deps.Parameters]]
|
456 |
deps = ["OrderedCollections", "UnPack"]
|
457 |
git-tree-sha1 = "34c0e9ad262e5f7fc75b10a9952ca7692cfc5fbe"
|
|
|
474 |
uuid = "2dfb63ee-cc39-5dd5-95bd-886bf059d720"
|
475 |
version = "1.4.2"
|
476 |
|
477 |
+
[[deps.PrecompileSignatures]]
|
478 |
+
git-tree-sha1 = "18ef344185f25ee9d51d80e179f8dad33dc48eb1"
|
479 |
+
uuid = "91cefc8d-f054-46dc-8f8c-26e11d7c5411"
|
480 |
+
version = "3.0.3"
|
481 |
+
|
482 |
[[deps.Preferences]]
|
483 |
deps = ["TOML"]
|
484 |
git-tree-sha1 = "47e5f437cc0e7ef2ce8406ce1e7e24d44915f88d"
|
|
|
508 |
uuid = "189a3867-3050-52da-a836-e630ba90ab69"
|
509 |
version = "1.2.2"
|
510 |
|
511 |
+
[[deps.RelocatableFolders]]
|
512 |
+
deps = ["SHA", "Scratch"]
|
513 |
+
git-tree-sha1 = "90bc7a7c96410424509e4263e277e43250c05691"
|
514 |
+
uuid = "05181044-ff0b-4ac5-8273-598c1e38db00"
|
515 |
+
version = "1.0.0"
|
516 |
+
|
517 |
[[deps.Requires]]
|
518 |
deps = ["UUIDs"]
|
519 |
git-tree-sha1 = "838a3a4188e2ded87a4f9f184b4b0d78a1e91cb7"
|
|
|
541 |
uuid = "76ed43ae-9a5d-5a62-8c75-30186b810ce8"
|
542 |
version = "3.40.0+1"
|
543 |
|
544 |
+
[[deps.Scratch]]
|
545 |
+
deps = ["Dates"]
|
546 |
+
git-tree-sha1 = "f94f779c94e58bf9ea243e77a37e16d9de9126bd"
|
547 |
+
uuid = "6c6a2e73-6563-6170-7368-637461726353"
|
548 |
+
version = "1.1.1"
|
549 |
+
|
550 |
[[deps.Serialization]]
|
551 |
uuid = "9e88b42a-f829-5b0c-bbe9-9e923198166b"
|
552 |
|
Project.toml
CHANGED
@@ -6,6 +6,8 @@ version = "0.1.0"
|
|
6 |
[deps]
|
7 |
Chess = "717200cc-f167-4fd3-b4bf-b5e480529844"
|
8 |
Genie = "c43c736e-a2d1-11e8-161f-af95117fbd1e"
|
|
|
|
|
9 |
Random = "9a3f8284-a2c9-5f02-9a11-845980a1fd5c"
|
10 |
StatsBase = "2913bbd2-ae8a-5f71-8c99-4fb6c76f3a91"
|
11 |
Stipple = "4acbeb90-81a0-11ea-1966-bdaff8155998"
|
|
|
6 |
[deps]
|
7 |
Chess = "717200cc-f167-4fd3-b4bf-b5e480529844"
|
8 |
Genie = "c43c736e-a2d1-11e8-161f-af95117fbd1e"
|
9 |
+
PackageCompiler = "9b87118b-4619-50d2-8e1e-99f35a4d4d9d"
|
10 |
+
PrecompileSignatures = "91cefc8d-f054-46dc-8f8c-26e11d7c5411"
|
11 |
Random = "9a3f8284-a2c9-5f02-9a11-845980a1fd5c"
|
12 |
StatsBase = "2913bbd2-ae8a-5f71-8c99-4fb6c76f3a91"
|
13 |
Stipple = "4acbeb90-81a0-11ea-1966-bdaff8155998"
|
make.jl
ADDED
@@ -0,0 +1,10 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
using PackageCompiler
|
2 |
+
|
3 |
+
include("packages.jl")
|
4 |
+
|
5 |
+
PackageCompiler.create_sysimage(
|
6 |
+
PACKAGES,
|
7 |
+
sysimage_path = "sysimg.so",
|
8 |
+
precompile_execution_file = "precompile.jl",
|
9 |
+
cpu_target = PackageCompiler.default_app_cpu_target()
|
10 |
+
)
|
packages.jl
ADDED
@@ -0,0 +1,30 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
using Pkg
|
2 |
+
|
3 |
+
function list_packages()
|
4 |
+
deps = Pkg.dependencies()
|
5 |
+
installs = Dict{String, Vector{Any}}()
|
6 |
+
|
7 |
+
for (uuid, dep) in deps
|
8 |
+
dep.is_direct_dep || continue
|
9 |
+
dep.version === nothing && continue
|
10 |
+
dep.source === nothing && continue
|
11 |
+
moddevdir = false
|
12 |
+
|
13 |
+
if haskey(ENV, "JULIA_PKG_DEVDIR")
|
14 |
+
moddevdir = true
|
15 |
+
end
|
16 |
+
|
17 |
+
if moddevdir && occursin(ENV["JULIA_PKG_DEVDIR"], dep.source)
|
18 |
+
installs[dep.name] = [dep.version, "dev"]
|
19 |
+
elseif !moddevdir && !isempty(findall(x -> x == "dev", splitpath(dep.source)))
|
20 |
+
installs[dep.name] = [dep.version, "dev"]
|
21 |
+
else
|
22 |
+
installs[dep.name] = [dep.version, ""]
|
23 |
+
end
|
24 |
+
|
25 |
+
end
|
26 |
+
|
27 |
+
return installs
|
28 |
+
end
|
29 |
+
|
30 |
+
const PACKAGES = [pkg for pkg in keys(list_packages())]
|
precompile.jl
ADDED
@@ -0,0 +1,47 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
using Genie
|
2 |
+
|
3 |
+
|
4 |
+
Genie.loadapp(pwd())
|
5 |
+
|
6 |
+
include("packages.jl")
|
7 |
+
using PrecompileSignatures
|
8 |
+
|
9 |
+
for p in PACKAGES
|
10 |
+
@show "Precompiling signatures for $p"
|
11 |
+
Core.eval(@__MODULE__, Meta.parse("import $p"))
|
12 |
+
Core.eval(@__MODULE__, Meta.parse("@precompile_signatures($p)"))
|
13 |
+
end
|
14 |
+
|
15 |
+
import Genie.Requests.HTTP
|
16 |
+
|
17 |
+
@info "Hitting routes"
|
18 |
+
|
19 |
+
for r in Genie.Router.routes()
|
20 |
+
try
|
21 |
+
r.action()
|
22 |
+
catch
|
23 |
+
end
|
24 |
+
end
|
25 |
+
|
26 |
+
const PORT = 8000
|
27 |
+
|
28 |
+
try
|
29 |
+
@info "Starting server"
|
30 |
+
up(PORT)
|
31 |
+
catch
|
32 |
+
end
|
33 |
+
|
34 |
+
rts = Genie.Router.routes()
|
35 |
+
|
36 |
+
try
|
37 |
+
for rt in rts
|
38 |
+
@time HTTP.request("GET", "http://localhost:$PORT" * rt.path)
|
39 |
+
end
|
40 |
+
catch
|
41 |
+
end
|
42 |
+
|
43 |
+
try
|
44 |
+
@info "Stopping server"
|
45 |
+
Genie.Server.down!()
|
46 |
+
catch
|
47 |
+
end
|