xref: /aosp_15_r20/external/curl/scripts/cijobs.pl (revision 6236dae45794135f37c4eb022389c904c8b0090d)
1*6236dae4SAndroid Build Coastguard Worker#!/usr/bin/env perl
2*6236dae4SAndroid Build Coastguard Worker#***************************************************************************
3*6236dae4SAndroid Build Coastguard Worker#                                  _   _ ____  _
4*6236dae4SAndroid Build Coastguard Worker#  Project                     ___| | | |  _ \| |
5*6236dae4SAndroid Build Coastguard Worker#                             / __| | | | |_) | |
6*6236dae4SAndroid Build Coastguard Worker#                            | (__| |_| |  _ <| |___
7*6236dae4SAndroid Build Coastguard Worker#                             \___|\___/|_| \_\_____|
8*6236dae4SAndroid Build Coastguard Worker#
9*6236dae4SAndroid Build Coastguard Worker# Copyright (C) Daniel Stenberg, <[email protected]>, et al.
10*6236dae4SAndroid Build Coastguard Worker#
11*6236dae4SAndroid Build Coastguard Worker# This software is licensed as described in the file COPYING, which
12*6236dae4SAndroid Build Coastguard Worker# you should have received as part of this distribution. The terms
13*6236dae4SAndroid Build Coastguard Worker# are also available at https://curl.se/docs/copyright.html.
14*6236dae4SAndroid Build Coastguard Worker#
15*6236dae4SAndroid Build Coastguard Worker# You may opt to use, copy, modify, merge, publish, distribute and/or sell
16*6236dae4SAndroid Build Coastguard Worker# copies of the Software, and permit persons to whom the Software is
17*6236dae4SAndroid Build Coastguard Worker# furnished to do so, under the terms of the COPYING file.
18*6236dae4SAndroid Build Coastguard Worker#
19*6236dae4SAndroid Build Coastguard Worker# This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
20*6236dae4SAndroid Build Coastguard Worker# KIND, either express or implied.
21*6236dae4SAndroid Build Coastguard Worker#
22*6236dae4SAndroid Build Coastguard Worker# SPDX-License-Identifier: curl
23*6236dae4SAndroid Build Coastguard Worker#
24*6236dae4SAndroid Build Coastguard Worker###########################################################################
25*6236dae4SAndroid Build Coastguard Worker
26*6236dae4SAndroid Build Coastguard Workermy %filelevel= ('file' => 1,
27*6236dae4SAndroid Build Coastguard Worker                'service' => 1);
28*6236dae4SAndroid Build Coastguard Worker
29*6236dae4SAndroid Build Coastguard Workermy $jobid = 1;
30*6236dae4SAndroid Build Coastguard Worker
31*6236dae4SAndroid Build Coastguard Workersub submit {
32*6236dae4SAndroid Build Coastguard Worker    my ($jref)=@_;
33*6236dae4SAndroid Build Coastguard Worker    my %job = %$jref;
34*6236dae4SAndroid Build Coastguard Worker
35*6236dae4SAndroid Build Coastguard Worker    printf "\n##### job %u \n", $jobid++;
36*6236dae4SAndroid Build Coastguard Worker    for my $k (sort keys %job) {
37*6236dae4SAndroid Build Coastguard Worker        printf "%s: %s\n", $k, $job{$k} if($job{$k});
38*6236dae4SAndroid Build Coastguard Worker        undef $$jref{$k} if(!$filelevel{$k});
39*6236dae4SAndroid Build Coastguard Worker    }
40*6236dae4SAndroid Build Coastguard Worker}
41*6236dae4SAndroid Build Coastguard Worker
42*6236dae4SAndroid Build Coastguard Workersub githubactions {
43*6236dae4SAndroid Build Coastguard Worker    my ($tag)=@_;
44*6236dae4SAndroid Build Coastguard Worker    my @files= `git ls-tree -r --name-only $tag .github/workflows 2>/dev/null`;
45*6236dae4SAndroid Build Coastguard Worker    my $c = 0;
46*6236dae4SAndroid Build Coastguard Worker    foreach my $f (sort @files) {
47*6236dae4SAndroid Build Coastguard Worker        my $j = 0;
48*6236dae4SAndroid Build Coastguard Worker        my $m = -1;
49*6236dae4SAndroid Build Coastguard Worker        my $done = 0;
50*6236dae4SAndroid Build Coastguard Worker        chomp $f;
51*6236dae4SAndroid Build Coastguard Worker        open(G, "git show $tag:$f 2>/dev/null|");
52*6236dae4SAndroid Build Coastguard Worker        # start counting file jobs
53*6236dae4SAndroid Build Coastguard Worker        undef %job;
54*6236dae4SAndroid Build Coastguard Worker        $job{'file'} = $f;
55*6236dae4SAndroid Build Coastguard Worker        $job{'service'} = "gha";
56*6236dae4SAndroid Build Coastguard Worker        my @cc;
57*6236dae4SAndroid Build Coastguard Worker        my $os;
58*6236dae4SAndroid Build Coastguard Worker        my $topname;
59*6236dae4SAndroid Build Coastguard Worker        my $line = 1;
60*6236dae4SAndroid Build Coastguard Worker        while(<G>) {
61*6236dae4SAndroid Build Coastguard Worker            $job{'line'} = $line;
62*6236dae4SAndroid Build Coastguard Worker            if($_ =~ /^name: (.*)/) {
63*6236dae4SAndroid Build Coastguard Worker                $topname=$1;
64*6236dae4SAndroid Build Coastguard Worker            }
65*6236dae4SAndroid Build Coastguard Worker            elsif($_ =~ /runs-on: (.*)/) {
66*6236dae4SAndroid Build Coastguard Worker                my $r = $1;
67*6236dae4SAndroid Build Coastguard Worker                #print "runs-on: $r\n";
68*6236dae4SAndroid Build Coastguard Worker                if($r =~ /ubuntu/) {
69*6236dae4SAndroid Build Coastguard Worker                    $os = "linux";
70*6236dae4SAndroid Build Coastguard Worker                }
71*6236dae4SAndroid Build Coastguard Worker                elsif($r =~ /macos/) {
72*6236dae4SAndroid Build Coastguard Worker                    $os = "macos";
73*6236dae4SAndroid Build Coastguard Worker                }
74*6236dae4SAndroid Build Coastguard Worker                elsif($r =~ /windows/) {
75*6236dae4SAndroid Build Coastguard Worker                    $os = "windows";
76*6236dae4SAndroid Build Coastguard Worker                }
77*6236dae4SAndroid Build Coastguard Worker
78*6236dae4SAndroid Build Coastguard Worker                # commit previously counted jobs
79*6236dae4SAndroid Build Coastguard Worker                $c += $j;
80*6236dae4SAndroid Build Coastguard Worker                # non-matrix job
81*6236dae4SAndroid Build Coastguard Worker                $j = 1;
82*6236dae4SAndroid Build Coastguard Worker            }
83*6236dae4SAndroid Build Coastguard Worker            elsif($_ =~ /^\s*matrix:/) {
84*6236dae4SAndroid Build Coastguard Worker                # switch to matrix mode
85*6236dae4SAndroid Build Coastguard Worker                $m = 0;
86*6236dae4SAndroid Build Coastguard Worker                $j = 0;
87*6236dae4SAndroid Build Coastguard Worker            }
88*6236dae4SAndroid Build Coastguard Worker            elsif($_ =~ /^    - run: .* apt-get install (.*)/) {
89*6236dae4SAndroid Build Coastguard Worker                $job{'install'} = $1;
90*6236dae4SAndroid Build Coastguard Worker            }
91*6236dae4SAndroid Build Coastguard Worker            elsif($m >= 0) {
92*6236dae4SAndroid Build Coastguard Worker                if($_ =~ /^          - name: (.*)/) {
93*6236dae4SAndroid Build Coastguard Worker                    # matrix job
94*6236dae4SAndroid Build Coastguard Worker                    #print "name: $1\n";
95*6236dae4SAndroid Build Coastguard Worker                    $job{'name'} = $1;
96*6236dae4SAndroid Build Coastguard Worker                    $j += ($m?$m:1);
97*6236dae4SAndroid Build Coastguard Worker                }
98*6236dae4SAndroid Build Coastguard Worker                elsif($_ =~ /install: (.*)/) {
99*6236dae4SAndroid Build Coastguard Worker                    $job{'install'} = $1;
100*6236dae4SAndroid Build Coastguard Worker                }
101*6236dae4SAndroid Build Coastguard Worker                elsif($_ =~ /( |curl-)configure: (.*)/) {
102*6236dae4SAndroid Build Coastguard Worker                    $job{'configure'} = $2;
103*6236dae4SAndroid Build Coastguard Worker                    $job{'os'}=$os;
104*6236dae4SAndroid Build Coastguard Worker                    submit(\%job);
105*6236dae4SAndroid Build Coastguard Worker                    $done++;
106*6236dae4SAndroid Build Coastguard Worker                }
107*6236dae4SAndroid Build Coastguard Worker                elsif($_ =~ /generate: (.*)/) {
108*6236dae4SAndroid Build Coastguard Worker                    $job{'cmake'} = $1;
109*6236dae4SAndroid Build Coastguard Worker                    if($m) {
110*6236dae4SAndroid Build Coastguard Worker                        # matrix mode, multiple copies
111*6236dae4SAndroid Build Coastguard Worker                        my %dupe = %job;
112*6236dae4SAndroid Build Coastguard Worker                        for my $cc (@cc) {
113*6236dae4SAndroid Build Coastguard Worker                            %job = %dupe;
114*6236dae4SAndroid Build Coastguard Worker                            $job{'cc'} = $cc;
115*6236dae4SAndroid Build Coastguard Worker                            $job{'os'}=$os;
116*6236dae4SAndroid Build Coastguard Worker                            submit(\%job);
117*6236dae4SAndroid Build Coastguard Worker                            $done++;
118*6236dae4SAndroid Build Coastguard Worker                        }
119*6236dae4SAndroid Build Coastguard Worker                    }
120*6236dae4SAndroid Build Coastguard Worker                    else {
121*6236dae4SAndroid Build Coastguard Worker                        $job{'os'}=$os;
122*6236dae4SAndroid Build Coastguard Worker                        submit(\%job);
123*6236dae4SAndroid Build Coastguard Worker                        $done++;
124*6236dae4SAndroid Build Coastguard Worker                    }
125*6236dae4SAndroid Build Coastguard Worker                }
126*6236dae4SAndroid Build Coastguard Worker                elsif($_ =~ /- CC: (.*)/) {
127*6236dae4SAndroid Build Coastguard Worker                    # matrix multiplier
128*6236dae4SAndroid Build Coastguard Worker                    push @cc, $1;
129*6236dae4SAndroid Build Coastguard Worker                    $m++;
130*6236dae4SAndroid Build Coastguard Worker                }
131*6236dae4SAndroid Build Coastguard Worker                elsif($_ =~ /^\s*steps:/) {
132*6236dae4SAndroid Build Coastguard Worker                    # disable matrix mode
133*6236dae4SAndroid Build Coastguard Worker                    $m = -1;
134*6236dae4SAndroid Build Coastguard Worker                }
135*6236dae4SAndroid Build Coastguard Worker            }
136*6236dae4SAndroid Build Coastguard Worker            $line++;
137*6236dae4SAndroid Build Coastguard Worker        }
138*6236dae4SAndroid Build Coastguard Worker        close(G);
139*6236dae4SAndroid Build Coastguard Worker        # commit final counted jobs
140*6236dae4SAndroid Build Coastguard Worker        $c += $j;
141*6236dae4SAndroid Build Coastguard Worker
142*6236dae4SAndroid Build Coastguard Worker        if(!$done) {
143*6236dae4SAndroid Build Coastguard Worker            $job{'name'} = $topname? $topname : '[unnamed]';
144*6236dae4SAndroid Build Coastguard Worker            $job{'os'}=$os;
145*6236dae4SAndroid Build Coastguard Worker            submit(\%job);
146*6236dae4SAndroid Build Coastguard Worker            $done++;
147*6236dae4SAndroid Build Coastguard Worker        }
148*6236dae4SAndroid Build Coastguard Worker        # reset internal job counter
149*6236dae4SAndroid Build Coastguard Worker        $j = 0;
150*6236dae4SAndroid Build Coastguard Worker    }
151*6236dae4SAndroid Build Coastguard Worker    #print "Jobs: $c\n";
152*6236dae4SAndroid Build Coastguard Worker    return $c;
153*6236dae4SAndroid Build Coastguard Worker}
154*6236dae4SAndroid Build Coastguard Worker
155*6236dae4SAndroid Build Coastguard Workersub azurepipelines {
156*6236dae4SAndroid Build Coastguard Worker    my ($tag)=@_;
157*6236dae4SAndroid Build Coastguard Worker    open(G, "git show $tag:.azure-pipelines.yml 2>/dev/null|");
158*6236dae4SAndroid Build Coastguard Worker    my $c = 0;
159*6236dae4SAndroid Build Coastguard Worker    my $j = 0;
160*6236dae4SAndroid Build Coastguard Worker    my $m = -1;
161*6236dae4SAndroid Build Coastguard Worker    my $image;
162*6236dae4SAndroid Build Coastguard Worker    my %job;
163*6236dae4SAndroid Build Coastguard Worker    my $line = 1;
164*6236dae4SAndroid Build Coastguard Worker    my $os;
165*6236dae4SAndroid Build Coastguard Worker    $job{'file'} = ".azure-pipelines.yml";
166*6236dae4SAndroid Build Coastguard Worker    $job{'service'} = "azure";
167*6236dae4SAndroid Build Coastguard Worker    while(<G>) {
168*6236dae4SAndroid Build Coastguard Worker        if($_ =~ /^          vmImage: (.*)/) {
169*6236dae4SAndroid Build Coastguard Worker            my $i = $1;
170*6236dae4SAndroid Build Coastguard Worker            if($i =~ /ubuntu/) {
171*6236dae4SAndroid Build Coastguard Worker                $os = "linux";
172*6236dae4SAndroid Build Coastguard Worker            }
173*6236dae4SAndroid Build Coastguard Worker            elsif($i =~ /windows/) {
174*6236dae4SAndroid Build Coastguard Worker                $os = "windows";
175*6236dae4SAndroid Build Coastguard Worker            }
176*6236dae4SAndroid Build Coastguard Worker        }
177*6236dae4SAndroid Build Coastguard Worker        elsif($_ =~ /^  - stage: (.*)/) {
178*6236dae4SAndroid Build Coastguard Worker            my $topname = $1;
179*6236dae4SAndroid Build Coastguard Worker            if($topname !~ /(windows|linux)/) {
180*6236dae4SAndroid Build Coastguard Worker                $job{'name'} = $topname;
181*6236dae4SAndroid Build Coastguard Worker                $job{'line'}=$line;
182*6236dae4SAndroid Build Coastguard Worker                submit(\%job);
183*6236dae4SAndroid Build Coastguard Worker            }
184*6236dae4SAndroid Build Coastguard Worker        }
185*6236dae4SAndroid Build Coastguard Worker        elsif($_ =~ /job:/) {
186*6236dae4SAndroid Build Coastguard Worker            # commit previously counted jobs
187*6236dae4SAndroid Build Coastguard Worker            $c += $j;
188*6236dae4SAndroid Build Coastguard Worker            # initial value for non-matrix job
189*6236dae4SAndroid Build Coastguard Worker            $j = 1;
190*6236dae4SAndroid Build Coastguard Worker        }
191*6236dae4SAndroid Build Coastguard Worker        elsif($_ =~ /matrix:/) {
192*6236dae4SAndroid Build Coastguard Worker            # start of new matrix list(!)
193*6236dae4SAndroid Build Coastguard Worker            $m = 0;
194*6236dae4SAndroid Build Coastguard Worker            $j = 0;
195*6236dae4SAndroid Build Coastguard Worker        }
196*6236dae4SAndroid Build Coastguard Worker        elsif($m >= 0) {
197*6236dae4SAndroid Build Coastguard Worker            if($_ =~ /^              name: (.*)/) {
198*6236dae4SAndroid Build Coastguard Worker                # single matrix list entry job
199*6236dae4SAndroid Build Coastguard Worker                $j++;
200*6236dae4SAndroid Build Coastguard Worker                $job{'name'} = $1;
201*6236dae4SAndroid Build Coastguard Worker            }
202*6236dae4SAndroid Build Coastguard Worker            # azure matrix is a simple list,
203*6236dae4SAndroid Build Coastguard Worker            # therefore no multiplier needed
204*6236dae4SAndroid Build Coastguard Worker            elsif($_ =~ /steps:/) {
205*6236dae4SAndroid Build Coastguard Worker                # disable matrix mode
206*6236dae4SAndroid Build Coastguard Worker                $m = -1;
207*6236dae4SAndroid Build Coastguard Worker            }
208*6236dae4SAndroid Build Coastguard Worker            elsif($_ =~ /^              configure: (.*)/) {
209*6236dae4SAndroid Build Coastguard Worker                $job{'configure'} = $1;
210*6236dae4SAndroid Build Coastguard Worker                $job{'line'}=$line;
211*6236dae4SAndroid Build Coastguard Worker                $job{'os'}=$os;
212*6236dae4SAndroid Build Coastguard Worker                submit(\%job);
213*6236dae4SAndroid Build Coastguard Worker            }
214*6236dae4SAndroid Build Coastguard Worker        }
215*6236dae4SAndroid Build Coastguard Worker        $line++;
216*6236dae4SAndroid Build Coastguard Worker    }
217*6236dae4SAndroid Build Coastguard Worker    close(G);
218*6236dae4SAndroid Build Coastguard Worker    # commit final counted jobs
219*6236dae4SAndroid Build Coastguard Worker    $c += $j;
220*6236dae4SAndroid Build Coastguard Worker
221*6236dae4SAndroid Build Coastguard Worker    return $c;
222*6236dae4SAndroid Build Coastguard Worker}
223*6236dae4SAndroid Build Coastguard Worker
224*6236dae4SAndroid Build Coastguard Workersub appveyor {
225*6236dae4SAndroid Build Coastguard Worker    my ($tag)=@_;
226*6236dae4SAndroid Build Coastguard Worker    open(G, "git show $tag:appveyor.yml 2>/dev/null|");
227*6236dae4SAndroid Build Coastguard Worker    my $c = 0;
228*6236dae4SAndroid Build Coastguard Worker    my %job;
229*6236dae4SAndroid Build Coastguard Worker    my $line=0;
230*6236dae4SAndroid Build Coastguard Worker    $job{'file'} = "appveyor.yml";
231*6236dae4SAndroid Build Coastguard Worker    $job{'service'} = "appveyor";
232*6236dae4SAndroid Build Coastguard Worker
233*6236dae4SAndroid Build Coastguard Worker    while(<G>) {
234*6236dae4SAndroid Build Coastguard Worker        $line++;
235*6236dae4SAndroid Build Coastguard Worker        if($_ =~ /^(    - |install)/) {
236*6236dae4SAndroid Build Coastguard Worker            if($job{'image'}) {
237*6236dae4SAndroid Build Coastguard Worker                $job{'os'} = "windows";
238*6236dae4SAndroid Build Coastguard Worker                submit(\%job);
239*6236dae4SAndroid Build Coastguard Worker                $c++;
240*6236dae4SAndroid Build Coastguard Worker            }
241*6236dae4SAndroid Build Coastguard Worker        }
242*6236dae4SAndroid Build Coastguard Worker        $job{'line'} = $line;
243*6236dae4SAndroid Build Coastguard Worker        if($_ =~ /^      APPVEYOR_BUILD_WORKER_IMAGE: \'(.*)\'/) {
244*6236dae4SAndroid Build Coastguard Worker            $job{'image'}= $1;
245*6236dae4SAndroid Build Coastguard Worker        }
246*6236dae4SAndroid Build Coastguard Worker        elsif($_ =~ /^      BUILD_SYSTEM: (.*)/) {
247*6236dae4SAndroid Build Coastguard Worker            $job{'build'} = lc($1);
248*6236dae4SAndroid Build Coastguard Worker        }
249*6236dae4SAndroid Build Coastguard Worker        elsif($_ =~ /^      PRJ_GEN: \'(.*)\'/) {
250*6236dae4SAndroid Build Coastguard Worker            $job{'compiler'} = $1;
251*6236dae4SAndroid Build Coastguard Worker        }
252*6236dae4SAndroid Build Coastguard Worker        elsif($_ =~ /^      PRJ_CFG: (.*)/) {
253*6236dae4SAndroid Build Coastguard Worker            $job{'config'} = $1;
254*6236dae4SAndroid Build Coastguard Worker        }
255*6236dae4SAndroid Build Coastguard Worker        elsif($_ =~ /^      OPENSSL: \'(.*)\'/) {
256*6236dae4SAndroid Build Coastguard Worker            $job{'openssl'} = $1 eq "ON" ? "true": "false";
257*6236dae4SAndroid Build Coastguard Worker        }
258*6236dae4SAndroid Build Coastguard Worker        elsif($_ =~ /^      SCHANNEL: \'(.*)\'/) {
259*6236dae4SAndroid Build Coastguard Worker            $job{'schannel'} = $1 eq "ON" ? "true": "false";
260*6236dae4SAndroid Build Coastguard Worker        }
261*6236dae4SAndroid Build Coastguard Worker        elsif($_ =~ /^      ENABLE_UNICODE: \'(.*)\'/) {
262*6236dae4SAndroid Build Coastguard Worker            $job{'unicode'} = $1 eq "ON" ? "true": "false";
263*6236dae4SAndroid Build Coastguard Worker        }
264*6236dae4SAndroid Build Coastguard Worker        elsif($_ =~ /^      HTTP_ONLY: \'(.*)\'/) {
265*6236dae4SAndroid Build Coastguard Worker            $job{'http-only'} = $1 eq "ON" ? "true": "false";
266*6236dae4SAndroid Build Coastguard Worker        }
267*6236dae4SAndroid Build Coastguard Worker        elsif($_ =~ /^      TESTING: \'(.*)\'/) {
268*6236dae4SAndroid Build Coastguard Worker            $job{'testing'} = $1 eq "ON" ? "true": "false";
269*6236dae4SAndroid Build Coastguard Worker        }
270*6236dae4SAndroid Build Coastguard Worker        elsif($_ =~ /^      SHARED: \'(.*)\'/) {
271*6236dae4SAndroid Build Coastguard Worker            $job{'shared'} = $1 eq "ON" ? "true": "false";
272*6236dae4SAndroid Build Coastguard Worker        }
273*6236dae4SAndroid Build Coastguard Worker        elsif($_ =~ /^      TARGET: \'-A (.*)\'/) {
274*6236dae4SAndroid Build Coastguard Worker            $job{'target'} = $1;
275*6236dae4SAndroid Build Coastguard Worker        }
276*6236dae4SAndroid Build Coastguard Worker    }
277*6236dae4SAndroid Build Coastguard Worker    close(G);
278*6236dae4SAndroid Build Coastguard Worker
279*6236dae4SAndroid Build Coastguard Worker    return $c;
280*6236dae4SAndroid Build Coastguard Worker}
281*6236dae4SAndroid Build Coastguard Worker
282*6236dae4SAndroid Build Coastguard Workersub cirrus {
283*6236dae4SAndroid Build Coastguard Worker    my ($tag)=@_;
284*6236dae4SAndroid Build Coastguard Worker    open(G, "git show $tag:.cirrus.yml 2>/dev/null|");
285*6236dae4SAndroid Build Coastguard Worker    my $c = 0;
286*6236dae4SAndroid Build Coastguard Worker    my %job;
287*6236dae4SAndroid Build Coastguard Worker    my $line=0;
288*6236dae4SAndroid Build Coastguard Worker    my $name = 0;
289*6236dae4SAndroid Build Coastguard Worker    my $os;
290*6236dae4SAndroid Build Coastguard Worker    $job{'file'} = ".cirrus.yml";
291*6236dae4SAndroid Build Coastguard Worker    $job{'service'} = "cirrus";
292*6236dae4SAndroid Build Coastguard Worker    while(<G>) {
293*6236dae4SAndroid Build Coastguard Worker        $line++;
294*6236dae4SAndroid Build Coastguard Worker        if($_ =~ /^    ( |-) (name|image_family|image):/) {
295*6236dae4SAndroid Build Coastguard Worker            $c++;
296*6236dae4SAndroid Build Coastguard Worker        }
297*6236dae4SAndroid Build Coastguard Worker        if($_ =~ /^    - name:/) {
298*6236dae4SAndroid Build Coastguard Worker            if($name) {
299*6236dae4SAndroid Build Coastguard Worker                $job{'os'} = $os;
300*6236dae4SAndroid Build Coastguard Worker                $job{'line'} = $line;
301*6236dae4SAndroid Build Coastguard Worker                submit(\%job);
302*6236dae4SAndroid Build Coastguard Worker                $name = 0;
303*6236dae4SAndroid Build Coastguard Worker            }
304*6236dae4SAndroid Build Coastguard Worker        }
305*6236dae4SAndroid Build Coastguard Worker        if($_ =~ /^    - name: (.*)/) {
306*6236dae4SAndroid Build Coastguard Worker            $job{'name'} = $1;
307*6236dae4SAndroid Build Coastguard Worker            $name = 1;
308*6236dae4SAndroid Build Coastguard Worker        }
309*6236dae4SAndroid Build Coastguard Worker        elsif($_ =~ /^        image_family: (.*)/) {
310*6236dae4SAndroid Build Coastguard Worker            $os = "freebsd";
311*6236dae4SAndroid Build Coastguard Worker        }
312*6236dae4SAndroid Build Coastguard Worker        elsif($_ =~ /^windows_task:/) {
313*6236dae4SAndroid Build Coastguard Worker            $os = "windows";
314*6236dae4SAndroid Build Coastguard Worker        }
315*6236dae4SAndroid Build Coastguard Worker        elsif($_ =~ /^        prepare: pacman -S --needed --noconfirm --noprogressbar (.*)/) {
316*6236dae4SAndroid Build Coastguard Worker            $job{'install'} = $1;
317*6236dae4SAndroid Build Coastguard Worker        }
318*6236dae4SAndroid Build Coastguard Worker        elsif($_ =~ /^        configure: (.*)/) {
319*6236dae4SAndroid Build Coastguard Worker            $job{'configure'} = $1;
320*6236dae4SAndroid Build Coastguard Worker        }
321*6236dae4SAndroid Build Coastguard Worker    }
322*6236dae4SAndroid Build Coastguard Worker    close(G);
323*6236dae4SAndroid Build Coastguard Worker    if($name) {
324*6236dae4SAndroid Build Coastguard Worker        $job{'os'} = $os;
325*6236dae4SAndroid Build Coastguard Worker        $job{'line'} = $line;
326*6236dae4SAndroid Build Coastguard Worker        submit(\%job);
327*6236dae4SAndroid Build Coastguard Worker    }
328*6236dae4SAndroid Build Coastguard Worker    return $c;
329*6236dae4SAndroid Build Coastguard Worker}
330*6236dae4SAndroid Build Coastguard Worker
331*6236dae4SAndroid Build Coastguard Workersub circle {
332*6236dae4SAndroid Build Coastguard Worker    my ($tag)=@_;
333*6236dae4SAndroid Build Coastguard Worker    open(G, "git show $tag:.circleci/config.yml 2>/dev/null|");
334*6236dae4SAndroid Build Coastguard Worker    my $c = 0;
335*6236dae4SAndroid Build Coastguard Worker    my $wf = 0;
336*6236dae4SAndroid Build Coastguard Worker    my %job;
337*6236dae4SAndroid Build Coastguard Worker    my %cmd;
338*6236dae4SAndroid Build Coastguard Worker    my %configure;
339*6236dae4SAndroid Build Coastguard Worker    my %target;
340*6236dae4SAndroid Build Coastguard Worker    my $line=0;
341*6236dae4SAndroid Build Coastguard Worker    my $cmds;
342*6236dae4SAndroid Build Coastguard Worker    my $jobs;
343*6236dae4SAndroid Build Coastguard Worker    my $workflow;
344*6236dae4SAndroid Build Coastguard Worker    $job{'file'} = ".circleci/config.yml";
345*6236dae4SAndroid Build Coastguard Worker    $job{'service'} = "circleci";
346*6236dae4SAndroid Build Coastguard Worker    while(<G>) {
347*6236dae4SAndroid Build Coastguard Worker        $line++;
348*6236dae4SAndroid Build Coastguard Worker        if($_ =~ /^commands:/) {
349*6236dae4SAndroid Build Coastguard Worker            # we record configure lines in this state
350*6236dae4SAndroid Build Coastguard Worker            $cmds = 1;
351*6236dae4SAndroid Build Coastguard Worker        }
352*6236dae4SAndroid Build Coastguard Worker        elsif($cmds) {
353*6236dae4SAndroid Build Coastguard Worker            if($_ =~ /^  ([^ ]*):/) {
354*6236dae4SAndroid Build Coastguard Worker                $cmdname = $1;
355*6236dae4SAndroid Build Coastguard Worker            }
356*6236dae4SAndroid Build Coastguard Worker            elsif($_ =~ /^            .*.\/configure (.*)/) {
357*6236dae4SAndroid Build Coastguard Worker                $cmd{$cmdname}=$1;
358*6236dae4SAndroid Build Coastguard Worker            }
359*6236dae4SAndroid Build Coastguard Worker        }
360*6236dae4SAndroid Build Coastguard Worker        if($_ =~ /^jobs:/) {
361*6236dae4SAndroid Build Coastguard Worker            # we record which job runs with configure here
362*6236dae4SAndroid Build Coastguard Worker            $jobs = 1;
363*6236dae4SAndroid Build Coastguard Worker            $cmds = 0;
364*6236dae4SAndroid Build Coastguard Worker        }
365*6236dae4SAndroid Build Coastguard Worker        elsif($jobs) {
366*6236dae4SAndroid Build Coastguard Worker            if($_ =~ /^  ([^ ]*):/) {
367*6236dae4SAndroid Build Coastguard Worker                $jobname = $1;
368*6236dae4SAndroid Build Coastguard Worker            }
369*6236dae4SAndroid Build Coastguard Worker            elsif($_ =~ /^      - (configure.*)/) {
370*6236dae4SAndroid Build Coastguard Worker                $configure{$jobname}=$1;
371*6236dae4SAndroid Build Coastguard Worker            }
372*6236dae4SAndroid Build Coastguard Worker            elsif($_ =~ /^    resource_class: arm.medium/) {
373*6236dae4SAndroid Build Coastguard Worker                $target{$jobname}="arm";
374*6236dae4SAndroid Build Coastguard Worker            }
375*6236dae4SAndroid Build Coastguard Worker        }
376*6236dae4SAndroid Build Coastguard Worker        if($_ =~ /^workflows:/) {
377*6236dae4SAndroid Build Coastguard Worker            $wf = 1;
378*6236dae4SAndroid Build Coastguard Worker            $cmds = 0;
379*6236dae4SAndroid Build Coastguard Worker        }
380*6236dae4SAndroid Build Coastguard Worker        elsif($wf) {
381*6236dae4SAndroid Build Coastguard Worker            if($_ =~ /^  ([^ ]+):/) {
382*6236dae4SAndroid Build Coastguard Worker                $workflow = $1;
383*6236dae4SAndroid Build Coastguard Worker            }
384*6236dae4SAndroid Build Coastguard Worker            elsif($_ =~ /^      - (.*)\n/) {
385*6236dae4SAndroid Build Coastguard Worker                my $jb = $1;
386*6236dae4SAndroid Build Coastguard Worker                my $cnfgure = $configure{$jb};
387*6236dae4SAndroid Build Coastguard Worker                my $trgt = $target{$jb};
388*6236dae4SAndroid Build Coastguard Worker                $job{'configure'} = $cmd{$cnfgure};
389*6236dae4SAndroid Build Coastguard Worker                $job{'name' }=$workflow;
390*6236dae4SAndroid Build Coastguard Worker                $job{'os'} = "linux";
391*6236dae4SAndroid Build Coastguard Worker                $job{'line'} = $line;
392*6236dae4SAndroid Build Coastguard Worker                $job{'target'} = $trgt if($trgt);
393*6236dae4SAndroid Build Coastguard Worker                submit(\%job);
394*6236dae4SAndroid Build Coastguard Worker            }
395*6236dae4SAndroid Build Coastguard Worker            if($_ =~ / *jobs:/) {
396*6236dae4SAndroid Build Coastguard Worker                $c++;
397*6236dae4SAndroid Build Coastguard Worker            }
398*6236dae4SAndroid Build Coastguard Worker        }
399*6236dae4SAndroid Build Coastguard Worker    }
400*6236dae4SAndroid Build Coastguard Worker    close(G);
401*6236dae4SAndroid Build Coastguard Worker    return $c;
402*6236dae4SAndroid Build Coastguard Worker}
403*6236dae4SAndroid Build Coastguard Worker
404*6236dae4SAndroid Build Coastguard Workersub zuul {
405*6236dae4SAndroid Build Coastguard Worker    my ($tag)=@_;
406*6236dae4SAndroid Build Coastguard Worker    open(G, "git show $tag:zuul.d/jobs.yaml 2>/dev/null|");
407*6236dae4SAndroid Build Coastguard Worker    my $c = 0;
408*6236dae4SAndroid Build Coastguard Worker    my %job;
409*6236dae4SAndroid Build Coastguard Worker    my $line=0;
410*6236dae4SAndroid Build Coastguard Worker    my $type;
411*6236dae4SAndroid Build Coastguard Worker    $job{'file'} = "zuul.d/jobs.yaml";
412*6236dae4SAndroid Build Coastguard Worker    $job{'service'} = "zuul";
413*6236dae4SAndroid Build Coastguard Worker    while(<G>) {
414*6236dae4SAndroid Build Coastguard Worker        $line++;
415*6236dae4SAndroid Build Coastguard Worker        #print "L: ($jobmode / $env) $_";
416*6236dae4SAndroid Build Coastguard Worker        if($_ =~ /^- job:/) {
417*6236dae4SAndroid Build Coastguard Worker            $jobmode = 1; # start a new
418*6236dae4SAndroid Build Coastguard Worker            $type="configure";
419*6236dae4SAndroid Build Coastguard Worker        }
420*6236dae4SAndroid Build Coastguard Worker        if($jobmode) {
421*6236dae4SAndroid Build Coastguard Worker            if($apt) {
422*6236dae4SAndroid Build Coastguard Worker                if($_ =~ /^        - (.*)/) {
423*6236dae4SAndroid Build Coastguard Worker                    my $value = $1;
424*6236dae4SAndroid Build Coastguard Worker                    $job{'install'} .= "$value ";
425*6236dae4SAndroid Build Coastguard Worker                }
426*6236dae4SAndroid Build Coastguard Worker                else {
427*6236dae4SAndroid Build Coastguard Worker                    $apt = 0; # end of curl_apt_packages
428*6236dae4SAndroid Build Coastguard Worker                }
429*6236dae4SAndroid Build Coastguard Worker            }
430*6236dae4SAndroid Build Coastguard Worker            if($env) {
431*6236dae4SAndroid Build Coastguard Worker                if($envcont) {
432*6236dae4SAndroid Build Coastguard Worker                    if($_ =~ /^          (.*)/) {
433*6236dae4SAndroid Build Coastguard Worker                        $job{$envcont} .= "$1 ";
434*6236dae4SAndroid Build Coastguard Worker                    }
435*6236dae4SAndroid Build Coastguard Worker                    else {
436*6236dae4SAndroid Build Coastguard Worker                        $envcont = "";
437*6236dae4SAndroid Build Coastguard Worker                    }
438*6236dae4SAndroid Build Coastguard Worker                }
439*6236dae4SAndroid Build Coastguard Worker                if($_ =~ /^        ([^:]+): (.*)/) {
440*6236dae4SAndroid Build Coastguard Worker                    my ($var, $value) = ($1, $2);
441*6236dae4SAndroid Build Coastguard Worker
442*6236dae4SAndroid Build Coastguard Worker                    if($var eq "C") {
443*6236dae4SAndroid Build Coastguard Worker                        $var = $type;
444*6236dae4SAndroid Build Coastguard Worker                    }
445*6236dae4SAndroid Build Coastguard Worker                    elsif($var eq "T") {
446*6236dae4SAndroid Build Coastguard Worker                        $var = "tests";
447*6236dae4SAndroid Build Coastguard Worker                        if($value eq "cmake") {
448*6236dae4SAndroid Build Coastguard Worker                            # otherwise it remains configure
449*6236dae4SAndroid Build Coastguard Worker                            $type = "cmake";
450*6236dae4SAndroid Build Coastguard Worker                        }
451*6236dae4SAndroid Build Coastguard Worker                    }
452*6236dae4SAndroid Build Coastguard Worker                    elsif($var eq "CC") {
453*6236dae4SAndroid Build Coastguard Worker                        $var = "compiler";
454*6236dae4SAndroid Build Coastguard Worker                    }
455*6236dae4SAndroid Build Coastguard Worker                    elsif($var eq "CHECKSRC") {
456*6236dae4SAndroid Build Coastguard Worker                        $job{'checksrc'} = $value ? "true": "false";
457*6236dae4SAndroid Build Coastguard Worker                        $var = "";
458*6236dae4SAndroid Build Coastguard Worker                    }
459*6236dae4SAndroid Build Coastguard Worker                    else {
460*6236dae4SAndroid Build Coastguard Worker                        $var = "";
461*6236dae4SAndroid Build Coastguard Worker                    }
462*6236dae4SAndroid Build Coastguard Worker                    if($value eq ">-") {
463*6236dae4SAndroid Build Coastguard Worker                        $envcont = $var;
464*6236dae4SAndroid Build Coastguard Worker                    }
465*6236dae4SAndroid Build Coastguard Worker                    elsif($var) {
466*6236dae4SAndroid Build Coastguard Worker                        $job{$var} = $value;
467*6236dae4SAndroid Build Coastguard Worker                    }
468*6236dae4SAndroid Build Coastguard Worker                }
469*6236dae4SAndroid Build Coastguard Worker                elsif($_ !~ /^        /) {
470*6236dae4SAndroid Build Coastguard Worker                    # end of envs
471*6236dae4SAndroid Build Coastguard Worker                    $env = 0;
472*6236dae4SAndroid Build Coastguard Worker                }
473*6236dae4SAndroid Build Coastguard Worker            }
474*6236dae4SAndroid Build Coastguard Worker            if($_ =~ /^      curl_env:/) {
475*6236dae4SAndroid Build Coastguard Worker                $env = 1; # start of envs
476*6236dae4SAndroid Build Coastguard Worker            }
477*6236dae4SAndroid Build Coastguard Worker            elsif($_ =~ /^      curl_apt_packages:/) {
478*6236dae4SAndroid Build Coastguard Worker                $apt = 1; # start of apt packages
479*6236dae4SAndroid Build Coastguard Worker            }
480*6236dae4SAndroid Build Coastguard Worker            elsif($_ =~ /^    name: (.*)/) {
481*6236dae4SAndroid Build Coastguard Worker                my $n = $1;
482*6236dae4SAndroid Build Coastguard Worker                if($n eq "curl-base") {
483*6236dae4SAndroid Build Coastguard Worker                    # not counted
484*6236dae4SAndroid Build Coastguard Worker                    $jobmode = 0;
485*6236dae4SAndroid Build Coastguard Worker                    next;
486*6236dae4SAndroid Build Coastguard Worker                }
487*6236dae4SAndroid Build Coastguard Worker                $job{'name'} = $n;
488*6236dae4SAndroid Build Coastguard Worker            }
489*6236dae4SAndroid Build Coastguard Worker            elsif($_ =~ /^\n\z/) {
490*6236dae4SAndroid Build Coastguard Worker                # a job is complete
491*6236dae4SAndroid Build Coastguard Worker                $job{'line'}=$line;
492*6236dae4SAndroid Build Coastguard Worker                $job{'os'}="linux";
493*6236dae4SAndroid Build Coastguard Worker                submit(\%job);
494*6236dae4SAndroid Build Coastguard Worker                $jobmode = 0;
495*6236dae4SAndroid Build Coastguard Worker                $c++;
496*6236dae4SAndroid Build Coastguard Worker            }
497*6236dae4SAndroid Build Coastguard Worker        }
498*6236dae4SAndroid Build Coastguard Worker    }
499*6236dae4SAndroid Build Coastguard Worker    close(G);
500*6236dae4SAndroid Build Coastguard Worker    return $c;
501*6236dae4SAndroid Build Coastguard Worker}
502*6236dae4SAndroid Build Coastguard Worker
503*6236dae4SAndroid Build Coastguard Workermy $tag = `git rev-parse --abbrev-ref HEAD 2>/dev/null` || "master";
504*6236dae4SAndroid Build Coastguard Workerchomp $tag;
505*6236dae4SAndroid Build Coastguard Workergithubactions($tag);
506*6236dae4SAndroid Build Coastguard Workerazurepipelines($tag);
507*6236dae4SAndroid Build Coastguard Workerappveyor($tag);
508*6236dae4SAndroid Build Coastguard Workerzuul($tag);
509*6236dae4SAndroid Build Coastguard Workercirrus($tag);
510*6236dae4SAndroid Build Coastguard Workercircle($tag);
511