1 Commits

Author SHA1 Message Date
Morten Olsen
5e7461c10b feat: switched from worker API to fs based 2024-01-12 14:14:40 +01:00
14 changed files with 55 additions and 92 deletions

View File

@@ -91,33 +91,33 @@ jobs:
tags: ${{ steps.meta.outputs.tags }} tags: ${{ steps.meta.outputs.tags }}
labels: ${{ steps.meta.outputs.labels }} labels: ${{ steps.meta.outputs.labels }}
release-npm: # release-npm:
if: github.ref == 'refs/heads/main' # if: github.ref == 'refs/heads/main'
runs-on: ubuntu-latest # runs-on: ubuntu-latest
needs: [build, update-release-draft] # needs: [build, update-release-draft]
permissions: # permissions:
contents: read # contents: read
packages: write # packages: write
steps: # steps:
- uses: actions/checkout@v3 # - uses: actions/checkout@v3
with: # with:
fetch-depth: 0 # fetch-depth: 0
- run: corepack enable # - run: corepack enable
- uses: actions/setup-node@v3 # - uses: actions/setup-node@v3
with: # with:
cache: '${{ env.NODE_CACHE }}' # cache: '${{ env.NODE_CACHE }}'
node-version: '${{ env.NODE_VERSION }}' # node-version: '${{ env.NODE_VERSION }}'
scope: '${{ env.NODE_SCOPE }}' # scope: '${{ env.NODE_SCOPE }}'
- uses: actions/download-artifact@v3 # - uses: actions/download-artifact@v3
with: # with:
name: lib # name: lib
path: ./ # path: ./
- run: | # - run: |
pnpm config set //registry.npmjs.org/:_authToken ${NPM_TOKEN} # pnpm config set //registry.npmjs.org/:_authToken ${NPM_TOKEN}
pnpm install # pnpm install
git config user.name "Github Actions Bot" # git config user.name "Github Actions Bot"
git config user.email "<>" # git config user.email "<>"
node scripts/set-version.mjs $(git describe --tag --abbrev=0) # node scripts/set-version.ts $(git describe --tag --abbrev=0)
pnpm publish -r --publish-branch main --access public --no-git-checks # pnpm publish -r --publish-branch main --access public --no-git-checks
env: # env:
NPM_TOKEN: ${{ secrets.NPM_TOKEN }} # NPM_TOKEN: ${{ secrets.NPM_TOKEN }}

View File

@@ -15,19 +15,14 @@ npm install -g @morten-olsen/mini-loader-cli
Now, let's write a basic script that outputs a single artifact named “hello”. Create a new file with the following JavaScript code: Now, let's write a basic script that outputs a single artifact named “hello”. Create a new file with the following JavaScript code:
```javascript ```javascript
import { artifacts } from '@morten-olsen/mini-loader'; import { artifacts } from "@morten-olsen/mini-loader";
const run = async () => {
artifacts.create('hello', 'world'); artifacts.create('hello', 'world');
};
run();
``` ```
Save this file as `script.js`. Save this file as `script.mjs`.
#### A Note on Dependencies #### A Note on Dependencies
In this script, we're using the `@morten-olsen/mini-loader` package, which might not be installed in your local environment. No worries though, as mini loader can automatically download necessary packages when preparing the script. Alternatively, for a more structured approach (especially if you're using TypeScript), you can initialize a Node.js project and install the dependencies for complete access to typings. In this script, we're using the `@morten-olsen/mini-loader` package, which might not be installed in your local environment. No worries though, as mini loader can automatically download necessary packages when preparing the script. Alternatively, for a more structured approach (especially if you're using TypeScript), you can initialize a Node.js project and install the dependencies for complete access to typings.
### Step 3: Run the Script Locally ### Step 3: Run the Script Locally
@@ -35,7 +30,7 @@ In this script, we're using the `@morten-olsen/mini-loader` package, which might
To validate that your script is functioning correctly, execute it locally using the following command: To validate that your script is functioning correctly, execute it locally using the following command:
```bash ```bash
mini-loader local run script.js -ai mini-loader local run script.mjs -ai
``` ```
The `-ai` flag instructs the CLI to automatically download any referenced packages when bundling the script. The `-ai` flag instructs the CLI to automatically download any referenced packages when bundling the script.

