• Home
  • Features
  • Pricing
  • Docs
  • Announcements
  • Sign In

alibaba / pipcook / 4088643824

pending completion
4088643824

Pull #951

github

GitHub
Merge 3588a38ba into c1acf7dc8
Pull Request #951: build(deps): bump http-cache-semantics from 4.1.0 to 4.1.1 in /packages/cli

436 of 530 branches covered (82.26%)

Branch coverage included in aggregate %.

692 of 736 relevant lines covered (94.02%)

4.81 hits per line

Source File
Press 'n' to go to next uncovered line, 'b' for previous

81.54
/packages/cli/src/utils/script.ts
1
import {
9✔
2
  PipelineMeta,
3
  ScriptConfig,
4
  ScriptType,
5
  PipcookScript
6
} from '@pipcook/costa';
7
import * as constants from '../constants';
9✔
8
import * as fs from 'fs-extra';
9✔
9
import * as path from 'path';
9✔
10
import { parse } from 'url';
9✔
11
import { fetchWithCache } from './cache';
9✔
12
import * as queryString from 'query-string';
9✔
13
import { DownloadProtocol } from './';
9✔
14

15
export const downloadScript = async (scriptDir: string, scriptOrder: number, url: string, type: ScriptType, enableCache: boolean, devMode: boolean): Promise<PipcookScript> => {
9✔
16
  const urlObj = parse(url);
7✔
17
  const baseName = path.parse(urlObj.pathname).base;
7✔
18
  let localPath = path.join(scriptDir, `${scriptOrder}-${baseName}`);
7✔
19
  const query = queryString.parse(urlObj.query);
7✔
20
  // if the url is is file protocol, import it directly in development mode or copy it in normal mode.
21
  if (urlObj.protocol === DownloadProtocol.FILE || urlObj.protocol === null) {
7✔
22
    if (path.isAbsolute(urlObj.pathname)) {
5✔
23
      if (devMode) {
4✔
24
        localPath = urlObj.pathname;
2✔
25
      } else {
26
        await fs.copy(urlObj.pathname, localPath);
2✔
27
      }
28
    } else {
29
      if (devMode) {
1!
30
        localPath = path.join(process.cwd(), urlObj.pathname);
×
31
      } else {
32
        await fs.copy(path.join(process.cwd(), urlObj.pathname), localPath);
1✔
33
      }
34
    }
35
  } else {
36
    if (urlObj.protocol === DownloadProtocol.HTTP || urlObj.protocol === DownloadProtocol.HTTPS) {
2!
37
      // maybe should copy the script with COW
38
      await fetchWithCache(constants.PIPCOOK_SCRIPT_PATH, url, localPath, enableCache, true);
2✔
39
    } else {
40
      throw new TypeError(`unsupported protocol ${urlObj.protocol}`);
×
41
    }
42
  }
43
  return {
7✔
44
    name: baseName,
45
    path: localPath,
46
    type,
47
    query
48
  };
49
};
50

51
export const prepareScript = async (pipelineMeta: PipelineMeta, scriptDir: string, enableCache = true, devMode = false): Promise<ScriptConfig> => {
9!
52
  const scripts: ScriptConfig = {
2✔
53
    datasource: null,
54
    dataflow: null,
55
    model: null
56
  };
57
  let scriptOrder = 0;
2✔
58
  scripts.datasource
2✔
59
    = await downloadScript(scriptDir, scriptOrder, pipelineMeta.datasource, ScriptType.DataSource, enableCache, devMode);
60
  scriptOrder++;
2✔
61
  if (Array.isArray(pipelineMeta.dataflow) && pipelineMeta.dataflow.length > 0) {
2✔
62
    scripts.dataflow = [];
1✔
63
    for (const dataflowUri of pipelineMeta.dataflow) {
1✔
64
      scripts.dataflow.push(await downloadScript(scriptDir, scriptOrder, dataflowUri, ScriptType.Dataflow, enableCache, devMode));
1✔
65
      scriptOrder++;
1✔
66
    }
67
  }
68
  scripts.model = await downloadScript(scriptDir, scriptOrder, pipelineMeta.model, ScriptType.Model, enableCache, devMode);
2✔
69
  return scripts;
2✔
70
};
71

72
export const linkCoreToScript = async (scriptModulePath: string): Promise<void> => {
9✔
73
  const coreTargetPath = path.join(scriptModulePath, '@pipcook/core');
×
74
  await fs.remove(path.join(coreTargetPath));
×
75
  const coreScriptPath = require.resolve('@pipcook/core');
×
76
  const coreDir = path.join('/core/');
×
77
  const coreSourcePath = coreScriptPath.substr(0, coreScriptPath.lastIndexOf(coreDir) + coreDir.length - 1);
×
78
  await fs.mkdirp(path.join(scriptModulePath, '@pipcook'));
×
79
  await fs.symlink(coreSourcePath, coreTargetPath);
×
80
};
STATUS · Troubleshooting · Open an Issue · Sales · Support · CAREERS · ENTERPRISE · START FREE · SCHEDULE DEMO
ANNOUNCEMENTS · TWITTER · TOS & SLA · Supported CI Services · What's a CI service? · Automated Testing

© 2025 Coveralls, Inc