Index: Gruntfile.js
===================================================================
--- Gruntfile.js	(revision 31598)
+++ Gruntfile.js	(working copy)
@@ -2,7 +2,8 @@
 module.exports = function(grunt) {
 	var path = require('path'),
 		SOURCE_DIR = 'src/',
-		BUILD_DIR = 'build/';
+		BUILD_DIR = 'build/',
+		BANNER_TEXT = '/*! This file is auto-generated - please do not patch. */';
 
 	// Load tasks.
 	require('matchdep').filterDev(['grunt-*', '!grunt-legacy-util']).forEach( grunt.loadNpmTasks );
@@ -502,6 +503,64 @@
 				dest: SOURCE_DIR
 			}
 		},
+		usebanner: {
+			cssmin: {
+				options: {
+					position: 'top',
+					banner: BANNER_TEXT,
+					linebreak: true,
+					'wp-admin': ['wp-admin', 'color-picker', 'customize-controls', 'customize-widgets', 'ie', 'install', 'login', 'deprecated-*']
+				},
+				files: {
+					src: [
+						BUILD_DIR + 'wp-admin/css/{<%= cssmin.options["wp-admin"] %>}.min.css',
+						BUILD_DIR + 'wp-includes/css/*.min.css',
+						BUILD_DIR + 'wp-admin/css/colors/*/*.css',
+						
+						// Exceptions
+						'!' + BUILD_DIR + 'wp-admin/css/{<%= cssmin.options["wp-admin"] %>}-rtl.min.css',
+						'!' + BUILD_DIR + 'wp-includes/css/*-rtl.min.css',
+						'!' + BUILD_DIR + 'wp-admin/css/colors/*/*-rtl*.css'
+					]
+				}
+			},
+			cssjanus: {
+				options: {
+					position: 'top',
+					banner: BANNER_TEXT,
+					linebreak: true
+				},
+				files: {
+					src: [
+						BUILD_DIR + 'wp-admin/css/*-rtl*.css',
+						BUILD_DIR + 'wp-includes/css/*-rtl*.css',
+						BUILD_DIR + 'wp-admin/css/colors/*/*-rtl*.css',
+					]
+				}
+			},
+			uglify: {
+				options: {
+					position: 'top',
+					banner: BANNER_TEXT,
+					linebreak: true
+				},
+				files: {
+					src: [
+						BUILD_DIR + 'wp-admin/js/*.min.js',
+						BUILD_DIR + 'wp-includes/js/*.min.js',
+						BUILD_DIR + 'wp-includes/js/plupload/handlers.min.js',
+						BUILD_DIR + 'wp-includes/js/plupload/wp-plupload.min.js',
+						BUILD_DIR + 'wp-includes/js/tinymce/wp-tinymce.min.js',
+
+						// Exceptions
+						'!' + BUILD_DIR + 'wp-admin/js/iris.min.js',
+						'!' + BUILD_DIR + 'wp-includes/js/backbone.min.js',
+						'!' + BUILD_DIR + 'wp-includes/js/underscore.min.js',
+						'!' + BUILD_DIR + 'wp-includes/js/zxcvbn.min.js'
+					]
+				}
+			}
+		},
 		watch: {
 			all: {
 				files: [
@@ -578,9 +637,12 @@
 	// Copy task.
 	grunt.registerTask('copy:all', ['copy:files', 'copy:wp-admin-rtl', 'copy:version']);
 
+	// Banner task.
+	grunt.registerTask('banner', ['usebanner:cssmin', 'usebanner:cssjanus', 'usebanner:uglify']);
+
 	// Build task.
 	grunt.registerTask('build', ['clean:all', 'copy:all', 'cssmin:core', 'colors', 'rtl', 'cssmin:rtl', 'cssmin:colors',
-		'browserify:media', 'uglify:core', 'uglify:media', 'uglify:jqueryui', 'concat:tinymce', 'compress:tinymce',
+		'browserify:media', 'uglify:core', 'uglify:media', 'uglify:jqueryui', 'banner', 'concat:tinymce', 'compress:tinymce',
 		'clean:tinymce', 'jsvalidate:build']);
 
 	// Testing tasks.
Index: package.json
===================================================================
--- package.json	(revision 31598)
+++ package.json	(working copy)
@@ -27,6 +27,7 @@
     "grunt-patch-wordpress": "~0.3.0",
     "grunt-rtlcss": "~1.5.1",
     "grunt-sass": "~0.16.0",
+    "grunt-banner": "~0.3.1",
     "matchdep": "~0.3.0"
   }
 }
