Skip to content

Release

Release #133

Workflow file for this run

name: Release
permissions:
contents: write
on:
release:
types:
- "published"
workflow_dispatch:
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/[email protected]
- name: Free Disk Space (Ubuntu)
uses: jlumbroso/free-disk-space@main
if: runner.os == 'Linux'
with:
# this might remove tools that are actually needed,
# if set to "true" but frees about 6 GB
tool-cache: true
# all of these default to true, but feel free to set to
# "false" if necessary for your workflow
android: true
dotnet: true
haskell: true
large-packages: false
docker-images: true
swap-storage: true
- name: "Publish packages on `crates.io`"
if: runner.os == 'Linux'
env:
CARGO_REGISTRY_TOKEN: ${{ secrets.CARGO_REGISTRY_TOKEN }}
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_if_not_exists() {
local package_name=$1
local version=$(cargo metadata --no-deps --format-version=1 | jq -r '.packages[] | select(.name=="'"$package_name"'") | .version')
if [[ -z $version ]]; then
echo "error: package '$package_name' not found in the workspace."
return 1
fi
if cargo search "$package_name" | grep -q "^$package_name = \"$version\""; then
echo "package '$package_name' version '$version' already exists on crates.io. skipping publish."
else
echo "publishing package '$package_name' version '$version'..."
cargo publish --package "$package_name"
fi
}
# the dora-message package is versioned separately, so this publish command might fail if the version is already published
publish_if_not_exists dora-message
# Publish libraries crates
publish_if_not_exists dora-tracing
publish_if_not_exists dora-metrics
publish_if_not_exists dora-download
publish_if_not_exists dora-core
publish_if_not_exists communication-layer-pub-sub
publish_if_not_exists communication-layer-request-reply
publish_if_not_exists shared-memory-server
publish_if_not_exists dora-arrow-convert
# Publish rust API
publish_if_not_exists dora-operator-api-macros
publish_if_not_exists dora-operator-api-types
publish_if_not_exists dora-operator-api
publish_if_not_exists dora-node-api
publish_if_not_exists dora-operator-api-python
publish_if_not_exists dora-operator-api-c
publish_if_not_exists dora-node-api-c
# Publish binaries crates
publish_if_not_exists dora-coordinator
publish_if_not_exists dora-runtime
publish_if_not_exists dora-daemon
publish_if_not_exists dora-cli
unix:
runs-on: ${{ matrix.platform.runner }}
strategy:
matrix:
platform:
- runner: ubuntu-20.04
target: x86_64-unknown-linux-gnu
- runner: ubuntu-20.04
target: i686-unknown-linux-gnu
- runner: ubuntu-20.04
target: aarch64-unknown-linux-gnu
- runner: ubuntu-20.04
target: aarch64-unknown-linux-musl
- runner: ubuntu-20.04
target: armv7-unknown-linux-musleabihf
- runner: macos-13
target: aarch64-apple-darwin
- runner: macos-13
target: x86_64-apple-darwin
fail-fast: false
steps:
- uses: actions/checkout@v3
- uses: r7kamura/[email protected]
- name: "Add toolchains"
run: rustup target add ${{ matrix.platform.target }}
- name: "Build"
uses: actions-rs/cargo@v1
with:
use-cross: true
command: build
args: --release --target ${{ matrix.platform.target }} -p dora-cli
- name: "Archive"
run: zip -j -r ${{ matrix.platform.target }}.zip target/${{ matrix.platform.target }}/release/dora
- name: "Upload asset"
uses: actions/[email protected]
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
with:
upload_url: ${{ github.event.release.upload_url }}
asset_path: ${{ matrix.platform.target }}.zip
asset_name: dora-${{ github.ref_name }}-${{ matrix.platform.target }}.zip
asset_content_type: application/zip
windows-release:
name: "Windows Release"
strategy:
matrix:
platform:
- runner: windows-2022
target: x86_64-pc-windows-msvc
fail-fast: false
runs-on: ${{ matrix.platform.runner }}
steps:
- uses: actions/checkout@v3
- uses: r7kamura/[email protected]
- name: "Build binaries"
timeout-minutes: 60
run: "cargo build --release -p dora-cli"
- name: Create Archive (Windows)
if: runner.os == 'Windows'
shell: powershell
run: Compress-Archive -Path target/release/dora.exe -DestinationPath archive.zip
- name: "Upload release asset"
uses: actions/[email protected]
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
with:
upload_url: ${{ github.event.release.upload_url }}
asset_path: archive.zip
asset_name: dora-${{ github.ref_name }}-${{ matrix.platform.target }}.zip
asset_content_type: application/zip