2020-09-23 13:20:12 +00:00
|
|
|
/* eslint-disable */
|
|
|
|
|
|
|
|
require("colors");
|
|
|
|
|
|
|
|
const gulp = require("gulp");
|
|
|
|
const browserSync = require("browser-sync").create({});
|
|
|
|
const path = require("path");
|
|
|
|
const deleteEmpty = require("delete-empty");
|
|
|
|
const execSync = require("child_process").execSync;
|
|
|
|
|
|
|
|
// Load other plugins dynamically
|
|
|
|
const $ = require("gulp-load-plugins")({
|
|
|
|
scope: ["devDependencies"],
|
|
|
|
pattern: "*",
|
|
|
|
});
|
|
|
|
|
|
|
|
// Check environment variables
|
|
|
|
|
|
|
|
const envVars = [
|
|
|
|
"SHAPEZ_CLI_SERVER_HOST",
|
|
|
|
// "SHAPEZ_CLI_PHONEGAP_KEY",
|
|
|
|
"SHAPEZ_CLI_ALPHA_FTP_USER",
|
|
|
|
"SHAPEZ_CLI_ALPHA_FTP_PW",
|
|
|
|
"SHAPEZ_CLI_STAGING_FTP_USER",
|
|
|
|
"SHAPEZ_CLI_STAGING_FTP_PW",
|
|
|
|
"SHAPEZ_CLI_LIVE_FTP_USER",
|
|
|
|
"SHAPEZ_CLI_LIVE_FTP_PW",
|
2020-09-27 21:14:43 +00:00
|
|
|
"SHAPEZ_CLI_APPLE_ID",
|
|
|
|
"SHAPEZ_CLI_APPLE_CERT_NAME",
|
2020-10-01 08:20:47 +00:00
|
|
|
"SHAPEZ_CLI_GITHUB_USER",
|
|
|
|
"SHAPEZ_CLI_GITHUB_TOKEN",
|
2020-09-23 13:20:12 +00:00
|
|
|
];
|
|
|
|
|
|
|
|
for (let i = 0; i < envVars.length; ++i) {
|
|
|
|
if (!process.env[envVars[i]]) {
|
|
|
|
console.warn("Please set", envVars[i]);
|
|
|
|
// process.exit(1);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
const baseDir = path.join(__dirname, "..");
|
|
|
|
const buildFolder = path.join(baseDir, "build");
|
|
|
|
|
|
|
|
const imgres = require("./image-resources");
|
|
|
|
imgres.gulptasksImageResources($, gulp, buildFolder);
|
|
|
|
|
|
|
|
const css = require("./css");
|
|
|
|
css.gulptasksCSS($, gulp, buildFolder, browserSync);
|
|
|
|
|
|
|
|
const sounds = require("./sounds");
|
|
|
|
sounds.gulptasksSounds($, gulp, buildFolder);
|
|
|
|
|
|
|
|
const js = require("./js");
|
|
|
|
js.gulptasksJS($, gulp, buildFolder, browserSync);
|
|
|
|
|
|
|
|
const html = require("./html");
|
|
|
|
html.gulptasksHTML($, gulp, buildFolder, browserSync);
|
|
|
|
|
|
|
|
const ftp = require("./ftp");
|
|
|
|
ftp.gulptasksFTP($, gulp, buildFolder);
|
|
|
|
|
|
|
|
const docs = require("./docs");
|
|
|
|
docs.gulptasksDocs($, gulp, buildFolder);
|
|
|
|
|
|
|
|
const standalone = require("./standalone");
|
|
|
|
standalone.gulptasksStandalone($, gulp, buildFolder);
|
|
|
|
|
2020-10-01 08:20:47 +00:00
|
|
|
const releaseUploader = require("./release-uploader");
|
|
|
|
releaseUploader.gulptasksReleaseUploader($, gulp, buildFolder);
|
|
|
|
|
2020-09-23 13:20:12 +00:00
|
|
|
const translations = require("./translations");
|
|
|
|
translations.gulptasksTranslations($, gulp, buildFolder);
|
|
|
|
|
|
|
|
///////////////////// BUILD TASKS /////////////////////
|
|
|
|
|
|
|
|
// Cleans up everything
|
|
|
|
gulp.task("utils.cleanBuildFolder", () => {
|
|
|
|
return gulp.src(buildFolder, { read: false, allowEmpty: true }).pipe($.clean({ force: true }));
|
|
|
|
});
|
|
|
|
gulp.task("utils.cleanBuildTempFolder", () => {
|
|
|
|
return gulp
|
|
|
|
.src(path.join(__dirname, "..", "src", "js", "built-temp"), { read: false, allowEmpty: true })
|
|
|
|
.pipe($.clean({ force: true }));
|
|
|
|
});
|
2020-10-06 15:25:58 +00:00
|
|
|
gulp.task("utils.cleanImageBuildFolder", () => {
|
|
|
|
return gulp
|
|
|
|
.src(path.join(__dirname, "res_built"), { read: false, allowEmpty: true })
|
|
|
|
.pipe($.clean({ force: true }));
|
|
|
|
});
|
2020-09-23 13:20:12 +00:00
|
|
|
|
2020-10-06 15:25:58 +00:00
|
|
|
gulp.task(
|
|
|
|
"utils.cleanup",
|
|
|
|
gulp.series("utils.cleanBuildFolder", "utils.cleanImageBuildFolder", "utils.cleanBuildTempFolder")
|
|
|
|
);
|
2020-09-23 13:20:12 +00:00
|
|
|
|
|
|
|
// Requires no uncomitted files
|
|
|
|
gulp.task("utils.requireCleanWorkingTree", cb => {
|
|
|
|
let output = $.trim(execSync("git status -su").toString("ascii")).replace(/\r/gi, "").split("\n");
|
|
|
|
|
|
|
|
// Filter files which are OK to be untracked
|
|
|
|
output = output
|
|
|
|
.map(x => x.replace(/[\r\n]+/gi, ""))
|
|
|
|
.filter(x => x.indexOf(".local.js") < 0)
|
|
|
|
.filter(x => x.length > 0);
|
|
|
|
if (output.length > 0) {
|
|
|
|
console.error("\n\nYou have unstaged changes, please commit everything first!");
|
|
|
|
console.error("Unstaged files:");
|
|
|
|
console.error(output.map(x => "'" + x + "'").join("\n"));
|
|
|
|
process.exit(1);
|
|
|
|
}
|
|
|
|
cb();
|
|
|
|
});
|
|
|
|
|
|
|
|
gulp.task("utils.copyAdditionalBuildFiles", cb => {
|
|
|
|
const additionalFolder = path.join("additional_build_files");
|
|
|
|
const additionalSrcGlobs = [
|
|
|
|
path.join(additionalFolder, "**/*.*"),
|
|
|
|
path.join(additionalFolder, "**/.*"),
|
|
|
|
path.join(additionalFolder, "**/*"),
|
|
|
|
];
|
|
|
|
|
|
|
|
return gulp.src(additionalSrcGlobs).pipe(gulp.dest(buildFolder));
|
|
|
|
});
|
|
|
|
|
|
|
|
// Starts a webserver on the built directory (useful for testing prod build)
|
|
|
|
gulp.task("main.webserver", () => {
|
|
|
|
return gulp.src(buildFolder).pipe(
|
|
|
|
$.webserver({
|
|
|
|
livereload: {
|
|
|
|
enable: true,
|
|
|
|
},
|
|
|
|
directoryListing: false,
|
|
|
|
open: true,
|
|
|
|
port: 3005,
|
|
|
|
})
|
|
|
|
);
|
|
|
|
});
|
|
|
|
|
|
|
|
function serve({ standalone }) {
|
|
|
|
browserSync.init({
|
|
|
|
server: buildFolder,
|
|
|
|
port: 3005,
|
|
|
|
ghostMode: {
|
|
|
|
clicks: false,
|
|
|
|
scroll: false,
|
|
|
|
location: false,
|
|
|
|
forms: false,
|
|
|
|
},
|
|
|
|
logLevel: "info",
|
|
|
|
logPrefix: "BS",
|
|
|
|
online: false,
|
|
|
|
xip: false,
|
|
|
|
notify: false,
|
|
|
|
reloadDebounce: 100,
|
|
|
|
reloadOnRestart: true,
|
|
|
|
watchEvents: ["add", "change"],
|
|
|
|
});
|
|
|
|
|
|
|
|
// Watch .scss files, those trigger a css rebuild
|
|
|
|
gulp.watch(["../src/**/*.scss"], gulp.series("css.dev"));
|
|
|
|
|
|
|
|
// Watch .html files, those trigger a html rebuild
|
|
|
|
gulp.watch("../src/**/*.html", gulp.series(standalone ? "html.standalone-dev" : "html.dev"));
|
|
|
|
|
|
|
|
// Watch sound files
|
|
|
|
// gulp.watch(["../res_raw/sounds/**/*.mp3", "../res_raw/sounds/**/*.wav"], gulp.series("sounds.dev"));
|
|
|
|
|
|
|
|
// Watch translations
|
|
|
|
gulp.watch("../translations/**/*.yaml", gulp.series("translations.convertToJson"));
|
|
|
|
|
|
|
|
gulp.watch(
|
|
|
|
["../res_raw/sounds/sfx/*.mp3", "../res_raw/sounds/sfx/*.wav"],
|
|
|
|
gulp.series("sounds.sfx", "sounds.copy")
|
|
|
|
);
|
|
|
|
gulp.watch(
|
|
|
|
["../res_raw/sounds/music/*.mp3", "../res_raw/sounds/music/*.wav"],
|
|
|
|
gulp.series("sounds.music", "sounds.copy")
|
|
|
|
);
|
|
|
|
|
|
|
|
// Watch resource files and copy them on change
|
2020-10-04 07:21:37 +00:00
|
|
|
gulp.watch(imgres.rawImageResourcesGlobs, gulp.series("imgres.buildAtlas"));
|
2020-09-23 13:20:12 +00:00
|
|
|
gulp.watch(imgres.nonImageResourcesGlobs, gulp.series("imgres.copyNonImageResources"));
|
|
|
|
gulp.watch(imgres.imageResourcesGlobs, gulp.series("imgres.copyImageResources"));
|
|
|
|
|
|
|
|
// Watch .atlas files and recompile the atlas on change
|
2020-10-04 07:21:37 +00:00
|
|
|
gulp.watch("../res_built/atlas/*.atlas", gulp.series("imgres.atlasToJson"));
|
2020-09-23 13:20:12 +00:00
|
|
|
gulp.watch("../res_built/atlas/*.json", gulp.series("imgres.atlas"));
|
|
|
|
|
|
|
|
// Watch the build folder and reload when anything changed
|
|
|
|
const extensions = ["html", "js", "png", "gif", "jpg", "svg", "mp3", "ico", "woff2", "json"];
|
|
|
|
gulp.watch(extensions.map(ext => path.join(buildFolder, "**", "*." + ext))).on("change", function (path) {
|
|
|
|
return gulp.src(path).pipe(browserSync.reload({ stream: true }));
|
|
|
|
});
|
|
|
|
|
|
|
|
gulp.watch("../src/js/built-temp/*.json").on("change", function (path) {
|
|
|
|
return gulp.src(path).pipe(browserSync.reload({ stream: true }));
|
|
|
|
});
|
|
|
|
|
|
|
|
// Start the webpack watching server (Will never return)
|
|
|
|
if (standalone) {
|
|
|
|
gulp.series("js.standalone-dev.watch")(() => true);
|
|
|
|
} else {
|
|
|
|
gulp.series("js.dev.watch")(() => true);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
///////////////////// RUNNABLE TASKS /////////////////////
|
|
|
|
|
|
|
|
// Pre and postbuild
|
|
|
|
gulp.task("step.baseResources", gulp.series("imgres.allOptimized"));
|
|
|
|
gulp.task("step.deleteEmpty", cb => {
|
|
|
|
deleteEmpty.sync(buildFolder);
|
|
|
|
cb();
|
|
|
|
});
|
|
|
|
|
|
|
|
gulp.task("step.postbuild", gulp.series("imgres.cleanupUnusedCssInlineImages", "step.deleteEmpty"));
|
|
|
|
|
|
|
|
// Builds everything (dev)
|
|
|
|
gulp.task(
|
|
|
|
"build.dev",
|
|
|
|
gulp.series(
|
|
|
|
"utils.cleanup",
|
|
|
|
"utils.copyAdditionalBuildFiles",
|
2020-10-04 07:21:37 +00:00
|
|
|
"imgres.buildAtlas",
|
|
|
|
"imgres.atlasToJson",
|
2020-09-23 13:20:12 +00:00
|
|
|
"imgres.atlas",
|
|
|
|
"sounds.dev",
|
|
|
|
"imgres.copyImageResources",
|
|
|
|
"imgres.copyNonImageResources",
|
|
|
|
"translations.fullBuild",
|
|
|
|
"css.dev",
|
|
|
|
"html.dev"
|
|
|
|
)
|
|
|
|
);
|
|
|
|
|
|
|
|
// Builds everything (standalone -dev)
|
|
|
|
gulp.task(
|
|
|
|
"build.standalone.dev",
|
|
|
|
gulp.series(
|
|
|
|
"utils.cleanup",
|
2020-10-06 15:25:58 +00:00
|
|
|
"imgres.buildAtlas",
|
|
|
|
"imgres.atlasToJson",
|
2020-09-23 13:20:12 +00:00
|
|
|
"imgres.atlas",
|
|
|
|
"sounds.dev",
|
|
|
|
"imgres.copyImageResources",
|
|
|
|
"imgres.copyNonImageResources",
|
|
|
|
"translations.fullBuild",
|
|
|
|
"css.dev",
|
|
|
|
"html.standalone-dev"
|
|
|
|
)
|
|
|
|
);
|
|
|
|
|
|
|
|
// Builds everything (staging)
|
|
|
|
gulp.task("step.staging.code", gulp.series("sounds.fullbuild", "translations.fullBuild", "js.staging"));
|
|
|
|
gulp.task(
|
|
|
|
"step.staging.mainbuild",
|
|
|
|
gulp.parallel("utils.copyAdditionalBuildFiles", "step.baseResources", "step.staging.code")
|
|
|
|
);
|
|
|
|
gulp.task("step.staging.all", gulp.series("step.staging.mainbuild", "css.prod", "html.staging"));
|
|
|
|
gulp.task("build.staging", gulp.series("utils.cleanup", "step.staging.all", "step.postbuild"));
|
|
|
|
|
|
|
|
// Builds everything (prod)
|
|
|
|
gulp.task("step.prod.code", gulp.series("sounds.fullbuild", "translations.fullBuild", "js.prod"));
|
|
|
|
gulp.task(
|
|
|
|
"step.prod.mainbuild",
|
|
|
|
gulp.parallel("utils.copyAdditionalBuildFiles", "step.baseResources", "step.prod.code")
|
|
|
|
);
|
|
|
|
gulp.task("step.prod.all", gulp.series("step.prod.mainbuild", "css.prod", "html.prod"));
|
|
|
|
gulp.task("build.prod", gulp.series("utils.cleanup", "step.prod.all", "step.postbuild"));
|
|
|
|
|
|
|
|
// Builds everything (standalone-beta)
|
|
|
|
gulp.task(
|
|
|
|
"step.standalone-beta.code",
|
|
|
|
gulp.series("sounds.fullbuildHQ", "translations.fullBuild", "js.standalone-beta")
|
|
|
|
);
|
|
|
|
gulp.task("step.standalone-beta.mainbuild", gulp.parallel("step.baseResources", "step.standalone-beta.code"));
|
|
|
|
gulp.task(
|
|
|
|
"step.standalone-beta.all",
|
|
|
|
gulp.series("step.standalone-beta.mainbuild", "css.prod-standalone", "html.standalone-beta")
|
|
|
|
);
|
|
|
|
gulp.task(
|
|
|
|
"build.standalone-beta",
|
|
|
|
gulp.series("utils.cleanup", "step.standalone-beta.all", "step.postbuild")
|
|
|
|
);
|
|
|
|
|
|
|
|
// Builds everything (standalone-prod)
|
|
|
|
gulp.task(
|
|
|
|
"step.standalone-prod.code",
|
|
|
|
gulp.series("sounds.fullbuildHQ", "translations.fullBuild", "js.standalone-prod")
|
|
|
|
);
|
|
|
|
gulp.task("step.standalone-prod.mainbuild", gulp.parallel("step.baseResources", "step.standalone-prod.code"));
|
|
|
|
gulp.task(
|
|
|
|
"step.standalone-prod.all",
|
|
|
|
gulp.series("step.standalone-prod.mainbuild", "css.prod-standalone", "html.standalone-prod")
|
|
|
|
);
|
|
|
|
gulp.task(
|
|
|
|
"build.standalone-prod",
|
|
|
|
gulp.series("utils.cleanup", "step.standalone-prod.all", "step.postbuild")
|
|
|
|
);
|
|
|
|
|
2020-10-01 08:20:47 +00:00
|
|
|
// OS X build and release upload
|
|
|
|
gulp.task(
|
|
|
|
"build.darwin64-prod",
|
|
|
|
gulp.series(
|
|
|
|
"build.standalone-prod",
|
|
|
|
"standalone.prepare",
|
|
|
|
"standalone.package.prod.darwin64",
|
|
|
|
"standalone.uploadRelease.darwin64"
|
|
|
|
)
|
|
|
|
);
|
|
|
|
|
2020-09-23 13:20:12 +00:00
|
|
|
// Deploying!
|
|
|
|
gulp.task(
|
|
|
|
"main.deploy.alpha",
|
|
|
|
gulp.series("utils.requireCleanWorkingTree", "build.staging", "ftp.upload.alpha")
|
|
|
|
);
|
|
|
|
gulp.task(
|
|
|
|
"main.deploy.staging",
|
|
|
|
gulp.series("utils.requireCleanWorkingTree", "build.staging", "ftp.upload.staging")
|
|
|
|
);
|
|
|
|
gulp.task("main.deploy.prod", gulp.series("utils.requireCleanWorkingTree", "build.prod", "ftp.upload.prod"));
|
|
|
|
gulp.task("main.deploy.all", gulp.series("main.deploy.staging", "main.deploy.prod"));
|
|
|
|
gulp.task("main.standalone", gulp.series("build.standalone-prod", "standalone.package.prod"));
|
|
|
|
|
|
|
|
// Live-development
|
|
|
|
gulp.task(
|
|
|
|
"main.serveDev",
|
|
|
|
gulp.series("build.dev", () => serve({ standalone: false }))
|
|
|
|
);
|
|
|
|
gulp.task(
|
|
|
|
"main.serveStandalone",
|
|
|
|
gulp.series("build.standalone.dev", () => serve({ standalone: true }))
|
|
|
|
);
|
|
|
|
|
|
|
|
gulp.task("default", gulp.series("main.serveDev"));
|