@nitwel/sandbox 1.0.1 → 1.0.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,14 @@
1
+ services:
2
+ cockroachdb:
3
+ # change in the YY.R component denotes a major release
4
+ image: cockroachdb/cockroach:${DB_VERSION}
5
+ tmpfs: /cockroach/cockroach-data
6
+ command: start-single-node --cluster-name=example-single-node --insecure
7
+ ports:
8
+ - ${DB_PORT}:26257
9
+ - ${COCKROACH_UI}:8080
10
+ healthcheck:
11
+ test: ['CMD', 'curl', '--fail', 'http://localhost:8080/health']
12
+ interval: 5s
13
+ timeout: 5s
14
+ retries: 10
package/dist/config.d.ts CHANGED
@@ -96,7 +96,7 @@ declare const baseConfig: {
96
96
  readonly DB_PASSWORD: "secret";
97
97
  readonly DB_PORT: "$PORT";
98
98
  readonly DB_DATABASE: "directus";
99
- readonly DB_VERSION: "18-alpine";
99
+ readonly DB_VERSION: "18-3.6-alpine";
100
100
  };
101
101
  readonly sqlite: {
102
102
  readonly TZ: "0" | "UTC";
package/dist/config.js CHANGED
@@ -1,4 +1,5 @@
1
1
  import { join } from 'path';
2
+ import { directusFolder } from './find-directus.js';
2
3
  const isWindows = ['win32', 'win64'].includes(process.platform);
3
4
  const directusConfig = {
4
5
  TZ: isWindows ? '0' : 'UTC',
@@ -9,7 +10,7 @@ const directusConfig = {
9
10
  TELEMETRY: 'false',
10
11
  CACHE_SCHEMA: 'true',
11
12
  CACHE_SCHEMA_MAX_ITERATIONS: '100',
12
- CONFIG_PATH: join(import.meta.dirname, '..', '.env'), // Override to non existent file so process envs aren't overwritten by file envs
13
+ CONFIG_PATH: join(directusFolder, '.env'), // Override to non existent file so process envs aren't overwritten by file envs
13
14
  RATE_LIMITER_ENABLED: 'false',
14
15
  PRESSURE_LIMITER_ENABLED: 'false',
15
16
  LOG_LEVEL: 'info',
@@ -75,7 +76,7 @@ const postgres = {
75
76
  DB_PASSWORD: 'secret',
76
77
  DB_PORT: '$PORT',
77
78
  DB_DATABASE: 'directus',
78
- DB_VERSION: '18-alpine',
79
+ DB_VERSION: '18-3.6-alpine',
79
80
  ...directusConfig,
80
81
  };
81
82
  const sqlite = {
@@ -0,0 +1,2 @@
1
+ export declare const directusFolder: string;
2
+ export declare function findDirectus(): string;
@@ -0,0 +1,22 @@
1
+ import { existsSync, readFileSync } from 'fs';
2
+ import { dirname, join } from 'path';
3
+ export const directusFolder = findDirectus();
4
+ export function findDirectus() {
5
+ let currentDir = process.cwd();
6
+ while (true) {
7
+ const packagePath = join(currentDir, 'package.json');
8
+ if (existsSync(packagePath)) {
9
+ const file = readFileSync(packagePath, 'utf-8');
10
+ const json = JSON.parse(file);
11
+ if (json['name'] === 'directus-monorepo') {
12
+ return currentDir;
13
+ }
14
+ }
15
+ const parentDir = dirname(currentDir);
16
+ if (parentDir === currentDir) {
17
+ break;
18
+ }
19
+ currentDir = parentDir;
20
+ }
21
+ throw new Error('Sandbox is not executed in the directus monorepo');
22
+ }
@@ -0,0 +1,12 @@
1
+ services:
2
+ maildev:
3
+ image: maildev/maildev:latest
4
+ ports:
5
+ - '${MAILDEV_WEBUI}:1080' # Web interface
6
+ - '${EMAIL_SMTP_PORT}:1025' # SMTP server
7
+ restart: always
8
+ environment:
9
+ - MAILDEV_WEB_PORT=1080
10
+ - MAILDEV_SMTP_PORT=1025
11
+ - MAILDEV_INCOMING_USER=${EMAIL_SMTP_USER}
12
+ - MAILDEV_INCOMING_PASS=${EMAIL_SMTP_PASSWORD}
package/dist/maria.yml ADDED
@@ -0,0 +1,16 @@
1
+ services:
2
+ maria:
3
+ image: mariadb:${DB_VERSION}
4
+ tmpfs: /var/lib/mysql
5
+ command: --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci
6
+ environment:
7
+ MYSQL_ROOT_PASSWORD: ${DB_PASSWORD}
8
+ MYSQL_USER: ${DB_USER}
9
+ MYSQL_DATABASE: ${DB_DATABASE}
10
+ ports:
11
+ - ${DB_PORT}:3306
12
+ healthcheck:
13
+ test: ['CMD', 'healthcheck.sh', '--connect', '--innodb_initialized']
14
+ interval: 5s
15
+ timeout: 5s
16
+ retries: 10
package/dist/minio.yml ADDED
@@ -0,0 +1,24 @@
1
+ services:
2
+ minio:
3
+ # should stay compatible via S3 driver
4
+ image: minio/minio
5
+ command: server /data/minio/ --console-address :9001
6
+ ports:
7
+ - ${MINIO_PORT}:9000
8
+ - 8882:9001
9
+ environment:
10
+ MINIO_ROOT_USER: directus
11
+ MINIO_ROOT_PASSWORD: miniosecret
12
+
13
+ minio-mc:
14
+ image: minio/mc
15
+ depends_on:
16
+ - minio
17
+ entrypoint: >
18
+ /bin/sh -c " until (/usr/bin/mc alias set directusminio http://minio:9000 directus miniosecret &&
19
+ /usr/bin/mc admin info directusminio > /dev/null 2>&1); do
20
+ echo 'Waiting for MinIO to be ready...';
21
+ sleep 1;
22
+ done; /usr/bin/mc mb directusminio/directus-blackbox-test; while true; do
23
+ sleep 3600;
24
+ done;"
package/dist/mssql.yml ADDED
@@ -0,0 +1,28 @@
1
+ services:
2
+ mssql:
3
+ image: mcr.microsoft.com/mssql/server:${DB_VERSION}
4
+ tmpfs: /var/opt/mssql/data
5
+ environment:
6
+ - ACCEPT_EULA=Y
7
+ - MSSQL_SA_PASSWORD=${DB_PASSWORD}
8
+ - MSSQL_PID=Express
9
+ ports:
10
+ - ${DB_PORT}:1433
11
+ healthcheck:
12
+ test:
13
+ [
14
+ 'CMD',
15
+ '/opt/mssql-tools18/bin/sqlcmd',
16
+ '-S',
17
+ 'localhost',
18
+ '-U',
19
+ 'sa',
20
+ '-P',
21
+ '${DB_PASSWORD}',
22
+ '-Q',
23
+ 'SELECT 1',
24
+ '-No',
25
+ ]
26
+ interval: 5s
27
+ timeout: 5s
28
+ retries: 10
package/dist/mysql.yml ADDED
@@ -0,0 +1,15 @@
1
+ services:
2
+ mysql:
3
+ image: mysql:${DB_VERSION}
4
+ tmpfs: /var/lib/mysql
5
+ command: --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci
6
+ environment:
7
+ MYSQL_ROOT_PASSWORD: ${DB_PASSWORD}
8
+ MYSQL_DATABASE: ${DB_DATABASE}
9
+ ports:
10
+ - ${DB_PORT}:3306
11
+ healthcheck:
12
+ test: ['CMD', 'mysql', '--user=root', '--password=${DB_PASSWORD}', '--execute=SELECT 1;']
13
+ interval: 5s
14
+ timeout: 5s
15
+ retries: 10
@@ -0,0 +1,16 @@
1
+ services:
2
+ oracle:
3
+ image: gvenzl/oracle-xe:${DB_VERSION}
4
+ ports:
5
+ - ${DB_PORT}:1521
6
+ environment:
7
+ - OPATCH_JRE_MEMORY_OPTIONS=-Xms128m -Xmx256m -XX:PermSize=16m -XX:MaxPermSize=32m -Xss1m
8
+ - ORACLE_ALLOW_REMOTE=true
9
+ - ORACLE_RANDOM_PASSWORD=yes
10
+ - APP_USER=${DB_USER}
11
+ - APP_USER_PASSWORD=${DB_PASSWORD}
12
+ healthcheck:
13
+ test: healthcheck.sh
14
+ interval: 5s
15
+ timeout: 5s
16
+ retries: 10
@@ -0,0 +1,14 @@
1
+ services:
2
+ postgres:
3
+ image: postgis/postgis:${DB_VERSION}
4
+ environment:
5
+ POSTGRES_PASSWORD: ${DB_PASSWORD}
6
+ POSTGRES_USER: ${DB_USER}
7
+ POSTGRES_DB: ${DB_DATABASE}
8
+ ports:
9
+ - ${DB_PORT}:5432
10
+ healthcheck:
11
+ test: ['CMD-SHELL', 'pg_isready -U ${DB_USER} -d ${DB_DATABASE}']
12
+ interval: 5s
13
+ timeout: 5s
14
+ retries: 10
package/dist/redis.yml ADDED
@@ -0,0 +1,5 @@
1
+ services:
2
+ redis:
3
+ image: redis:6-alpine
4
+ ports:
5
+ - ${REDIS_PORT}:6379
package/dist/saml.yml ADDED
@@ -0,0 +1,10 @@
1
+ services:
2
+ saml:
3
+ image: kristophjunge/test-saml-idp
4
+ ports:
5
+ - ${SAML_PORT}:8080
6
+ environment:
7
+ - SIMPLESAMLPHP_SP_ENTITY_ID=saml-test
8
+ - SIMPLESAMLPHP_SP_ASSERTION_CONSUMER_SERVICE=http://127.0.0.1:8080/auth/login/saml/acs
9
+ extra_hosts:
10
+ - 'host.docker.internal:host-gateway'
package/dist/sandbox.js CHANGED
@@ -6,6 +6,7 @@ import { createLogger } from './logger.js';
6
6
  import { buildDirectus, bootstrap, dockerDown, dockerUp, loadSchema, saveSchema, startDirectus, } from './steps/index.js';
7
7
  import chalk from 'chalk';
8
8
  import getPort from 'get-port';
9
+ import { directusFolder } from './find-directus.js';
9
10
  async function getOptions(options) {
10
11
  if (options?.schema === true)
11
12
  options.schema = 'snapshot.json';
@@ -39,7 +40,7 @@ async function getOptions(options) {
39
40
  cache: false,
40
41
  }, options);
41
42
  }
42
- export const apiFolder = join(import.meta.dirname, '..', '..', '..', 'api');
43
+ export const apiFolder = join(directusFolder, 'api');
43
44
  export const databases = [
44
45
  'maria',
45
46
  'cockroachdb',
@@ -15,15 +15,7 @@ export async function dockerUp(database, opts, env, logger) {
15
15
  const files = database === 'sqlite' ? extrasList : [database, ...extrasList];
16
16
  if (files.length === 0)
17
17
  return;
18
- const docker = spawn('docker', [
19
- 'compose',
20
- '-p',
21
- project,
22
- ...files.flatMap((file) => ['-f', join(import.meta.dirname, '..', 'docker', `${file}.yml`)]),
23
- 'up',
24
- '-d',
25
- '--wait',
26
- ], {
18
+ const docker = spawn('docker', ['compose', '-p', project, ...files.flatMap((file) => ['-f', join('docker', `${file}.yml`)]), 'up', '-d', '--wait'], {
27
19
  env: {
28
20
  ...env,
29
21
  COMPOSE_STATUS_STDOUT: '1', //Ref: https://github.com/docker/compose/issues/7346
@@ -0,0 +1,14 @@
1
+ services:
2
+ cockroachdb:
3
+ # change in the YY.R component denotes a major release
4
+ image: cockroachdb/cockroach:${DB_VERSION}
5
+ tmpfs: /cockroach/cockroach-data
6
+ command: start-single-node --cluster-name=example-single-node --insecure
7
+ ports:
8
+ - ${DB_PORT}:26257
9
+ - ${COCKROACH_UI}:8080
10
+ healthcheck:
11
+ test: ['CMD', 'curl', '--fail', 'http://localhost:8080/health']
12
+ interval: 5s
13
+ timeout: 5s
14
+ retries: 10
@@ -0,0 +1,12 @@
1
+ services:
2
+ maildev:
3
+ image: maildev/maildev:latest
4
+ ports:
5
+ - '${MAILDEV_WEBUI}:1080' # Web interface
6
+ - '${EMAIL_SMTP_PORT}:1025' # SMTP server
7
+ restart: always
8
+ environment:
9
+ - MAILDEV_WEB_PORT=1080
10
+ - MAILDEV_SMTP_PORT=1025
11
+ - MAILDEV_INCOMING_USER=${EMAIL_SMTP_USER}
12
+ - MAILDEV_INCOMING_PASS=${EMAIL_SMTP_PASSWORD}
@@ -0,0 +1,16 @@
1
+ services:
2
+ maria:
3
+ image: mariadb:${DB_VERSION}
4
+ tmpfs: /var/lib/mysql
5
+ command: --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci
6
+ environment:
7
+ MYSQL_ROOT_PASSWORD: ${DB_PASSWORD}
8
+ MYSQL_USER: ${DB_USER}
9
+ MYSQL_DATABASE: ${DB_DATABASE}
10
+ ports:
11
+ - ${DB_PORT}:3306
12
+ healthcheck:
13
+ test: ['CMD', 'healthcheck.sh', '--connect', '--innodb_initialized']
14
+ interval: 5s
15
+ timeout: 5s
16
+ retries: 10
@@ -0,0 +1,24 @@
1
+ services:
2
+ minio:
3
+ # should stay compatible via S3 driver
4
+ image: minio/minio
5
+ command: server /data/minio/ --console-address :9001
6
+ ports:
7
+ - ${MINIO_PORT}:9000
8
+ - 8882:9001
9
+ environment:
10
+ MINIO_ROOT_USER: directus
11
+ MINIO_ROOT_PASSWORD: miniosecret
12
+
13
+ minio-mc:
14
+ image: minio/mc
15
+ depends_on:
16
+ - minio
17
+ entrypoint: >
18
+ /bin/sh -c " until (/usr/bin/mc alias set directusminio http://minio:9000 directus miniosecret &&
19
+ /usr/bin/mc admin info directusminio > /dev/null 2>&1); do
20
+ echo 'Waiting for MinIO to be ready...';
21
+ sleep 1;
22
+ done; /usr/bin/mc mb directusminio/directus-blackbox-test; while true; do
23
+ sleep 3600;
24
+ done;"
@@ -0,0 +1,28 @@
1
+ services:
2
+ mssql:
3
+ image: mcr.microsoft.com/mssql/server:${DB_VERSION}
4
+ tmpfs: /var/opt/mssql/data
5
+ environment:
6
+ - ACCEPT_EULA=Y
7
+ - MSSQL_SA_PASSWORD=${DB_PASSWORD}
8
+ - MSSQL_PID=Express
9
+ ports:
10
+ - ${DB_PORT}:1433
11
+ healthcheck:
12
+ test:
13
+ [
14
+ 'CMD',
15
+ '/opt/mssql-tools18/bin/sqlcmd',
16
+ '-S',
17
+ 'localhost',
18
+ '-U',
19
+ 'sa',
20
+ '-P',
21
+ '${DB_PASSWORD}',
22
+ '-Q',
23
+ 'SELECT 1',
24
+ '-No',
25
+ ]
26
+ interval: 5s
27
+ timeout: 5s
28
+ retries: 10
@@ -0,0 +1,15 @@
1
+ services:
2
+ mysql:
3
+ image: mysql:${DB_VERSION}
4
+ tmpfs: /var/lib/mysql
5
+ command: --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci
6
+ environment:
7
+ MYSQL_ROOT_PASSWORD: ${DB_PASSWORD}
8
+ MYSQL_DATABASE: ${DB_DATABASE}
9
+ ports:
10
+ - ${DB_PORT}:3306
11
+ healthcheck:
12
+ test: ['CMD', 'mysql', '--user=root', '--password=${DB_PASSWORD}', '--execute=SELECT 1;']
13
+ interval: 5s
14
+ timeout: 5s
15
+ retries: 10
@@ -0,0 +1,16 @@
1
+ services:
2
+ oracle:
3
+ image: gvenzl/oracle-xe:${DB_VERSION}
4
+ ports:
5
+ - ${DB_PORT}:1521
6
+ environment:
7
+ - OPATCH_JRE_MEMORY_OPTIONS=-Xms128m -Xmx256m -XX:PermSize=16m -XX:MaxPermSize=32m -Xss1m
8
+ - ORACLE_ALLOW_REMOTE=true
9
+ - ORACLE_RANDOM_PASSWORD=yes
10
+ - APP_USER=${DB_USER}
11
+ - APP_USER_PASSWORD=${DB_PASSWORD}
12
+ healthcheck:
13
+ test: healthcheck.sh
14
+ interval: 5s
15
+ timeout: 5s
16
+ retries: 10
@@ -0,0 +1,14 @@
1
+ services:
2
+ postgres:
3
+ image: postgis/postgis:${DB_VERSION}
4
+ environment:
5
+ POSTGRES_PASSWORD: ${DB_PASSWORD}
6
+ POSTGRES_USER: ${DB_USER}
7
+ POSTGRES_DB: ${DB_DATABASE}
8
+ ports:
9
+ - ${DB_PORT}:5432
10
+ healthcheck:
11
+ test: ['CMD-SHELL', 'pg_isready -U ${DB_USER} -d ${DB_DATABASE}']
12
+ interval: 5s
13
+ timeout: 5s
14
+ retries: 10
@@ -0,0 +1,5 @@
1
+ services:
2
+ redis:
3
+ image: redis:6-alpine
4
+ ports:
5
+ - ${REDIS_PORT}:6379
@@ -0,0 +1,10 @@
1
+ services:
2
+ saml:
3
+ image: kristophjunge/test-saml-idp
4
+ ports:
5
+ - ${SAML_PORT}:8080
6
+ environment:
7
+ - SIMPLESAMLPHP_SP_ENTITY_ID=saml-test
8
+ - SIMPLESAMLPHP_SP_ASSERTION_CONSUMER_SERVICE=http://127.0.0.1:8080/auth/login/saml/acs
9
+ extra_hosts:
10
+ - 'host.docker.internal:host-gateway'
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@nitwel/sandbox",
3
- "version": "1.0.1",
3
+ "version": "1.0.2",
4
4
  "description": "Toolkit for spinning up directus test environments",
5
5
  "homepage": "https://directus.io",
6
6
  "exports": {
@@ -20,7 +20,7 @@
20
20
  "author": "Nils Twelker (nils@directus.io)",
21
21
  "license": "MIT",
22
22
  "private": false,
23
- "dependencies": {
23
+ "devDependencies": {
24
24
  "@directus/tsconfig": "3.0.0",
25
25
  "@directus/utils": "13.0.9",
26
26
  "@types/lodash-es": "4.17.12",
@@ -50,7 +50,7 @@
50
50
  },
51
51
  "scripts": {
52
52
  "cli": "tsx src/cli.ts",
53
- "build": "tsc && copyfiles src/docker/*.yml dist -u 1",
53
+ "build": "tsc && copyfiles docker/*.yml dist -u 1",
54
54
  "dev": "tsc -w ",
55
55
  "build:tests": "tsdown src/index.ts --format=esm",
56
56
  "docs": "typedoc --plugin typedoc-plugin-markdown --out ./docs",