2012-10-29 9 views
13

Ich baue meine Webapp mit gruntjs und yeoman.io.Kannst du die git Revision mit gruntjs aufnehmen?

Ich möchte gerne die git revision/commit/sha aufzeichnen, aus der ein Build stammt, damit ich in der bereitgestellten Version nachsehen kann, wo sie herkommt und was sich mit der neuen Version geändert hat .

Antwort

6

keine gruntjs Spezialist, aber vielleicht können Sie in Ihrem Build-Schritt einen Aufruf an das gruntjs-git-describe-Modul, das that task nennen:

module.exports = function(grunt) { 
    grunt.registerTask("describe", "Describes current git commit", function (prop) { 
    var done = this.async(); 

    grunt.log.write("Describe current commit: "); 

    grunt.util.spawn({ 
     cmd : "git", 
     args : [ "describe", "--tags", "--always", "--long", "--dirty" ] 
    }, function (err, result) { 
     if (err) { 
     grunt.log.error(err); 
     return done(false); 
     } 

     grunt.config(prop || "meta.version", result); 

     grunt.log.writeln(result.green); 

     done(result); 
    }); 
    }); 
}; 

git-beschreiben, ist ein guter Weg, um eine „Version aufnehmen Nummer "mit Git, wie es SHA1-basiert ist (eindeutige ID).
Mehr zu diesem Thema:

13

Nicht entweder ein Grunt-Experten, aber hier ist eine Lösung auf git basierend beschreibt die Ich verwende derzeit für eine große AngularJS App. Wir speichern die Hauptversion im Paket.json des Projekts. Außerdem erzeuge ich eine version.json Datei, die die Revision und das Datum für jeden Build enthält. Auf diese Informationen kann später vom Client zugegriffen werden, damit Tester und Betreuer sehen können, welche Version/Revision der App sie verwenden.

Indem wir die Versionstask in unsere Build-Tasks aufnehmen, können wir jeden Build mit einer version.json-Datei versehen.

+0

Interessant. Ausführlicher als meine eigene Antwort. +1 – VonC

+0

Dies funktioniert nicht für mich oder meine Kombination von npm-Versionen. Hier ist das offene Problem: https://github.com/mikaelkaron/grunt-git-describe/issues/10 – SimplGy

+2

Nur eine Nebenbemerkung: git-describe v2.2.0 "Unterstützung für Callback und Prop entfernt (verwenden Sie grunt.event.emit stattdessen)" –

3

Um näher auf Lucas Pottersky Kommentar zu Inukshuk Antwort, der richtige Weg, um die gleiche Sache zu tun mit Grunzen-git-beschreiben> = 2.2.0 ist die folgend:

grunt.initConfig({ 
    pkg: grunt.file.readJSON('package.json'), 

    'git-describe': { 
    options: { 
    }, 
    me: {} 
    }, 

    ... 
}); 

grunt.registerTask('saveRevision', function() { 
    grunt.event.once('git-describe', function (rev) { 
    grunt.option('gitRevision', rev); 
    }); 
    grunt.task.run('git-describe'); 
}); 

grunt.registerTask('tag-revision', 'Tag the current build revision', function() { 
    grunt.task.requires('git-describe'); 

    grunt.file.write('public/version.json', JSON.stringify({ 
    version: grunt.config('pkg.version'), 
    revision: grunt.option('gitRevision'), 
    date: grunt.template.today() 
    })); 
}); 

grunt.registerTask('version', ['saveRevision', 'tag-revision']);