Merge pull request #4516 from backstage/blam/file-preparer-fix

Fix Scaffolder Prepare step when templates on disk
This commit is contained in:
Ben Lambert
2021-02-13 01:06:56 +01:00
committed by GitHub
4 changed files with 14 additions and 8 deletions
+6
View File
@@ -0,0 +1,6 @@
---
'@backstage/plugin-scaffolder-backend': patch
---
Fixed the `prepare` step for when using local templates that were added to the catalog using the `file:` target configuration.
No more `EPERM: operation not permitted` error messages.
@@ -28,7 +28,7 @@ describe('File preparer', () => {
const preparer = new FilePreparer();
const root = os.platform() === 'win32' ? 'C:\\' : '/';
const workspacePath = path.join(root, 'tmp');
const checkoutPath = path.resolve(workspacePath, 'checkout');
const targetPath = path.resolve(workspacePath, 'template');
await preparer.prepare({
url: `file:///${root}path/to/template`,
@@ -37,12 +37,12 @@ describe('File preparer', () => {
});
expect(fs.copy).toHaveBeenCalledWith(
path.join(root, 'path', 'to', 'template'),
checkoutPath,
targetPath,
{
recursive: true,
},
);
expect(fs.ensureDir).toHaveBeenCalledWith(checkoutPath);
expect(fs.ensureDir).toHaveBeenCalledWith(targetPath);
await expect(
preparer.prepare({
@@ -25,12 +25,12 @@ export class FilePreparer implements PreparerBase {
throw new InputError(`Wrong location protocol, should be 'file', ${url}`);
}
const checkoutDir = path.join(workspacePath, 'checkout');
await fs.ensureDir(checkoutDir);
const targetDir = path.join(workspacePath, 'template');
await fs.ensureDir(targetDir);
const templatePath = fileURLToPath(url);
await fs.copy(templatePath, checkoutDir, {
await fs.copy(templatePath, targetDir, {
recursive: true,
});
}
@@ -17,7 +17,7 @@
import { Config } from '@backstage/config';
import Docker from 'dockerode';
import express from 'express';
import { resolve as resolvePath } from 'path';
import { resolve as resolvePath, dirname } from 'path';
import Router from 'express-promise-router';
import { Logger } from 'winston';
import {
@@ -164,7 +164,7 @@ export async function createRouter(
const preparer = new FilePreparer();
const path = resolvePath(
templateEntityLocation,
dirname(templateEntityLocation),
template.spec.path || '.',
);