Skip to content
This repository was archived by the owner on Jul 19, 2021. It is now read-only.

Add --skipPrompts flag #453

Merged
merged 1 commit into from
Mar 23, 2018
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -27,20 +27,31 @@ describe('promptIfSettingsData()', () => {
});

test('prompts user if setting_data.json is not ignored in .env file and included in files to be uploaded', () => {
const promptIfSettingsData = require('../prompt-skip-settings-data');
const promptIfSettingsData = require('../skip-settings-data');
env.__setIgnoreValue('');
promptIfSettingsData(FILES);
expect(inquirer.prompt).toHaveBeenCalledTimes(1);
});

test('does not prompt if --skipPrompts flag is used', () => {
const promptIfSettingsData = require('../skip-settings-data');
process.argv.push('--skipPrompts');

promptIfSettingsData([]);
expect(inquirer.prompt).toHaveBeenCalledTimes(0);

process.argv.splice(process.argv.indexOf('--skipPrompts'), 1);
});

test('does not prompt if settings_data.json is not in the file list', () => {
const promptIfSettingsData = require('../prompt-skip-settings-data');
const promptIfSettingsData = require('../skip-settings-data');
env.__setIgnoreValue('');
promptIfSettingsData([]);
expect(inquirer.prompt).toHaveBeenCalledTimes(0);
});

