Fix/variation versioning (#5406)

* Adjusted variation script to keep existing version when running
* Removed unused 'template-mods' feature of variations
* Added option to git add changes while building variations
* Added the building of variations to deployment process
This commit is contained in:
Jason Crist 2022-01-31 11:37:12 -05:00 committed by GitHub
parent b3bac24033
commit 2c8be5f238
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
3 changed files with 50 additions and 35 deletions

View file

@ -107,6 +107,30 @@ async function pushButtonDeploy(repoType) {
await cleanSandboxSvn();
}
//build variations
console.log('Building Variations');
await executeCommand(`node ./variations/build-variations.mjs git-add-changes`)
prompt = await inquirer.prompt([{
type: 'confirm',
message: 'Are you good with any staged theme variations changes? Make any manual adjustments now if necessary.',
name: "continue",
default: false
}]);
if(!prompt.continue){
console.log(`Aborted Automated Deploy Process at variations building.` );
return;
}
try {
await executeCommand(`
git commit -m "Building Variations"
`);
} catch (err) {
// Most likely the error is that there are no variation changes to commit.
// Just swallowing that error for now
}
let hash = await getLastDeployedHash();
let diffUrl;
@ -378,7 +402,6 @@ async function versionBumpThemes() {
//version bump the root project if there were changes to any of the themes
let rootHasVersionBump = await checkProjectForVersionBump(hash);
console.log('root check', rootHasVersionBump, versionBumpCount, changesWereMade);
if ( versionBumpCount > 0 && ! rootHasVersionBump ) {
await executeCommand(`npm version patch --no-git-tag-version && git add package.json package-lock.json`);
changesWereMade = true;
@ -387,7 +410,7 @@ async function versionBumpThemes() {
return changesWereMade;
}
function getThemeMetadata(styleCss, attribute) {
export function getThemeMetadata(styleCss, attribute) {
if ( !styleCss || !attribute ) {
return null;
}
@ -829,7 +852,7 @@ EOF`, logResponse);
/*
Execute a command locally.
*/
async function executeCommand(command, logResponse) {
export async function executeCommand(command, logResponse) {
return new Promise((resolove, reject) => {
let child;

View file

@ -3,18 +3,21 @@ import fsorig from 'fs';
import deepmerge from 'deepmerge';
import { dirname } from 'path';
import { fileURLToPath } from 'url';
import { executeCommand, getThemeMetadata } from '../theme-utils.mjs';
const localpath = dirname( fileURLToPath( import.meta.url ) );
const args = process.argv.slice(2);
(async function start() {
let args = process.argv.slice(2);
async function start() {
let source = args?.[0];
let variation = args?.[1];
if ( source && variation ) {
return await buildVariation(source, variation);
}
return await buildAllVariations();
})();
}
start();
async function buildAllVariations(){
for (let source of getDirectories( localpath )){
@ -32,8 +35,16 @@ async function buildVariation(source, variation) {
console.log( `Copying the source ${source} to the variation ${variation}` );
try {
// First grab the existing version if the variation exists already
let variationExists = fs.existsSync(`${destDir}/style.css`);
let currentVersion = null;
// First empty the old directory.
if( variationExists ) {
let styleCss = fs.readFileSync(`${destDir}/style.css`, 'utf8');
currentVersion = getThemeMetadata(styleCss, 'Version');
}
// then empty the old directory.
await fs.emptyDir( destDir );
// Then copy the source directory.
@ -42,7 +53,6 @@ async function buildVariation(source, variation) {
// remove unneeded resources
await fs.remove( destDir + '/sass');
await fs.remove( destDir + '/node_modules' );
await fs.remove( destDir + '/template-mods.json');
await fs.remove( destDir + '/package.json');
await fs.remove( destDir + '/package-lock.json');
@ -52,16 +62,6 @@ async function buildVariation(source, variation) {
// copy the readme
await fs.copy( localpath + '/variation-readme.md', destDir + '/variation-readme.md' );
// make template modifications
const hasMods = fs.existsSync( `${srcVariationDir}/template-mods.json`);
if(hasMods) {
const srcModsFile = await fs.readFile( `${srcVariationDir}/template-mods.json`, 'utf8' );
const modsJson = JSON.parse( srcModsFile );
modsJson.forEach(mod => {
modifyTemplates(mod.from, mod.to, destDir + '/block-templates');
});
}
// merge the theme.json files
const srcJsonFile = await fs.readFile( srcDir + '/theme.json', 'utf8' );
const srcVariationJsonFile = await fs.readFile( srcVariationDir + '/theme.json', 'utf8' )
@ -72,6 +72,15 @@ async function buildVariation(source, variation) {
});
await fs.writeFile ( destDir + '/theme.json', JSON.stringify( mergedJson, null, '\t' ), 'utf8' );
// replace the with current version
if ( currentVersion != null ) {
await executeCommand(`perl -pi -e 's/Version: (.*)$/"Version: '${currentVersion}'"/ge' ${destDir}/style.css`);
}
if ( args[0] == 'git-add-changes') {
await executeCommand(`git add ${destDir}`, true);
}
console.log('Finished sucessfully.\n\n');
}
catch (err){

View file

@ -24,20 +24,3 @@ For a variation in that folder `/variations/geologist/geologist-banana`
* Lastly the theme.json files in `/geologist` and `/variations/geologist/geologist-banana` will be merged.
Any resource in the /variations folder will replace the resources in the source theme (with the exception of theme.json);
### Template Mods
A variation can have a `template-mods.json` file that lists strings in the templates to replace. The use-case this mechanism was build
for was so that the variation theme could have a different header by defining that in one place. There are plenty of gaps in this
implementation but should cover the basic use-cases we need.
The format for this file is:
```
[
{
"from": "STRING TO REPLACE",
"to": "STRING TO BE USED AS REPLACEMENT"
}
]
```