Quick cleanup of packaging tasks
This commit is contained in:
@@ -14,6 +14,7 @@ dist/
|
||||
node_modules/
|
||||
pkg/tmp/
|
||||
pkg/*.nupkg
|
||||
pkg/*.zip
|
||||
|
||||
[Dd]ebug/
|
||||
[Bb]uild/
|
||||
|
||||
+27
-18
@@ -1,11 +1,12 @@
|
||||
module.exports = function(grunt) {
|
||||
grunt.initConfig({
|
||||
pkg: grunt.file.readJSON('package.json'),
|
||||
pkgMeta: grunt.file.readJSON('pkg/meta.json'),
|
||||
dest: 'dist',
|
||||
version: '0.0.0',
|
||||
package_dir: 'pkg',
|
||||
package_temp_dir: '<%= package_dir %>/tmp/',
|
||||
|
||||
|
||||
watch: {
|
||||
less: {
|
||||
files: ['app/less/*.less', 'lib/**/*.less'],
|
||||
@@ -78,7 +79,14 @@ module.exports = function(grunt) {
|
||||
'nuget_manifest': {
|
||||
'options': {
|
||||
'data': {
|
||||
version: '<%= version %>',
|
||||
name: '<%= pkgMeta.name %>',
|
||||
version: '<%= pkgMeta.version %>',
|
||||
url: '<%= pkgMeta.url %>',
|
||||
license: '<%= pkgMeta.license %>',
|
||||
licenseUrl: '<%= pkgMeta.licenseUrl %>',
|
||||
author: '<%= pkgMeta.author %>',
|
||||
authorUrl: '<%= pkgMeta.authorUrl %>',
|
||||
|
||||
files: [{ path: '..\\..\\..\\<%= dest %>\\**', target: 'content\\App_Plugins\\Archetype'}]
|
||||
}
|
||||
},
|
||||
@@ -89,8 +97,7 @@ module.exports = function(grunt) {
|
||||
},
|
||||
|
||||
clean: {
|
||||
build: ['<%= dest %>'],
|
||||
package_temp: ['<%= package_temp_dir %>']
|
||||
build: ['<%= dest %>']
|
||||
},
|
||||
|
||||
copy: {
|
||||
@@ -103,17 +110,17 @@ module.exports = function(grunt) {
|
||||
},
|
||||
deploy: {
|
||||
files: [
|
||||
{expand: true, cwd: '<%= dest %>/', src: ['**'], dest: '<%= grunt.option("target") %>\\App_Plugins\\Archetype', flatten: false},
|
||||
{expand: true, cwd: '<%= dest %>/', src: ['**/*'], dest: '<%= grunt.option("target") %>\\App_Plugins\\Archetype', flatten: false},
|
||||
]
|
||||
},
|
||||
nuget_prepare: {
|
||||
files: [
|
||||
{expand: true, cwd: '<%= dest %>/', src: ['**'], dest: '<%= package_temp_dir %>/nuget/content/', flatten: false},
|
||||
{expand: true, cwd: '<%= dest %>/', src: ['**/*'], dest: '<%= package_temp_dir %>/nuget/content/', flatten: false},
|
||||
]
|
||||
},
|
||||
umbracopackage: {
|
||||
files: [
|
||||
{expand: true, cwd: '<%= dest %>/', src: ['**'], dest: 'pkg/tmp/umbraco/App_Plugins/Archetype', flatten: false},
|
||||
{expand: true, cwd: '<%= dest %>/', src: ['**/*'], dest: 'pkg/tmp/umbraco/<%= guid %>/App_Plugins/Archetype', flatten: false},
|
||||
]
|
||||
}
|
||||
},
|
||||
@@ -127,13 +134,13 @@ module.exports = function(grunt) {
|
||||
|
||||
umbracoPackage: {
|
||||
options: {
|
||||
packageName: "WAT",
|
||||
packageVersion: '1.0',
|
||||
packageLicenseName: 'MIT',
|
||||
packageLicenseUrl: '#',
|
||||
packageUrl: 'http://imulus.com',
|
||||
authorName: 'Imulus',
|
||||
authorUrl: '#',
|
||||
name: "<%= pkgMeta.name %>",
|
||||
version: '<%= pkgMeta.version %>',
|
||||
url: '<%= pkgMeta.url %>',
|
||||
license: '<%= pkgMeta.license %>',
|
||||
licenseUrl: '<%= pkgMeta.licenseUrl %>',
|
||||
author: '<%= pkgMeta.author %>',
|
||||
authorUrl: '<%= pkgMeta.authorUrl %>',
|
||||
manifest: 'pkg/umbraco/package.xml',
|
||||
readme: 'pkg/umbraco/readme.txt',
|
||||
sourceDir: 'pkg/tmp/umbraco',
|
||||
@@ -141,9 +148,10 @@ module.exports = function(grunt) {
|
||||
}
|
||||
},
|
||||
|
||||
clean: ['<%= dest %>']
|
||||
clean: {
|
||||
build: ['<%= dest %>'],
|
||||
package_temp: ['pkg/tmp'],
|
||||
}
|
||||
|
||||
});
|
||||
|
||||
grunt.loadNpmTasks('grunt-contrib-watch');
|
||||
@@ -159,10 +167,11 @@ module.exports = function(grunt) {
|
||||
grunt.loadTasks('tasks');
|
||||
|
||||
|
||||
grunt.registerTask('package:nuget', ['default', 'clean:package_temp', 'copy:nuget_prepare', 'template:nuget_manifest', 'nugetpack', 'clean:package_temp']);
|
||||
grunt.registerTask('package', ['package:nuget', 'package:umbraco']);
|
||||
grunt.registerTask('package:nuget', ['copy:nuget_prepare', 'template:nuget_manifest', 'nugetpack', 'clean:package_temp']);
|
||||
grunt.registerTask('package:umbraco', ['copy:umbracopackage', 'umbracoPackage', 'clean:package_temp']);
|
||||
grunt.registerTask('touchwebconfigifenabled', function() { if (grunt.option("touch")) grunt.task.run("touch:webconfig") });
|
||||
grunt.registerTask('deploy', ['default', 'copy:deploy', 'touchwebconfigifenabled']);
|
||||
grunt.registerTask('package:umbraco', ['copy:umbracopackage', 'umbracoPackage']);
|
||||
grunt.registerTask('css:build', ['less']);
|
||||
grunt.registerTask('js:build', ['concat']);
|
||||
grunt.registerTask('default', ['clean', 'css:build', 'js:build', 'copy:build']);
|
||||
|
||||
+2
-1
@@ -18,6 +18,7 @@
|
||||
"rimraf": "~2.2.5",
|
||||
"grunt-nuget": "~0.1.1",
|
||||
"grunt-template": "~0.2.2",
|
||||
"grunt-touch": "~0.1.0"
|
||||
"grunt-touch": "~0.1.0",
|
||||
"fs-extra": "~0.8.1"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -0,0 +1,9 @@
|
||||
{
|
||||
"name": "Archetype",
|
||||
"version": "0.1.0",
|
||||
"url": "http://github.com/imulus/archetype/",
|
||||
"author": "Imulus",
|
||||
"authorUrl": "http://imulus.com/",
|
||||
"license": "MIT",
|
||||
"licenseUrl": "http://opensource.org/licenses/MIT"
|
||||
}
|
||||
@@ -3,18 +3,18 @@
|
||||
<metadata>
|
||||
<id>Archetype</id>
|
||||
<version><%= version %></version>
|
||||
<title>Archetype</title>
|
||||
<authors>imulus, tomfulton</authors>
|
||||
<owners>imulus, tomfulton</owners>
|
||||
<title><%= name %></title>
|
||||
<authors>imulus, kgiszewski, tomfulton</authors>
|
||||
<owners>imulus, kgiszewski, tomfulton</owners>
|
||||
<projectUrl>http://github.com/imulus/archetype</projectUrl>
|
||||
<description><![CDATA[Archetype]]></description>
|
||||
<description><![CDATA[Archetype for Umbraco]]></description>
|
||||
<tags>umbraco</tags>
|
||||
<iconUrl>http://github.com/imulus/archetype/raw/master/assets/logo.png</iconUrl>
|
||||
<licenseUrl>http://www.opensource.org/licenses/mit-license.php</licenseUrl>
|
||||
<licenseUrl><%= licenseUrl %></licenseUrl>
|
||||
</metadata>
|
||||
<files>
|
||||
<% for (var file in files) { %>
|
||||
<file src="<%- files[file].path %>" target="<%= files[file].target %>" />
|
||||
<% } %>
|
||||
<% files.forEach(function(file) { %>
|
||||
<file src="<%- file.path %>" target="<%= file.target %>" />
|
||||
<% }); %>
|
||||
</files>
|
||||
</package>
|
||||
@@ -0,0 +1,39 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<umbPackage>
|
||||
<info>
|
||||
<package>
|
||||
<name><%= name %></name>
|
||||
<version><%= version %></version>
|
||||
<license url="<%= licenseUrl %>"><%= license %></license>
|
||||
<url><%= url %></url>
|
||||
<requirements>
|
||||
<major>0</major>
|
||||
<minor>0</minor>
|
||||
<patch>0</patch>
|
||||
</requirements>
|
||||
</package>
|
||||
<author>
|
||||
<name><%= author %></name>
|
||||
<website><%= authorUrl %></website>
|
||||
</author>
|
||||
<readme><![CDATA[<%= readmeContents %>]]></readme>
|
||||
</info>
|
||||
<DocumentTypes />
|
||||
<Templates />
|
||||
<Stylesheets />
|
||||
<Macros />
|
||||
<DictionaryItems />
|
||||
<Languages />
|
||||
<DataTypes />
|
||||
<control />
|
||||
<Actions />
|
||||
<files>
|
||||
<% files.forEach(function(file) { %>
|
||||
<file>
|
||||
<guid><%= file.guid %>.<%= file.ext %></guid>
|
||||
<orgPath><%= file.dir %></orgPath>
|
||||
<orgName><%= file.name %></orgName>
|
||||
</file>
|
||||
<% }); %>
|
||||
</files>
|
||||
</umbPackage>
|
||||
+25
-15
@@ -1,22 +1,22 @@
|
||||
module.exports = function(grunt) {
|
||||
grunt.registerTask('umbracoPackage', 'Create Umbraco Package', function() {
|
||||
grunt.config.requires('umbracoPackage.options.packageName');
|
||||
grunt.config.requires('umbracoPackage.options.packageVersion');
|
||||
grunt.config.requires('umbracoPackage.options.packageLicenseName');
|
||||
grunt.config.requires('umbracoPackage.options.packageLicenseUrl');
|
||||
grunt.config.requires('umbracoPackage.options.packageUrl');
|
||||
grunt.config.requires('umbracoPackage.options.authorName');
|
||||
grunt.config.requires('umbracoPackage.options.name');
|
||||
grunt.config.requires('umbracoPackage.options.version');
|
||||
grunt.config.requires('umbracoPackage.options.license');
|
||||
grunt.config.requires('umbracoPackage.options.licenseUrl');
|
||||
grunt.config.requires('umbracoPackage.options.url');
|
||||
grunt.config.requires('umbracoPackage.options.author');
|
||||
grunt.config.requires('umbracoPackage.options.authorUrl');
|
||||
grunt.config.requires('umbracoPackage.options.manifest');
|
||||
grunt.config.requires('umbracoPackage.options.readme');
|
||||
grunt.config.requires('umbracoPackage.options.outputDir');
|
||||
grunt.config.requires('umbracoPackage.options.sourceDir');
|
||||
|
||||
var fs = require('fs');
|
||||
var Guid = require('guid');
|
||||
var path = require('path');
|
||||
var rimraf = require('rimraf');
|
||||
var AdmZip = require('adm-zip');
|
||||
var fs = require('fs-extra');
|
||||
|
||||
var options = this.options({
|
||||
minimumUmbracoVersion: '',
|
||||
@@ -24,28 +24,38 @@ module.exports = function(grunt) {
|
||||
cwd: '/'
|
||||
});
|
||||
|
||||
var packageFileName = options.packageName + "_" + options.packageVersion + ".zip"
|
||||
var packageFileName = options.name + "_" + options.version + ".zip"
|
||||
|
||||
// Gather files
|
||||
var filesToPackage = [];
|
||||
getFilesRecursive(options.sourceDir);
|
||||
filesToPackage = filesToPackage.map(function(f) {
|
||||
return { guid: Guid.create(), dir: f.dir.replace(options.sourceDir, ''), name: f.name };
|
||||
return { guid: Guid.create(), dir: f.dir.replace(options.sourceDir, ''), name: f.name, ext: f.name.split('.').pop() };
|
||||
});
|
||||
|
||||
// Load / transform Manifest
|
||||
// Create temp folder for package zip source
|
||||
var guidFolder = Guid.create().toString();
|
||||
var newDirName = path.join(options.sourceDir, "..\\" + guidFolder);
|
||||
fs.mkdirSync(newDirName);
|
||||
newDirName = path.join(newDirName, guidFolder);
|
||||
fs.mkdirSync(newDirName);
|
||||
|
||||
// Copy flatten structure, with files renamed as <guid>.<ext>
|
||||
filesToPackage.forEach(function(f) {
|
||||
var newFileName = f.name == "package.xml" ? f.name : f.guid.toString() + '.' + f.ext;
|
||||
fs.copySync(path.join(options.sourceDir, f.dir, f.name), path.join(newDirName, newFileName));
|
||||
});
|
||||
|
||||
// Load / transform XML Manifest
|
||||
options.files = filesToPackage;
|
||||
options.readmeContents = grunt.file.read(options.readme);
|
||||
var manifest = grunt.file.read(options.manifest);
|
||||
manifest = grunt.template.process(manifest, {data: options});
|
||||
grunt.file.write(path.join(options.sourceDir, "package.xml"), manifest); // TODO: Probably shouldn't use sourceDir - what if under source control
|
||||
grunt.file.write(path.join(options.sourceDir, "..\\", guidFolder, guidFolder, "package.xml"), manifest); // TODO: Probably shouldn't use sourceDir - what if under source control
|
||||
|
||||
// Zip
|
||||
var zip = new AdmZip();
|
||||
filesToPackage.forEach(function(f) {
|
||||
zip.addLocalFile(path.join(options.sourceDir, f.dir, f.name))
|
||||
})
|
||||
zip.addLocalFile(path.join(options.sourceDir, "package.xml"));
|
||||
zip.addLocalFolder(path.join(options.sourceDir, "..\\", guidFolder));
|
||||
zip.writeZip(path.join(options.outputDir, packageFileName))
|
||||
|
||||
function getFilesRecursive(dir) {
|
||||
|
||||
Reference in New Issue
Block a user