Skip to content

Commit

Permalink
fix(cli): add migration for page import/export
Browse files Browse the repository at this point in the history
  • Loading branch information
Pavel910 committed Nov 3, 2021
1 parent 112830f commit 0bc1e4e
Show file tree
Hide file tree
Showing 3 changed files with 116 additions and 25 deletions.
1 change: 1 addition & 0 deletions packages/cli/commands/upgrade/upgrades/5.17.0/index.js
Expand Up @@ -68,6 +68,7 @@ module.exports = {
*/
info("Starting with security upgrade.");
security.upgradeGraphQLIndex(project, context);
security.upgradePageImportExport(project, context);
security.upgradeHeadlessCMSIndex(project, context);
security.upgradeAdminComponents(project, context);
security.upgradeAdminPlugins(project, context);
Expand Down
82 changes: 81 additions & 1 deletion packages/cli/commands/upgrade/upgrades/5.17.0/security.js
Expand Up @@ -15,6 +15,8 @@ const {
const paths = {
apiGraphQL: "api/code/graphql",
apiHeadlessCms: "api/code/headlessCMS",
apiPageBuilderExport: "api/code/pageBuilder/exportPages",
apiPageBuilderImport: "api/code/pageBuilder/importPages",
appsAdminCode: "apps/admin/code"
};

Expand All @@ -24,7 +26,15 @@ const files = {
appAdminPluginsIndex: `${paths.appsAdminCode}/src/plugins/index.ts`,
appAdminPluginsSecurity: `${paths.appsAdminCode}/src/plugins/security.ts`,
appAdminApp: `${paths.appsAdminCode}/src/App.tsx`,
appAdminWebinyConfig: `${paths.appsAdminCode}/webiny.config.ts`
appAdminWebinyConfig: `${paths.appsAdminCode}/webiny.config.ts`,
apiPageImportCreateIndex: `${paths.apiPageBuilderImport}/create/src/index.ts`,
apiPageImportCreateSecurity: `${paths.apiPageBuilderImport}/create/src/security.ts`,
apiPageImportProcessIndex: `${paths.apiPageBuilderImport}/process/src/index.ts`,
apiPageImportProcessSecurity: `${paths.apiPageBuilderImport}/process/src/security.ts`,
apiPageExportCombineIndex: `${paths.apiPageBuilderExport}/combine/src/index.ts`,
apiPageExportCombineSecurity: `${paths.apiPageBuilderExport}/combine/src/security.ts`,
apiPageExportProcessIndex: `${paths.apiPageBuilderExport}/process/src/index.ts`,
apiPageExportProcessSecurity: `${paths.apiPageBuilderExport}/process/src/security.ts`
};

/**
Expand Down Expand Up @@ -183,6 +193,75 @@ const upgradeHeadlessCMSIndex = (project, context) => {
);
};

/**
* @param project {tsMorph.Project}
* @param context {CliContext}
*/
const upgradePageImportExport = (project, context) => {
const { info } = context;
info(`Upgrading api/code/pageBuilder`);

/**
* Just copy new index.ts and security.ts files.
*/
const copyFileTargets = [
{
source: `node_modules/@webiny/cwp-template-aws/template/ddb-es/${paths.apiPageBuilderImport}/create/src/index.ts`,
destination: `${paths.apiPageBuilderImport}/create/src/index.ts`
},
{
source: `node_modules/@webiny/cwp-template-aws/template/ddb-es/${paths.apiPageBuilderImport}/create/src/security.ts`,
destination: `${paths.apiPageBuilderImport}/create/src/security.ts`
},
{
source: `node_modules/@webiny/cwp-template-aws/template/ddb-es/${paths.apiPageBuilderImport}/process/src/index.ts`,
destination: `${paths.apiPageBuilderImport}/process/src/index.ts`
},
{
source: `node_modules/@webiny/cwp-template-aws/template/ddb-es/${paths.apiPageBuilderImport}/process/src/security.ts`,
destination: `${paths.apiPageBuilderImport}/process/src/security.ts`
},
{
source: `node_modules/@webiny/cwp-template-aws/template/ddb-es/${paths.apiPageBuilderExport}/combine/src/index.ts`,
destination: `${paths.apiPageBuilderExport}/combine/src/index.ts`
},
{
source: `node_modules/@webiny/cwp-template-aws/template/ddb-es/${paths.apiPageBuilderExport}/combine/src/security.ts`,
destination: `${paths.apiPageBuilderExport}/combine/src/security.ts`
},
{
source: `node_modules/@webiny/cwp-template-aws/template/ddb-es/${paths.apiPageBuilderExport}/process/src/index.ts`,
destination: `${paths.apiPageBuilderExport}/process/src/index.ts`
},
{
source: `node_modules/@webiny/cwp-template-aws/template/ddb-es/${paths.apiPageBuilderExport}/process/src/security.ts`,
destination: `${paths.apiPageBuilderExport}/process/src/security.ts`
}
];
copyFiles(context, copyFileTargets, false);
/**
* API GraphQL package.json
*/
const packages = {
/**
* To be added
*/
"@webiny/api-tenancy-so-ddb": context.version,
"@webiny/api-security-so-ddb": context.version,
/**
* To be removed
*/
"@webiny/api-security-admin-users": null,
"@webiny/api-security-admin-users-cognito": null,
"@webiny/api-security-admin-users-so-ddb": null,
"@webiny/api-security-cognito-authentication": null
};
addPackagesToDependencies(context, `${paths.apiPageBuilderExport}/combine`, packages);
addPackagesToDependencies(context, `${paths.apiPageBuilderExport}/process`, packages);
addPackagesToDependencies(context, `${paths.apiPageBuilderImport}/create`, packages);
addPackagesToDependencies(context, `${paths.apiPageBuilderImport}/process`, packages);
};

/**
* @param project {tsMorph.Project}
* @param context {CliContext}
Expand Down Expand Up @@ -449,6 +528,7 @@ module.exports = {
files,
upgradeGraphQLIndex,
upgradeHeadlessCMSIndex,
upgradePageImportExport,
upgradeAdminComponents,
upgradeAdminPlugins,
upgradeAdminSecurity,
Expand Down
58 changes: 34 additions & 24 deletions packages/cli/commands/upgrade/upgrades/fileUtils.js
Expand Up @@ -35,8 +35,9 @@ const createFullFile = file => {
*
* @param context {CliContext}
* @param initialTargets {{source: string, destination: string}[]}
* @param createBackup: {boolean}
*/
const copyFiles = (context, initialTargets) => {
const copyFiles = (context, initialTargets, createBackup = true) => {
context.info("Copying files...");
/**
* First check if source and target files exist and create a backup file name.
Expand All @@ -48,12 +49,14 @@ const copyFiles = (context, initialTargets) => {
* No need to check target.destination because it might not exist.
*/
checkFiles([target.source]);
let backup;
try {
backup = createBackupFileName(target.destination);
} catch (ex) {
context.error(ex.message);
process.exit(1);
let backup = false;
if (createBackup) {
try {
backup = createBackupFileName(target.destination);
} catch (ex) {
context.error(ex.message);
process.exit(1);
}
}

targets.push({
Expand All @@ -67,24 +70,28 @@ const copyFiles = (context, initialTargets) => {
* - make backups of the targets files
* - copy new files to their destinations
*/
const backups = [];
context.info("Creating backups...");
for (const target of targets) {
const destination = createFullFile(target.destination);
if (!fs.existsSync(destination)) {
continue;
}
try {
fs.copyFileSync(destination, createFullFile(target.backup));
context.info(`Backed up "${target.destination}" to "${target.backup}".`);
backups.push(target.backup);
} catch (ex) {
context.error(`Could not create backup "${target.destination}" to "${target.backup}".`);
for (const backup of backups) {
context.info(`Removing created backup "${backup}".`);
fs.unlinkSync(createFullFile(backup));
if (createBackup) {
const backups = [];
context.info("Creating backups...");
for (const target of targets) {
const destination = createFullFile(target.destination);
if (!fs.existsSync(destination)) {
continue;
}
try {
fs.copyFileSync(destination, createFullFile(target.backup));
context.info(`Backed up "${target.destination}" to "${target.backup}".`);
backups.push(target.backup);
} catch (ex) {
context.error(
`Could not create backup "${target.destination}" to "${target.backup}".`
);
for (const backup of backups) {
context.info(`Removing created backup "${backup}".`);
fs.unlinkSync(createFullFile(backup));
}
process.exit(1);
}
process.exit(1);
}
}

Expand All @@ -101,6 +108,9 @@ const copyFiles = (context, initialTargets) => {
} catch (ex) {
context.error(`Could not copy new file "${target.source}" to "${target.destination}".`);
for (const file of files) {
if (!file.backup) {
continue;
}
context.info(`Restoring backup file "${file.backup}" to "${file.destination}".`);
fs.copyFileSync(createFullFile(file.backup), createFullFile(file.destination));
fs.unlinkSync(createFullFile(file.backup));
Expand Down

0 comments on commit 0bc1e4e

Please sign in to comment.