[pw-ci] [RFC v3 2/2] github_get_logs: handle multiple failed step in a single job

Salvatore Daniele sdaniele at redhat.com
Mon Aug 2 21:42:48 UTC 2021


On Mon, Aug 2, 2021 at 5:16 PM Michael Santana <msantana at redhat.com> wrote:

> On Thu, Jul 29, 2021 at 5:36 PM Salvatore Daniele <sdaniele at redhat.com>
> wrote:
> >
> > A github job can fail multiple steps within a single job.
> > The current implementation fails to pull logs when handed a
> > job with multiple failed steps.
> >
> > This patch generates logs for each step of each job.
> >
> > Signed-off-by: Salvatore Daniele <sdaniele at redhat.com>
> > ---
> >  github_get_logs.sh | 9 +++++----
> >  1 file changed, 5 insertions(+), 4 deletions(-)
> >
> > diff --git a/github_get_logs.sh b/github_get_logs.sh
> > index 2f6cc9c..1cd4086 100755
> > --- a/github_get_logs.sh
> > +++ b/github_get_logs.sh
> > @@ -99,26 +99,27 @@ print_errored_logs_for_commit () {
> >      echo "-----------------------Summary of failed
> steps-----------------------"
> >      echo "$jobs_results" | jq -r ".[].name" | while read -r job; do
> >          echo "\"$job\" failed at step \"$(echo "$jobs_results" | jq -r
> ".[] | \
> > -            select(.name==\"$job\") | .failed_step.name")\""
> > +            select(.name==\"$job\") | .failed_step.name")\"" | sed
> 'N;s/\n/, /'
> jq does not have a built-in way to make a comma separated list? if not,
> it's ok.
>
>  I didn't look very hard when I saw that sed worked, but I will double
check this. That would probably be cleaner.

I thought sed could not replace new lines. Is that what the N flag is for?
>

Yes, it reads the next line into pattern space.

>      done
> >      echo "----------------------End summary of failed
> steps--------------------"
> >
> >      echo ""
> >      echo "-------------------------------BEGIN
> LOGS----------------------------"
> >      spacing=0
> > +
> >      # Print out logs for failed jobs
> > -    echo "$jobs_results" | jq -r ".[].name" | while read -r job; do
> > +    echo "$jobs_results" | jq -r '.[] | .name, .failed_step.name,
> .failed_step.number'| while \
> > +        read -r job && read -r step && read -r log_number; do
> > +
> Just nit-picking:
> why switch from " to ' ?
> add a space between ' and |
> remove 4 empty trailing spaces


Yes will do!


>

One question, do the arguments come out one on each line from jq? is
> that why you had to call read separately multiple times?
>

Yes, if I recall correctly when I put them all in 1 read statement it would
read 1 work into each (so the first 3 words of the job title).
If I tried "while IFS="\n" read -r job read step" it would read only into
job each time, leaving the other two variables empty.
Perhaps there is a cleaner way to get this while loop to behave, but I was
struggling to find it.


> >          if [ ! "$spacing" -eq "0" ]
> >          then
> >              echo -ne "\n\n\n\n"
> >          fi
> >
> > -        step="\"$(echo "$jobs_results" | jq -r ".[] |
> select(.name==\"$job\") | .failed_step.name")\""
> >          echo
> "####################################################################################"
> >          echo "#### [Begin job log] \"$job\" at step $step"
> >          echo
> "####################################################################################"
> >
> > -        log_number=$(echo "$jobs_results" | jq ".[] |
> select(.name==\"$job\") | .failed_step.number")
> >          cat "build_logs_series_$series_id/$job/$log_number"_* | tail -n
> 25 | cut -d' ' -f2- | sed 's/\r$//'
> >
> >          echo
> "####################################################################################"
> > --
> > 2.31.1
> >
> > _______________________________________________
> > Pwci mailing list
> > Pwci at lists.esnacc.org
> > http://mail.esnacc.org/mailman/listinfo/pwci
> >
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.esnacc.org/pipermail/pwci/attachments/20210802/aca9d33f/attachment-0001.html>


More information about the Pwci mailing list