View File

@@ -1,7 +1,6 @@
{ {
"name": "@morten-olsen/mini-loader-repo", "name": "@morten-olsen/mini-loader-repo",
"private": "true", "private": "true",
"license": "GPL-3.0-or-later",
"packageManager": "pnpm@8.10.4", "packageManager": "pnpm@8.10.4",
"version": "1.0.0", "version": "1.0.0",
"scripts": { "scripts": {
@@ -12,6 +11,7 @@
}, },
"keywords": [], "keywords": [],
"author": "", "author": "",
"license": "ISC",
"devDependencies": { "devDependencies": {
"@react-native-community/eslint-config": "^3.2.0", "@react-native-community/eslint-config": "^3.2.0",
"eslint": "^8.53.0", "eslint": "^8.53.0",

View File

@@ -3,7 +3,6 @@
"version": "1.0.0", "version": "1.0.0",
"main": "./dist/esm/index.js", "main": "./dist/esm/index.js",
"types": "./dist/esm/index.d.ts", "types": "./dist/esm/index.d.ts",
"license": "GPL-3.0-or-later",
"bin": { "bin": {
"mini-loader": "./bin/index.mjs" "mini-loader": "./bin/index.mjs"
}, },

View File

@@ -37,7 +37,7 @@ list
order, order,
}); });
}); });
console.table(logs); console.table(logs.reverse());
}); });
export { list }; export { list };

View File

@@ -1,7 +1,6 @@
{ {
"name": "@morten-olsen/mini-loader-configs", "name": "@morten-olsen/mini-loader-configs",
"version": "1.0.0", "version": "1.0.0",
"private": true,
"description": "", "description": "",
"main": "index.js", "main": "index.js",
"scripts": { "scripts": {
@@ -9,5 +8,5 @@
}, },
"keywords": [], "keywords": [],
"author": "", "author": "",
"license": "GPL-3.0-or-later" "license": "ISC"
} }

View File

