On 30 Nov 2023, at 14:28, Ilya Maximets wrote:

> On 11/30/23 14:25, Ilya Maximets wrote:
>> On 11/30/23 14:08, Eelco Chaudron wrote:
>>>
>>>
>>> On 30 Nov 2023, at 13:29, Simon Horman wrote:
>>>
>>>> On Tue, Nov 28, 2023 at 06:50:59PM +0100, Eelco Chaudron wrote:
>>>>>
>>>>>
>>>>> On 27 Nov 2023, at 19:18, Ilya Maximets wrote:
>>>>>
>>>>>> On 11/27/23 18:36, Eelco Chaudron wrote:
>>>>
>>>> ...
>>>>
>>>>>>> diff --git a/.github/workflows/build-and-test.yml 
>>>>>>> b/.github/workflows/build-and-test.yml
>>>>>>> index 09654205e..d15105e7d 100644
>>>>>>> --- a/.github/workflows/build-and-test.yml
>>>>>>> +++ b/.github/workflows/build-and-test.yml
>>>>>>> @@ -223,6 +223,102 @@ jobs:
>>>>>>>          name: logs-linux-${{ join(matrix.*, '-') }}
>>>>>>>          path: logs.tgz
>>>>>>>
>>>>>>> +  build-clang-analyze:
>>>>>>> +    needs: build-dpdk
>>>>>>> +    env:
>>>>>>> +      dependencies: |
>>>>>>> +        automake bc clang-tools libbpf-dev libnuma-dev libpcap-dev \
>>>>>>> +        libunbound-dev libunwind-dev libssl-dev libtool llvm-dev \
>>>>>>> +        python3-unbound
>>>>>>> +      CC:   clang
>>>>>>> +      DPDK: dpdk
>>>>>>> +      CLANG_ANALYZE: true
>>>>>>> +    name: clang-analyze
>>>>>>> +    runs-on: ubuntu-22.04
>>>>>>> +    timeout-minutes: 30
>>>>>>> +
>>>>>>> +    steps:
>>>>>>> +    - name: checkout
>>>>>>> +      uses: actions/checkout@v3
>>>>>>> +
>>>>>>> +    - name: get base branch sha
>>>>>>> +      id: base_branch
>>>>>>> +      run: |
>>>>>>> +        if [ "$GITHUB_EVENT_NAME" = "pull_request" ]; then
>>>>>>> +          echo "sha=$BASE_SHA" >> $GITHUB_OUTPUT
>>>>>>> +        else
>>>>>>> +          if [ "$EVENT_BEFORE" = 
>>>>>>> "0000000000000000000000000000000000000000" ]; then
>>>>>>> +            echo "sha=$DEFAULT_BRANCH" >> $GITHUB_OUTPUT
>>>>>>
>>>>>> How this is going ot work on patches for older branches?
>>>>>
>>>>> Good question, it’s not :( Took a little bit to figure out how to do 
>>>>> this, as we have no reference branch. The solution I came up with was to 
>>>>> figure out all parent branches, and use the most recent main/master or 
>>>>> branch-x.x one. So it looks like this:
>>>>>
>>>>>         if [ "$GITHUB_EVENT_NAME" = "pull_request" ]; then
>>>>>           echo "sha=$BASE_SHA" >> $GITHUB_OUTPUT
>>>>>         else
>>>>>           if [ "$EVENT_BEFORE" = 
>>>>> "0000000000000000000000000000000000000000" ]; then
>>>>>             set sha=$(git log --simplify-by-decoration --decorate=full \
>>>>>                       --pretty=format:'%d' | \
>>>>>                       grep -oP 'refs/remotes/origin/\K[^, )]+' | \
>>>>>                       grep -m1 -E 
>>>>> '^master$|^main$|^branch-[0-9]+\.[0-9]+$')
>>>>>             [ -z "$sha" ] && echo "sha=$DEFAULT_BRANCH" >> $GITHUB_OUTPUT 
>>>>> \
>>>>>                           || echo "sha=$sha" >> $GITHUB_OUTPUT
>>>>>           else
>>>>>             echo "sha=$EVENT_BEFORE" >> $GITHUB_OUTPUT
>>>>>           fi
>>>>>         fi
>>>>
>>>> Hi Eelco,
>>>>
>>>> is this useful here?
>>>>
>>>>   git describe --all --no-abbrev --always \
>>>>     --match master --match main --match branch-[0-9].[0-9]*
>>>
>>> Thanks Simon, I was looking for something like this, but I was not able to 
>>> get it with ‘git describe’, but now I see the match option is the key ;)
>>>
>>> I guess it can now be changed to:
>>>
>>>   git describe --all --no-abbrev --always \
>>>     --match master --match main --match branch-[0-9].[0-9]* | sed 's/.*\///'
>>>
>>> Will send a v3 next week, waiting for some more potential feedback…
>>
>> Maybe we could just make it simple and test only the last commit (HEAD~1)?
>> Unless the base is explicitly known.  It should be enough for a 0-day bot,
>> because it is testing patch sets incrementally, i.e. applying patches one
>> by one.

This will work for the robot, but not on our main branch? But I guess you only 
mean for this case where we do not have a valid EVENT_BEFORE?

>> Also, the EVENT_BEFORE seems to not be documented anywhere, I wonder how
>> safe it is to rely on this variable.  Or did I miss the docs somewhere?

It’s the API variable ${{ github.event.before }} --> 
https://docs.github.com/en/rest/overview/github-event-types?apiVersion=2022-11-28#event-payload-object-for-pushevent

>> Would also be nice to know how this variable behaves on force-push with a
>> branch history rolling back as it might end up with spurious failures during
>> local feature development.  I also frequently use the same branches in my
>> fork during code review, force-pushing them frequently, so this process
>> may be affected.

Thought I looked at the forced push as I use this all the time with stg, and I 
think it was the ref of the overwritten pushed branch (but I’ll take a look 
again before I send the v3).

> One more thing about clang-analyze.  Should the clang version be part of
> the cache key?  I'm guessing that if the previous cache is constructed
> with an older version of the checker, we may have extra warnings reported,
> unrelated to the current patch.

Good catch!!

_______________________________________________
dev mailing list
d...@openvswitch.org
https://mail.openvswitch.org/mailman/listinfo/ovs-dev

Reply via email to