Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Automate CBMC update #2895

Merged
merged 9 commits into from
Nov 29, 2023
85 changes: 85 additions & 0 deletions .github/workflows/cbmc-update.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,85 @@
# Copyright Kani Contributors
# SPDX-License-Identifier: Apache-2.0 OR MIT

name: Attempt CBMC update

on:
schedule:
- cron: "30 4 * * Mon" # Run this every Monday at 04:30 UTC
tautschnig marked this conversation as resolved.
Show resolved Hide resolved
workflow_dispatch: # Allow manual dispatching for a custom branch / tag.

permissions:
checks: write
contents: write
issues: write
pull-requests: write

jobs:
create-cargo-update-pr:
runs-on: ubuntu-22.04
steps:
- name: Checkout Kani
uses: actions/checkout@v3

- name: Setup Kani Dependencies
uses: ./.github/actions/setup
with:
os: ubuntu-22.04

- name: Compare CBMC versions and determine next step
env:
GH_TOKEN: ${{ github.token }}
run: |
grep ^CBMC_VERSION kani-dependencies >> $GITHUB_ENV
CBMC_LATEST=$(gh -R diffblue/cbmc release list | grep Latest | awk '{print $1}' | cut -f2 -d-)
echo "CBMC_LATEST=$CBMC_LATEST" >> $GITHUB_ENV
# check whether the version has changed at all
if [ x$CBMC_LATEST = x$CBMC_VERSION ] ; then
tautschnig marked this conversation as resolved.
Show resolved Hide resolved
echo "next_step=none" >> $GITHUB_ENV
# check whether we already have an existing issue for a failing
# upgrade
elif gh issue list -S \
"CBMC upgrade to $CBMC_LATEST failed" \
--json number,title | grep title ; then
tautschnig marked this conversation as resolved.
Show resolved Hide resolved
echo "next_step=none" >> $GITHUB_ENV
# check whether we already have a branch (and thus: a PR) for a
# successful upgrade
elif ! git ls-remote --exit-code origin cbmc-$CBMC_LATEST ; then
CBMC_LATEST_MAJOR=$(echo $CBMC_LATEST | cut -f1 -d.)
CBMC_LATEST_MINOR=$(echo $CBMC_LATEST | cut -f2 -d.)
sed -i "s/^CBMC_MAJOR=.*/CBMC_MAJOR=\"$CBMC_MAJOR\"/" kani-dependencies
sed -i "s/^CBMC_MINOR=.*/CBMC_MINOR=\"$CBMC_MINOR\"/" kani-dependencies
sed -i "s/^CBMC_VERSION=.*/CBMC_VERSION=\"$CBMC_LATEST\"/" kani-dependencies
git diff
if ! ./scripts/kani-regression.sh ; then
echo "next_step=create_issue" >> $GITHUB_ENV
else
echo "next_step=create_pr" >> $GITHUB_ENV
fi
# we already have a PR, nothing to be done
else
echo "next_step=none" >> $GITHUB_ENV
fi

- name: Create Pull Request
if: ${{ env.next_step == 'create_pr' }}
uses: peter-evans/create-pull-request@v5
tautschnig marked this conversation as resolved.
Show resolved Hide resolved
with:
commit-message: Upgrade CBMC from ${{ env.CBMC_VERSION }} to ${{ env.CBMC_LATEST }}
branch: cbmc-${{ env.CBMC_LATEST }}
delete-branch: true
title: 'Automatic upgrade of CBMC from ${{ env.CBMC_VERSION }} to ${{ env.CBMC_LATEST }}'
body: >
Upgrade CBMC to its latest release.

- name: Create Issue
if: ${{ env.next_step == 'create_issue' }}
uses: dacbd/create-issue-action@main
with:
token: ${{ github.token }}
title: 'CBMC upgrade to ${{ env.CBMC_LATEST }} failed'
body: >
Updating CBMC from ${{ evn.CBMC_VERSION }} to ${{ env.CBMC_LATEST }} failed.

The failed automated run
[can be found here.](https://github.com/${{ github.repository }}/actions/runs/${{ github.run_id }})