mirror of
https://github.com/opdavies/build-configs.git
synced 2025-03-13 05:26:56 +00:00
feat(flake): generate nix.flake instead of Docker
...files if a `flake` key exists in a `build.yaml` file. Refs: OD-37
This commit is contained in:
parent
04160ad7de
commit
99ffb87446
|
@ -9,23 +9,33 @@ use App\DataTransferObject\TemplateFile;
|
||||||
use App\Enum\Language;
|
use App\Enum\Language;
|
||||||
use App\Enum\WebServer;
|
use App\Enum\WebServer;
|
||||||
use Illuminate\Support\Arr;
|
use Illuminate\Support\Arr;
|
||||||
|
use Illuminate\Support\Collection;
|
||||||
|
|
||||||
final class CreateListOfFilesToGenerate
|
final class CreateListOfFilesToGenerate
|
||||||
{
|
{
|
||||||
public function handle(array $configurationDataAndDto, \Closure $next) {
|
public function handle(array $configurationDataAndDto, \Closure $next)
|
||||||
|
{
|
||||||
/**
|
/**
|
||||||
* @var Config $configurationDataDto,
|
* @var Config $configurationDataDto,
|
||||||
* @var array<string,mixed> $configurationData
|
* @var array<string,mixed> $configurationData
|
||||||
*/
|
*/
|
||||||
[$configurationData, $configurationDataDto] = $configurationDataAndDto;
|
[$configurationData, $configurationDataDto] = $configurationDataAndDto;
|
||||||
|
|
||||||
|
$isDocker = static::isDocker($configurationData);
|
||||||
|
$isFlake = static::isFlake($configurationData);
|
||||||
|
|
||||||
/** @var Collection<int, TemplateFile> */
|
/** @var Collection<int, TemplateFile> */
|
||||||
$filesToGenerate = collect([
|
$filesToGenerate = collect();
|
||||||
new TemplateFile(data: 'common/.dockerignore', name: '.dockerignore'),
|
|
||||||
new TemplateFile(data: 'common/.hadolint.yaml', name: '.hadolint.yaml'),
|
if ($isDocker) {
|
||||||
new TemplateFile(data: 'env.example', name: '.env.example'),
|
$filesToGenerate->push(new TemplateFile(data: 'common/.dockerignore', name: '.dockerignore'));
|
||||||
]);
|
$filesToGenerate->push(new TemplateFile(data: 'common/.hadolint.yaml', name: '.hadolint.yaml'));
|
||||||
|
$filesToGenerate->push(new TemplateFile(data: 'env.example', name: '.env.example'));
|
||||||
|
}
|
||||||
|
|
||||||
|
if ($isFlake) {
|
||||||
|
$filesToGenerate->push(new TemplateFile(data: 'common/flake.nix', name: 'flake.nix'));
|
||||||
|
}
|
||||||
|
|
||||||
$extraDatabases = Arr::get($configurationData, 'database.extra_databases', []);
|
$extraDatabases = Arr::get($configurationData, 'database.extra_databases', []);
|
||||||
if (count($extraDatabases) > 0) {
|
if (count($extraDatabases) > 0) {
|
||||||
|
@ -45,7 +55,10 @@ final class CreateListOfFilesToGenerate
|
||||||
}
|
}
|
||||||
|
|
||||||
if (static::isPhp(Arr::get($configurationData, 'language'))) {
|
if (static::isPhp(Arr::get($configurationData, 'language'))) {
|
||||||
$filesToGenerate[] = new TemplateFile(data: 'php/Dockerfile', name: 'Dockerfile');
|
if ($isDocker) {
|
||||||
|
$filesToGenerate[] = new TemplateFile(data: 'php/Dockerfile', name: 'Dockerfile');
|
||||||
|
}
|
||||||
|
|
||||||
$filesToGenerate[] = new TemplateFile(data: 'php/phpcs.xml', name: 'phpcs.xml.dist');
|
$filesToGenerate[] = new TemplateFile(data: 'php/phpcs.xml', name: 'phpcs.xml.dist');
|
||||||
$filesToGenerate[] = new TemplateFile(data: 'php/phpunit.xml', name: 'phpunit.xml.dist');
|
$filesToGenerate[] = new TemplateFile(data: 'php/phpunit.xml', name: 'phpunit.xml.dist');
|
||||||
$filesToGenerate[] = new TemplateFile(
|
$filesToGenerate[] = new TemplateFile(
|
||||||
|
@ -65,8 +78,10 @@ final class CreateListOfFilesToGenerate
|
||||||
}
|
}
|
||||||
|
|
||||||
if (static::isNode(Arr::get($configurationData, 'language'))) {
|
if (static::isNode(Arr::get($configurationData, 'language'))) {
|
||||||
$filesToGenerate[] = new TemplateFile(data: 'node/.yarnrc', name: '.yarnrc');
|
if ($isDocker) {
|
||||||
$filesToGenerate[] = new TemplateFile(data: 'node/Dockerfile', name: 'Dockerfile');
|
$filesToGenerate[] = new TemplateFile(data: 'node/.yarnrc', name: '.yarnrc');
|
||||||
|
$filesToGenerate[] = new TemplateFile(data: 'node/Dockerfile', name: 'Dockerfile');
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (static::isCaddy(Arr::get($configurationData, 'web.type'))) {
|
if (static::isCaddy(Arr::get($configurationData, 'web.type'))) {
|
||||||
|
@ -118,6 +133,20 @@ final class CreateListOfFilesToGenerate
|
||||||
return strtoupper($webServer) === WebServer::CADDY->name;
|
return strtoupper($webServer) === WebServer::CADDY->name;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private static function isDocker(array $configurationData): bool
|
||||||
|
{
|
||||||
|
// This should return `false` if there is no explicit `dockerfile` key
|
||||||
|
// in the build.yaml file. This is currently not the case, I assume
|
||||||
|
// because of default values being added.
|
||||||
|
// For now, if it's not a Flake, it's Docker.
|
||||||
|
return !static::isFlake($configurationData);
|
||||||
|
}
|
||||||
|
|
||||||
|
private static function isFlake(array $configurationData): bool
|
||||||
|
{
|
||||||
|
return Arr::get($configurationData, 'flake') !== null;
|
||||||
|
}
|
||||||
|
|
||||||
private static function isNginx(?string $webServer): bool
|
private static function isNginx(?string $webServer): bool
|
||||||
{
|
{
|
||||||
if (is_null($webServer)) {
|
if (is_null($webServer)) {
|
||||||
|
|
23
templates/common/flake.nix.twig
Normal file
23
templates/common/flake.nix.twig
Normal file
|
@ -0,0 +1,23 @@
|
||||||
|
{
|
||||||
|
inputs = {
|
||||||
|
devshell.url = "github:numtide/devshell";
|
||||||
|
nixpkgs.url = "github:NixOS/nixpkgs/nixos-unstable";
|
||||||
|
};
|
||||||
|
|
||||||
|
outputs = inputs@{ flake-parts, ... }:
|
||||||
|
flake-parts.lib.mkFlake { inherit inputs; } {
|
||||||
|
imports = [ inputs.devshell.flakeModule ];
|
||||||
|
|
||||||
|
systems = [ "x86_64-linux" ];
|
||||||
|
|
||||||
|
perSystem = { config, self', inputs', pkgs, system, ... }: {
|
||||||
|
devshells.default = {
|
||||||
|
packages = with pkgs; [
|
||||||
|
{% for package in flake.devshell.packages %}
|
||||||
|
"{{ package }}"
|
||||||
|
{% endfor %}
|
||||||
|
];
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
}
|
|
@ -1,5 +1,7 @@
|
||||||
# {{ managedText | raw }}
|
# {{ managedText | raw }}
|
||||||
|
|
||||||
|
{% set isFlake = flake is defined %}
|
||||||
|
|
||||||
default:
|
default:
|
||||||
@just --list
|
@just --list
|
||||||
|
|
||||||
|
@ -39,8 +41,12 @@ install *args:
|
||||||
|
|
||||||
{% if "node" is same as language %}
|
{% if "node" is same as language %}
|
||||||
yarn *args:
|
yarn *args:
|
||||||
|
{% if isFlake %}
|
||||||
|
{{ "just _exec yarn {{ args }}" | raw }}
|
||||||
|
{% else %}
|
||||||
{{ "just _exec node yarn {{ args }}" | raw }}
|
{{ "just _exec node yarn {{ args }}" | raw }}
|
||||||
{% endif %}
|
{% endif %}
|
||||||
|
{% endif %}
|
||||||
|
|
||||||
{% if "fractal" is same as type %}
|
{% if "fractal" is same as type %}
|
||||||
fractal *args:
|
fractal *args:
|
||||||
|
@ -50,7 +56,7 @@ clean:
|
||||||
rm -fr build
|
rm -fr build
|
||||||
|
|
||||||
build *args:
|
build *args:
|
||||||
just fractal build {{ args }}
|
{{ "just fractal build {{ args }}" | raw }}
|
||||||
|
|
||||||
sync: clean build
|
sync: clean build
|
||||||
#!/usr/bin/env bash
|
#!/usr/bin/env bash
|
||||||
|
@ -99,8 +105,13 @@ test-commit:
|
||||||
{% endif %}
|
{% endif %}
|
||||||
|
|
||||||
_exec +args:
|
_exec +args:
|
||||||
|
{% if flake is defined %}
|
||||||
|
{{ "nix develop --command {{ args }}" | raw }}
|
||||||
|
{% else %}
|
||||||
{{ "docker compose exec -T {{ args }}" | raw }}
|
{{ "docker compose exec -T {{ args }}" | raw }}
|
||||||
|
{% endif %}
|
||||||
|
|
||||||
|
{% if flake is not defined %}
|
||||||
_run service command *args:
|
_run service command *args:
|
||||||
docker compose run \
|
docker compose run \
|
||||||
--entrypoint {{ "{{ command }}"|raw }} \
|
--entrypoint {{ "{{ command }}"|raw }} \
|
||||||
|
@ -108,5 +119,6 @@ _run service command *args:
|
||||||
--rm \
|
--rm \
|
||||||
-T \
|
-T \
|
||||||
{{ "{{ service }} {{ args }}"|raw }}
|
{{ "{{ service }} {{ args }}"|raw }}
|
||||||
|
{% endif %}
|
||||||
|
|
||||||
# vim: ft=just
|
# vim: ft=just
|
||||||
|
|
Loading…
Reference in a new issue