1
+ importPackage ( Packages . tablesaw ) ;
2
+ importPackage ( Packages . tablesaw . rules ) ;
3
+ importPackage ( Packages . org . freecompany . redline ) ;
4
+ importPackage ( Packages . org . freecompany . redline . header ) ;
5
+ importPackage ( Packages . org . freecompany . redline . payload ) ;
6
+ importPackage ( Packages . groovy . yaml ) ;
7
+ importPackage ( Packages . java . nio . file ) ;
8
+ importPackage ( Packages . java . io ) ;
9
+ importPackage ( Packages . org . yaml . snakeyaml ) ;
10
+
11
+ saw . setProperty ( Tablesaw . PROP_MULTI_THREAD_OUTPUT , Tablesaw . PROP_VALUE_ON ) ;
12
+
13
+ //Do not use '-' in version string, it breaks rpm uninstall.
14
+ var release = saw . getProperty ( "KAIROS_RELEASE_NUMBER" , "1" ) ; //package release number
15
+
16
+ saw . includeDefinitionFile ( "definitions.xml" ) ;
17
+
18
+ var rpmDir = "target/rpm" ;
19
+ new DirectoryRule ( "target" ) ;
20
+ var rpmDirRule = new DirectoryRule ( rpmDir ) ;
21
+
22
+ //Read pom file to get version out
23
+ var pom = saw . parsePomFile ( "pom.xml" ) ;
24
+ var version = pom . getVersion ( ) ;
25
+
26
+ //Read stork definitions
27
+ var yaml = new Yaml ( ) ;
28
+ var yamlMap = yaml . load ( Files . readString ( Path . of ( "src/main/launchers/stork.yml" ) ) ) ;
29
+
30
+ var programName = yamlMap . get ( "name" ) ;
31
+ var summary = yamlMap . get ( "short_description" ) ;
32
+ var description = yamlMap . get ( "long_description" ) ;
33
+
34
+
35
+ var mvnRule = new SimpleRule ( "maven-package" )
36
+ . setDescription ( "Run maven package build" )
37
+ . setMakeAction ( "doMavenBuild" ) ;
38
+
39
+ function doMavenBuild ( rule )
40
+ {
41
+ saw . exec ( `mvn package` ) ;
42
+ }
43
+
44
+ rpmFile = `${ programName } -${ version } -${ release } .rpm`
45
+ srcRpmFile = `${ programName } -${ version } -${ release } .src.rpm`
46
+
47
+ //------------------------------------------------------------------------------
48
+ //Build rpm file
49
+ rpmBaseInstallDir = "/opt/topic-monitor"
50
+ rpmRule = new SimpleRule ( "package-rpm" ) . setDescription ( "Build RPM Package" )
51
+ . addDepend ( mvnRule )
52
+ . addDepend ( rpmDirRule )
53
+ . addTarget ( `${ rpmDir } /${ rpmFile } ` )
54
+ . setMakeAction ( "doRPM" )
55
+ . setProperty ( "dependency" , "on" ) ;
56
+
57
+ function doRPM ( rule )
58
+ {
59
+ //Build rpm using redline rpm library
60
+ host = Packages . java . net . InetAddress . getLocalHost ( ) . getHostName ( ) ;
61
+ rpmBuilder = new Builder ( ) ;
62
+ rpmBuilder . setDescription ( description ) ;
63
+ rpmBuilder . group = "System Environment/Daemons" ;
64
+ rpmBuilder . license = "license" ;
65
+ rpmBuilder . setPackage ( programName , version , release ) ;
66
+ rpmBuilder . setPlatform ( Architecture . NOARCH , Os . LINUX ) ;
67
+ rpmBuilder . summary = summary ;
68
+ rpmBuilder . type = RpmType . BINARY ;
69
+ rpmBuilder . url = "http://kairosdb.org" ;
70
+ rpmBuilder . vendor = "KairosDB" ;
71
+ rpmBuilder . provides = programName ;
72
+ //prefixes = rpmBaseInstallDir
73
+ rpmBuilder . buildHost = host ;
74
+ rpmBuilder . sourceRpm = srcRpmFile ;
75
+
76
+ rpmBuilder . setPrefixes ( rpmBaseInstallDir ) ;
77
+ rpmBuilder . addDependencyMore ( "jre" , yamlMap . get ( "min_java_version" ) ) ;
78
+
79
+ rpmBuilder . addFile ( "$rpmBaseInstallDir/bin/topic-monitor" , new File ( "target/stork/bin/topic-monitor" ) , 0755 ) ;
80
+
81
+ rpmBuilder . addFile ( "$rpmBaseInstallDir/conf/application.conf" ,
82
+ new File ( "target/stork/conf/application.conf" ) , 0644 , new Directive ( Directive . RPMFILE_CONFIG | Directive . RPMFILE_NOREPLACE ) ) ;
83
+ rpmBuilder . addFile ( "$rpmBaseInstallDir/conf/logback.xml" ,
84
+ new File ( "target/stork/conf/logback.xml" ) , 0644 , new Directive ( Directive . RPMFILE_CONFIG | Directive . RPMFILE_NOREPLACE ) ) ;
85
+ rpmBuilder . addFile ( "$rpmBaseInstallDir/conf/metrics4j.conf" ,
86
+ new File ( "target/stork/conf/metrics4j.conf" ) , 0644 , new Directive ( Directive . RPMFILE_CONFIG | Directive . RPMFILE_NOREPLACE ) ) ;
87
+
88
+ addFileSetToRPM ( rpmBuilder , "$rpmBaseInstallDir/lib" , new RegExFileSet ( "target/stork/lib" , ".*\\.jar" ) ) ;
89
+ addFileSetToRPM ( rpmBuilder , "$rpmBaseInstallDir/share" , new RegExFileSet ( "target/stork/share" , ".*" ) . recurse ( ) ) ;
90
+
91
+ print ( `Building RPM ${ rule . getTarget ( ) } ` ) ;
92
+ outputFile = new FileOutputStream ( rule . getTarget ( ) ) ;
93
+ rpmBuilder . build ( outputFile . channel ) ;
94
+ outputFile . close ( ) ;
95
+ }
96
+
97
+ function addFileSetToRPM ( builder , destination , files )
98
+ {
99
+ files . getFiles ( ) . forEach ( function ( file )
100
+ {
101
+ var f = new File ( file . getBaseDir ( ) , file . getFile ( ) ) ;
102
+ builder . addFile ( destination + "/" + file . getFile ( ) , f ) ;
103
+ } ) ;
104
+ }
105
+
106
+
107
+ debRule = new SimpleRule ( "package-deb" ) . setDescription ( "Build Deb Package" )
108
+ . addDepend ( rpmRule )
109
+ . setMakeAction ( "doDeb" ) ;
110
+
111
+ function doDeb ( rule )
112
+ {
113
+
114
+ }
115
+
116
+
117
+
118
+ //------------------------------------------------------------------------------
119
+ //Build notification
120
+ function printMessage ( strTitle , strMessage )
121
+ {
122
+ osName = saw . getProperty ( "os.name" ) ;
123
+
124
+ var notifyDef ;
125
+ if ( osName . startsWith ( "Linux" ) )
126
+ {
127
+ notifyDef = saw . getDefinition ( "linux-notify" ) ;
128
+ }
129
+ else if ( osName . startsWith ( "Mac" ) )
130
+ {
131
+ notifyDef = saw . getDefinition ( "mac-notify" ) ;
132
+ }
133
+
134
+ if ( notifyDef != null )
135
+ {
136
+ notifyDef . set ( "title" , strTitle ) ;
137
+ notifyDef . set ( "message" , strMessage ) ;
138
+ saw . exec ( notifyDef . getCommand ( ) ) ;
139
+ }
140
+ }
141
+
142
+ function buildFailure ( exception )
143
+ {
144
+ printMessage ( "Build Failure" , exception . getMessage ( ) )
145
+ }
146
+
147
+ function buildSuccess ( target )
148
+ {
149
+ printMessage ( "Build Success" , target )
150
+ }
0 commit comments