2026-04-10

- corvée: met à jour les deps
- corvée: formate
This commit is contained in:
gcch 2026-04-10 17:21:57 +02:00
commit d50de6d534
85 changed files with 132090 additions and 31346 deletions

View file

@ -1,17 +1,18 @@
import { $ } from "bun";
import { Array, Console, Effect, Layer, ManagedRuntime, Option, Order, pipe, Schema, ServiceMap } from "effect";
import { UnknownError } from "effect/Cause";
import type { Option } from "effect";
import { Array as FxArray, Console, Context, Effect, Layer, ManagedRuntime, Order, pipe, Schema } from "effect";
import type { UnknownError } from "effect/Cause";
import { readdir } from "node:fs/promises";
class PodmanError extends Schema.TaggedErrorClass<PodmanError>()("PodmanError", {
cause: Schema.Error,
}) {}
class FileSystemError extends Schema.TaggedErrorClass<FileSystemError>()("FileSystemError", {
class FSError extends Schema.TaggedErrorClass<FSError>()("FSError", {
cause: Schema.Error,
}) {}
class Podman extends ServiceMap.Service<
class Podman extends Context.Service<
Podman,
{
launchContainers(): Effect.Effect<string, PodmanError>;
@ -21,21 +22,21 @@ class Podman extends ServiceMap.Service<
static readonly layer = Layer.effect(
Podman,
// oxlint-disable-next-line require-yield
Effect.gen(function* () {
const launchContainers = Effect.fn("launchContainers")(function* () {
Effect.gen(function*() {
const launchContainers = Effect.fn("launchContainers")(function*() {
return yield* pipe(
Effect.tryPromise(() => $`podman compose up -d &> /dev/null`),
Effect.tryPromise(async () => $`podman compose up -d &> /dev/null`),
Effect.map((shell: $.ShellOutput) => shell.text()),
Effect.mapError((error: UnknownError) => new PodmanError({ cause: error })),
);
});
const importLatestDbInWordPressContainer = Effect.fn("importLatestDbInWordPressContainer")(function* (
const importLatestDbInWordPressContainer = Effect.fn("importLatestDbInWordPressContainer")(function*(
exportPath: string,
) {
return yield* pipe(
Effect.tryPromise(
() =>
async () =>
$`podman exec -it haikuatelier.fr-wordpress fish -c "cd web && wp --allow-root db import ${exportPath} > /dev/null"`,
),
Effect.map((shell: $.ShellOutput) => shell.text()),
@ -51,47 +52,44 @@ class Podman extends ServiceMap.Service<
);
}
class FileSystem extends ServiceMap.Service<
FileSystem,
class FS extends Context.Service<
FS,
{
getLatestDbExport(): Effect.Effect<string, FileSystemError>;
getLatestDbExport(): Effect.Effect<string, FSError>;
}
>()("haikuatelier.fr/scripts/importe-dernier-export-bdd/FileSystem") {
>()("haikuatelier.fr/scripts/importe-dernier-export-bdd/FS") {
static readonly layer = Layer.effect(
FileSystem,
FS,
// oxlint-disable-next-line require-yield
Effect.gen(function* () {
const getLatestDbExport = Effect.fn("getLatestDbExport")(function* () {
Effect.gen(function*() {
const getLatestDbExport = Effect.fn("getLatestDbExport")(function*() {
return yield* pipe(
Effect.tryPromise(() => readdir(`./db`)),
Effect.map((paths: ReadonlyArray<string>) => Array.sort(paths, Order.String)),
Effect.map((sortedPaths: ReadonlyArray<string>) => Array.last(sortedPaths)),
Effect.tryPromise(async () => readdir(`./db`)),
Effect.map((paths: ReadonlyArray<string>) => FxArray.sort(paths, Order.String)),
Effect.map((sortedPaths: ReadonlyArray<string>) => FxArray.last(sortedPaths)),
Effect.flatMap((path: Option.Option<string>) => Effect.fromOption(path)),
Effect.mapError((_) => new FileSystemError({ cause: new Error("Aucun export de BDD n'est disponible.") })),
Effect.mapError(_ => new FSError({ cause: new Error("Aucun export de BDD n'est disponible.") })),
);
});
return FileSystem.of({
return FS.of({
getLatestDbExport,
});
}),
);
}
const mainLayer = Layer.mergeAll(Podman.layer, FileSystem.layer);
const mainLayer = Layer.mergeAll(Podman.layer, FS.layer);
const runtime = ManagedRuntime.make(mainLayer);
const program = Effect.fn("program")(function* () {
yield* Podman.use((podman) => podman.launchContainers());
const program = Effect.fn("program")(function*() {
yield* Podman.use(podman => podman.launchContainers());
yield* Console.log("Containers are launched.");
const latestExportPath: string = pipe(
yield* FileSystem.use((fs) => fs.getLatestDbExport()),
(path) => `../db/${path}`,
);
const latestExportPath: string = pipe(yield* FS.use(fs => fs.getLatestDbExport()), path => `../db/${path}`);
yield* Console.log(latestExportPath);
yield* Podman.use((podman) => podman.importLatestDbInWordPressContainer(latestExportPath));
yield* Podman.use(podman => podman.importLatestDbInWordPressContainer(latestExportPath));
yield* Console.log("Import done.");
});