2 # SPDX-License-Identifier: EPL-1.0
3 ##############################################################################
4 # Copyright (c) 2017 The Linux Foundation and others.
6 # All rights reserved. This program and the accompanying materials
7 # are made available under the terms of the Eclipse Public License v1.0
8 # which accompanies this distribution, and is available at
9 # http://www.eclipse.org/legal/epl-v10.html
11 ##############################################################################
14 new_tag = new_reltag # new release tag
15 curr_tag = curr_reltag # current release tag
16 prev_tag = prev_reltag # previous release tag
18 new_release = tolower(new_tag)
19 curr_release = tolower(curr_tag)
20 prev_release = tolower(prev_tag)
22 ws = "[\\t ]*" # white-spaces
23 startpat = "^" ws "- project:" # start pattern
24 endpat = startpat # end pattern
25 op = "^" ws "---" ws "$" # match files starts with "---"
27 next_release_tag = "^" ws "next-release-tag: '{stream}'"
29 new_branch = "'stable/" new_release "'"
30 curr_branch = "'stable/" curr_release "'"
31 prev_branch = "'stable/" prev_release "'"
33 # replace block to add new release
34 new_rel_yaml_tag = "- " new_release ":";
35 br_master_yaml_tag = " branch: 'master'";
36 jre_yaml_tag = " jre: 'openjdk8'";
37 curr_rel_yaml_tag = "- " curr_release ":";
38 br_stable_curr_yaml_tag = " branch: 'stable/" curr_release "'";
40 # replace block for autorelease-projects
41 #new_rel_yaml_tag = "- " new_release ":";
42 next_rel_tag_new_yaml_tag = " next-release-tag: '{stream}'";
43 #br_master_yaml_tag = " branch: 'master'";
44 jdk_yaml_tag = " jdk: 'openjdk8'";
45 intg_test_yaml_tag = " integration-test: " new_release;
46 #curr_rel_yaml_tag = "- " curr_release ":";
47 next_rel_tag_curr_yaml_tag = " next-release-tag: '{stream}'";
48 #br_stable_curr_yaml_tag = " branch: 'stable/" curr_release "'";
51 smaster = "^" ws "- master:"
52 sstream = "^" ws "stream:"
53 srelease = "^" ws "- " curr_release ":"
54 snext_release_tag = "^" ws "next-release-tag:"
55 #if (l ~ next_release_tag) { next_release_tag = 1; continue; }
56 sbranch = "^" ws "branch: " master
57 sfunctionality = "^" ws "functionality:"
59 debug = 0 # set to 1 to print debug info
60 file_format = 2 # project stream format
69 # exit if release info is not available
70 if ((length(new_release) == 0 || length(curr_release) == 0)) {
74 # read all lines of the file into an array
79 n = NR # total number of lines
80 find_blks() # gets number of blocks between start/end pattern
81 process_blk(arr_bs[1], arr_be[1], 1) # pass start and end of each block and process first block
82 update_file(arr_be[1]) # write processed content
85 print "number of blocks="nb;
86 print "total records in file[]="length(f);
87 print "size of firstblk[]="length(firstblk);
88 print "size of newblk[]="length(newblk);
89 print "size of oldmaster[]="length(oldmaster);
90 print "size of newblk[]="length(newblk);
94 function find_blks( i, l, bs, be) {
95 for (i = 1; i <= n; i++) {
97 if (l ~ startpat) project = 1 # start pattern
98 if (bs > be && l ~ endpat) arr_be[++be] = i - 1 # block end
99 if ( l ~ startpat) arr_bs[++bs] = i - 1 # block start
103 # to handle files with single blocks
104 if (nb == 0 && length(file) > 1 && project == 1) {
106 arr_bs[1] = 1 # start after line '---'
107 arr_be[1] = length(file) # set length of the file
111 for (i = 1; i < nb; i++)
112 print "find_blks: nb=" nb " arr_bs[" i "]="arr_bs[i]" arr_be[" i "]="arr_be[i];
116 function process_blk(bs, be, bn, i, l) {
118 print "process_blk: bn=" bn ", bs=" bs " ,be=" be
121 # get the first block
122 for (i = bs + 1; i <= be ; i++) {
124 # determine file format
127 s = substr(l, x+2, length(l) - x)
128 if (s == curr_release || s == new_release) {
130 } else if (length(s) == 0 ) {
138 print "process_blk: stream='" s "' length(s)=" length(s)" file_format='" file_format "'"
141 # Handle single stream format
142 if (file_format == 1) {
143 # create new block to be inserted
144 for (i = 1; i <= length(firstblk); i++) {
146 if (l ~ /name:|stream:/) sub(curr_release, new_release, l)
149 # re-create old block and change master to stable/branch
150 for (i = 1; i <= length(firstblk)-1; i++) {
152 if (l ~ /branch:/) sub(master, curr_branch, l)
153 oldmaster[++nex2] = l
155 } else if (file_format == 0) {
156 # Handle multi-stream format
157 for (i = 1; i <= length(firstblk)-1; i++) {
159 if (l ~ sstream) { stream_found = 1; }
160 if (l ~ srelease) { release_found = 1; indent = substr(l, 1, index(l, "-")-1); continue; }
161 if (l ~ sfunctionality) { func_found = 1; }
162 if (l ~ snext_release_tag) { nrt_found = 1; }
165 if (stream_found && release_found && !nrt_found) {
166 newblk[++nex3] = indent new_rel_yaml_tag;
167 newblk[++nex3] = indent br_master_yaml_tag;
168 # set 'jdk' macro for patch-test jobs
170 newblk[++nex3] = indent jdk_yaml_tag;
172 newblk[++nex3] = indent jre_yaml_tag;
174 newblk[++nex3] = indent curr_rel_yaml_tag;
175 newblk[++nex3] = indent br_stable_curr_yaml_tag;
181 if (stream_found && release_found && nrt_found) {
182 newblk[++nex3] = indent new_rel_yaml_tag;
183 newblk[++nex3] = indent next_rel_tag_new_yaml_tag;
184 newblk[++nex3] = indent br_master_yaml_tag;
185 newblk[++nex3] = indent jdk_yaml_tag;
186 newblk[++nex3] = indent intg_test_yaml_tag;
187 newblk[++nex3] = indent curr_rel_yaml_tag;
188 newblk[++nex3] = indent next_rel_tag_curr_yaml_tag;
189 newblk[++nex3] = indent br_stable_curr_yaml_tag;
190 stream_found = 0; release_found = 0; nrt_found=0;
197 print "process_blk: append(newblk[]) : stream="stream" release_found="release_found
201 # exit on unknown file format
206 function update_file(be, i, j, l) {
208 # handle lines before "---"
215 print "writing master block"
218 # Handle single stream format
219 if (file_format == 1) {
220 for (j = 1; j <= nex1; j++) # write new branch block
224 print "writing stable block"
227 for (j = 1; j <= nex2; j++) # write updated branch block
230 # Handle multi-stream format
231 } else if (file_format == 0) {
232 # print the first block
233 for (j = 1; j <= nex3; j++) # write multi-stream block
238 print "writing rest of the file"
241 while (be <= n) { # write rest of the file