From 6f1cf9ee0f5df162928f8404d90bbf1db7594b1b Mon Sep 17 00:00:00 2001 From: Pavel Murygin Date: Tue, 4 May 2021 12:04:38 +0300 Subject: [PATCH 01/15] Migrate to the new version of air-interpreter package --- package-lock.json | 18 +- package.json | 2 +- src/__test__/unit/ast.spec.ts | 10 +- src/internal/ClientImpl.ts | 12 +- src/internal/RequestFlow.ts | 2 +- src/internal/aqua/index.ts | 162 ----------------- src/internal/aqua/interpreter.ts | 296 ------------------------------- 7 files changed, 31 insertions(+), 471 deletions(-) delete mode 100644 src/internal/aqua/index.ts delete mode 100644 src/internal/aqua/interpreter.ts diff --git a/package-lock.json b/package-lock.json index 9adb664c2..53a8bcb0a 100644 --- a/package-lock.json +++ b/package-lock.json @@ -434,10 +434,20 @@ "minimist": "^1.2.0" } }, - "@fluencelabs/aquamarine-interpreter": { - "version": "0.8.2", - "resolved": "https://registry.npmjs.org/@fluencelabs/aquamarine-interpreter/-/aquamarine-interpreter-0.8.2.tgz", - "integrity": "sha512-WYn3fO3dy/ZTS2DnjpEv59RAFTuPosO65jejb/2QRAbZId4KiaCxma0yvFC6P0j2qoAxCDTRdbKrNZGXzjddYQ==" + "@fluencelabs/air-interpreter": { + "version": "0.9.0-npm-package.5", + "resolved": "https://registry.npmjs.org/@fluencelabs/air-interpreter/-/air-interpreter-0.9.0-npm-package.5.tgz", + "integrity": "sha512-53N8s0HlsUVnfAyFWlaATpX3UmsqjphKdQBs3CaGxMI3yz7q7K/sbM3d3Z0OQWEn/qbLfO+DreJvl0vOpX5sUg==", + "requires": { + "base64-js": "1.5.1" + }, + "dependencies": { + "base64-js": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", + "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==" + } + } }, "@istanbuljs/load-nyc-config": { "version": "1.1.0", diff --git a/package.json b/package.json index 91ddc1efc..932e59353 100644 --- a/package.json +++ b/package.json @@ -15,7 +15,7 @@ "author": "Fluence Labs", "license": "Apache-2.0", "dependencies": { - "@fluencelabs/aquamarine-interpreter": "0.8.2", + "@fluencelabs/air-interpreter": "0.9.0-npm-package.5", "async": "3.2.0", "base64-js": "1.3.1", "bs58": "4.0.1", diff --git a/src/__test__/unit/ast.spec.ts b/src/__test__/unit/ast.spec.ts index 53bf87dcb..8937f85e5 100644 --- a/src/__test__/unit/ast.spec.ts +++ b/src/__test__/unit/ast.spec.ts @@ -1,8 +1,14 @@ -import { AquamarineInterpreter } from '../../internal/aqua/interpreter'; +import { AquamarineInterpreter } from '@fluencelabs/air-interpreter'; +import { genUUID } from '../../internal/particle'; describe('== AST parsing suite', () => { it('parse simple script and return ast', async function () { - const interpreter = await AquamarineInterpreter.create({} as any); + const interpreter = await AquamarineInterpreter.create( + undefined as any, + undefined as any, + undefined as any, + undefined as any, + ); let ast = interpreter.parseAir(` (call "node" ("service" "function") [1 2 3] output) `); diff --git a/src/internal/ClientImpl.ts b/src/internal/ClientImpl.ts index 4154e6c42..bd9adab90 100644 --- a/src/internal/ClientImpl.ts +++ b/src/internal/ClientImpl.ts @@ -25,7 +25,7 @@ import { AquaCallHandler, errorHandler, fnHandler } from './AquaHandler'; import { loadRelayFn, loadVariablesService } from './RequestFlowBuilder'; import { logParticle, Particle } from './particle'; import log from 'loglevel'; -import { AquamarineInterpreter } from './aqua/interpreter'; +import { AquamarineInterpreter } from '@fluencelabs/air-interpreter'; const makeDefaultClientHandler = (): AquaCallHandler => { const res = new AquaCallHandler(); @@ -71,10 +71,12 @@ export class ClientImpl implements FluenceClient { } async initAquamarineRuntime(): Promise { - this.interpreter = await AquamarineInterpreter.create({ - particleHandler: this.interpreterCallback.bind(this), - peerId: this.selfPeerIdFull, - }); + this.interpreter = await AquamarineInterpreter.create( + this.interpreterCallback.bind(this), + this.selfPeerId, + 'trace', + log.log, + ); } async connect(multiaddr: string | Multiaddr, options?: FluenceConnectionOptions): Promise { diff --git a/src/internal/RequestFlow.ts b/src/internal/RequestFlow.ts index 440a5f52b..761b66ff3 100644 --- a/src/internal/RequestFlow.ts +++ b/src/internal/RequestFlow.ts @@ -1,6 +1,6 @@ import log, { trace } from 'loglevel'; import PeerId from 'peer-id'; -import { AquamarineInterpreter } from './aqua/interpreter'; +import { AquamarineInterpreter } from '@fluencelabs/air-interpreter'; import { AquaCallHandler } from './AquaHandler'; import { InterpreterOutcome, PeerIdB58 } from './commonTypes'; import { FluenceConnection } from './FluenceConnection'; diff --git a/src/internal/aqua/index.ts b/src/internal/aqua/index.ts deleted file mode 100644 index 683e2fea9..000000000 --- a/src/internal/aqua/index.ts +++ /dev/null @@ -1,162 +0,0 @@ -/** - * - * This is generated and patched code. All functions are using local wasm as an argument for now, not a global wasm file. - * - */ - -export function main(wasm) { - wasm.main(); -} - -export let WASM_VECTOR_LEN = 0; - -let cachegetUint8Memory0 = null; -export function getUint8Memory0(wasm) { - if (cachegetUint8Memory0 === null || cachegetUint8Memory0.buffer !== wasm.memory.buffer) { - cachegetUint8Memory0 = new Uint8Array(wasm.memory.buffer); - } - return cachegetUint8Memory0; -} - -const lTextEncoder = typeof TextEncoder === 'undefined' ? module.require('util').TextEncoder : TextEncoder; - -let cachedTextEncoder = new lTextEncoder('utf-8'); - -const encodeString = - typeof cachedTextEncoder.encodeInto === 'function' - ? function (arg, view) { - return cachedTextEncoder.encodeInto(arg, view); - } - : function (arg, view) { - const buf = cachedTextEncoder.encode(arg); - view.set(buf); - return { - read: arg.length, - written: buf.length, - }; - }; - -export function passStringToWasm0(wasm, arg, malloc, realloc) { - if (realloc === undefined) { - const buf = cachedTextEncoder.encode(arg); - const ptr = malloc(buf.length); - getUint8Memory0(wasm) - .subarray(ptr, ptr + buf.length) - .set(buf); - WASM_VECTOR_LEN = buf.length; - return ptr; - } - - let len = arg.length; - let ptr = malloc(len); - - const mem = getUint8Memory0(wasm); - - let offset = 0; - - for (; offset < len; offset++) { - const code = arg.charCodeAt(offset); - if (code > 0x7f) break; - mem[ptr + offset] = code; - } - if (offset !== len) { - if (offset !== 0) { - arg = arg.slice(offset); - } - ptr = realloc(ptr, len, (len = offset + arg.length * 3)); - const view = getUint8Memory0(wasm).subarray(ptr + offset, ptr + len); - const ret = encodeString(arg, view); - - offset += ret.written; - } - - WASM_VECTOR_LEN = offset; - - return ptr; -} - -let cachegetInt32Memory0 = null; -export function getInt32Memory0(wasm) { - if (cachegetInt32Memory0 === null || cachegetInt32Memory0.buffer !== wasm.memory.buffer) { - cachegetInt32Memory0 = new Int32Array(wasm.memory.buffer); - } - return cachegetInt32Memory0; -} - -const lTextDecoder = typeof TextDecoder === 'undefined' ? module.require('util').TextDecoder : TextDecoder; - -let cachedTextDecoder = new lTextDecoder('utf-8', { ignoreBOM: true, fatal: true }); - -cachedTextDecoder.decode(); - -export function getStringFromWasm0(wasm, ptr, len) { - return cachedTextDecoder.decode(getUint8Memory0(wasm).subarray(ptr, ptr + len)); -} - -function passArray8ToWasm0(wasm, arg, malloc) { - const ptr = malloc(arg.length * 1); - getUint8Memory0(wasm).set(arg, ptr / 1); - WASM_VECTOR_LEN = arg.length; - return ptr; -} - -/** - * @param {any} wasm - * @param {string} init_peer_id - * @param {string} aqua - * @param {string} prev_data - * @param {string} data - * @param {string} log_level - * @returns {string} - */ -export function invoke(wasm, init_peer_id, aqua, prev_data, data, log_level) { - try { - var ptr0 = passStringToWasm0(wasm, init_peer_id, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc); - var len0 = WASM_VECTOR_LEN; - var ptr1 = passStringToWasm0(wasm, aqua, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc); - var len1 = WASM_VECTOR_LEN; - var ptr2 = passArray8ToWasm0(wasm, prev_data, wasm.__wbindgen_malloc); - var len2 = WASM_VECTOR_LEN; - var ptr3 = passArray8ToWasm0(wasm, data, wasm.__wbindgen_malloc); - var len3 = WASM_VECTOR_LEN; - var ptr4 = passStringToWasm0(wasm, log_level, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc); - var len4 = WASM_VECTOR_LEN; - wasm.invoke(8, ptr0, len0, ptr1, len1, ptr2, len2, ptr3, len3, ptr4, len4); - var r0 = getInt32Memory0(wasm)[8 / 4 + 0]; - var r1 = getInt32Memory0(wasm)[8 / 4 + 1]; - return getStringFromWasm0(wasm, r0, r1); - } finally { - wasm.__wbindgen_free(r0, r1); - } -} - -export function ast(wasm, script) { - try { - var ptr0 = passStringToWasm0(wasm, script, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc); - var len0 = WASM_VECTOR_LEN; - wasm.ast(8, ptr0, len0); - var r0 = getInt32Memory0(wasm)[8 / 4 + 0]; - var r1 = getInt32Memory0(wasm)[8 / 4 + 1]; - return getStringFromWasm0(wasm, r0, r1); - } finally { - wasm.__wbindgen_free(r0, r1); - } -} - -export function return_current_peer_id(wasm, peerId, arg0) { - var ptr0 = passStringToWasm0(wasm, peerId, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc); - var len0 = WASM_VECTOR_LEN; - getInt32Memory0(wasm)[arg0 / 4 + 1] = len0; - getInt32Memory0(wasm)[arg0 / 4 + 0] = ptr0; -} - -export function return_call_service_result(wasm, ret, arg0) { - var ptr1 = passStringToWasm0(wasm, ret, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc); - var len1 = WASM_VECTOR_LEN; - getInt32Memory0(wasm)[arg0 / 4 + 1] = len1; - getInt32Memory0(wasm)[arg0 / 4 + 0] = ptr1; -} - -export function free(wasm, ptr, len) { - wasm.__wbindgen_free(ptr, len); -} diff --git a/src/internal/aqua/interpreter.ts b/src/internal/aqua/interpreter.ts deleted file mode 100644 index 6cd11e5b9..000000000 --- a/src/internal/aqua/interpreter.ts +++ /dev/null @@ -1,296 +0,0 @@ -/* - * Copyright 2020 Fluence Labs Limited - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -import { toByteArray } from 'base64-js'; -import * as aqua from '.'; -import { return_current_peer_id, return_call_service_result, getStringFromWasm0, free } from '.'; -import { ParticleHandler, CallServiceResult, SecurityTetraplet } from '../commonTypes'; - -import PeerId from 'peer-id'; -import log from 'loglevel'; -import wasmBs64 from '@fluencelabs/aquamarine-interpreter'; - -// prettier-ignore -type InterpreterInvoke = ( - init_peer_id: string, - script: string, - prev_data: Uint8Array, - data: Uint8Array, -) => string; - -type ImportObject = { - './aquamarine_client_bg.js': { - // fn call_service_impl(service_id: String, fn_name: String, args: String, security_tetraplets: String) -> String; - // prettier-ignore - __wbg_callserviceimpl_84d8278762e4c639: (arg0: any, arg1: any, arg2: any, arg3: any, arg4: any, arg5: any, arg6: any, arg7: any, arg8: any, ) => void; - __wbg_getcurrentpeeridimpl_4aca996e28cb8f44: (arg0: any) => void; - __wbindgen_throw: (arg: any) => void; - }; - host: LogImport; -}; - -type LogImport = { - log_utf8_string: (level: any, target: any, offset: any, size: any) => void; -}; - -type Exports = any; -type Instance = any; -type ExportValue = any; - -class HostImportsConfig { - exports: Exports | undefined; - newImportObject: () => ImportObject; - - constructor(create: (cfg: HostImportsConfig) => ImportObject) { - this.exports = undefined; - this.newImportObject = () => create(this); - } - - setExports(exports: Exports) { - this.exports = exports; - } -} - -const interpreter_wasm = toByteArray(wasmBs64); - -/// Instantiates WebAssembly runtime with AIR interpreter module -async function interpreterInstance(cfg: HostImportsConfig): Promise { - /// Create host imports that use module exports internally - let imports = cfg.newImportObject(); - - /// Instantiate interpreter - let interpreter_module = await WebAssembly.compile(interpreter_wasm); - let instance: Instance = await WebAssembly.instantiate(interpreter_module, imports); - - /// Set exports, so host imports can use them - cfg.setExports(instance.exports); - - /// Trigger interpreter initialization (i.e., call main function) - call_export(instance.exports.main); - - return instance; -} - -/// If export is a function, call it. Otherwise log a warning. -/// NOTE: any here is unavoidable, see Function interface definition -function call_export(f: ExportValue, ...argArray: any[]): any { - if (typeof f === 'function') { - return f(); - } else { - log.warn(`can't call export ${f}: it is not a function, but ${typeof f}`); - } -} - -function log_import(cfg: HostImportsConfig): LogImport { - return { - log_utf8_string: (level: any, target: any, offset: any, size: any) => { - let wasm = cfg.exports; - try { - let str = getStringFromWasm0(wasm, offset, size); - - switch (level) { - case 1: - log.error(str); - break; - case 2: - log.warn(str); - break; - case 3: - log.info(str); - break; - case 4: - log.debug(str); - break; - case 5: - // we don't want a trace in trace logs - log.debug(str); - break; - } - } finally { - } - }, - }; -} - -const theParticleHandler = ( - callback: ParticleHandler, - service_id: string, - fn_name: string, - args: string, - tetraplets: string, -): CallServiceResult => { - let argsObject; - let tetrapletsObject: SecurityTetraplet[][]; - try { - argsObject = JSON.parse(args); - if (!Array.isArray(argsObject)) { - throw new Error('args is not an array'); - } - - tetrapletsObject = JSON.parse(tetraplets); - } catch (err) { - log.error('Cannot parse arguments: ' + JSON.stringify(err)); - return { - result: JSON.stringify('Cannot parse arguments: ' + JSON.stringify(err)), - ret_code: 1, - }; - } - - return callback(service_id, fn_name, argsObject, tetrapletsObject); -}; - -/// Returns import object that describes host functions called by AIR interpreter -function newImportObject(particleHandler: ParticleHandler, cfg: HostImportsConfig, peerId: PeerId): ImportObject { - return { - // __wbg_callserviceimpl_c0ca292e3c8c0c97 this is a function generated by bindgen. Could be changed. - // If so, an error with a new name will be occurred after wasm initialization. - './aquamarine_client_bg.js': { - // prettier-ignore - __wbg_callserviceimpl_84d8278762e4c639: (arg0: any, arg1: any, arg2: any, arg3: any, arg4: any, arg5: any, arg6: any, arg7: any, arg8: any) => { - let wasm = cfg.exports; - try { - let serviceId = getStringFromWasm0(wasm, arg1, arg2); - let fnName = getStringFromWasm0(wasm, arg3, arg4); - let args = getStringFromWasm0(wasm, arg5, arg6); - let tetraplets = getStringFromWasm0(wasm, arg7, arg8); - /* - TODO:: parse and pack arguments into structure like the following - class Argument { - value: T, - SecurityTetraplet: tetraplet - } - */ - let serviceResult = theParticleHandler(particleHandler, serviceId, fnName, args, tetraplets); - let resultStr = JSON.stringify(serviceResult); - return_call_service_result(wasm, resultStr, arg0); - } finally { - free(wasm, arg1, arg2); - free(wasm, arg3, arg4); - free(wasm, arg5, arg6); - free(wasm, arg7, arg8); - } - }, - __wbg_getcurrentpeeridimpl_4aca996e28cb8f44: (arg0: any) => { - let peerIdStr = peerId.toB58String(); - let wasm = cfg.exports; - return_current_peer_id(wasm, peerIdStr, arg0); - }, - __wbindgen_throw: (arg: any) => { - log.error(`wbindgen throw: ${JSON.stringify(arg)}`); - }, - }, - host: log_import(cfg), - }; -} - -function newLogImport(cfg: HostImportsConfig): ImportObject { - return { - host: log_import(cfg), - './aquamarine_client_bg.js': { - __wbg_callserviceimpl_84d8278762e4c639: (_) => {}, - __wbg_getcurrentpeeridimpl_4aca996e28cb8f44: (_) => {}, - __wbindgen_throw: (_) => {}, - }, - }; -} - -/// Instantiates AIR interpreter, and returns its `invoke` function as closure -async function instantiateInterpreter(particleHandler: ParticleHandler, peerId: PeerId): Promise { - let cfg = new HostImportsConfig((cfg) => { - return newImportObject(particleHandler, cfg, peerId); - }); - let instance = await interpreterInstance(cfg); - - return (init_peer_id: string, script: string, prev_data: Uint8Array, data: Uint8Array) => { - let logLevel = log.getLevel(); - let logLevelStr = 'info'; - if (logLevel === 0) { - logLevelStr = 'trace'; - } else if (logLevel === 1) { - logLevelStr = 'debug'; - } else if (logLevel === 2) { - logLevelStr = 'info'; - } else if (logLevel === 3) { - logLevelStr = 'warn'; - } else if (logLevel === 4) { - logLevelStr = 'error'; - } else if (logLevel === 5) { - logLevelStr = 'off'; - } - - return aqua.invoke(instance.exports, init_peer_id, script, prev_data, data, logLevelStr); - }; -} - -/// Instantiate AIR interpreter with host imports containing only logger, but not call_service -/// peerId isn't actually required for AST parsing, but host imports require it, and I don't see any workaround -async function parseAstClosure(): Promise<(script: string) => string> { - let cfg = new HostImportsConfig((cfg) => newLogImport(cfg)); - let instance = await interpreterInstance(cfg); - - return (script: string) => { - return aqua.ast(instance.exports, script); - }; -} - -/// Parses script and returns AST in JSON format -/// NOTE & TODO: interpreter is instantiated every time, make it a lazy constant? -async function parseAIR(script: string): Promise { - let closure = await parseAstClosure(); - return closure(script); -} - -export class AquamarineInterpreter { - private wasmWrapper; - - constructor(wasmWrapper) { - this.wasmWrapper = wasmWrapper; - } - - static async create(config: { particleHandler: ParticleHandler; peerId: PeerId }) { - const cfg = new HostImportsConfig((cfg) => { - return newImportObject(config.particleHandler, cfg, config.peerId); - }); - - const instance = await interpreterInstance(cfg); - const res = new AquamarineInterpreter(instance); - return res; - } - - invoke(init_peer_id: string, script: string, prev_data: Uint8Array, data: Uint8Array): string { - let logLevel = log.getLevel(); - let logLevelStr = 'info'; - if (logLevel === 0) { - logLevelStr = 'trace'; - } else if (logLevel === 1) { - logLevelStr = 'debug'; - } else if (logLevel === 2) { - logLevelStr = 'info'; - } else if (logLevel === 3) { - logLevelStr = 'warn'; - } else if (logLevel === 4) { - logLevelStr = 'error'; - } else if (logLevel === 5) { - logLevelStr = 'off'; - } - - return aqua.invoke(this.wasmWrapper.exports, init_peer_id, script, prev_data, data, logLevelStr); - } - - parseAir(script: string): string { - return aqua.ast(this.wasmWrapper.exports, script); - } -} From d0f1293176b4d47db66e4eca4ff0558070dc81e7 Mon Sep 17 00:00:00 2001 From: Pavel Murygin Date: Tue, 4 May 2021 13:23:38 +0300 Subject: [PATCH 02/15] Migrate to the new version of air-interpreter package (contd.) --- package-lock.json | 6 +++--- package.json | 2 +- src/__test__/unit/ast.spec.ts | 4 ++-- src/internal/ClientImpl.ts | 6 +++--- src/internal/RequestFlow.ts | 6 +++--- 5 files changed, 12 insertions(+), 12 deletions(-) diff --git a/package-lock.json b/package-lock.json index 53a8bcb0a..e9ab2ab1b 100644 --- a/package-lock.json +++ b/package-lock.json @@ -435,9 +435,9 @@ } }, "@fluencelabs/air-interpreter": { - "version": "0.9.0-npm-package.5", - "resolved": "https://registry.npmjs.org/@fluencelabs/air-interpreter/-/air-interpreter-0.9.0-npm-package.5.tgz", - "integrity": "sha512-53N8s0HlsUVnfAyFWlaATpX3UmsqjphKdQBs3CaGxMI3yz7q7K/sbM3d3Z0OQWEn/qbLfO+DreJvl0vOpX5sUg==", + "version": "0.9.0-npm-package.10", + "resolved": "https://registry.npmjs.org/@fluencelabs/air-interpreter/-/air-interpreter-0.9.0-npm-package.10.tgz", + "integrity": "sha512-pJFqlgA83D7iF+VWf+HpWBsaR8KROUYYuAtc/AJj7QeyGiXVgFTGQE7QyyFUsM1xcV+AdtcJgvrgE/mw2G0bQQ==", "requires": { "base64-js": "1.5.1" }, diff --git a/package.json b/package.json index 932e59353..13c1d99a1 100644 --- a/package.json +++ b/package.json @@ -15,7 +15,7 @@ "author": "Fluence Labs", "license": "Apache-2.0", "dependencies": { - "@fluencelabs/air-interpreter": "0.9.0-npm-package.5", + "@fluencelabs/air-interpreter": "0.9.0-npm-package.10", "async": "3.2.0", "base64-js": "1.3.1", "bs58": "4.0.1", diff --git a/src/__test__/unit/ast.spec.ts b/src/__test__/unit/ast.spec.ts index 8937f85e5..2d7dd0d74 100644 --- a/src/__test__/unit/ast.spec.ts +++ b/src/__test__/unit/ast.spec.ts @@ -1,9 +1,9 @@ -import { AquamarineInterpreter } from '@fluencelabs/air-interpreter'; +import { AirInterpreter } from '@fluencelabs/air-interpreter'; import { genUUID } from '../../internal/particle'; describe('== AST parsing suite', () => { it('parse simple script and return ast', async function () { - const interpreter = await AquamarineInterpreter.create( + const interpreter = await AirInterpreter.create( undefined as any, undefined as any, undefined as any, diff --git a/src/internal/ClientImpl.ts b/src/internal/ClientImpl.ts index bd9adab90..8e72cac85 100644 --- a/src/internal/ClientImpl.ts +++ b/src/internal/ClientImpl.ts @@ -25,7 +25,7 @@ import { AquaCallHandler, errorHandler, fnHandler } from './AquaHandler'; import { loadRelayFn, loadVariablesService } from './RequestFlowBuilder'; import { logParticle, Particle } from './particle'; import log from 'loglevel'; -import { AquamarineInterpreter } from '@fluencelabs/air-interpreter'; +import { AirInterpreter } from '@fluencelabs/air-interpreter'; const makeDefaultClientHandler = (): AquaCallHandler => { const res = new AquaCallHandler(); @@ -54,7 +54,7 @@ export class ClientImpl implements FluenceClient { } private connection: FluenceConnection; - private interpreter: AquamarineInterpreter; + private interpreter: AirInterpreter; constructor(selfPeerIdFull: PeerId) { this.selfPeerIdFull = selfPeerIdFull; @@ -71,7 +71,7 @@ export class ClientImpl implements FluenceClient { } async initAquamarineRuntime(): Promise { - this.interpreter = await AquamarineInterpreter.create( + this.interpreter = await AirInterpreter.create( this.interpreterCallback.bind(this), this.selfPeerId, 'trace', diff --git a/src/internal/RequestFlow.ts b/src/internal/RequestFlow.ts index 761b66ff3..89679ae33 100644 --- a/src/internal/RequestFlow.ts +++ b/src/internal/RequestFlow.ts @@ -1,6 +1,6 @@ import log, { trace } from 'loglevel'; import PeerId from 'peer-id'; -import { AquamarineInterpreter } from '@fluencelabs/air-interpreter'; +import { AirInterpreter } from '@fluencelabs/air-interpreter'; import { AquaCallHandler } from './AquaHandler'; import { InterpreterOutcome, PeerIdB58 } from './commonTypes'; import { FluenceConnection } from './FluenceConnection'; @@ -57,7 +57,7 @@ export class RequestFlow { this.onErrorHandlers.push(handler); } - async execute(interpreter: AquamarineInterpreter, connection: FluenceConnection, relayPeerId?: PeerIdB58) { + async execute(interpreter: AirInterpreter, connection: FluenceConnection, relayPeerId?: PeerIdB58) { if (this.hasExpired()) { return; } @@ -145,7 +145,7 @@ relay peer id: ${this.relayPeerId} } } - runInterpreter(interpreter: AquamarineInterpreter) { + runInterpreter(interpreter: AirInterpreter) { const interpreterOutcomeStr = interpreter.invoke( this.state.init_peer_id, this.state.script, From 55327bc3be18ff52de82f4cb0cb6bd5c5a491c0e Mon Sep 17 00:00:00 2001 From: Pavel Murygin Date: Wed, 5 May 2021 16:01:20 +0300 Subject: [PATCH 03/15] using release version of package --- package-lock.json | 6 +++--- package.json | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/package-lock.json b/package-lock.json index e9ab2ab1b..91d784442 100644 --- a/package-lock.json +++ b/package-lock.json @@ -435,9 +435,9 @@ } }, "@fluencelabs/air-interpreter": { - "version": "0.9.0-npm-package.10", - "resolved": "https://registry.npmjs.org/@fluencelabs/air-interpreter/-/air-interpreter-0.9.0-npm-package.10.tgz", - "integrity": "sha512-pJFqlgA83D7iF+VWf+HpWBsaR8KROUYYuAtc/AJj7QeyGiXVgFTGQE7QyyFUsM1xcV+AdtcJgvrgE/mw2G0bQQ==", + "version": "0.9.5", + "resolved": "https://registry.npmjs.org/@fluencelabs/air-interpreter/-/air-interpreter-0.9.5.tgz", + "integrity": "sha512-kXeHmFbjIbfayJZmIEpsorGwAuT4F6kJptSrxFCecYjne6e2nf8SyFJnbOv5I3Biw0yEx7mOsoMMncfGaqtOAg==", "requires": { "base64-js": "1.5.1" }, diff --git a/package.json b/package.json index 13c1d99a1..bb1d466aa 100644 --- a/package.json +++ b/package.json @@ -15,7 +15,7 @@ "author": "Fluence Labs", "license": "Apache-2.0", "dependencies": { - "@fluencelabs/air-interpreter": "0.9.0-npm-package.10", + "@fluencelabs/air-interpreter": "0.9.5", "async": "3.2.0", "base64-js": "1.3.1", "bs58": "4.0.1", From 4708b9cb3ec7f41de8229401c16a5c3e46846153 Mon Sep 17 00:00:00 2001 From: Pavel Murygin Date: Mon, 10 May 2021 22:17:25 +0300 Subject: [PATCH 04/15] Add different test environments --- jest-patched-jsdom.js | 12 ++++++++++++ jest.config.js | 6 +++--- package.json | 12 ++++++++---- 3 files changed, 23 insertions(+), 7 deletions(-) create mode 100644 jest-patched-jsdom.js diff --git a/jest-patched-jsdom.js b/jest-patched-jsdom.js new file mode 100644 index 000000000..8bd1b615d --- /dev/null +++ b/jest-patched-jsdom.js @@ -0,0 +1,12 @@ +const Environment = require('jest-environment-jsdom'); + +module.exports = class CustomTestEnvironment extends Environment { + async setup() { + await super.setup(); + if (typeof this.global.TextEncoder === 'undefined') { + const { TextEncoder, TextDecoder } = require('util'); + this.global.TextEncoder = TextEncoder; + this.global.TextDecoder = TextDecoder; + } + } +}; diff --git a/jest.config.js b/jest.config.js index 91a2d2c0d..2b6b7eadb 100644 --- a/jest.config.js +++ b/jest.config.js @@ -1,4 +1,4 @@ module.exports = { - preset: 'ts-jest', - testEnvironment: 'node', -}; \ No newline at end of file + preset: 'ts-jest', + testEnvironment: './jest-patched-jsdom.js', +}; diff --git a/package.json b/package.json index bb1d466aa..c77880c05 100644 --- a/package.json +++ b/package.json @@ -5,10 +5,14 @@ "main": "./dist/index.js", "typings": "./dist/index.d.ts", "scripts": { - "test": "jest --env=jsdom --watch", - "test:all": "jest --env=jsdom", - "test:unit": "jest --env=jsdom --testPathPattern=src/__test__/unit", - "test:integration": "jest --env=jsdom --testPathPattern=src/__test__/integration", + "test": "jest --watch", + "test:all": "jest", + "test:unit": "jest --testPathPattern=src/__test__/unit", + "test:integration": "jest --testPathPattern=src/__test__/integration", + "test:node": "jest --env=node --watch", + "test:node:all": "jest --env=node", + "test:node:unit": "jest --env=node --testPathPattern=src/__test__/unit", + "test:node:integration": "jest --env=node --testPathPattern=src/__test__/integration", "build": "tsc" }, "repository": "https://github.com/fluencelabs/fluence-js", From e2c33b314002cdc4a28ffc966f9669e82f7f8b34 Mon Sep 17 00:00:00 2001 From: Pavel Murygin Date: Mon, 10 May 2021 22:19:15 +0300 Subject: [PATCH 05/15] add a separate ci pipeline for node env --- .github/workflows/js_sdk_ci.yml | 39 --------------------------- .github/workflows/js_sdk_ci_jsdom.yml | 36 +++++++++++++++++++++++++ .github/workflows/js_sdk_ci_node.yml | 36 +++++++++++++++++++++++++ 3 files changed, 72 insertions(+), 39 deletions(-) delete mode 100644 .github/workflows/js_sdk_ci.yml create mode 100644 .github/workflows/js_sdk_ci_jsdom.yml create mode 100644 .github/workflows/js_sdk_ci_node.yml diff --git a/.github/workflows/js_sdk_ci.yml b/.github/workflows/js_sdk_ci.yml deleted file mode 100644 index 97f31c870..000000000 --- a/.github/workflows/js_sdk_ci.yml +++ /dev/null @@ -1,39 +0,0 @@ -name: Node.js CI - -defaults: - run: - working-directory: . - -on: - push: - -jobs: - build: - - runs-on: ubuntu-latest - - strategy: - matrix: - node-version: [14.x, 15.x] - - steps: - - uses: actions/checkout@v2 - - - uses: actions/cache@v2 - with: - path: ~/.npm - key: ${{ runner.os }}-v1-node-${{ matrix.node-version }}-${{ hashFiles('**/package-lock.json') }} - restore-keys: | - ${{ runner.os }}-v1-node-${{ matrix.node-version }} - - - name: Setup Node.js ${{ matrix.node-version }} - uses: actions/setup-node@v1 - with: - node-version: ${{ matrix.node-version }} - - - run: npm install - - run: npm run test:unit - env: - CI: true - - diff --git a/.github/workflows/js_sdk_ci_jsdom.yml b/.github/workflows/js_sdk_ci_jsdom.yml new file mode 100644 index 000000000..2f7b035fa --- /dev/null +++ b/.github/workflows/js_sdk_ci_jsdom.yml @@ -0,0 +1,36 @@ +name: Node.js CI + +defaults: + run: + working-directory: . + +on: + push: + +jobs: + build: + runs-on: ubuntu-latest + + strategy: + matrix: + node-version: [14.x, 15.x] + + steps: + - uses: actions/checkout@v2 + + - uses: actions/cache@v2 + with: + path: ~/.npm + key: ${{ runner.os }}-v1-node-${{ matrix.node-version }}-${{ hashFiles('**/package-lock.json') }} + restore-keys: | + ${{ runner.os }}-v1-node-${{ matrix.node-version }} + + - name: Setup Node.js ${{ matrix.node-version }} + uses: actions/setup-node@v1 + with: + node-version: ${{ matrix.node-version }} + + - run: npm install + - run: npm run test:unit + env: + CI: true diff --git a/.github/workflows/js_sdk_ci_node.yml b/.github/workflows/js_sdk_ci_node.yml new file mode 100644 index 000000000..15e054daf --- /dev/null +++ b/.github/workflows/js_sdk_ci_node.yml @@ -0,0 +1,36 @@ +name: Node.js CI + +defaults: + run: + working-directory: . + +on: + push: + +jobs: + build: + runs-on: ubuntu-latest + + strategy: + matrix: + node-version: [14.x, 15.x] + + steps: + - uses: actions/checkout@v2 + + - uses: actions/cache@v2 + with: + path: ~/.npm + key: ${{ runner.os }}-v1-node-${{ matrix.node-version }}-${{ hashFiles('**/package-lock.json') }} + restore-keys: | + ${{ runner.os }}-v1-node-${{ matrix.node-version }} + + - name: Setup Node.js ${{ matrix.node-version }} + uses: actions/setup-node@v1 + with: + node-version: ${{ matrix.node-version }} + + - run: npm install + - run: npm run test:node:unit + env: + CI: true From 0ecb4a28654f2c66d98f476bd3d8522a3a756c1c Mon Sep 17 00:00:00 2001 From: Pavel Murygin Date: Mon, 10 May 2021 22:26:15 +0300 Subject: [PATCH 06/15] better pipeline names --- .github/workflows/js_sdk_ci_jsdom.yml | 2 +- .github/workflows/js_sdk_ci_node.yml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/js_sdk_ci_jsdom.yml b/.github/workflows/js_sdk_ci_jsdom.yml index 2f7b035fa..b1369a561 100644 --- a/.github/workflows/js_sdk_ci_jsdom.yml +++ b/.github/workflows/js_sdk_ci_jsdom.yml @@ -1,4 +1,4 @@ -name: Node.js CI +name: Run tests in jsdom environment defaults: run: diff --git a/.github/workflows/js_sdk_ci_node.yml b/.github/workflows/js_sdk_ci_node.yml index 15e054daf..db469731f 100644 --- a/.github/workflows/js_sdk_ci_node.yml +++ b/.github/workflows/js_sdk_ci_node.yml @@ -1,4 +1,4 @@ -name: Node.js CI +name: Run tests in node environment defaults: run: From a8e642bfb6dd0259f469ee23235340c09e371be7 Mon Sep 17 00:00:00 2001 From: Pavel Murygin Date: Tue, 11 May 2021 11:04:18 +0300 Subject: [PATCH 07/15] update air-interpreter version --- package-lock.json | 6 +++--- package.json | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/package-lock.json b/package-lock.json index 91d784442..9682dd653 100644 --- a/package-lock.json +++ b/package-lock.json @@ -435,9 +435,9 @@ } }, "@fluencelabs/air-interpreter": { - "version": "0.9.5", - "resolved": "https://registry.npmjs.org/@fluencelabs/air-interpreter/-/air-interpreter-0.9.5.tgz", - "integrity": "sha512-kXeHmFbjIbfayJZmIEpsorGwAuT4F6kJptSrxFCecYjne6e2nf8SyFJnbOv5I3Biw0yEx7mOsoMMncfGaqtOAg==", + "version": "0.9.7", + "resolved": "https://registry.npmjs.org/@fluencelabs/air-interpreter/-/air-interpreter-0.9.7.tgz", + "integrity": "sha512-9aJwfyfJ18BvSSFhTnq8SJZmIAgbyGXUf3vilsMhU6Iql35ZDd8E+5dF2hRkRrqUj2409w7qOtgLbB8JzdG/fw==", "requires": { "base64-js": "1.5.1" }, diff --git a/package.json b/package.json index c77880c05..5de47a80f 100644 --- a/package.json +++ b/package.json @@ -19,7 +19,7 @@ "author": "Fluence Labs", "license": "Apache-2.0", "dependencies": { - "@fluencelabs/air-interpreter": "0.9.5", + "@fluencelabs/air-interpreter": "0.9.7", "async": "3.2.0", "base64-js": "1.3.1", "bs58": "4.0.1", From 8c5c174a53583ebc2878dbcbffa3ef05690cbb44 Mon Sep 17 00:00:00 2001 From: Pavel Murygin Date: Tue, 11 May 2021 11:23:45 +0300 Subject: [PATCH 08/15] fix tests --- jest-patched-jsdom.js | 2 ++ src/__test__/unit/air.spec.ts | 2 +- 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/jest-patched-jsdom.js b/jest-patched-jsdom.js index 8bd1b615d..a49175ac4 100644 --- a/jest-patched-jsdom.js +++ b/jest-patched-jsdom.js @@ -7,6 +7,8 @@ module.exports = class CustomTestEnvironment extends Environment { const { TextEncoder, TextDecoder } = require('util'); this.global.TextEncoder = TextEncoder; this.global.TextDecoder = TextDecoder; + this.global.Uint8Array = Uint8Array; + this.global.ArrayBuffer = ArrayBuffer; } } }; diff --git a/src/__test__/unit/air.spec.ts b/src/__test__/unit/air.spec.ts index 75663fe90..79e256923 100644 --- a/src/__test__/unit/air.spec.ts +++ b/src/__test__/unit/air.spec.ts @@ -67,7 +67,7 @@ describe('== AIR suite', () => { await client.initiateFlow(request); // assert - await expect(error).rejects.toContain("aqua script can't be parsed"); + await expect(error).rejects.toContain("air can't be parsed"); }); it('call script without ttl', async function () { From ed72ee896c776afe96bcb2fa9cee331697db091b Mon Sep 17 00:00:00 2001 From: Pavel Murygin Date: Tue, 11 May 2021 11:33:02 +0300 Subject: [PATCH 09/15] Running all tests in CI pipelines --- .github/workflows/js_sdk_ci_jsdom.yml | 5 ++++- .github/workflows/js_sdk_ci_node.yml | 5 ++++- src/__test__/connection.ts | 2 +- 3 files changed, 9 insertions(+), 3 deletions(-) diff --git a/.github/workflows/js_sdk_ci_jsdom.yml b/.github/workflows/js_sdk_ci_jsdom.yml index b1369a561..22d4c0ae1 100644 --- a/.github/workflows/js_sdk_ci_jsdom.yml +++ b/.github/workflows/js_sdk_ci_jsdom.yml @@ -30,7 +30,10 @@ jobs: with: node-version: ${{ matrix.node-version }} + - name: Run container with Fluence node + run: docker run -d --rm -e RUST_LOG="info" -p 1210:1210 -p 4310:4310 fluencelabs/fluence -t 1210 -w 4310 -k gKdiCSUr1TFGFEgu2t8Ch1XEUsrN5A2UfBLjSZvfci9SPR3NvZpACfcpPGC3eY4zma1pk7UvYv5zb1VjvPHwCjj --local + - run: npm install - - run: npm run test:unit + - run: npm run test:all env: CI: true diff --git a/.github/workflows/js_sdk_ci_node.yml b/.github/workflows/js_sdk_ci_node.yml index db469731f..3d6640b43 100644 --- a/.github/workflows/js_sdk_ci_node.yml +++ b/.github/workflows/js_sdk_ci_node.yml @@ -30,7 +30,10 @@ jobs: with: node-version: ${{ matrix.node-version }} + - name: Run container with Fluence node + run: docker run -d --rm -e RUST_LOG="info" -p 1210:1210 -p 4310:4310 fluencelabs/fluence -t 1210 -w 4310 -k gKdiCSUr1TFGFEgu2t8Ch1XEUsrN5A2UfBLjSZvfci9SPR3NvZpACfcpPGC3eY4zma1pk7UvYv5zb1VjvPHwCjj --local + - run: npm install - - run: npm run test:node:unit + - run: npm run test:node:all env: CI: true diff --git a/src/__test__/connection.ts b/src/__test__/connection.ts index cb6fbe6a8..daea1febe 100644 --- a/src/__test__/connection.ts +++ b/src/__test__/connection.ts @@ -13,7 +13,7 @@ /* * start docker container to run integration tests locally: -docker run --rm -e RUST_LOG="info" -p 1210:1210 -p 4310:4310 fluencelabs/fluence -t 1210 -w 4310 -k gKdiCSUr1TFGFEgu2t8Ch1XEUsrN5A2UfBLjSZvfci9SPR3NvZpACfcpPGC3eY4zma1pk7UvYv5zb1VjvPHwCjj +docker run --rm -e RUST_LOG="info" -p 1210:1210 -p 4310:4310 fluencelabs/fluence -t 1210 -w 4310 -k gKdiCSUr1TFGFEgu2t8Ch1XEUsrN5A2UfBLjSZvfci9SPR3NvZpACfcpPGC3eY4zma1pk7UvYv5zb1VjvPHwCjj --local */ export const nodes = [ From a7567a199877a75f33c80f313fb2b45127536467 Mon Sep 17 00:00:00 2001 From: Pavel Murygin Date: Tue, 11 May 2021 16:11:45 +0300 Subject: [PATCH 10/15] various fixes --- src/__test__/unit/ast.spec.ts | 1 - src/internal/ClientImpl.ts | 3 +++ src/internal/RequestFlow.ts | 10 +++++++++- 3 files changed, 12 insertions(+), 2 deletions(-) diff --git a/src/__test__/unit/ast.spec.ts b/src/__test__/unit/ast.spec.ts index 2d7dd0d74..6841abc4f 100644 --- a/src/__test__/unit/ast.spec.ts +++ b/src/__test__/unit/ast.spec.ts @@ -13,7 +13,6 @@ describe('== AST parsing suite', () => { (call "node" ("service" "function") [1 2 3] output) `); - console.log(ast); ast = JSON.parse(ast); expect(ast).toEqual({ diff --git a/src/internal/ClientImpl.ts b/src/internal/ClientImpl.ts index 8e72cac85..b3ea36c1f 100644 --- a/src/internal/ClientImpl.ts +++ b/src/internal/ClientImpl.ts @@ -68,6 +68,9 @@ export class ClientImpl implements FluenceClient { await this.connection.disconnect(); } this.clearWathcDog(); + this.requests.forEach((r) => { + r.cancel(); + }); } async initAquamarineRuntime(): Promise { diff --git a/src/internal/RequestFlow.ts b/src/internal/RequestFlow.ts index 89679ae33..9c5d619a7 100644 --- a/src/internal/RequestFlow.ts +++ b/src/internal/RequestFlow.ts @@ -20,6 +20,7 @@ export class RequestFlow { private prevData: Uint8Array = Buffer.from([]); private onTimeoutHandlers = []; private onErrorHandlers = []; + private timeoutHandle?: NodeJS.Timeout; readonly id: string; readonly isExternal: boolean; @@ -97,11 +98,18 @@ export class RequestFlow { if (!connection) { this.raiseError('Cannot send particle: non connected'); + return; } this.sendIntoConnection(connection); } + public cancel() { + if (this.timeoutHandle) { + clearTimeout(this.timeoutHandle); + } + } + private throwIncorrectNextPeerPks(nextPeers: PeerIdB58[]) { this.raiseError( `Particle is expected to be sent to only the single peer (relay which client is connected to). @@ -127,7 +135,7 @@ relay peer id: ${this.relayPeerId} }; this.state = particle; - setTimeout(this.raiseTimeout.bind(this), particle.ttl); + this.timeoutHandle = setTimeout(this.raiseTimeout.bind(this), particle.ttl); } receiveUpdate(particle: Particle) { From 2ed6f9a3498c1cc57cd73601b7677d296500369d Mon Sep 17 00:00:00 2001 From: Pavel Murygin Date: Tue, 11 May 2021 16:16:22 +0300 Subject: [PATCH 11/15] fix setTimeout issue in one more place --- src/internal/RequestFlow.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/internal/RequestFlow.ts b/src/internal/RequestFlow.ts index 9c5d619a7..cb3d9ecd6 100644 --- a/src/internal/RequestFlow.ts +++ b/src/internal/RequestFlow.ts @@ -34,7 +34,7 @@ export class RequestFlow { const res = new RequestFlow(true, particle.id, particle.script); res.ttl = particle.ttl; res.state = particle; - setTimeout(res.raiseTimeout.bind(res), particle.ttl); + res.timeoutHandle = setTimeout(res.raiseTimeout.bind(res), particle.ttl); return res; } From 945b6ef45020cea525bedcea5f42871f35dd64db Mon Sep 17 00:00:00 2001 From: Pavel Murygin Date: Tue, 11 May 2021 16:34:49 +0300 Subject: [PATCH 12/15] Fix teardown in legacy api test suite --- src/__test__/integration/legacy.api.spec.ts | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/src/__test__/integration/legacy.api.spec.ts b/src/__test__/integration/legacy.api.spec.ts index ec3bf3e47..fd3eaa603 100644 --- a/src/__test__/integration/legacy.api.spec.ts +++ b/src/__test__/integration/legacy.api.spec.ts @@ -5,6 +5,12 @@ import { nodes } from '../connection'; let client: FluenceClient; describe('Legacy api suite', () => { + afterEach(async () => { + if (client) { + await client.disconnect(); + } + }); + it('sendParticle', async () => { client = await createClient(nodes[0]); From cb7b02ded9c3686aa3b0856c81de41d379d050e2 Mon Sep 17 00:00:00 2001 From: Pavel Murygin Date: Tue, 11 May 2021 23:31:07 +0300 Subject: [PATCH 13/15] trying single ci matrix --- .../{js_sdk_ci_node.yml => js_sdk_ci.yml} | 3 +- .github/workflows/js_sdk_ci_jsdom.yml | 39 ------------------- 2 files changed, 2 insertions(+), 40 deletions(-) rename .github/workflows/{js_sdk_ci_node.yml => js_sdk_ci.yml} (92%) delete mode 100644 .github/workflows/js_sdk_ci_jsdom.yml diff --git a/.github/workflows/js_sdk_ci_node.yml b/.github/workflows/js_sdk_ci.yml similarity index 92% rename from .github/workflows/js_sdk_ci_node.yml rename to .github/workflows/js_sdk_ci.yml index 3d6640b43..31aef667d 100644 --- a/.github/workflows/js_sdk_ci_node.yml +++ b/.github/workflows/js_sdk_ci.yml @@ -14,6 +14,7 @@ jobs: strategy: matrix: node-version: [14.x, 15.x] + node-env: ['', ':node'] steps: - uses: actions/checkout@v2 @@ -34,6 +35,6 @@ jobs: run: docker run -d --rm -e RUST_LOG="info" -p 1210:1210 -p 4310:4310 fluencelabs/fluence -t 1210 -w 4310 -k gKdiCSUr1TFGFEgu2t8Ch1XEUsrN5A2UfBLjSZvfci9SPR3NvZpACfcpPGC3eY4zma1pk7UvYv5zb1VjvPHwCjj --local - run: npm install - - run: npm run test:node:all + - run: npm run test${{ node-env }}:all env: CI: true diff --git a/.github/workflows/js_sdk_ci_jsdom.yml b/.github/workflows/js_sdk_ci_jsdom.yml deleted file mode 100644 index 22d4c0ae1..000000000 --- a/.github/workflows/js_sdk_ci_jsdom.yml +++ /dev/null @@ -1,39 +0,0 @@ -name: Run tests in jsdom environment - -defaults: - run: - working-directory: . - -on: - push: - -jobs: - build: - runs-on: ubuntu-latest - - strategy: - matrix: - node-version: [14.x, 15.x] - - steps: - - uses: actions/checkout@v2 - - - uses: actions/cache@v2 - with: - path: ~/.npm - key: ${{ runner.os }}-v1-node-${{ matrix.node-version }}-${{ hashFiles('**/package-lock.json') }} - restore-keys: | - ${{ runner.os }}-v1-node-${{ matrix.node-version }} - - - name: Setup Node.js ${{ matrix.node-version }} - uses: actions/setup-node@v1 - with: - node-version: ${{ matrix.node-version }} - - - name: Run container with Fluence node - run: docker run -d --rm -e RUST_LOG="info" -p 1210:1210 -p 4310:4310 fluencelabs/fluence -t 1210 -w 4310 -k gKdiCSUr1TFGFEgu2t8Ch1XEUsrN5A2UfBLjSZvfci9SPR3NvZpACfcpPGC3eY4zma1pk7UvYv5zb1VjvPHwCjj --local - - - run: npm install - - run: npm run test:all - env: - CI: true From eb01fee00e88dd3d570c97505354bd8f0a314d55 Mon Sep 17 00:00:00 2001 From: Pavel Murygin Date: Tue, 11 May 2021 23:34:56 +0300 Subject: [PATCH 14/15] fix syntax --- .github/workflows/js_sdk_ci.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/js_sdk_ci.yml b/.github/workflows/js_sdk_ci.yml index 31aef667d..87b6f282e 100644 --- a/.github/workflows/js_sdk_ci.yml +++ b/.github/workflows/js_sdk_ci.yml @@ -35,6 +35,6 @@ jobs: run: docker run -d --rm -e RUST_LOG="info" -p 1210:1210 -p 4310:4310 fluencelabs/fluence -t 1210 -w 4310 -k gKdiCSUr1TFGFEgu2t8Ch1XEUsrN5A2UfBLjSZvfci9SPR3NvZpACfcpPGC3eY4zma1pk7UvYv5zb1VjvPHwCjj --local - run: npm install - - run: npm run test${{ node-env }}:all + - run: npm run test${{ matrix.node-env }}:all env: CI: true From 2fd4a17d85078c1a109aa4de829d8d28c9611ac2 Mon Sep 17 00:00:00 2001 From: Pavel Murygin Date: Tue, 11 May 2021 23:43:43 +0300 Subject: [PATCH 15/15] fix job name --- .github/workflows/js_sdk_ci.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/js_sdk_ci.yml b/.github/workflows/js_sdk_ci.yml index 87b6f282e..78f780b72 100644 --- a/.github/workflows/js_sdk_ci.yml +++ b/.github/workflows/js_sdk_ci.yml @@ -1,4 +1,4 @@ -name: Run tests in node environment +name: Run tests defaults: run: