feat: add initial node support

Refs: #5
This commit is contained in:
Oliver Davies 2023-03-12 12:23:25 +00:00
parent a179f1b0ee
commit b4b289748a
7 changed files with 68 additions and 2 deletions

View file

@ -101,6 +101,11 @@ final class BuildConfigurationCommand extends Command
$this->filesToGenerate->push(['php/docker-entrypoint-php', 'tools/docker/images/php/root/usr/local/bin/docker-entrypoint-php']); $this->filesToGenerate->push(['php/docker-entrypoint-php', 'tools/docker/images/php/root/usr/local/bin/docker-entrypoint-php']);
} }
if (self::isNode(Arr::get($configurationData, 'language'))) {
$this->filesToGenerate->push(['node/.yarnrc', '.yarnrc']);
$this->filesToGenerate->push(['node/Dockerfile', 'Dockerfile']);
}
if (self::isCaddy(Arr::get($configurationData, 'web.type'))) { if (self::isCaddy(Arr::get($configurationData, 'web.type'))) {
$this->filesystem->mkdir("{$this->outputDir}/tools/docker/images/web/root/etc/caddy"); $this->filesystem->mkdir("{$this->outputDir}/tools/docker/images/web/root/etc/caddy");
$this->filesToGenerate->push(['web/caddy/Caddyfile', 'tools/docker/images/web/root/etc/caddy/Caddyfile']); $this->filesToGenerate->push(['web/caddy/Caddyfile', 'tools/docker/images/web/root/etc/caddy/Caddyfile']);
@ -166,6 +171,15 @@ final class BuildConfigurationCommand extends Command
return strtoupper($webServer) === WebServer::NGINX->name; return strtoupper($webServer) === WebServer::NGINX->name;
} }
private static function isNode(?string $language): bool
{
if (is_null($language)) {
return false;
}
return strtoupper($language) === Language::NODE->name;
}
private static function isPhp(?string $language): bool private static function isPhp(?string $language): bool
{ {
if (is_null($language)) { if (is_null($language)) {

View file

@ -6,5 +6,6 @@ namespace OliverDaviesLtd\BuildConfigs\Enum;
enum Language enum Language
{ {
case NODE;
case PHP; case PHP;
} }

View file

@ -28,13 +28,20 @@ final class ConfigurationValidator implements ValidatorInterface
'language' => [ 'language' => [
new Assert\NotNull(), new Assert\NotNull(),
new Assert\Type('string'), new Assert\Type('string'),
new Assert\Choice(['node', 'php']), new Assert\Choice([
'node',
'php',
]),
], ],
'type' => [ 'type' => [
new Assert\NotNull(), new Assert\NotNull(),
new Assert\Type('string'), new Assert\Type('string'),
new Assert\Choice(['drupal-project', 'fractal', 'php-library']), new Assert\Choice([
'drupal-project',
'fractal',
'php-library',
]),
], ],
'project_root' => [ 'project_root' => [
@ -53,6 +60,8 @@ final class ConfigurationValidator implements ValidatorInterface
// TODO: this should be a boolean if present. // TODO: this should be a boolean if present.
'justfile' => new Assert\Optional(), 'justfile' => new Assert\Optional(),
'node' => new Assert\Optional(),
'php' => new Assert\Optional(), 'php' => new Assert\Optional(),
'web' => new Assert\Optional(), 'web' => new Assert\Optional(),

View file

@ -40,6 +40,7 @@ services:
profiles: [web] profiles: [web]
{% endif %} {% endif %}
{% if "php" == language %}
php: php:
<<: *default-app <<: *default-app
build: build:
@ -52,6 +53,20 @@ services:
- database - database
{% endif -%} {% endif -%}
profiles: [php] profiles: [php]
{% elseif "node" == language %}
node:
<<: *default-app
build:
context: .
target: build
volumes:
- .:{{ project_root }}
{% if "database" in dockerCompose.services|keys -%}
depends_on:
- database
{% endif -%}
profiles: [node]
{% endif %}
{% if "database" in dockerCompose.services|keys %} {% if "database" in dockerCompose.services|keys %}
database: database:

View file

@ -4,7 +4,11 @@ export DOCKER_UID=1000
{% if dockerCompose %} {% if dockerCompose %}
export COMPOSE_PROJECT_NAME={{ name }} export COMPOSE_PROJECT_NAME={{ name }}
{% if "php" == language %}
export COMPOSE_PROFILES=web,php,database export COMPOSE_PROFILES=web,php,database
{% elseif "node" == language %}
export COMPOSE_PROFILES=node
{% endif %}
export DOCKER_WEB_VOLUME=.:{{ project_root }} export DOCKER_WEB_VOLUME=.:{{ project_root }}
{% endif %} {% endif %}

View file

@ -0,0 +1,3 @@
# {{ managedText | raw }}
--modules-folder /node_modules

View file

@ -0,0 +1,20 @@
FROM node:{{ node.version }} AS base
WORKDIR {{ project_root }}
RUN mkdir /node_modules \
&& chown node:node -R {{ project_root }} /node_modules
COPY --chown=node:node package*.json *yarn* {{ project_root }}
USER node
################################################################################
FROM base AS build
RUN yarn install --frozen-lockfile
COPY --chown=node:node . .
CMD ["bash"]