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