variables: ReleaseVersion: '4.8.11' stages: - stage: Build jobs: - job: Mac displayName: "Mac Build" pool: vmImage: "macOS-latest" steps: - script: python scripts/mk_unix_dist.py --dotnet-key=$(Build.SourcesDirectory)/resources/z3.snk - script: git clone https://github.com/z3prover/z3test z3test - script: python z3test/scripts/test_benchmarks.py build-dist/z3 z3test/regressions/smt2 - script: cp dist/*.zip $(Build.ArtifactStagingDirectory)/. - task: PublishPipelineArtifact@1 inputs: artifactName: 'Mac' targetPath: $(Build.ArtifactStagingDirectory) - job: Ubuntu displayName: "Ubuntu build" pool: vmImage: "ubuntu-latest" steps: - script: python scripts/mk_unix_dist.py --dotnet-key=$(Build.SourcesDirectory)/resources/z3.snk - script: git clone https://github.com/z3prover/z3test z3test - script: python z3test/scripts/test_benchmarks.py build-dist/z3 z3test/regressions/smt2 - script: cp dist/*.zip $(Build.ArtifactStagingDirectory)/. - template: scripts/generate-doc.yml - script: zip api.zip doc/api/. - script: cp api.zip $(Build.ArtifactStagingDirectory)/. - task: PublishPipelineArtifact@0 inputs: artifactName: 'Ubuntu' targetPath: $(Build.ArtifactStagingDirectory) - job: UbuntoDoc displayName: "Ubuntu Doc build" pool: vmImage: "ubuntu-latest" steps: - script: sudo apt-get install ocaml opam libgmp-dev - script: opam init -y - script: eval `opam config env`; opam install zarith ocamlfind -y - script: python scripts/mk_make.py --ml --staticlib - script: | set -e cd build eval `opam config env` make -j3 make -j3 examples make -j3 test-z3 ./ml_example cd .. - template: scripts/generate-doc.yml - script: zip api.zip doc/api/. - script: cp api.zip $(Build.ArtifactStagingDirectory)/. - task: PublishPipelineArtifact@0 inputs: artifactName: 'UbuntuDoc' targetPath: $(Build.ArtifactStagingDirectory) - job: Manylinux displayName: "Manylinux build" pool: vmImage: "ubuntu-latest" container: "quay.io/pypa/manylinux2010_x86_64:latest" variables: python: "/opt/python/cp35-cp35m/bin/python" steps: - script: $(python) scripts/mk_unix_dist.py --nodotnet --nojava - script: git clone https://github.com/z3prover/z3test z3test - script: $(python) z3test/scripts/test_benchmarks.py build-dist/z3 z3test/regressions/smt2 - script: cp dist/*.zip $(Build.ArtifactStagingDirectory)/ - task: PublishPipelineArtifact@0 inputs: artifactName: 'Manylinux' targetPath: $(Build.ArtifactStagingDirectory) - job: Windows32 displayName: "Windows 32-bit build" pool: vmImage: "vs2017-win2016" steps: - task: CmdLine@2 inputs: script: call "C:\Program Files (x86)\Microsoft Visual Studio\2017\Enterprise\VC\Auxiliary\Build\vcvars32.bat" && python scripts\mk_win_dist.py --x86-only --dotnet-key=$(Build.SourcesDirectory)/resources/z3.snk --zip - task: CopyFiles@2 inputs: sourceFolder: dist contents: '*.zip' targetFolder: $(Build.ArtifactStagingDirectory) - task: PublishPipelineArtifact@1 inputs: targetPath: $(Build.ArtifactStagingDirectory) artifactName: 'Windows32' - job: Windows64 displayName: "Windows 64-bit build" pool: vmImage: "vs2017-win2016" steps: - task: CmdLine@2 inputs: script: call "C:\Program Files (x86)\Microsoft Visual Studio\2017\Enterprise\VC\Auxiliary\Build\vcvars64.bat" && python scripts\mk_win_dist.py --x64-only --dotnet-key=$(Build.SourcesDirectory)/resources/z3.snk --zip - task: CopyFiles@2 inputs: sourceFolder: dist contents: '*.zip' targetFolder: $(Build.ArtifactStagingDirectory) - task: PublishPipelineArtifact@1 inputs: targetPath: $(Build.ArtifactStagingDirectory) artifactName: 'Windows64' - stage: Package jobs: - job: NuGet displayName: "NuGet packaging" pool: vmImage: "windows-latest" steps: - powershell: write-host $(System.DefinitionId) displayName: 'System.DefinitionId' - powershell: write-host $(Build.BuildId) displayName: 'Build.BuildId' - powershell: write-host $(System.TeamProjectId) displayName: 'System.TeamProjectId' - task: DownloadPipelineArtifact@2 displayName: 'Download Win64 Build' inputs: artifact: 'Windows64' path: $(Agent.TempDirectory)\package - task: DownloadPipelineArtifact@2 displayName: 'Download Ubuntu Build' inputs: artifact: 'Ubuntu' path: $(Agent.TempDirectory)\package - task: DownloadPipelineArtifact@2 displayName: 'Download macOS Build' inputs: artifact: 'Mac' path: $(Agent.TempDirectory)\package - task: NuGetToolInstaller@0 inputs: versionSpec: 5.x checkLatest: false - task: PythonScript@0 displayName: 'Python: assemble files' inputs: scriptSource: 'filepath' scriptPath: scripts\mk_nuget_task.py workingDirectory: $(Agent.TempDirectory)\package arguments: $(Agent.TempDirectory)\package $(ReleaseVersion) $(Build.Repository.Uri) $(Build.SourceBranchName) $(Build.SourceVersion) $(Build.SourcesDirectory) symbols - task: NugetCommand@2 displayName: 'NuGet Pack Symbols' inputs: command: custom arguments: 'pack $(Agent.TempDirectory)\package\out\Microsoft.Z3.x64.sym.nuspec -OutputDirectory $(Build.ArtifactStagingDirectory) -Verbosity detailed -Symbols -SymbolPackageFormat snupkg -BasePath $(Agent.TempDirectory)\package\out' - task: EsrpCodeSigning@1 displayName: 'Sign Package' inputs: ConnectedServiceName: 'z3-esrp-signing' FolderPath: $(Build.ArtifactStagingDirectory) Pattern: Microsoft.Z3.x64.$(ReleaseVersion).nupkg signConfigType: 'inlineSignParams' inlineOperation: | [ { "KeyCode" : "CP-401405", "OperationCode" : "NuGetSign", "Parameters" : {}, "ToolName" : "sign", "ToolVersion" : "1.0" }, { "KeyCode" : "CP-401405", "OperationCode" : "NuGetVerify", "Parameters" : {}, "ToolName" : "sign", "ToolVersion" : "1.0" } ] SessionTimeout: '60' MaxConcurrency: '50' MaxRetryAttempts: '5' - task: EsrpCodeSigning@1 displayName: 'Sign Symbol Package' inputs: ConnectedServiceName: 'z3-esrp-signing' FolderPath: $(Build.ArtifactStagingDirectory) Pattern: Microsoft.Z3.x64.$(ReleaseVersion).snupkg signConfigType: 'inlineSignParams' inlineOperation: | [ { "KeyCode" : "CP-401405", "OperationCode" : "NuGetSign", "Parameters" : {}, "ToolName" : "sign", "ToolVersion" : "1.0" }, { "KeyCode" : "CP-401405", "OperationCode" : "NuGetVerify", "Parameters" : {}, "ToolName" : "sign", "ToolVersion" : "1.0" } ] SessionTimeout: '60' MaxConcurrency: '50' MaxRetryAttempts: '5' - task: PublishPipelineArtifact@1 inputs: targetPath: $(Build.ArtifactStagingDirectory) artifactName: 'NuGet' - job: Python displayName: "Python packaging" pool: vmImage: "ubuntu-latest" steps: - task: DownloadPipelineArtifact@2 inputs: artifactName: 'Windows32' targetPath: $(Agent.TempDirectory) - task: DownloadPipelineArtifact@2 inputs: artifactName: 'Windows64' targetPath: $(Agent.TempDirectory) - task: DownloadPipelineArtifact@2 inputs: artifactName: 'Manylinux' targetPath: $(Agent.TempDirectory) - task: DownloadPipelineArtifact@2 inputs: artifactName: 'Mac' targetPath: $(Agent.TempDirectory) - script: cd $(Agent.TempDirectory); mkdir osx-bin; cd osx-bin; unzip ../*osx*.zip - script: cd $(Agent.TempDirectory); mkdir linux-bin; cd linux-bin; unzip ../*centos*.zip - script: cd $(Agent.TempDirectory); mkdir win32-bin; cd win32-bin; unzip ../*x86-win*.zip - script: cd $(Agent.TempDirectory); mkdir win64-bin; cd win64-bin; unzip ../*x64-win*.zip - script: python3 -m pip install --user -U setuptools wheel - script: cd src/api/python; python3 setup.py sdist # take a look at this PREMIUM HACK I came up with to get around the fact that the azure variable syntax overloads the bash syntax for subshells - script: cd src/api/python; echo $(Agent.TempDirectory)/linux-bin/* | xargs printf 'PACKAGE_FROM_RELEASE=%s\n' | xargs -I '{}' env '{}' python3 setup.py bdist_wheel - script: cd src/api/python; echo $(Agent.TempDirectory)/win32-bin/* | xargs printf 'PACKAGE_FROM_RELEASE=%s\n' | xargs -I '{}' env '{}' python3 setup.py bdist_wheel - script: cd src/api/python; echo $(Agent.TempDirectory)/win64-bin/* | xargs printf 'PACKAGE_FROM_RELEASE=%s\n' | xargs -I '{}' env '{}' python3 setup.py bdist_wheel - script: cd src/api/python; echo $(Agent.TempDirectory)/osx-bin/* | xargs printf 'PACKAGE_FROM_RELEASE=%s\n' | xargs -I '{}' env '{}' python3 setup.py bdist_wheel - task: PublishPipelineArtifact@0 inputs: artifactName: 'Python packages' targetPath: src/api/python/dist - stage: Deployment jobs: - job: Deploy displayName: "Deploy into GitHub" steps: - task: DownloadPipelineArtifact@2 displayName: "Download windows32" inputs: artifactName: 'Windows32' targetPath: tmp - task: DownloadPipelineArtifact@2 displayName: "Download windows64" inputs: artifactName: 'Windows64' targetPath: tmp - task: DownloadPipelineArtifact@2 displayName: "Download Mac" inputs: artifactName: 'Mac' targetPath: tmp - task: DownloadPipelineArtifact@2 displayName: "Download Ubuntu" inputs: artifactName: 'Ubuntu' targetPath: tmp - task: DownloadPipelineArtifact@2 displayName: "Download Doc" inputs: artifactName: 'UbuntuDoc' targetPath: tmp - task: DownloadPipelineArtifact@2 displayName: "Download Python" inputs: artifactName: 'Python packages' targetPath: tmp - task: DownloadPipelineArtifact@2 displayName: "Download NuGet" inputs: artifactName: 'NuGet' targetPath: tmp - task: GitHubRelease@0 inputs: gitHubConnection: Z3GitHub repositoryName: 'Z3Prover/z3' action: 'delete' # target: '$(Build.SourceVersion)' tagSource: 'manual' tag: 'Nightly' - task: GitHubRelease@0 inputs: gitHubConnection: Z3GitHub repositoryName: 'Z3Prover/z3' action: 'create' # target: '$(Build.SourceVersion)' tagSource: 'manual' tag: 'Nightly' title: 'Nightly' releaseNotesSource: 'input' releaseNotes: 'nightly build' assets: 'tmp/*' assetUploadMode: 'replace' isDraft: false isPreRelease: true # TBD: run regression tests on generated binaries.