3
0
Fork 0
mirror of https://github.com/Z3Prover/z3 synced 2026-01-18 16:28:56 +00:00
z3/.github/workflows/nightly.yml
2026-01-17 12:23:05 -08:00

595 lines
18 KiB
YAML

name: Nightly Build
on:
schedule:
# Run at 2 AM UTC every day
- cron: '0 2 * * *'
workflow_dispatch:
inputs:
force_build:
description: 'Force nightly build'
required: false
default: 'true'
permissions:
contents: write
env:
MAJOR: '4'
MINOR: '15'
PATCH: '5'
jobs:
# ============================================================================
# BUILD STAGE
# ============================================================================
mac-build-x64:
name: "Mac Build x64"
runs-on: macos-latest
timeout-minutes: 90
steps:
- name: Checkout code
uses: actions/checkout@v6.0.1
- name: Setup Python
uses: actions/setup-python@v6
with:
python-version: '3.x'
- name: Build
run: python scripts/mk_unix_dist.py --dotnet-key=$GITHUB_WORKSPACE/resources/z3.snk --arch=x64
- name: Clone z3test
run: git clone https://github.com/z3prover/z3test z3test
- name: Test
run: python z3test/scripts/test_benchmarks.py build-dist/z3 z3test/regressions/smt2
- name: Upload artifact
uses: actions/upload-artifact@v6
with:
name: macOsBuild
path: dist/*.zip
retention-days: 2
mac-build-arm64:
name: "Mac ARM64 Build"
runs-on: macos-latest
timeout-minutes: 90
steps:
- name: Checkout code
uses: actions/checkout@v5
- name: Setup Python
uses: actions/setup-python@v6
with:
python-version: '3.x'
- name: Build
run: python scripts/mk_unix_dist.py --dotnet-key=$GITHUB_WORKSPACE/resources/z3.snk --arch=arm64
- name: Clone z3test
run: git clone https://github.com/z3prover/z3test z3test
- name: Upload artifact
uses: actions/upload-artifact@v6
with:
name: MacArm64
path: dist/*.zip
retention-days: 2
ubuntu-build:
name: "Ubuntu build"
runs-on: ubuntu-latest
timeout-minutes: 90
steps:
- name: Checkout code
uses: actions/checkout@v6.0.1
- name: Setup Python
uses: actions/setup-python@v6
with:
python-version: '3.x'
- name: Build
run: python scripts/mk_unix_dist.py --dotnet-key=$GITHUB_WORKSPACE/resources/z3.snk
- name: Clone z3test
run: git clone https://github.com/z3prover/z3test z3test
- name: Test
run: python z3test/scripts/test_benchmarks.py build-dist/z3 z3test/regressions/smt2
- name: Upload artifact
uses: actions/upload-artifact@v6
with:
name: UbuntuBuild
path: dist/*.zip
retention-days: 2
ubuntu-arm64:
name: "Ubuntu ARM64 build"
runs-on: ubuntu-latest
timeout-minutes: 90
steps:
- name: Checkout code
uses: actions/checkout@v6.0.1
- name: Setup Python
uses: actions/setup-python@v6
with:
python-version: '3.x'
- name: Download ARM toolchain
run: curl -L -o /tmp/arm-toolchain.tar.xz 'https://developer.arm.com/-/media/Files/downloads/gnu/13.3.rel1/binrel/arm-gnu-toolchain-13.3.rel1-x86_64-aarch64-none-linux-gnu.tar.xz'
- name: Extract ARM toolchain
run: |
mkdir -p /tmp/arm-toolchain/
tar xf /tmp/arm-toolchain.tar.xz -C /tmp/arm-toolchain/ --strip-components=1
- name: Build
run: |
export PATH="/tmp/arm-toolchain/bin:/tmp/arm-toolchain/aarch64-none-linux-gnu/libc/usr/bin:$PATH"
echo $PATH
stat /tmp/arm-toolchain/bin/aarch64-none-linux-gnu-gcc
python scripts/mk_unix_dist.py --nodotnet --arch=arm64
- name: Upload artifact
uses: actions/upload-artifact@v6
with:
name: UbuntuArm64
path: dist/*.zip
retention-days: 2
ubuntu-doc:
name: "Ubuntu Doc build"
runs-on: ubuntu-latest
timeout-minutes: 90
steps:
- name: Checkout code
uses: actions/checkout@v6.0.1
- name: Setup Python
uses: actions/setup-python@v6
with:
python-version: '3.x'
- name: Install dependencies
run: |
pip3 install importlib-resources
sudo apt-get update
sudo apt-get install -y ocaml opam libgmp-dev doxygen graphviz
- name: Setup OCaml
run: |
opam init -y
eval $(opam config env)
opam install zarith ocamlfind -y
- name: Build
run: |
eval $(opam config env)
python scripts/mk_make.py --ml
cd build
make -j3
make -j3 examples
make -j3 test-z3
cd ..
- name: Generate documentation
run: |
eval $(opam config env)
cd doc
python3 mk_api_doc.py --mld --z3py-package-path=../build/python/z3
python3 mk_params_doc.py
mkdir -p api/html/ml
ocamldoc -html -d api/html/ml -sort -hide Z3 -I $(ocamlfind query zarith) -I ../build/api/ml ../build/api/ml/z3enums.mli ../build/api/ml/z3.mli
cd ..
- name: Create documentation archive
run: zip -r z3doc.zip doc/api
- name: Upload artifact
uses: actions/upload-artifact@v6
with:
name: UbuntuDoc
path: z3doc.zip
retention-days: 2
manylinux-python-amd64:
name: "Python bindings (manylinux AMD64)"
runs-on: ubuntu-latest
timeout-minutes: 90
container: quay.io/pypa/manylinux_2_28_x86_64:latest
steps:
- name: Checkout code
uses: actions/checkout@v6.0.1
- name: Setup Python environment
run: |
/opt/python/cp38-cp38/bin/python -m venv $PWD/env
echo "$PWD/env/bin" >> $GITHUB_PATH
- name: Install build tools
run: pip install build git+https://github.com/rhelmot/auditwheel
- name: Build wheels
run: cd src/api/python && python -m build && AUDITWHEEL_PLAT= auditwheel repair --best-plat dist/*.whl && cd ../../..
- name: Test wheels
run: pip install ./src/api/python/wheelhouse/*.whl && python - <src/api/python/z3test.py z3 && python - <src/api/python/z3test.py z3num
- name: Upload artifact
uses: actions/upload-artifact@v6
with:
name: ManyLinuxPythonBuildAMD64
path: src/api/python/wheelhouse/*.whl
retention-days: 2
manylinux-python-arm64:
name: "Python bindings (manylinux ARM64 cross)"
runs-on: ubuntu-latest
timeout-minutes: 90
container: quay.io/pypa/manylinux_2_28_x86_64:latest
steps:
- name: Checkout code
uses: actions/checkout@v6.0.1
- name: Download ARM toolchain
run: curl -L -o /tmp/arm-toolchain.tar.xz 'https://developer.arm.com/-/media/Files/downloads/gnu/13.3.rel1/binrel/arm-gnu-toolchain-13.3.rel1-x86_64-aarch64-none-linux-gnu.tar.xz'
- name: Extract ARM toolchain
run: |
mkdir -p /tmp/arm-toolchain/
tar xf /tmp/arm-toolchain.tar.xz -C /tmp/arm-toolchain/ --strip-components=1
- name: Setup Python environment
run: |
/opt/python/cp38-cp38/bin/python -m venv $PWD/env
echo "$PWD/env/bin" >> $GITHUB_PATH
echo "/tmp/arm-toolchain/bin" >> $GITHUB_PATH
echo "/tmp/arm-toolchain/aarch64-none-linux-gnu/libc/usr/bin" >> $GITHUB_PATH
- name: Install build tools
run: |
echo $PATH
stat $(which aarch64-none-linux-gnu-gcc)
pip install build git+https://github.com/rhelmot/auditwheel
- name: Build wheels
run: cd src/api/python && CC=aarch64-none-linux-gnu-gcc CXX=aarch64-none-linux-gnu-g++ AR=aarch64-none-linux-gnu-ar LD=aarch64-none-linux-gnu-ld Z3_CROSS_COMPILING=aarch64 python -m build && AUDITWHEEL_PLAT= auditwheel repair --best-plat dist/*.whl && cd ../../..
- name: Upload artifact
uses: actions/upload-artifact@v6
with:
name: ManyLinuxPythonBuildArm64
path: src/api/python/wheelhouse/*.whl
retention-days: 2
windows-build-x64:
name: "Windows x64 build"
runs-on: windows-latest
timeout-minutes: 120
steps:
- name: Checkout code
uses: actions/checkout@v6.0.1
- name: Setup Python
uses: actions/setup-python@v6
with:
python-version: '3.x'
- name: Build
shell: cmd
run: |
call "C:\Program Files\Microsoft Visual Studio\2022\Enterprise\VC\Auxiliary\Build\vcvarsall.bat" x64
python scripts\mk_win_dist.py --x64-only --dotnet-key=%GITHUB_WORKSPACE%\resources\z3.snk --zip
- name: Upload artifact
uses: actions/upload-artifact@v6
with:
name: WindowsBuild-x64
path: dist/*.zip
retention-days: 2
windows-build-x86:
name: "Windows x86 build"
runs-on: windows-latest
timeout-minutes: 120
steps:
- name: Checkout code
uses: actions/checkout@v6.0.1
- name: Setup Python
uses: actions/setup-python@v6
with:
python-version: '3.x'
- name: Build
shell: cmd
run: |
call "C:\Program Files\Microsoft Visual Studio\2022\Enterprise\VC\Auxiliary\Build\vcvarsall.bat" x86
python scripts\mk_win_dist.py --x86-only --dotnet-key=%GITHUB_WORKSPACE%\resources\z3.snk --zip
- name: Upload artifact
uses: actions/upload-artifact@v6
with:
name: WindowsBuild-x86
path: dist/*.zip
retention-days: 2
windows-build-arm64:
name: "Windows ARM64 build"
runs-on: windows-latest
timeout-minutes: 90
steps:
- name: Checkout code
uses: actions/checkout@v6.0.1
- name: Setup Python
uses: actions/setup-python@v6
with:
python-version: '3.x'
- name: Build
shell: cmd
run: |
call "C:\Program Files\Microsoft Visual Studio\2022\Enterprise\VC\Auxiliary\Build\vcvarsall.bat" amd64_arm64
python scripts\mk_win_dist_cmake.py --arm64-only --dotnet-key=%GITHUB_WORKSPACE%\resources\z3.snk --assembly-version=${{ env.MAJOR }}.${{ env.MINOR }}.${{ env.PATCH }} --zip
- name: Upload artifact
uses: actions/upload-artifact@v6
with:
name: WindowsBuild-arm64
path: dist/arm64/*.zip
retention-days: 2
# ============================================================================
# PACKAGE STAGE
# ============================================================================
nuget-package-x64:
name: "NuGet 64 packaging"
needs: [windows-build-x64, windows-build-arm64, ubuntu-build, ubuntu-arm64, mac-build-x64, mac-build-arm64]
runs-on: windows-latest
steps:
- name: Checkout code
uses: actions/checkout@v6.0.1
- name: Setup Python
uses: actions/setup-python@v6
with:
python-version: '3.x'
- name: Download Win64 Build
uses: actions/download-artifact@v7.0.0
with:
name: WindowsBuild-x64
path: package
- name: Download Win ARM64 Build
uses: actions/download-artifact@v7.0.0
with:
name: WindowsBuild-arm64
path: package
- name: Download Ubuntu Build
uses: actions/download-artifact@v7.0.0
with:
name: UbuntuBuild
path: package
- name: Download Ubuntu ARM64 Build
uses: actions/download-artifact@v7.0.0
with:
name: UbuntuArm64
path: package
- name: Download macOS Build
uses: actions/download-artifact@v7.0.0
with:
name: macOsBuild
path: package
- name: Download macOS Arm64 Build
uses: actions/download-artifact@v7.0.0
with:
name: MacArm64
path: package
- name: Setup NuGet
uses: nuget/setup-nuget@v2
with:
nuget-version: 'latest'
- name: Assemble NuGet package
shell: cmd
run: |
cd package
python ..\scripts\mk_nuget_task.py . ${{ env.MAJOR }}.${{ env.MINOR }}.${{ env.PATCH }}.${{ github.run_number }} https://github.com/Z3Prover/z3 ${{ github.ref_name }} ${{ github.sha }} ${{ github.workspace }} symbols
- name: Pack NuGet package
shell: cmd
run: |
cd package
nuget pack out\Microsoft.Z3.sym.nuspec -Version ${{ env.MAJOR }}.${{ env.MINOR }}.${{ env.PATCH }}.${{ github.run_number }} -OutputDirectory . -Verbosity detailed -Symbols -SymbolPackageFormat snupkg -BasePath out
- name: Upload artifact
uses: actions/upload-artifact@v6
with:
name: NuGet
path: |
package/*.nupkg
package/*.snupkg
retention-days: 2
nuget-package-x86:
name: "NuGet 32 packaging"
needs: [windows-build-x86]
runs-on: windows-latest
steps:
- name: Checkout code
uses: actions/checkout@v6.0.1
- name: Setup Python
uses: actions/setup-python@v6
with:
python-version: '3.x'
- name: Download artifacts
uses: actions/download-artifact@v7.0.0
with:
name: WindowsBuild-x86
path: package
- name: Setup NuGet
uses: nuget/setup-nuget@v2
with:
nuget-version: 'latest'
- name: Assemble NuGet package
shell: cmd
run: |
cd package
python ..\scripts\mk_nuget_task.py . ${{ env.MAJOR }}.${{ env.MINOR }}.${{ env.PATCH }}.${{ github.run_number }} https://github.com/Z3Prover/z3 ${{ github.ref_name }} ${{ github.sha }} ${{ github.workspace }} symbols x86
- name: Pack NuGet package
shell: cmd
run: |
cd package
nuget pack out\Microsoft.Z3.x86.sym.nuspec -Version ${{ env.MAJOR }}.${{ env.MINOR }}.${{ env.PATCH }}.${{ github.run_number }} -OutputDirectory . -Verbosity detailed -Symbols -SymbolPackageFormat snupkg -BasePath out
- name: Upload artifact
uses: actions/upload-artifact@v6
with:
name: NuGet32
path: |
package/*.nupkg
package/*.snupkg
retention-days: 2
python-package:
name: "Python packaging"
needs: [mac-build-x64, mac-build-arm64, windows-build-x64, windows-build-x86, manylinux-python-arm64]
runs-on: ubuntu-24.04
steps:
- name: Checkout code
uses: actions/checkout@v6.0.1
- name: Setup Python
uses: actions/setup-python@v6
with:
python-version: '3.x'
- name: Download macOS x64 Build
uses: actions/download-artifact@v7.0.0
with:
name: macOsBuild
path: artifacts
- name: Download macOS Arm64 Build
uses: actions/download-artifact@v7.0.0
with:
name: MacArm64
path: artifacts
- name: Download Win64 Build
uses: actions/download-artifact@v7.0.0
with:
name: WindowsBuild-x64
path: artifacts
- name: Download Win32 Build
uses: actions/download-artifact@v7.0.0
with:
name: WindowsBuild-x86
path: artifacts
- name: Download ManyLinux Arm64 Build
uses: actions/download-artifact@v7.0.0
with:
name: ManyLinuxPythonBuildArm64
path: artifacts
- name: Extract builds
run: |
cd artifacts
ls
mkdir -p osx-x64-bin osx-arm64-bin win32-bin win64-bin
cd osx-x64-bin && unzip ../z3-*-x64-osx*.zip && cd ..
cd osx-arm64-bin && unzip ../z3-*-arm64-osx*.zip && cd ..
cd win32-bin && unzip ../z3-*-x86-win*.zip && cd ..
cd win64-bin && unzip ../z3-*-x64-win*.zip && cd ..
- name: Build Python packages
run: |
python3 -m pip install --user -U setuptools
cd src/api/python
python3 setup.py sdist
echo $PWD/../../../artifacts/win32-bin/* | xargs printf 'PACKAGE_FROM_RELEASE=%s\n' | xargs -I '{}' env '{}' python3 setup.py bdist_wheel
echo $PWD/../../../artifacts/win64-bin/* | xargs printf 'PACKAGE_FROM_RELEASE=%s\n' | xargs -I '{}' env '{}' python3 setup.py bdist_wheel
echo $PWD/../../../artifacts/osx-x64-bin/* | xargs printf 'PACKAGE_FROM_RELEASE=%s\n' | xargs -I '{}' env '{}' python3 setup.py bdist_wheel
echo $PWD/../../../artifacts/osx-arm64-bin/* | xargs printf 'PACKAGE_FROM_RELEASE=%s\n' | xargs -I '{}' env '{}' python3 setup.py bdist_wheel
cp $PWD/../../../artifacts/*.whl dist/ || true
- name: Upload artifact
uses: actions/upload-artifact@v6
with:
name: PythonPackages
path: src/api/python/dist/*
retention-days: 2
# ============================================================================
# DEPLOYMENT STAGE
# ============================================================================
deploy-nightly:
name: "Deploy to GitHub Releases"
needs: [
windows-build-x86,
windows-build-x64,
windows-build-arm64,
mac-build-x64,
mac-build-arm64,
ubuntu-build,
ubuntu-arm64,
ubuntu-doc,
python-package,
nuget-package-x64,
nuget-package-x86
]
runs-on: ubuntu-latest
steps:
- name: Checkout code
uses: actions/checkout@v6.0.1
- name: Download all artifacts
uses: actions/download-artifact@v7.0.0
with:
path: tmp
- name: Display structure of downloaded files
run: ls -R tmp
- name: Delete existing Nightly release
continue-on-error: true
env:
GH_TOKEN: ${{ github.token }}
run: |
gh release delete Nightly --yes --cleanup-tag || true
- name: Create Nightly release
env:
GH_TOKEN: ${{ github.token }}
run: |
ls
find tmp -type f \( -name "*.zip" -o -name "*.whl" -o -name "*.tar.gz" -o -name "*.nupkg" -o -name "*.snupkg" \) > release_files.txt
gh release create Nightly \
--title "Nightly" \
--notes "Automated nightly build from commit ${{ github.sha }}" \
--prerelease \
--target ${{ github.sha }} \
$(cat release_files.txt | tr '\n' ' ')