From 9d3f4e76dbb4e7e3005add243ae86e979a2b2a0c Mon Sep 17 00:00:00 2001 From: Tom Fulton Date: Fri, 17 Jan 2014 00:12:29 -0700 Subject: [PATCH] Quick cleanup of packaging tasks --- .gitignore | 1 + Gruntfile.js | 45 ++++++++++++++++++++++++---------------- package.json | 3 ++- pkg/meta.json | 9 ++++++++ pkg/nuget/package.nuspec | 16 +++++++------- pkg/umbraco/package.xml | 39 ++++++++++++++++++++++++++++++++++ pkg/umbraco/readme.txt | 0 tasks/umbraco_package.js | 40 +++++++++++++++++++++-------------- 8 files changed, 111 insertions(+), 42 deletions(-) create mode 100644 pkg/meta.json create mode 100644 pkg/umbraco/package.xml create mode 100644 pkg/umbraco/readme.txt 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) {