diff --git a/.gitignore b/.gitignore
index 89a7373..fa14c32 100644
--- a/.gitignore
+++ b/.gitignore
@@ -14,6 +14,7 @@ dist/
node_modules/
pkg/tmp/
pkg/*.nupkg
+pkg/*.zip
[Dd]ebug/
[Bb]uild/
diff --git a/Gruntfile.js b/Gruntfile.js
index febcf19..cc78eba 100644
--- a/Gruntfile.js
+++ b/Gruntfile.js
@@ -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']);
diff --git a/package.json b/package.json
index 3b23fd6..b6970fe 100644
--- a/package.json
+++ b/package.json
@@ -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"
}
}
diff --git a/pkg/meta.json b/pkg/meta.json
new file mode 100644
index 0000000..b641edc
--- /dev/null
+++ b/pkg/meta.json
@@ -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"
+}
\ No newline at end of file
diff --git a/pkg/nuget/package.nuspec b/pkg/nuget/package.nuspec
index e5143cc..6baaa87 100644
--- a/pkg/nuget/package.nuspec
+++ b/pkg/nuget/package.nuspec
@@ -3,18 +3,18 @@
Archetype
<%= version %>
- Archetype
- imulus, tomfulton
- imulus, tomfulton
+ <%= name %>
+ imulus, kgiszewski, tomfulton
+ imulus, kgiszewski, tomfulton
http://github.com/imulus/archetype
-
+
umbraco
http://github.com/imulus/archetype/raw/master/assets/logo.png
- http://www.opensource.org/licenses/mit-license.php
+ <%= licenseUrl %>
- <% for (var file in files) { %>
-
- <% } %>
+ <% files.forEach(function(file) { %>
+
+ <% }); %>
\ No newline at end of file
diff --git a/pkg/umbraco/package.xml b/pkg/umbraco/package.xml
new file mode 100644
index 0000000..1bb787a
--- /dev/null
+++ b/pkg/umbraco/package.xml
@@ -0,0 +1,39 @@
+
+
+
+
+ <%= name %>
+ <%= version %>
+ <%= license %>
+ <%= url %>
+
+ 0
+ 0
+ 0
+
+
+
+ <%= author %>
+ <%= authorUrl %>
+
+ ]]>
+
+
+
+
+
+
+
+
+
+
+
+ <% files.forEach(function(file) { %>
+
+ <%= file.guid %>.<%= file.ext %>
+ <%= file.dir %>
+ <%= file.name %>
+
+ <% }); %>
+
+
\ No newline at end of file
diff --git a/pkg/umbraco/readme.txt b/pkg/umbraco/readme.txt
new file mode 100644
index 0000000..e69de29
diff --git a/tasks/umbraco_package.js b/tasks/umbraco_package.js
index 6652fe1..e16d16d 100644
--- a/tasks/umbraco_package.js
+++ b/tasks/umbraco_package.js
@@ -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 .
+ 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) {