From 0e3f8c2d8ef52db05bc2fbfdd36384f89ecaba65 Mon Sep 17 00:00:00 2001 From: Catalin Constantin Mititiuc Date: Thu, 30 Jul 2026 17:39:28 -0700 Subject: [PATCH 1/5] Add README.md --- README.md | 23 +++++++++++++++++++++++ 1 file changed, 23 insertions(+) create mode 100644 README.md diff --git a/README.md b/README.md new file mode 100644 index 0000000..23bb566 --- /dev/null +++ b/README.md @@ -0,0 +1,23 @@ +## mojo-app + +An example Mojolicious application. + +--- + +## build docker image + + $ docker build -t mojo_app . + +## serve app + + $ docker run --rm -it -p 3000:3000 mojo_app + +Visit `localhost:3000` with web browser. + +## serve app with local changes + + $ docker run --rm -it -p 3000:3000 -v $PWD:/opt/app mojo_app + +Visit `localhost:3000` with web browser. Changes should load when you reload +the page, without having to restart the server. + -- 2.39.5 From 0343b43b50491c419cb9a4c8a887d51ac90e0e02 Mon Sep 17 00:00:00 2001 From: Catalin Constantin Mititiuc Date: Thu, 30 Jul 2026 18:34:20 -0700 Subject: [PATCH 2/5] Add Mojolicious AssetPack plugin and Materialize styles --- .gitignore | 2 + cpanfile | 3 +- cpanfile.snapshot | 45 ++++++++++++++++++++++ mojo_app/assets/materialize.css | 1 + mojo_app/lib/MojoApp.pm | 3 ++ mojo_app/package-lock.json | 18 +++++++++ mojo_app/package.json | 5 +++ mojo_app/templates/layouts/default.html.ep | 11 +++++- 8 files changed, 85 insertions(+), 3 deletions(-) create mode 120000 mojo_app/assets/materialize.css create mode 100644 mojo_app/package-lock.json create mode 100644 mojo_app/package.json diff --git a/.gitignore b/.gitignore index 4083037..64126e7 100644 --- a/.gitignore +++ b/.gitignore @@ -1 +1,3 @@ local +node_modules +assetpack.db diff --git a/cpanfile b/cpanfile index 8811399..4b2387e 100644 --- a/cpanfile +++ b/cpanfile @@ -1 +1,2 @@ -requires 'Mojolicious' => '9.48', +requires 'Mojolicious' => '9.48'; +requires 'Mojolicious::Plugin::AssetPack' => '2.15'; diff --git a/cpanfile.snapshot b/cpanfile.snapshot index 95f032b..3a88c17 100644 --- a/cpanfile.snapshot +++ b/cpanfile.snapshot @@ -1,5 +1,21 @@ # carton snapshot format: version 1.0 DISTRIBUTIONS + File-Which-1.27 + pathname: P/PL/PLICEASE/File-Which-1.27.tar.gz + provides: + File::Which 1.27 + requirements: + ExtUtils::MakeMaker 0 + base 0 + perl 5.006 + IPC-Run3-0.049 + pathname: R/RJ/RJBS/IPC-Run3-0.049.tar.gz + provides: + IPC::Run3 0.049 + requirements: + ExtUtils::MakeMaker 0 + Test::More 0.31 + Time::HiRes 0 Mojolicious-9.48 pathname: S/SR/SRI/Mojolicious-9.48.tar.gz provides: @@ -120,3 +136,32 @@ DISTRIBUTIONS IO::Socket::IP 0.37 Sub::Util 1.41 perl 5.016 + Mojolicious-Plugin-AssetPack-2.15 + pathname: S/SR/SRI/Mojolicious-Plugin-AssetPack-2.15.tar.gz + provides: + Mojolicious::Plugin::AssetPack 2.15 + Mojolicious::Plugin::AssetPack::Asset undef + Mojolicious::Plugin::AssetPack::Asset::Null undef + Mojolicious::Plugin::AssetPack::Pipe undef + Mojolicious::Plugin::AssetPack::Pipe::CoffeeScript undef + Mojolicious::Plugin::AssetPack::Pipe::Combine undef + Mojolicious::Plugin::AssetPack::Pipe::Css undef + Mojolicious::Plugin::AssetPack::Pipe::Favicon undef + Mojolicious::Plugin::AssetPack::Pipe::Fetch undef + Mojolicious::Plugin::AssetPack::Pipe::JavaScript undef + Mojolicious::Plugin::AssetPack::Pipe::Jpeg undef + Mojolicious::Plugin::AssetPack::Pipe::Less undef + Mojolicious::Plugin::AssetPack::Pipe::Png undef + Mojolicious::Plugin::AssetPack::Pipe::Riotjs undef + Mojolicious::Plugin::AssetPack::Pipe::RollupJs undef + Mojolicious::Plugin::AssetPack::Pipe::Sass undef + Mojolicious::Plugin::AssetPack::Pipe::TypeScript undef + Mojolicious::Plugin::AssetPack::Pipe::Vuejs undef + Mojolicious::Plugin::AssetPack::Store undef + Mojolicious::Plugin::AssetPack::Util undef + Mojolicious::Plugin::AssetPack::Util::_chdir undef + requirements: + ExtUtils::MakeMaker 0 + File::Which 1.21 + IPC::Run3 0.048 + Mojolicious 9.34 diff --git a/mojo_app/assets/materialize.css b/mojo_app/assets/materialize.css new file mode 120000 index 0000000..477a32e --- /dev/null +++ b/mojo_app/assets/materialize.css @@ -0,0 +1 @@ +../node_modules/materialize-css/dist/css/materialize.css \ No newline at end of file diff --git a/mojo_app/lib/MojoApp.pm b/mojo_app/lib/MojoApp.pm index 3f38a44..dda1190 100644 --- a/mojo_app/lib/MojoApp.pm +++ b/mojo_app/lib/MojoApp.pm @@ -10,6 +10,9 @@ sub startup ($self) { # Configure the application $self->secrets($config->{secrets}); + $self->plugin(AssetPack => {pipes => [qw(Css)]}); + $self->asset->process("app.css" => ("materialize.css")); + # Router my $r = $self->routes; diff --git a/mojo_app/package-lock.json b/mojo_app/package-lock.json new file mode 100644 index 0000000..dabcd3d --- /dev/null +++ b/mojo_app/package-lock.json @@ -0,0 +1,18 @@ +{ + "name": "mojo_app", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "dependencies": { + "materialize-css": "^1.0.0" + } + }, + "node_modules/materialize-css": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/materialize-css/-/materialize-css-1.0.0.tgz", + "integrity": "sha512-4/oecXl8y/1i8RDZvyvwAICyqwNoKU4or5uf8uoAd74k76KzZ0Llym4zhJ5lLNUskcqjO0AuMcvNyDkpz8Z6zw==", + "license": "MIT" + } + } +} diff --git a/mojo_app/package.json b/mojo_app/package.json new file mode 100644 index 0000000..41974fe --- /dev/null +++ b/mojo_app/package.json @@ -0,0 +1,5 @@ +{ + "dependencies": { + "materialize-css": "^1.0.0" + } +} diff --git a/mojo_app/templates/layouts/default.html.ep b/mojo_app/templates/layouts/default.html.ep index 599c556..323bdd5 100644 --- a/mojo_app/templates/layouts/default.html.ep +++ b/mojo_app/templates/layouts/default.html.ep @@ -1,5 +1,12 @@ - <%= title %> - <%= content %> + + <%= title %> + %= asset "app.css" + + + + +<%= content %> + -- 2.39.5 From a39d3b682a5d0f353a6e5851de45c2b18836849b Mon Sep 17 00:00:00 2001 From: Catalin Constantin Mititiuc Date: Thu, 30 Jul 2026 19:23:28 -0700 Subject: [PATCH 3/5] Update Dockerfile to install Node packages --- Dockerfile | 14 +++++++++++--- 1 file changed, 11 insertions(+), 3 deletions(-) diff --git a/Dockerfile b/Dockerfile index 421d147..e07a5b1 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,3 +1,11 @@ +FROM node:latest + +WORKDIR /usr/src/ + +COPY mojo_app/package.json . +COPY mojo_app/package-lock.json . +RUN npm install + FROM perl:latest WORKDIR /opt/app/ @@ -8,9 +16,9 @@ COPY mojo_app ./mojo_app/ RUN cpanm Carton && carton install +WORKDIR /opt/app/mojo_app/ +COPY --from=0 /usr/src/ . + EXPOSE 3000 -WORKDIR /opt/app/mojo_app/ - ENTRYPOINT ["carton", "exec", "--", "morbo", "script/mojo_app"] - -- 2.39.5 From 772506e06d70de83e1d3307149600cef4abfc198 Mon Sep 17 00:00:00 2001 From: Catalin Constantin Mititiuc Date: Thu, 30 Jul 2026 19:32:38 -0700 Subject: [PATCH 4/5] Update README.md --- README.md | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 56295d5..8655c83 100644 --- a/README.md +++ b/README.md @@ -16,10 +16,14 @@ Visit `localhost:3000` with web browser. ## serve app with local changes -### install dependencies +### install Mojolicious dependencies $ docker run --rm -v $PWD:/opt/app --entrypoint carton mojo_app install +### install Node packages + + $ docker run --rm --init -w /opt/mojo_app -v $PWD/mojo_app:/opt/mojo_app node npm install + ### start the server $ docker run --rm -v $PWD:/opt/app -p 3000:3000 mojo_app -- 2.39.5 From cea68e645c906c6c32dc2fc396405bedb381638e Mon Sep 17 00:00:00 2001 From: Catalin Constantin Mititiuc Date: Thu, 30 Jul 2026 19:38:37 -0700 Subject: [PATCH 5/5] Update Dockerfile to set correct name in package-lock.json --- Dockerfile | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/Dockerfile b/Dockerfile index e07a5b1..e246cfe 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,6 +1,6 @@ FROM node:latest -WORKDIR /usr/src/ +WORKDIR /opt/mojo_app/ COPY mojo_app/package.json . COPY mojo_app/package-lock.json . @@ -14,10 +14,10 @@ COPY cpanfile . COPY cpanfile.snapshot . COPY mojo_app ./mojo_app/ -RUN cpanm Carton && carton install +RUN cpanm -nv Carton && carton install WORKDIR /opt/app/mojo_app/ -COPY --from=0 /usr/src/ . +COPY --from=0 /opt/mojo_app/ . EXPOSE 3000 -- 2.39.5