154 lines
4.4 KiB
TypeScript
154 lines
4.4 KiB
TypeScript
import * as gulp from "gulp";
|
|
import * as gulpReplace from "gulp-replace";
|
|
import * as gulpPbo from "gulp-armapbo";
|
|
import * as gulpZip from "gulp-zip";
|
|
import * as vinylPaths from "vinyl-paths";
|
|
import * as del from "del";
|
|
|
|
import { resolve } from "path";
|
|
|
|
import { MissionPaths, uploadLegacy } from "./src";
|
|
import { Preset, FolderStructureInfo } from "./src";
|
|
|
|
const ROOT_DIR = resolve('..', '..');
|
|
|
|
const presets: Preset[] = require('./_presets.json');
|
|
|
|
/**
|
|
* Mission folders configuration
|
|
*/
|
|
const paths: FolderStructureInfo = {
|
|
frameworkFolder: resolve(ROOT_DIR, 'Missionframework'),
|
|
missionsFolder: resolve(ROOT_DIR, 'Missionbasefiles'),
|
|
workDir: resolve(ROOT_DIR, "_build")
|
|
};
|
|
|
|
|
|
/**
|
|
* Create gulp tasks
|
|
*/
|
|
let taskNames: string[] = [];
|
|
let taskNamesPbo: string[] = [];
|
|
let taskNamesZip: string[] = [];
|
|
let taskNamesWorkshop: string[] = [];
|
|
|
|
for (let preset of presets) {
|
|
const mission = new MissionPaths(preset, paths);
|
|
const taskName = [preset.missionName, preset.map].join('.');
|
|
|
|
|
|
taskNames.push('mission_' + taskName);
|
|
|
|
gulp.task('mission_' + taskName, gulp.series(
|
|
/** Copy mission framework to output dir */
|
|
function copyFramework() {
|
|
return gulp.src(mission.getFrameworkPath().concat('/**/*'))
|
|
.pipe(gulp.dest(mission.getOutputDir()));
|
|
},
|
|
|
|
/** Copy mission.sqm to output dir */
|
|
function copyMissionSQM() {
|
|
return gulp.src(mission.getMissionSqmPath())
|
|
.pipe(gulp.dest(mission.getOutputDir()));
|
|
},
|
|
|
|
/** Replace variables values in configuration file */
|
|
function replaceVariables() {
|
|
let src = gulp.src(mission.getMissionConfigFilePath());
|
|
|
|
const variables = Object.getOwnPropertyNames(preset.variables);
|
|
for (let variable of variables) {
|
|
// https://regex101.com/r/YknC8r/1
|
|
const regex = new RegExp(`(${variable} += +)(?:\\d+|".+")`, 'ig');
|
|
const value = JSON.stringify(preset.variables[variable]);
|
|
|
|
// replace variable value
|
|
src = src.pipe(gulpReplace(regex, `$1${value}`));
|
|
}
|
|
|
|
return src.pipe(gulp.dest(mission.getOutputDir()));
|
|
}
|
|
));
|
|
|
|
/**
|
|
* Pack PBOs
|
|
*/
|
|
taskNamesPbo.push('pack_' + taskName);
|
|
|
|
gulp.task('pack_' + taskName, () => {
|
|
return gulp.src(mission.getOutputDir() + '/**/*')
|
|
.pipe(gulpPbo({
|
|
fileName: mission.getFullName() + '.pbo',
|
|
progress: false,
|
|
verbose: false,
|
|
// Do not compress (SLOW)
|
|
compress: true ? [] : [
|
|
'**/*.sqf',
|
|
'mission.sqm',
|
|
'description.ext'
|
|
]
|
|
}))
|
|
.pipe(gulp.dest(mission.getWorkDir() + '/pbo'));
|
|
});
|
|
|
|
/**
|
|
* Create ZIP files
|
|
*/
|
|
taskNamesZip.push('zip_' + taskName);
|
|
|
|
gulp.task('zip_' + taskName, () => {
|
|
return gulp.src([
|
|
resolve(ROOT_DIR, 'LICENSE'),
|
|
resolve(ROOT_DIR, 'CHANGELOG.md'),
|
|
resolve(ROOT_DIR, 'README.md')
|
|
], {
|
|
base: ROOT_DIR // Change base dir to have correct relative paths in ZIP
|
|
})
|
|
.pipe(
|
|
gulp.src(
|
|
resolve(mission.getWorkDir(), 'pbo', mission.getFullName() + '.pbo'), {
|
|
base: resolve(mission.getWorkDir(), 'pbo') // Change base dir to have correct relative paths in ZIP
|
|
})
|
|
)
|
|
.pipe(gulpZip(
|
|
mission.getFullName() + '.zip'
|
|
))
|
|
.pipe(gulp.dest(mission.getWorkDir()))
|
|
});
|
|
|
|
if (!!preset.workshopId) {
|
|
|
|
taskNamesWorkshop.push('workshop_' + taskName);
|
|
|
|
gulp.task('workshop_' + taskName, async () => {
|
|
const pboPath = resolve(mission.getWorkDir(), 'pbo', mission.getFullName() + '.pbo');
|
|
console.log(pboPath);
|
|
|
|
await uploadLegacy(preset.workshopId, pboPath);
|
|
});
|
|
}
|
|
|
|
}
|
|
|
|
// Main tasks
|
|
gulp.task('clean', () => {
|
|
return gulp.src(paths.workDir)
|
|
.pipe(vinylPaths(del));
|
|
});
|
|
|
|
gulp.task('build', gulp.series(taskNames));
|
|
|
|
gulp.task('pbo', gulp.series(taskNamesPbo));
|
|
|
|
gulp.task('zip', gulp.series(taskNamesZip));
|
|
|
|
gulp.task('workshop', gulp.series(taskNamesWorkshop));
|
|
|
|
gulp.task('default',
|
|
gulp.series(
|
|
gulp.task('build'),
|
|
gulp.task('pbo'),
|
|
// gulp.task('zip'),
|
|
)
|
|
);
|