name: Cloud Hypervisor Release on: [create, merge_group] concurrency: group: ${{ github.workflow }}-${{ github.ref }} cancel-in-progress: true jobs: release: if: (github.event_name == 'create' && github.event.ref_type == 'tag') || github.event_name == 'merge_group' name: Release runs-on: ubuntu-latest steps: - name: Code checkout uses: actions/checkout@v4 - name: Install musl-gcc run: sudo apt install -y musl-tools - name: Create release directory run: rsync -rv --exclude=.git . ../cloud-hypervisor-${{ github.event.ref }} - name: Install Rust toolchain (x86_64-unknown-linux-gnu) uses: actions-rs/toolchain@v1 with: toolchain: "1.70" target: x86_64-unknown-linux-gnu - name: Install Rust toolchain (x86_64-unknown-linux-musl) uses: actions-rs/toolchain@v1 with: toolchain: "1.70" target: x86_64-unknown-linux-musl - name: Build uses: actions-rs/cargo@v1 with: toolchain: "1.70" command: build args: --all --release --features mshv --target=x86_64-unknown-linux-gnu - name: Static Build uses: actions-rs/cargo@v1 with: toolchain: "1.70" command: build args: --all --release --features mshv --target=x86_64-unknown-linux-musl - name: Install Rust toolchain (aarch64-unknown-linux-musl) uses: actions-rs/toolchain@v1 with: toolchain: "1.70" target: aarch64-unknown-linux-musl override: true - name: Create Release if: github.event_name == 'create' && github.event.ref_type == 'tag' id: create_release uses: actions/create-release@v1 env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} with: tag_name: ${{ github.ref }} release_name: ${{ github.ref }} draft: true prerelease: true - name: Upload cloud-hypervisor if: github.event_name == 'create' && github.event.ref_type == 'tag' id: upload-release-cloud-hypervisor uses: actions/upload-release-asset@v1 env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} with: upload_url: ${{ steps.create_release.outputs.upload_url }} asset_path: target/x86_64-unknown-linux-gnu/release/cloud-hypervisor asset_name: cloud-hypervisor asset_content_type: application/octet-stream - name: Upload static cloud-hypervisor if: github.event_name == 'create' && github.event.ref_type == 'tag' id: upload-release-static-cloud-hypervisor uses: actions/upload-release-asset@v1 env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} with: upload_url: ${{ steps.create_release.outputs.upload_url }} asset_path: target/x86_64-unknown-linux-musl/release/cloud-hypervisor asset_name: cloud-hypervisor-static asset_content_type: application/octet-stream - name: Upload ch-remote if: github.event_name == 'create' && github.event.ref_type == 'tag' id: upload-release-ch-remote uses: actions/upload-release-asset@v1 env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} with: upload_url: ${{ steps.create_release.outputs.upload_url }} asset_path: target/x86_64-unknown-linux-gnu/release/ch-remote asset_name: ch-remote asset_content_type: application/octet-stream - name: Upload static-ch-remote if: github.event_name == 'create' && github.event.ref_type == 'tag' id: upload-release-static-ch-remote uses: actions/upload-release-asset@v1 env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} with: upload_url: ${{ steps.create_release.outputs.upload_url }} asset_path: target/x86_64-unknown-linux-musl/release/ch-remote asset_name: ch-remote-static asset_content_type: application/octet-stream - name: Clean build tree ahead of cross build uses: actions-rs/cargo@v1 with: command: clean - name: Static Build (AArch64) uses: actions-rs/cargo@v1 with: use-cross: true command: build args: --all --release --target=aarch64-unknown-linux-musl - name: Upload static AArch64 cloud-hypervisor if: github.event_name == 'create' && github.event.ref_type == 'tag' id: upload-release-static-aarch64-cloud-hypervisor uses: actions/upload-release-asset@v1 env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} with: upload_url: ${{ steps.create_release.outputs.upload_url }} asset_path: target/aarch64-unknown-linux-musl/release/cloud-hypervisor asset_name: cloud-hypervisor-static-aarch64 asset_content_type: application/octet-stream - name: Upload static AArch64 ch-remote if: github.event_name == 'create' && github.event.ref_type == 'tag' id: upload-release-static-aarch64-ch-remote uses: actions/upload-release-asset@v1 env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} with: upload_url: ${{ steps.create_release.outputs.upload_url }} asset_path: target/aarch64-unknown-linux-musl/release/ch-remote asset_name: ch-remote-static-aarch64 asset_content_type: application/octet-stream - name: Vendor working-directory: ../cloud-hypervisor-${{ github.event.ref }} run: | mkdir ../vendor-cargo-home export CARGO_HOME=$(realpath ../vendor-cargo-home) mkdir .cargo cargo vendor > .cargo/config.toml - name: Create vendored source archive working-directory: ../ run: tar cJf cloud-hypervisor-${{ github.event.ref }}.tar.xz cloud-hypervisor-${{ github.event.ref }} - name: Upload cloud-hypervisor vendored source archive if: github.event_name == 'create' && github.event.ref_type == 'tag' id: upload-release-cloud-hypervisor-vendored-sources uses: actions/upload-release-asset@v1 env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} with: upload_url: ${{ steps.create_release.outputs.upload_url }} asset_path: ../cloud-hypervisor-${{ github.event.ref }}.tar.xz asset_name: cloud-hypervisor-${{ github.event.ref }}.tar.xz asset_content_type: application/x-xz