name: Release permissions: contents: write on: release: types: - "published" jobs: cargo-release: name: "Cargo Release" strategy: matrix: platform: [ubuntu-20.04] fail-fast: false runs-on: ${{ matrix.platform }} steps: - uses: actions/checkout@v3 - uses: r7kamura/rust-problem-matchers@v1.1.0 - name: "Publish packages on `crates.io`" if: runner.os == 'Linux' run: | # Publishing those crates from outer crates with no dependency to inner crates # As cargo is going to rebuild the crates based on published dependencies # we need to publish those outer crates first to be able to test the publication # of inner crates. # # We should preferably test pre-releases before testing releases as # cargo publish might catch release issues that the workspace manages to fix using # workspace crates. # Publish libraries crates cargo publish -p dora-message --token ${{ secrets.CARGO_REGISTRY_TOKEN }} cargo publish -p dora-tracing --token ${{ secrets.CARGO_REGISTRY_TOKEN }} cargo publish -p dora-metrics --token ${{ secrets.CARGO_REGISTRY_TOKEN }} cargo publish -p dora-download --token ${{ secrets.CARGO_REGISTRY_TOKEN }} cargo publish -p dora-core --token ${{ secrets.CARGO_REGISTRY_TOKEN }} cargo publish -p communication-layer-pub-sub --token ${{ secrets.CARGO_REGISTRY_TOKEN }} cargo publish -p communication-layer-request-reply --token ${{ secrets.CARGO_REGISTRY_TOKEN }} cargo publish -p shared-memory-server --token ${{ secrets.CARGO_REGISTRY_TOKEN }} cargo publish -p dora-arrow-convert --token ${{ secrets.CARGO_REGISTRY_TOKEN }} # Publish rust API cargo publish -p dora-operator-api-macros --token ${{ secrets.CARGO_REGISTRY_TOKEN }} cargo publish -p dora-operator-api-types --token ${{ secrets.CARGO_REGISTRY_TOKEN }} cargo publish -p dora-operator-api --token ${{ secrets.CARGO_REGISTRY_TOKEN }} cargo publish -p dora-node-api --token ${{ secrets.CARGO_REGISTRY_TOKEN }} cargo publish -p dora-operator-api-python --token ${{ secrets.CARGO_REGISTRY_TOKEN }} cargo publish -p dora-operator-api-c --token ${{ secrets.CARGO_REGISTRY_TOKEN }} cargo publish -p dora-node-api-c --token ${{ secrets.CARGO_REGISTRY_TOKEN }} # Publish binaries crates cargo publish -p dora-coordinator --token ${{ secrets.CARGO_REGISTRY_TOKEN }} cargo publish -p dora-runtime --token ${{ secrets.CARGO_REGISTRY_TOKEN }} cargo publish -p dora-daemon --token ${{ secrets.CARGO_REGISTRY_TOKEN }} cargo publish -p dora-cli --token ${{ secrets.CARGO_REGISTRY_TOKEN }} # Publish tool nodes cargo publish -p dora-record --token ${{ secrets.CARGO_REGISTRY_TOKEN }} cargo publish -p dora-rerun --token ${{ secrets.CARGO_REGISTRY_TOKEN }} windows-release: name: "Windows Release" strategy: matrix: platform: [windows-2022] fail-fast: false runs-on: ${{ matrix.platform }} steps: - uses: actions/checkout@v3 - uses: r7kamura/rust-problem-matchers@v1.1.0 - name: "Build binaries" timeout-minutes: 60 run: "cargo build --release -p dora-cli" - name: Create Archive (Windows) if: runner.os == 'Windows' shell: powershell run: | New-Item -Path archive -ItemType Directory Copy-Item target/release/dora.exe -Destination archive/dora.exe Compress-Archive -Path archive\* -DestinationPath archive.zip - name: "Upload release asset" uses: actions/upload-release-asset@v1.0.1 env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} with: upload_url: ${{ github.event.release.upload_url }} asset_path: archive.zip asset_name: dora-${{ github.ref_name }}-x86_64-${{ runner.os }}.zip asset_content_type: application/zip unix-release: name: "Unix Release" strategy: matrix: platform: [macos-12, ubuntu-20.04] fail-fast: false runs-on: ${{ matrix.platform }} steps: - uses: actions/checkout@v3 - uses: r7kamura/rust-problem-matchers@v1.1.0 - name: "Build binaries" timeout-minutes: 60 run: "cargo build --release -p dora-cli" - name: "Create Archive (Unix)" if: runner.os == 'Linux' || runner.os == 'macOS' run: | mkdir archive cp target/release/dora archive/dora cd archive zip -r ../archive.zip . cd .. - name: "Upload release asset" uses: actions/upload-release-asset@v1.0.1 env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} with: upload_url: ${{ github.event.release.upload_url }} asset_path: archive.zip asset_name: dora-${{ github.ref_name }}-x86_64-${{ runner.os }}.zip asset_content_type: application/zip linux-arm-release: name: "Linux ARM Release" strategy: matrix: platform: [ubuntu-20.04] fail-fast: false runs-on: ${{ matrix.platform }} steps: - uses: actions/checkout@v3 - uses: r7kamura/rust-problem-matchers@v1.1.0 - name: "Build Linux ARM64" if: runner.os == 'Linux' uses: actions-rs/cargo@v1 with: use-cross: true command: build args: --release --target aarch64-unknown-linux-gnu -p dora-cli - name: "Archive Linux ARM64" if: runner.os == 'Linux' run: | mkdir archive_aarch64 cp target/aarch64-unknown-linux-gnu/release/dora archive_aarch64/dora cd archive_aarch64 zip -r ../archive_aarch64.zip . cd .. - name: "Upload Linux ARM64 asset" if: runner.os == 'Linux' uses: actions/upload-release-asset@v1.0.1 env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} with: upload_url: ${{ github.event.release.upload_url }} asset_path: archive_aarch64.zip asset_name: dora-${{ github.ref_name }}-aarch64-${{ runner.os }}.zip asset_content_type: application/zip mac-arm-release: name: "MacOS ARM Release" strategy: matrix: platform: [macos-12] fail-fast: false runs-on: ${{ matrix.platform }} steps: - uses: actions/checkout@v3 - uses: r7kamura/rust-problem-matchers@v1.1.0 - name: "Add macOS ARM64 toolchains" if: runner.os == 'macOS' run: rustup target add aarch64-apple-darwin - name: "Build macOS ARM64" if: runner.os == 'macOS' uses: actions-rs/cargo@v1 with: command: build args: --release --target aarch64-apple-darwin -p dora-coordinator -p dora-cli -p dora-daemon - name: "Archive macOS ARM64" if: runner.os == 'macOS' run: | mkdir archive_aarch64 cp target/aarch64-apple-darwin/release/dora archive_aarch64/dora cd archive_aarch64 zip -r ../archive_aarch64.zip . cd .. - name: "Upload macOS ARM64 asset" if: runner.os == 'macOS' uses: actions/upload-release-asset@v1.0.1 env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} with: upload_url: ${{ github.event.release.upload_url }} asset_path: archive_aarch64.zip asset_name: dora-${{ github.ref_name }}-aarch64-${{ runner.os }}.zip asset_content_type: application/zip