Skip to content

Commit

Permalink
undock: run
Browse files Browse the repository at this point in the history
Signed-off-by: CrazyMax <[email protected]>
  • Loading branch information
crazy-max committed Oct 29, 2024
1 parent 735c66b commit 3e2bc52
Show file tree
Hide file tree
Showing 2 changed files with 76 additions and 4 deletions.
21 changes: 21 additions & 0 deletions __tests__/undock/undock.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -14,12 +14,33 @@
* limitations under the License.
*/

import fs from 'fs';
import os from 'os';
import path from 'path';
import {describe, expect, it, jest, test} from '@jest/globals';
import * as semver from 'semver';

import {Exec} from '../../src/exec';
import {Undock} from '../../src/undock/undock';

const tmpDir = fs.mkdtempSync(path.join(process.env.TEMP || os.tmpdir(), 'undock-undock-'));

describe('run', () => {
it('extracts moby/moby-bin:26.1.5', async () => {
const undock = new Undock();
await expect(
(async () => {
// prettier-ignore
await undock.run({
source: 'moby/moby-bin:26.1.5',
dist: tmpDir,
all: true
});
})()
).resolves.not.toThrow();
});
});

describe('isAvailable', () => {
it('checks undock is available', async () => {
const execSpy = jest.spyOn(Exec, 'getExecOutput');
Expand Down
59 changes: 55 additions & 4 deletions src/undock/undock.ts
Original file line number Diff line number Diff line change
Expand Up @@ -14,8 +14,6 @@
* limitations under the License.
*/

import os from 'os';
import path from 'path';
import * as core from '@actions/core';
import * as semver from 'semver';

Expand All @@ -25,6 +23,20 @@ export interface UndockOpts {
binPath?: string;
}

export interface UndockRunOpts {
source: string;
dist: string;
logLevel?: string;
logCaller?: boolean;
cacheDir?: string;
platform?: string;
all?: boolean;
include?: Array<string>;
insecure?: boolean;
rmDist?: boolean;
wrap?: boolean;
}

export class Undock {
private readonly binPath: string;
private _version: string;
Expand All @@ -36,8 +48,47 @@ export class Undock {
this._versionOnce = false;
}

static get cacheDir(): string {
return process.env.UNDOCK_CACHE_DIR || path.join(os.homedir(), '.local', 'share', 'undock', 'cache');
public async run(opts: UndockRunOpts): Promise<void> {
if (!opts.source) {
throw new Error('source is required');
}
if (!opts.dist) {
throw new Error('dist is required');
}
const args: Array<string> = [];
if (opts.logLevel) {
args.push(`--log-level=${opts.logLevel}`);
}
if (opts.logCaller) {
args.push('--log-caller');
}
if (opts.cacheDir) {
args.push(`--cachedir=${opts.cacheDir}`);
}
if (opts.platform) {
args.push(`--platform=${opts.platform}`);
}
if (opts.all) {
args.push('--all');
}
if (opts.include) {
opts.include.forEach(i => {
args.push(`--include=${i}`);
});
}
if (opts.insecure) {
args.push('--insecure');
}
if (opts.rmDist) {
args.push('--rm-dist');
}
if (opts.wrap) {
args.push('--wrap');
}
args.push(opts.source, opts.dist);
await Exec.exec(this.binPath, args, {
failOnStdErr: false
});
}

public async isAvailable(): Promise<boolean> {
Expand Down

0 comments on commit 3e2bc52

Please sign in to comment.