test('does not prompt if setting_data.json is ignored in .env file', () => {
const promptIfSettingsData = require('../prompt-skip-settings-data');
const promptIfSettingsData = require('../skip-settings-data');
const globs = [
'/config/settings_data.json',
'config/settings_data.json',
Expand All @@ -61,7 +72,7 @@ describe('promptIfSettingsData()', () => {
const config = require('../slate-sync.config');
config.promptSettings = false;

const promptIfSettingsData = require('../prompt-skip-settings-data');
const promptIfSettingsData = require('../skip-settings-data');
promptIfSettingsData(FILES);
expect(inquirer.prompt).toHaveBeenCalledTimes(0);
});
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,15 @@ const https = require('https');
const slateEnv = require('@shopify/slate-env');
const {event} = require('@shopify/slate-analytics');
const figures = require('figures');
const {argv} = require('yargs');

const question = {
type: 'confirm',
name: 'continueWithDeploy',
message: 'You are about to deploy to the published theme. Continue?',
default: true,
prefix: chalk.yellow(`${figures.warning} `),
};

/**
* Fetch the main theme ID from Shopify
Expand Down Expand Up @@ -70,42 +79,23 @@ function fetchMainThemeId() {
* @param env String The environment to check against
* @return Promise Reason for abort or empty resolve
*/
function promptIfPublishedTheme(env) {
return new Promise((resolve, reject) => {
fetchMainThemeId()
.then(id => {
const themeId = slateEnv.getThemeIdValue();
// c.theme_id is live or equal to mainThemeId
if (themeId === 'live' || themeId === id.toString()) {
const question = {
type: 'confirm',
name: 'abortMainDeploy',
message:
'You are about to deploy to the published theme. Continue?',
default: false,
prefix: chalk.yellow(`${figures.warning} `),
};

console.log('');
inquirer.prompt([question]).then(answer => {
if (answer.abortMainDeploy) {
event('slate-tools:deploy:main-theme');
return resolve();
}

console.log(
chalk.red(
`\n${figures.cross} Aborting. You aborted the deploy.\n`
)
);
reject();
});
} else {
resolve();
}
})
.catch(reject);
});
}
module.exports = async function continueIfPublishedTheme(env) {
if (argv.skipPrompts) {
return question.default;
}

const publishedThemeId = await fetchMainThemeId();
const currentThemeId = slateEnv.getThemeIdValue();

if (
currentThemeId !== 'live' &&
currentThemeId !== publishedThemeId.toString()
) {
return question.default;
}

console.log();
const answer = await inquirer.prompt([question]);

module.exports = promptIfPublishedTheme;
return answer.continueWithDeploy;
};
38 changes: 11 additions & 27 deletions packages/slate-sync/index.js
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,8 @@ const figures = require('figures');
const themekit = require('@shopify/themekit').command;
const slateEnv = require('@shopify/slate-env');
const config = require('./slate-sync.config');
const promptSkipSettingsData = require('./prompt-skip-settings-data');
const skipSettingData = require('./skip-settings-data');
const continueIfPublished = require('./continue-if-published');

let deploying = false;
let filesToDeploy = [];
Expand Down Expand Up @@ -63,9 +64,11 @@ async function deploy(cmd = '', files = []) {

deploying = true;

const skipSettingsData = await promptSkipSettingsData(files);
if (!await continueIfPublished()) {
process.exit(0);
}

if (skipSettingsData) {
if (await skipSettingData(files)) {
files = files.filter(file => !file.endsWith('settings_data.json'));
}

Expand Down Expand Up @@ -129,36 +132,17 @@ function promiseThemekitDeploy(cmd, files) {
}

module.exports = {
sync(files = []) {
async sync(files = []) {
if (!files.length) {
return Promise.reject('No files to deploy.');
}

return new Promise((resolve, reject) => {
// remove duplicate
filesToDeploy = [...new Set([...filesToDeploy, ...files])];
filesToDeploy = [...new Set([...filesToDeploy, ...files])];

maybeDeploy()
.then(resolve)
.catch(reject);
});
return maybeDeploy();
},

overwrite(env) {
return new Promise((resolve, reject) => {
const message = `\nEnvironment is ${slateEnv.getEnvNameValue()}. Go ahead with "replace" ?`;

prompt(message, false).then(isYes => {
if (isYes) {
deploy('replace')
.then(resolve)
.catch(reject);
} else {
reject('Aborting. You aborted the deploy.');
}
});
});
async overwrite(env) {
return deploy('replace');
},
};

module.exports.promptIfPublishedTheme = require('./prompt-if-published-theme');
6 changes: 3 additions & 3 deletions packages/slate-sync/package.json
Original file line number Diff line number Diff line change
@@ -1,8 +1,7 @@
{
"name": "@shopify/slate-sync",
"version": "1.0.0-alpha.24",
"description":
"Slate's Shopify API client which handles all theme development requests",
"description": "Slate's Shopify API client which handles all theme development requests",
"repository": "https://github.com/Shopify/slate/tree/1.x/packages/slate-sync",
"license": "MIT",
"main": "index.js",
Expand All @@ -22,6 +21,7 @@
"inquirer": "^5.0.1",
"jest": "20.0.3",
"minimatch": "^3.0.4",
"react-dev-utils": "0.5.2"
"react-dev-utils": "0.5.2",
"yargs": "^11.0.0"
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -5,25 +5,46 @@ const {event} = require('@shopify/slate-analytics');
const figures = require('figures');
const flatten = require('array-flatten');
const minimatch = require('minimatch');
const {argv} = require('yargs');

const config = require('./slate-sync.config');

const question = {
type: 'confirm',
name: 'ignoreSettingsData',
message: ' Skip uploading settings_data.json?',
default: true,
default: false,
};

function _includesSettingsData(files) {
const settingsData = files.filter(file =>
file.endsWith('settings_data.json'),
);
return settingsData.length > 0;
}

function _filterIgnoredFiles(files) {
const envIgnoreGlobs = getIgnoreFilesValue().split(':');
return flatten(
envIgnoreGlobs.map(glob => {
if (glob[0] !== '/') {
glob = `/${glob}`;
}
return files.filter(minimatch.filter(glob));
}),
);
}

module.exports = async function(files) {
const ignoredFiles = _filterIgnoredFiles(files);

if (
_includesSettingsData(ignoredFiles) ||
!_includesSettingsData(files) ||
!config.promptSettings
!config.promptSettings ||
argv.skipPrompts
) {
return Promise.resolve(false);
return Promise.resolve(question.default);
}

console.log(
Expand Down Expand Up @@ -52,22 +73,3 @@ module.exports = async function(files) {

return answer.ignoreSettingsData;
};

function _includesSettingsData(files) {
const settingsData = files.filter(file =>
file.endsWith('settings_data.json'),
);
return settingsData.length > 0;
}

function _filterIgnoredFiles(files) {
const envIgnoreGlobs = getIgnoreFilesValue().split(':');
return flatten(
envIgnoreGlobs.map(glob => {
if (glob[0] !== '/') {
glob = `/${glob}`;
}
return files.filter(minimatch.filter(glob));
}),
);
}
3 changes: 1 addition & 2 deletions packages/slate-tools/cli/commands/start.js
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@ const openBrowser = require('react-dev-utils/openBrowser');
const clearConsole = require('react-dev-utils/clearConsole');
const formatWebpackMessages = require('react-dev-utils/formatWebpackMessages');
const {event} = require('@shopify/slate-analytics');
const {sync, promptIfPublishedTheme} = require('@shopify/slate-sync');
const {sync} = require('@shopify/slate-sync');
const slateEnv = require('@shopify/slate-env');

const config = require('../../slate-tools.config');
Expand Down Expand Up @@ -204,7 +204,6 @@ compiler.plugin('done', async stats => {
console.log(chalk.magenta('\nWatching for changes...'));
} else {
if (isFirstDeploy) {
await promptIfPublishedTheme().catch(() => process.exit(0));
isFirstDeploy = false;
}

Expand Down