Quick cleanup of packaging tasks

This commit is contained in:
Tom Fulton
2014-01-17 00:12:29 -07:00
parent 489628451b
commit 9d3f4e76db
8 changed files with 111 additions and 42 deletions
+1
View File
@@ -14,6 +14,7 @@ dist/
node_modules/
pkg/tmp/
pkg/*.nupkg
pkg/*.zip
[Dd]ebug/
[Bb]uild/
+27 -18
View File
@@ -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
View File
@@ -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"
}
}
+9
View File
@@ -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"
}
+8 -8
View File
@@ -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>
+39
View File
@@ -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>
View File
+25 -15
View File
@@ -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) {