Skip to content

Commit 649fd5e

Browse files
committed
Automate formula build and asset upload
1 parent 92f1547 commit 649fd5e

File tree

2 files changed

+81
-3
lines changed

2 files changed

+81
-3
lines changed

.github/workflows/add-formula.yml

Lines changed: 78 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,78 @@
1+
name: Add CBMC formula
2+
3+
on:
4+
schedule:
5+
- cron: "0 */6 * * *" # Run this every 6 hours
6+
workflow_dispatch: # Allow manual dispatching for a custom branch / tag.
7+
8+
permissions:
9+
checks: write
10+
contents: write
11+
pull-requests: write
12+
13+
jobs:
14+
create-formula-pr:
15+
runs-on: ubuntu-latest
16+
steps:
17+
- name: Checkout repository
18+
uses: actions/checkout@v4
19+
20+
- name: Obtain latest CBMC release
21+
env:
22+
GH_TOKEN: ${{ github.token }}
23+
run: |
24+
CBMC_LATEST=$(gh -R diffblue/cbmc release list | grep Latest | awk '{print $1}' | cut -f2 -d-)
25+
echo "CBMC_LATEST: ${CBMC_LATEST}"
26+
echo "CBMC_LATEST=${CBMC_LATEST}" >> $GITHUB_ENV
27+
# check whether we already have the formula
28+
if [ -e "Formula/cbmc@${CBMC_LATEST}.rb" ] ; then
29+
echo "next_step=none" >> $GITHUB_ENV
30+
else
31+
CBMC_LATEST_REV=$(gh -R diffblue/cbmc release view cbmc-"${CBMC_LATEST}" --json targetCommitish | jq -r '.targetCommitish')
32+
echo "CBMC_LATEST_REV: ${CBMC_LATEST_REV}"
33+
echo "CBMC_LATEST_REV=${CBMC_LATEST_REV}" >> $GITHUB_ENV
34+
echo "next_step=check_brew" >> $GITHUB_ENV
35+
fi
36+
37+
- name: Set up Homebrew
38+
if: ${{ env.next_step == 'check_brew' }}
39+
uses: Homebrew/actions/setup-homebrew@master
40+
41+
- name: Check CBMC version in brew
42+
if: ${{ env.next_step == 'check_brew' }}
43+
run: |
44+
brew update
45+
CBMC_BREW=$(brew info cbmc --json | jq -r '.[0].versions.stable')
46+
echo "CBMC_BREW: ${CBMC_BREW}"
47+
if [ "x${CBMC_BREW}" = "x${CBMC_LATEST}" ] ; then
48+
formula_base=$(ls Formula | tail -1)
49+
sed '/bottle do/Q' "Formula/${formula_base}" > "Formula/cbmc@${CBMC_LATEST}.rb"
50+
version_no_dot=$(echo "${CBMC_LATEST}" | sed 's/\.//g')
51+
sed -i "1s/CbmcAT[[:digit:]]*/CbmcAT${version_no_dot}/" "Formula/cbmc@${CBMC_LATEST}.rb"
52+
sed -i "5s/\".*\"/\"cbmc-${CBMC_LATEST}\"/" "Formula/cbmc@${CBMC_LATEST}.rb"
53+
sed -i "6s/\".*\"/\"cbmc-${CBMC_LATEST_REV}\"/" "Formula/cbmc@${CBMC_LATEST}.rb"
54+
./transform_binary.sh "${CBMC_LATEST}" >> "Formula/cbmc@${CBMC_LATEST}.rb"
55+
sed -n '1,/end$/!p' "Formula/${formula_base}" >> "Formula/cbmc@${CBMC_LATEST}.rb"
56+
echo "next_step=upload_and_create_pr" >> $GITHUB_ENV
57+
else
58+
echo "next_step=none" >> $GITHUB_ENV
59+
fi
60+
61+
- name: Upload bottles
62+
if: ${{ env.next_step == 'upload_and_create_pr' }}
63+
uses: softprops/action-gh-release@v2
64+
with:
65+
name: bag-of-goodies
66+
files: cbmc@*.tar.gz
67+
68+
- name: Create Pull Request
69+
if: ${{ env.next_step == 'upload_and_create_pr' }}
70+
uses: peter-evans/create-pull-request@v7
71+
with:
72+
commit-message: Add formula for CBMC ${{ env.CBMC_LATEST }}
73+
add-paths: Formula/cbmc@*.rb
74+
branch: cbmc-${{ env.CBMC_LATEST }}
75+
delete-branch: true
76+
title: 'Add formula for CBMC ${{ env.CBMC_LATEST }}'
77+
body: >
78+
Add brew formula for CBMC's latest release.

transform_binary.sh

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -13,8 +13,8 @@ CBMC_STRING="CbmcAT"
1313
VERSION_PROCESSED="${VERSION//./}"
1414
FORMULA_VERSION="${CBMC_STRING}${VERSION_PROCESSED}"
1515

16-
echo "bottle do"
17-
echo " root_url \"https://github.com/diffblue/homebrew-cbmc/releases/download/bag-of-goodies\""
16+
echo " bottle do"
17+
echo " root_url \"https://github.com/diffblue/homebrew-cbmc/releases/download/bag-of-goodies\""
1818
for TAG in "arm64_sonoma" "arm64_ventura" "arm64_monterey" "sonoma" "ventura" "monterey" "x86_64_linux"
1919
do
2020
#echo "Processing bottle for $VERSION -- $TAG"
@@ -46,4 +46,4 @@ do
4646
LINE="${TAG_SPACED}\"${SHA%%[[:space:]]*}\""
4747
echo "${LINE}"
4848
done
49-
echo end
49+
echo " end"

0 commit comments

Comments
 (0)