From 9419c9a897ab01b6077c5dc8082ecc6e954f77d9 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Sun, 16 Nov 2025 18:20:00 +0000 Subject: [PATCH] Fix NuGet packaging and add GitHub Actions workflow - Fixed critical bug in mk_nuget_task.py replace() function - Created comprehensive GitHub Actions workflow for building NuGet packages Co-authored-by: NikolajBjorner <3085284+NikolajBjorner@users.noreply.github.com> --- .github/workflows/nuget-build.yml | 256 ++++++++++++++++++++++++++++++ scripts/mk_nuget_task.py | 3 +- 2 files changed, 258 insertions(+), 1 deletion(-) create mode 100644 .github/workflows/nuget-build.yml diff --git a/.github/workflows/nuget-build.yml b/.github/workflows/nuget-build.yml new file mode 100644 index 000000000..b39a3afb3 --- /dev/null +++ b/.github/workflows/nuget-build.yml @@ -0,0 +1,256 @@ +name: Build NuGet Package + +on: + workflow_dispatch: + inputs: + version: + description: 'Version number for the NuGet package (e.g., 4.15.5)' + required: true + default: '4.15.5' + push: + tags: + - 'z3-*' + +permissions: + contents: write + +jobs: + # Build Windows binaries + build-windows-x64: + runs-on: windows-latest + steps: + - name: Checkout code + uses: actions/checkout@v5 + + - name: Setup Python + uses: actions/setup-python@v5 + with: + python-version: '3.x' + + - name: Build Windows x64 + 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 --assembly-version=${{ github.event.inputs.version || '4.15.5' }} --zip + + - name: Upload Windows x64 artifact + uses: actions/upload-artifact@v4 + with: + name: windows-x64 + path: dist/*.zip + retention-days: 1 + + build-windows-x86: + runs-on: windows-latest + steps: + - name: Checkout code + uses: actions/checkout@v5 + + - name: Setup Python + uses: actions/setup-python@v5 + with: + python-version: '3.x' + + - name: Build Windows x86 + 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 --assembly-version=${{ github.event.inputs.version || '4.15.5' }} --zip + + - name: Upload Windows x86 artifact + uses: actions/upload-artifact@v4 + with: + name: windows-x86 + path: dist/*.zip + retention-days: 1 + + build-windows-arm64: + runs-on: windows-latest + steps: + - name: Checkout code + uses: actions/checkout@v5 + + - name: Setup Python + uses: actions/setup-python@v5 + with: + python-version: '3.x' + + - name: Build Windows ARM64 + 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=${{ github.event.inputs.version || '4.15.5' }} --zip + + - name: Upload Windows ARM64 artifact + uses: actions/upload-artifact@v4 + with: + name: windows-arm64 + path: build-dist\arm64\dist\*.zip + retention-days: 1 + + build-ubuntu: + runs-on: ubuntu-latest + steps: + - name: Checkout code + uses: actions/checkout@v5 + + - name: Setup Python + uses: actions/setup-python@v5 + with: + python-version: '3.x' + + - name: Build Ubuntu + run: python scripts/mk_unix_dist.py --dotnet-key=$GITHUB_WORKSPACE/resources/z3.snk + + - name: Upload Ubuntu artifact + uses: actions/upload-artifact@v4 + with: + name: ubuntu + path: dist/*.zip + retention-days: 1 + + build-macos-x64: + runs-on: macos-13 + steps: + - name: Checkout code + uses: actions/checkout@v5 + + - name: Setup Python + uses: actions/setup-python@v5 + with: + python-version: '3.x' + + - name: Build macOS x64 + run: python scripts/mk_unix_dist.py --dotnet-key=$GITHUB_WORKSPACE/resources/z3.snk + + - name: Upload macOS x64 artifact + uses: actions/upload-artifact@v4 + with: + name: macos-x64 + path: dist/*.zip + retention-days: 1 + + build-macos-arm64: + runs-on: macos-13 + steps: + - name: Checkout code + uses: actions/checkout@v5 + + - name: Setup Python + uses: actions/setup-python@v5 + with: + python-version: '3.x' + + - name: Build macOS ARM64 + run: python scripts/mk_unix_dist.py --dotnet-key=$GITHUB_WORKSPACE/resources/z3.snk --arch=arm64 + + - name: Upload macOS ARM64 artifact + uses: actions/upload-artifact@v4 + with: + name: macos-arm64 + path: dist/*.zip + retention-days: 1 + + # Package NuGet x64 (includes all platforms except x86) + package-nuget-x64: + needs: [build-windows-x64, build-windows-arm64, build-ubuntu, build-macos-x64, build-macos-arm64] + runs-on: windows-latest + steps: + - name: Checkout code + uses: actions/checkout@v5 + + - name: Setup Python + uses: actions/setup-python@v5 + with: + python-version: '3.x' + + - name: Download all artifacts + uses: actions/download-artifact@v4 + with: + path: packages + + - name: List downloaded artifacts + shell: bash + run: find packages -type f + + - name: Move artifacts to flat directory + shell: bash + run: | + mkdir -p package-files + find packages -name "*.zip" -exec cp {} package-files/ \; + ls -la package-files/ + + - name: Setup NuGet + uses: nuget/setup-nuget@v2 + with: + nuget-version: 'latest' + + - name: Assemble NuGet package + shell: cmd + run: | + cd package-files + python ..\scripts\mk_nuget_task.py . ${{ github.event.inputs.version || '4.15.5' }} https://github.com/Z3Prover/z3 ${{ github.ref_name }} ${{ github.sha }} ${{ github.workspace }} symbols + + - name: Pack NuGet package + shell: cmd + run: | + cd package-files + nuget pack out\Microsoft.Z3.sym.nuspec -OutputDirectory . -Verbosity detailed -Symbols -SymbolPackageFormat snupkg -BasePath out + + - name: Upload NuGet package + uses: actions/upload-artifact@v4 + with: + name: nuget-x64 + path: | + package-files/*.nupkg + package-files/*.snupkg + retention-days: 30 + + # Package NuGet x86 + package-nuget-x86: + needs: [build-windows-x86] + runs-on: windows-latest + steps: + - name: Checkout code + uses: actions/checkout@v5 + + - name: Setup Python + uses: actions/setup-python@v5 + with: + python-version: '3.x' + + - name: Download x86 artifact + uses: actions/download-artifact@v4 + with: + name: windows-x86 + path: packages + + - name: List downloaded artifacts + shell: bash + run: find packages -type f + + - name: Setup NuGet + uses: nuget/setup-nuget@v2 + with: + nuget-version: 'latest' + + - name: Assemble NuGet package + shell: cmd + run: | + cd packages + python ..\scripts\mk_nuget_task.py . ${{ github.event.inputs.version || '4.15.5' }} https://github.com/Z3Prover/z3 ${{ github.ref_name }} ${{ github.sha }} ${{ github.workspace }} symbols x86 + + - name: Pack NuGet package + shell: cmd + run: | + cd packages + nuget pack out\Microsoft.Z3.x86.sym.nuspec -OutputDirectory . -Verbosity detailed -Symbols -SymbolPackageFormat snupkg -BasePath out + + - name: Upload NuGet package + uses: actions/upload-artifact@v4 + with: + name: nuget-x86 + path: | + packages/*.nupkg + packages/*.snupkg + retention-days: 30 diff --git a/scripts/mk_nuget_task.py b/scripts/mk_nuget_task.py index b6c865237..06bd9ee70 100644 --- a/scripts/mk_nuget_task.py +++ b/scripts/mk_nuget_task.py @@ -47,7 +47,8 @@ def replace(src, dst): try: os.remove(dst) except: - shutil.move(src, dst) + pass + shutil.move(src, dst) def unpack(packages, symbols, arch): # unzip files in packages