From ab66ed4e343258bac5f838c3e2b0c6dc89ce64f8 Mon Sep 17 00:00:00 2001 From: Patrick Quist Date: Wed, 11 Jan 2023 21:07:38 +0100 Subject: [PATCH] move emulation related fields to artifact system (#4567) --- lib/base-compiler.ts | 17 +++++++++++++++- lib/compilers/beebasm.ts | 5 ++--- lib/compilers/cc65.ts | 5 ++--- lib/compilers/llvm-mos.ts | 6 ++---- lib/compilers/z88dk.ts | 9 +++------ static/panes/compiler.ts | 22 ++++++++++++--------- types/compilation/compilation.interfaces.ts | 7 ++----- types/tool.interfaces.ts | 8 ++++++++ 8 files changed, 48 insertions(+), 31 deletions(-) diff --git a/lib/base-compiler.ts b/lib/base-compiler.ts index b04f946a6e8..f7a41990d1e 100644 --- a/lib/base-compiler.ts +++ b/lib/base-compiler.ts @@ -52,7 +52,7 @@ import {CompilerOutputOptions, ParseFiltersAndOutputOptions} from '../types/feat import {Language} from '../types/languages.interfaces'; import {Library, LibraryVersion, SelectedLibraryVersion} from '../types/libraries/libraries.interfaces'; import {ResultLine} from '../types/resultline/resultline.interfaces'; -import {Tool, ToolResult, ToolTypeKey} from '../types/tool.interfaces'; +import {Artifact, ToolResult, ToolTypeKey} from '../types/tool.interfaces'; import {BuildEnvSetupBase, getBuildEnvTypeByKey} from './buildenvsetup'; import {BuildEnvDownloadInfo} from './buildenvsetup/buildenv.interfaces'; @@ -1405,6 +1405,21 @@ export class BaseCompiler implements ICompiler { } } + async addArtifactToResult(result: CompilationResult, filepath: string, customType?: string, customTitle?: string) { + const file_buffer = await fs.readFile(filepath); + + const artifact: Artifact = { + content: file_buffer.toString('base64'), + type: customType || 'application/octet-stream', + name: path.basename(filepath), + title: customTitle || path.basename(filepath), + }; + + if (!result.artifacts) result.artifacts = []; + + result.artifacts.push(artifact); + } + protected async writeMultipleFiles(files, dirPath) { const filesToWrite: Promise[] = []; diff --git a/lib/compilers/beebasm.ts b/lib/compilers/beebasm.ts index 0081d8c6681..e00053ca584 100644 --- a/lib/compilers/beebasm.ts +++ b/lib/compilers/beebasm.ts @@ -26,6 +26,7 @@ import path from 'path'; import fs from 'fs-extra'; +import {ArtifactType} from '../../types/tool.interfaces'; import {BaseCompiler} from '../base-compiler'; import {AsmParserBeebAsm} from '../parsers/asm-parser-beebasm'; import * as utils from '../utils'; @@ -76,9 +77,7 @@ export class BeebAsmCompiler extends BaseCompiler { if (result.code === 0 && options.includes('-v')) { const diskfile = path.join(dirPath, 'disk.ssd'); if (await utils.fileExists(diskfile)) { - const file_buffer = await fs.readFile(diskfile); - const binary_base64 = file_buffer.toString('base64'); - result.bbcdiskimage = binary_base64; + await this.addArtifactToResult(result, diskfile, ArtifactType.bbcdiskimage); if (!hasBootOption) { if (!result.hints) result.hints = []; diff --git a/lib/compilers/cc65.ts b/lib/compilers/cc65.ts index fa4e2bcb3a0..0c6f4c09b92 100644 --- a/lib/compilers/cc65.ts +++ b/lib/compilers/cc65.ts @@ -29,6 +29,7 @@ import _ from 'underscore'; import {CompilationResult} from '../../types/compilation/compilation.interfaces'; import {ParseFiltersAndOutputOptions} from '../../types/features/filters.interfaces'; +import {ArtifactType} from '../../types/tool.interfaces'; import {BaseCompiler} from '../base-compiler'; import {CC65AsmParser} from '../parsers/asm-parser-cc65'; import * as utils from '../utils'; @@ -116,9 +117,7 @@ export class Cc65Compiler extends BaseCompiler { const dirPath = path.dirname(outputFilename); const nesFile = path.join(dirPath, 'example.nes'); if (await utils.fileExists(nesFile)) { - const file_buffer = await fs.readFile(nesFile); - const binary_base64 = file_buffer.toString('base64'); - result.jsnesrom = binary_base64; + await this.addArtifactToResult(res, nesFile, ArtifactType.nesrom); } return res; diff --git a/lib/compilers/llvm-mos.ts b/lib/compilers/llvm-mos.ts index af18a4dd77b..e1057ef70dd 100644 --- a/lib/compilers/llvm-mos.ts +++ b/lib/compilers/llvm-mos.ts @@ -24,11 +24,11 @@ import path from 'path'; -import fs from 'fs-extra'; import _ from 'underscore'; import {CompilationResult} from '../../types/compilation/compilation.interfaces'; import {ParseFiltersAndOutputOptions} from '../../types/features/filters.interfaces'; +import {ArtifactType} from '../../types/tool.interfaces'; import * as utils from '../utils'; import {ClangCompiler} from './clang'; @@ -89,9 +89,7 @@ export class LLVMMOSCompiler extends ClangCompiler { } if (await utils.fileExists(nesFile)) { - const file_buffer = await fs.readFile(nesFile); - const binary_base64 = file_buffer.toString('base64'); - result.jsnesrom = binary_base64; + await this.addArtifactToResult(res, nesFile, ArtifactType.nesrom); } } diff --git a/lib/compilers/z88dk.ts b/lib/compilers/z88dk.ts index ee388b9b95b..15f438d55cc 100644 --- a/lib/compilers/z88dk.ts +++ b/lib/compilers/z88dk.ts @@ -28,6 +28,7 @@ import fs from 'fs-extra'; import {ExecutionOptions} from '../../types/compilation/compilation.interfaces'; import {ParseFiltersAndOutputOptions} from '../../types/features/filters.interfaces'; +import {ArtifactType} from '../../types/tool.interfaces'; import {BaseCompiler} from '../base-compiler'; import {logger} from '../logger'; import {AsmParserZ88dk} from '../parsers/asm-parser-z88dk'; @@ -163,16 +164,12 @@ export class z88dkCompiler extends BaseCompiler { if (result.code === 0 && filters.binary) { const tapeFilepath = path.join(result.dirPath, this.getTapefilename()); if (await utils.fileExists(tapeFilepath)) { - const file_buffer = await fs.readFile(tapeFilepath); - const binary_base64 = file_buffer.toString('base64'); - result.speccytape = binary_base64; + await this.addArtifactToResult(result, tapeFilepath, ArtifactType.zxtape); } const smsFilepath = path.join(result.dirPath, this.getSmsfilename()); if (await utils.fileExists(smsFilepath)) { - const file_buffer = await fs.readFile(smsFilepath); - const binary_base64 = file_buffer.toString('base64'); - result.miraclesms = binary_base64; + await this.addArtifactToResult(result, smsFilepath, ArtifactType.smsrom); } } diff --git a/static/panes/compiler.ts b/static/panes/compiler.ts index d23ea4eb632..6cfb5cc4e56 100644 --- a/static/panes/compiler.ts +++ b/static/panes/compiler.ts @@ -63,7 +63,7 @@ import * as utils from '../utils'; import * as Sentry from '@sentry/browser'; import {editor} from 'monaco-editor'; import IEditorMouseEvent = editor.IEditorMouseEvent; -import {Tool} from '../../types/tool.interfaces'; +import {ArtifactType, Tool} from '../../types/tool.interfaces'; const toolIcons = require.context('../../views/resources/logos', false, /\.(png|svg)$/); @@ -1710,14 +1710,18 @@ export class Compiler extends MonacoPane