Deploy for macOS arm64 and preserve file attributes (#1499) #788
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
name: Deploy | |
on: | |
push: | |
branches: 'master' | |
paths-ignore: 'docs/**' | |
env: | |
RUST_BACKTRACE: 1 | |
PRUSTI_ASSERT_TIMEOUT: 60000 | |
jobs: | |
# Build and test in release mode | |
build: | |
strategy: | |
matrix: | |
# macos-latest-large is x86, macos-latest-xlarge is arm64 | |
os: [ubuntu-20.04, windows-latest, macos-latest-large, macos-latest-xlarge] | |
fail-fast: false | |
runs-on: ${{ matrix.os }} | |
steps: | |
- name: Check out the repo | |
uses: actions/checkout@v3 | |
- name: Set up Python 3 | |
uses: actions/setup-python@v4 | |
with: | |
python-version: '3.x' | |
- name: Set up Java | |
uses: actions/setup-java@v3 | |
with: | |
java-version: '15' | |
distribution: 'zulu' | |
- name: Set up the environment | |
run: python x.py setup | |
- name: Build with cargo --release | |
run: python x.py build --release --all --jobs 1 | |
- name: Run cargo tests --release | |
run: python x.py test --release --all --jobs 1 | |
- name: Package Prusti artifact | |
run: python x.py package release prusti_artifact | |
- name: Test Prusti artifact | |
run: python x.py test-package prusti_artifact | |
- name: Zip Prusti artifact | |
shell: bash | |
run: | | |
cd prusti_artifact | |
zip -r release.zip * | |
- name: Upload Prusti artifact | |
uses: actions/upload-artifact@v3 | |
with: | |
name: prusti-release-${{ matrix.os }} | |
if-no-files-found: error | |
path: prusti_artifact/release.zip | |
# Deploy to a new GitHub pre-release | |
deploy: | |
needs: build | |
runs-on: ubuntu-latest | |
steps: | |
- name: Download all Prusti artifacts | |
uses: actions/download-artifact@v2 | |
- name: Create release tag | |
shell: bash | |
run: echo "TAG_NAME=$(date +v-%Y-%m-%d-%H%M)" >> $GITHUB_ENV | |
- name: Create a nightly release | |
id: create_release | |
uses: viperproject/create-nightly-release@v1 | |
env: | |
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} | |
with: | |
tag_name: ${{ env.TAG_NAME }} | |
release_name: Nightly Release ${{ env.TAG_NAME }} | |
keep_num: 4 | |
- name: Upload release asset for Ubuntu | |
uses: actions/upload-release-asset@v1 | |
env: | |
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} | |
with: | |
upload_url: ${{ steps.create_release.outputs.upload_url }} | |
asset_path: ./prusti-release-ubuntu-20.04/release.zip | |
asset_name: prusti-release-ubuntu.zip | |
asset_content_type: application/zip | |
- name: Upload release asset for Windows | |
uses: actions/upload-release-asset@v1 | |
env: | |
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} | |
with: | |
upload_url: ${{ steps.create_release.outputs.upload_url }} | |
asset_path: ./prusti-release-windows-latest/release.zip | |
asset_name: prusti-release-windows.zip | |
asset_content_type: application/zip | |
# This asset is only for backward compatibility with Prusti-Assistant. After updating | |
# Prusti-Assistant to use the new asset name, we can wait a while and then delete this. | |
- name: Upload release asset for MacOS (for backward compatibility) | |
uses: actions/upload-release-asset@v1 | |
env: | |
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} | |
with: | |
upload_url: ${{ steps.create_release.outputs.upload_url }} | |
asset_path: ./prusti-release-macos-latest-large/release.zip | |
asset_name: prusti-release-macos.zip | |
asset_content_type: application/zip | |
- name: Upload release asset for MacOS | |
uses: actions/upload-release-asset@v1 | |
env: | |
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} | |
with: | |
upload_url: ${{ steps.create_release.outputs.upload_url }} | |
asset_path: ./prusti-release-macos-latest-large/release.zip | |
asset_name: prusti-release-macos-x86.zip | |
asset_content_type: application/zip | |
- name: Upload release asset for MacOS | |
uses: actions/upload-release-asset@v1 | |
env: | |
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} | |
with: | |
upload_url: ${{ steps.create_release.outputs.upload_url }} | |
asset_path: ./prusti-release-macos-xlatest-large/release.zip | |
asset_name: prusti-release-macos-arm64.zip | |
asset_content_type: application/zip |