Skip to content

Commit 18fe6bb

Browse files
authored
[CI] refactor: turn build logic into a reusable component (#2652)
1 parent 977274a commit 18fe6bb

2 files changed

Lines changed: 111 additions & 67 deletions

File tree

.github/workflows/build.yml

Lines changed: 107 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,107 @@
1+
name: build
2+
3+
on:
4+
workflow_call:
5+
inputs:
6+
checkout_ref:
7+
description: Git ref or SHA to build
8+
required: true
9+
type: string
10+
outputs:
11+
version:
12+
description: Version derived from the built Linux artifact
13+
value: ${{ jobs.metadata.outputs.version }}
14+
15+
permissions:
16+
contents: read
17+
18+
jobs:
19+
build:
20+
if: github.repository == 'verus-lang/verus'
21+
22+
strategy:
23+
matrix:
24+
build: [macos, macos-x86_64, linux, windows]
25+
include:
26+
- build: macos
27+
os: macos-14
28+
release_name: verus-arm64-macos
29+
- build: macos-x86_64
30+
os: macos-15-intel
31+
release_name: verus-x86-macos
32+
- build: linux
33+
os: ubuntu-24.04
34+
release_name: verus-x86-linux
35+
- build: windows
36+
os: windows-2022
37+
release_name: verus-x86-win
38+
39+
runs-on: ${{ matrix.os }}
40+
41+
defaults:
42+
run:
43+
shell: bash
44+
45+
steps:
46+
- name: checkout
47+
uses: actions/checkout@v6
48+
with:
49+
ref: ${{ inputs.checkout_ref }}
50+
51+
- name: get z3
52+
working-directory: ./source
53+
run: |
54+
./tools/get-z3.sh
55+
echo "z3 version $(./z3 --version)"
56+
57+
- name: setup rust
58+
uses: dtolnay/rust-toolchain@master
59+
with:
60+
toolchain: 1.96.0
61+
62+
- name: build
63+
working-directory: ./source
64+
run: |
65+
. ../tools/activate
66+
vargo clean
67+
vargo build --release
68+
69+
- name: create archive
70+
working-directory: ./source
71+
run: |
72+
./target-verus/release/verus --version --output-json > ./target-verus/release/version.json
73+
cp -R ./target-verus/release "../${{ matrix.release_name }}"
74+
cd ..
75+
if [ "${{ matrix.os }}" == "windows-2022" ]; then
76+
7z a "${{ matrix.release_name }}.zip" "./${{ matrix.release_name }}"
77+
else
78+
zip -r "${{ matrix.release_name }}.zip" "./${{ matrix.release_name }}"
79+
fi
80+
81+
- name: upload release artifact
82+
uses: actions/upload-artifact@v7
83+
with:
84+
name: ${{ matrix.release_name }}
85+
path: ${{ matrix.release_name }}.zip
86+
87+
metadata:
88+
needs: [build]
89+
runs-on: ubuntu-24.04
90+
outputs:
91+
version: ${{ steps.read_version.outputs.version }}
92+
steps:
93+
- name: download linux artifact
94+
uses: actions/download-artifact@v8
95+
with:
96+
name: verus-x86-linux
97+
path: verus-x86-linux
98+
99+
- name: read version
100+
id: read_version
101+
shell: bash
102+
run: |
103+
cd verus-x86-linux
104+
unzip verus-x86-linux.zip
105+
version="$(cat ./verus-x86-linux/version.txt)"
106+
echo "version=$version" >> "$GITHUB_OUTPUT"
107+
echo "${version}"

.github/workflows/rolling-release.yml

Lines changed: 4 additions & 67 deletions
Original file line numberDiff line numberDiff line change
@@ -16,69 +16,9 @@ jobs:
1616
# build the release artifacts
1717
build:
1818
if: github.repository == 'verus-lang/verus'
19-
20-
strategy:
21-
matrix:
22-
build: [macos, macos-x86_64, linux, windows]
23-
include:
24-
- build: macos
25-
os: macos-14
26-
release_name: verus-arm64-macos
27-
- build: macos-x86_64
28-
os: macos-15-intel
29-
release_name: verus-x86-macos
30-
- build: linux
31-
os: ubuntu-24.04
32-
release_name: verus-x86-linux
33-
- build: windows
34-
os: windows-2022
35-
release_name: verus-x86-win
36-
37-
runs-on: ${{ matrix.os }}
38-
39-
defaults:
40-
run:
41-
shell: bash
42-
43-
steps:
44-
- name: checkout
45-
uses: actions/checkout@v6
46-
47-
- name: get z3
48-
working-directory: ./source
49-
run: |
50-
./tools/get-z3.sh
51-
echo "z3 version $(./z3 --version)"
52-
53-
- name: setup rust
54-
uses: dtolnay/rust-toolchain@master
55-
with:
56-
toolchain: 1.96.0
57-
58-
- name: build
59-
working-directory: ./source
60-
run: |
61-
. ../tools/activate
62-
vargo clean
63-
vargo build --release
64-
65-
- name: create archive
66-
working-directory: ./source
67-
run: |
68-
./target-verus/release/verus --version --output-json > ./target-verus/release/version.json
69-
cp -R ./target-verus/release "../${{ matrix.release_name }}"
70-
cd ..
71-
if [ "${{ matrix.os }}" == "windows-2022" ]; then
72-
7z a "${{ matrix.release_name }}.zip" "./${{ matrix.release_name }}"
73-
else
74-
zip -r "${{ matrix.release_name }}.zip" "./${{ matrix.release_name }}"
75-
fi
76-
77-
- name: upload release artifact
78-
uses: actions/upload-artifact@v7
79-
with:
80-
name: ${{ matrix.release_name }}
81-
path: ${{ matrix.release_name }}.zip
19+
uses: ./.github/workflows/build.yml
20+
with:
21+
checkout_ref: ${{ github.sha }}
8222

8323
# publish the release artifacts to the rolling pre-release
8424
publish:
@@ -91,10 +31,7 @@ jobs:
9131
- name: create release tag
9232
shell: bash
9333
run: |
94-
cd verus-x86-linux
95-
unzip verus-x86-linux.zip
96-
cd ..
97-
version="$(cat ./verus-x86-linux/verus-x86-linux/version.txt)"
34+
version="${{ needs.build.outputs.version }}"
9835
{
9936
echo "TAG_NAME=release/rolling/${version}"
10037
echo "RELEASE_NAME=${version}"

0 commit comments

Comments
 (0)