The output of the "git describe" output in the template using the playback frame?

I would like to show the output of 'git describe' in my opinion. Do I need to write a plugin that updates the value and installs it in the application? Or is there an easier way to do this?

+4
source share
2 answers

I just read about the game modules and decided to write one ( https://github.com/killdashnine/play-git-plugin ) to find out if I can solve my problem:

import java.io.BufferedReader; import java.io.InputStreamReader; import play.Logger; import play.Play; import play.PlayPlugin; public class GitPlugin extends PlayPlugin { private static String GIT_PLUGIN_PREFIX = "GIT plugin: "; @Override public void onApplicationStart() { Logger.info(GIT_PLUGIN_PREFIX + "executing 'git describe'"); final StringBuffer gitVersion = new StringBuffer(); try { final Process p = Runtime.getRuntime().exec("git describe"); final BufferedReader reader = new BufferedReader(new InputStreamReader(p.getInputStream())); // wait for process to complete p.waitFor(); // read the output String line = reader.readLine(); while(line != null) { gitVersion.append(line); line = reader.readLine(); } } catch(Exception e) { Logger.error(GIT_PLUGIN_PREFIX + "unable to execute 'git describe'"); } // set a property for this value Play.configuration.setProperty("git.revision", gitVersion.toString()); Logger.info(GIT_PLUGIN_PREFIX + "revision is " + gitVersion.toString()); } } 

Result:

 12:14:46,508 INFO ~ GIT plugin: executing 'git describe' 12:14:46,513 INFO ~ GIT plugin: revision is V0-beta-7-gac9af80 

In my controller:

  @Before static void addDefaults() { renderArgs.put("version", Play.configuration.getProperty("git.revision")); } 

Of course, this is not very portable and can be improved. A possible improvement would be for the user command to run through the settings in your configuration file.

+3
source

If you do not run your code from the git repository, you can do it like me, I have a script assembly that creates a war file, and in this script I will do:

 cat > {apppath}/conf/application_version.properties << EOF application.version=`git describe` application.buildtime=`date` EOF ... 

And in the @OnApplicationStart class add properties

 private def readApplicationVersion() { Logger.info("Bootstrap.readApplicationVersion file") Play.id match { case "" | "test" => Play.configuration.put("application.version", "TEST-MODE"); Play.configuration.put("application.buildtime", "YEAH BABY YEAH REALTIME") case _ => addFileProp(VirtualFile.open(Play.applicationPath).child("conf/application_version.properties").inputstream()) } } private def addFileProp(input: InputStream) { input match { case null => Logger.error("can't find config file, Play id: " + Play.id + ". Will exit now.") case _ => val extendCconfiguration = IO.readUtf8Properties(input); for (key <- extendCconfiguration.keys) { Play.configuration.put(key, extendCconfiguration.get(key)) } } } 

And from the controller

 object ApplicationVersion extends Controller { def version = { Json("{iamVersion: '"+configuration.getProperty("application.version")+"', buildTime: '"+configuration.getProperty("application.buildtime")+"'}") } } 
+1
source

Source: https://habr.com/ru/post/1344084/


All Articles