Add script for deploying demos (#4551)

This commit is contained in:
Monica Kozbial
2021-01-05 11:08:29 -08:00
committed by GitHub
parent 10a489171e
commit 77884550a5
3 changed files with 88 additions and 0 deletions

View File

@@ -16,8 +16,10 @@ var buildTasks = require('./scripts/gulpfiles/build_tasks');
var packageTasks = require('./scripts/gulpfiles/package_tasks');
var gitTasks = require('./scripts/gulpfiles/git_tasks');
var licenseTasks = require('./scripts/gulpfiles/license_tasks');
var appengineTasks = require('./scripts/gulpfiles/appengine_tasks');
module.exports = {
deployDemos: appengineTasks.deployDemos,
default: buildTasks.build,
build: buildTasks.build,
buildCore: buildTasks.core,

View File

@@ -29,6 +29,7 @@
"build:langfiles": "gulp buildLangfiles",
"build:uncompressed": "gulp buildUncompressed",
"bump": "npm --no-git-tag-version version 4.$(date +'%Y%m%d').0",
"deployDemos": "gulp deployDemos",
"license": "gulp checkLicenses",
"lint": "eslint .",
"package": "gulp package",

View File

@@ -0,0 +1,85 @@
/**
* @license
* Copyright 2020 Google LLC
* SPDX-License-Identifier: Apache-2.0
*/
/**
* @fileoverview Gulp script to deploy Blockly demos on appengine.
*/
var gulp = require('gulp');
var fs = require('fs');
var rimraf = require('rimraf');
var execSync = require('child_process').execSync;
var packageJson = require('../../package.json');
const demoTmpDir = '../_deploy';
const demoStaticTmpDir = '../_deploy/static';
/**
* Cleans and creates the tmp directory used for deploying.
*/
function prepareDeployDir(done) {
// Clean directory if exists.
if (fs.existsSync(demoTmpDir)) {
rimraf.sync(demoTmpDir);
}
fs.mkdirSync(demoStaticTmpDir, { recursive: true });
done()
}
/**
* Copies all files into static deploy directory except for those under
* appengine.
*/
function copyStaticSrc(done) {
execSync(`git archive HEAD | tar -x -C ${demoStaticTmpDir}`,
{ stdio: 'inherit' });
done()
}
/**
* Copies appengine files into deploy directory.
*/
function copyAppengineSrc() {
return gulp.src(['appengine/**/*', 'appengine/.gcloudignore',])
.pipe(gulp.dest(demoTmpDir));
}
/**
* Deploys files from tmp directory to appengine to the minor version defined in
* package.json and then cleans the tmp directory.
*/
function deployAndClean(done) {
const minorVersion = packageJson.version.split('.')[1];
const patchVersion = packageJson.version.split('.')[2];
let demoVersion = minorVersion;
if (patchVersion != 0) {
demoVersion += '-' + patchVersion
}
try {
execSync(`gcloud app deploy --project blockly-demo --version ${demoVersion} --no-promote`, { stdio: 'inherit', cwd: demoTmpDir });
} finally {
// Clean up tmp directory.
if (fs.existsSync(demoTmpDir)) {
rimraf.sync(demoTmpDir);
}
}
done();
}
/**
* Deploys demos.
*/
const deployDemos = gulp.series(
prepareDeployDir,
gulp.parallel(copyStaticSrc, copyAppengineSrc),
deployAndClean
);
module.exports = {
deployDemos: deployDemos,
}