@@ -1,8 +1,6 @@
{ {
"name": "@morten-olsen/mini-loader-examples", "name": "@morten-olsen/mini-loader-examples",
"version": "1.0.0", "version": "1.0.0",
"license": "GPL-3.0-or-later",
"private": true,
"main": "./dist/esm/index.js", "main": "./dist/esm/index.js",
"types": "./dist/esm/index.d.ts", "types": "./dist/esm/index.d.ts",
"scripts": { "scripts": {

View File

@@ -1,8 +1,5 @@
import { artifacts, logger } from '@morten-olsen/mini-loader'; import { artifacts, logger } from '@morten-olsen/mini-loader';
const run = async () => {
await logger.info('Hello world'); await logger.info('Hello world');
await artifacts.create('foo', 'bar');
};
run(); await artifacts.create('foo', 'bar');

View File

@@ -1,7 +1,6 @@
{ {
"name": "@morten-olsen/mini-loader", "name": "@morten-olsen/mini-loader",
"version": "1.0.0", "version": "1.0.0",
"license": "GPL-3.0-or-later",
"main": "./dist/esm/index.js", "main": "./dist/esm/index.js",
"types": "./dist/esm/index.d.ts", "types": "./dist/esm/index.d.ts",
"scripts": { "scripts": {

View File

@@ -12,9 +12,11 @@ const connect = () =>
}); });
}); });
const connectionRequest = connect();
const send = async (data: any) => const send = async (data: any) =>
new Promise<void>(async (resolve, reject) => { new Promise<void>(async (resolve, reject) => {
const connection = await connect(); const connection = await connectionRequest;
const cleaned = JSON.parse(JSON.stringify(data)); const cleaned = JSON.parse(JSON.stringify(data));
connection.write(JSON.stringify(cleaned), 'utf-8', (err) => { connection.write(JSON.stringify(cleaned), 'utf-8', (err) => {
if (err) { if (err) {

View File

@@ -1,7 +1,6 @@
{ {
"name": "@morten-olsen/mini-loader-runner", "name": "@morten-olsen/mini-loader-runner",
"version": "1.0.0", "version": "1.0.0",
"license": "GPL-3.0-or-later",
"main": "./dist/esm/index.js", "main": "./dist/esm/index.js",
"types": "./dist/esm/index.d.ts", "types": "./dist/esm/index.d.ts",
"scripts": { "scripts": {

View File

@@ -5,7 +5,7 @@ import { Event } from '@morten-olsen/mini-loader';
import { join } from 'path'; import { join } from 'path';
import { createServer } from 'http'; import { createServer } from 'http';
import { nanoid } from 'nanoid'; import { nanoid } from 'nanoid';
import { chmod, mkdir, rm, writeFile } from 'fs/promises'; import { chmod, mkdir, unlink, writeFile } from 'fs/promises';
type RunEvents = { type RunEvents = {
message: (event: Event) => void; message: (event: Event) => void;
@@ -39,13 +39,9 @@ const run = async ({ script, input, secrets }: RunOptions) => {
emitter.emit('message', message); emitter.emit('message', message);
}); });
}); });
server.listen(hostSocket);
const worker = new Worker(script, { const worker = new Worker(script, {
eval: true, eval: true,
stdin: false,
stdout: false,
stderr: false,
env: { env: {
HOST_SOCKET: hostSocket, HOST_SOCKET: hostSocket,
SECRETS: JSON.stringify(secrets), SECRETS: JSON.stringify(secrets),
@@ -56,34 +52,18 @@ const run = async ({ script, input, secrets }: RunOptions) => {
}, },
}); });
worker.stdout?.on('data', (data) => {
emitter.emit('message', {
type: 'log',
payload: {
severity: 'info',
message: data.toString(),
},
});
});
worker.stderr?.on('data', (data) => {
emitter.emit('message', {
type: 'log',
payload: {
severity: 'error',
message: data.toString(),
},
});
});
const promise = new Promise<void>((resolve, reject) => { const promise = new Promise<void>((resolve, reject) => {
worker.on('message', (message: Event) => {
emitter.emit('message', message);
});
worker.on('exit', async () => { worker.on('exit', async () => {
server.close(); server.close();
await rm(dataDir, { recursive: true, force: true }); await unlink(hostSocket);
resolve(); resolve();
}); });
worker.on('error', async (error) => { worker.on('error', async (error) => {
server.close(); server.close();
await unlink(hostSocket);
reject(error); reject(error);
}); });
}); });

View File

@@ -1,7 +1,6 @@
{ {
"name": "@morten-olsen/mini-loader-server", "name": "@morten-olsen/mini-loader-server",
"version": "1.0.0", "version": "1.0.0",
"license": "GPL-3.0-or-later",
"main": "./dist/esm/index.js", "main": "./dist/esm/index.js",
"types": "./dist/esm/index.d.ts", "types": "./dist/esm/index.d.ts",
"bin": { "bin": {

View File

@@ -27,9 +27,5 @@ program.addCommand(createToken);
await program.parseAsync(process.argv); await program.parseAsync(process.argv);
process.on('unhandledRejection', (reason, p) => {
console.log('Unhandled Rejection at: Promise', p, 'reason:', reason);
});
export type { Runtime } from './runtime/runtime.js'; export type { Runtime } from './runtime/runtime.js';
export type { RootRouter } from './router/router.js'; export type { RootRouter } from './router/router.js';