Skip to content

Commit

Permalink
feat: Support releasing crates (#4)
Browse files Browse the repository at this point in the history
This commit introduces the following reusable workflows for use in eclipse-zenoh/zenoh, eclipse-zenoh/zenoh-plugin-\*, and eclipse-zenoh/zenoh-backend-\* and partially Rust-based bindings.

1. **tag-crates**: This bumps the version of the workspace, including in all cargo-deb metadata. And sets the version of eclipse-zenoh dependencies either to the tag itself, or optinally to a different version (to support releasing patches for plugins/backends/bindings without re-relasing eclipse-zenoh/zenoh). If `dry-run = true` then a `release/dry-run/1.2.3` branch is created instead of `release/1.2.3`. If `release/dry-run/*` branches exceed a limit, then the oldest one is deleted
2. **build-crates-artifacts**: This builds artifacts for all supported targets and uploads them for use by users.
3. **build-crates-debian**: This builds Debian packages for all supported targets and uploads them.
4. **publish-crates-cargo**: This publishes a sequence of workspaces to a local alternative Cargo registry, and then if `dry-run = false` to cartes.io
5. **publish-crates-debian**: This publishes packages uploaded in `build-crates-debian` to a local Debian repository, tries to install them from it, then if `dry-run = false` to eclipse.org
6. **publish-crates-homebrew**: This builds artifacts for macOS, then publishes them to a local Homebrew tap and attempts to install them from it, then if `dry-run = false` uploads the build result to eclipse.org and updates eclipse-zenoh/homebrew-zenoh
7. **publish-crates-eclipse**: This publishes packages uploaded in `build-crates-debian` to eclipse.org
8. **publish-crates-github**: This crates a GitHub release on the target repository and populates it with artifacts built in `build-crates-artifacts`.
  • Loading branch information
fuzzypixelz authored Mar 4, 2024
1 parent 499d794 commit 7a9e09f
Show file tree
Hide file tree
Showing 54 changed files with 661,057 additions and 826 deletions.
67 changes: 67 additions & 0 deletions .github/workflows/build-crates-artifacts.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,67 @@
name: Build crates (Artifacts)

on:
workflow_call:
inputs:
repo:
type: string
required: true
version:
type: string
required: true
branch:
type: string
required: true
artifact-patterns:
type: string
required: true
exclude-builds:
type: string
required: false
workflow_dispatch:
inputs:
repo:
type: string
required: true
version:
type: string
required: true
branch:
type: string
required: true
artifact-patterns:
type: string
required: true
exclude-builds:
type: string
required: false

jobs:
build-crates-artifacts:
runs-on: ${{ matrix.build.os }}
strategy:
fail-fast: false
matrix:
exclude: ${{ inputs.exclude-builds }}
build:
- { target: x86_64-unknown-linux-gnu, os: ubuntu-20.04 }
- { target: x86_64-unknown-linux-musl, os: ubuntu-20.04 }
- { target: arm-unknown-linux-gnueabi, os: ubuntu-20.04 }
- { target: arm-unknown-linux-gnueabihf, os: ubuntu-20.04 }
- { target: armv7-unknown-linux-gnueabihf, os: ubuntu-20.04 }
- { target: aarch64-unknown-linux-gnu, os: ubuntu-20.04 }
- { target: aarch64-unknown-linux-musl, os: ubuntu-20.04 }
- { target: x86_64-apple-darwin, os: macos-11 }
- { target: aarch64-apple-darwin, os: macos-11 }
- { target: x86_64-pc-windows-msvc, os: windows-2019 }
- { target: x86_64-pc-windows-gnu, os: windows-2019 }
steps:
- id: build
uses: eclipse-zenoh/ci/build-crates-artifacts@main
with:
repo: ${{ inputs.repo }}
version: ${{ inputs.version }}
branch: ${{ inputs.branch }}
target: ${{ matrix.build.target }}
artifact-patterns: ${{ inputs.artifact-patterns }}
github-token: ${{ secrets.BOT_TOKEN_WORKFLOW }}
46 changes: 46 additions & 0 deletions .github/workflows/build-crates-debian.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,46 @@
name: Build crates (Debian)

on:
workflow_call:
inputs:
repo:
type: string
required: true
version:
type: string
required: true
branch:
type: string
required: true
workflow_dispatch:
inputs:
repo:
type: string
required: true
version:
type: string
required: true
branch:
type: string
required: true

jobs:
build-crates-debian:
runs-on: ${{ matrix.build.os }}
strategy:
fail-fast: false
matrix:
build:
- { target: x86_64-unknown-linux-gnu, os: ubuntu-20.04 }
- { target: arm-unknown-linux-gnueabi, os: ubuntu-20.04 }
- { target: armv7-unknown-linux-gnueabihf, os: ubuntu-20.04 }
- { target: aarch64-unknown-linux-gnu, os: ubuntu-20.04 }
steps:
- id: build
uses: eclipse-zenoh/ci/build-crates-debian@main
with:
repo: ${{ inputs.repo }}
version: ${{ inputs.version }}
branch: ${{ inputs.branch }}
target: ${{ matrix.build.target }}
github-token: ${{ secrets.BOT_TOKEN_WORKFLOW }}
44 changes: 44 additions & 0 deletions .github/workflows/publish-crates-cargo.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,44 @@
name: Publish crates (Cargo)

on:
workflow_call:
inputs:
repos:
type: string
required: true
dry-run:
type: string
required: true
branch:
type: string
required: true
inter-deps-pattern:
type: string
required: true
workflow_dispatch:
inputs:
repos:
type: string
required: true
dry-run:
type: string
required: true
branch:
type: string
required: true
inter-deps-pattern:
type: string
required: true

jobs:
publish-crates-cargo:
runs-on: ubuntu-latest
steps:
- uses: eclipse-zenoh/ci/publish-crates-cargo@main
with:
repos: ${{ inputs.repos }}
dry-run: ${{ inputs.dry-run }}
branch: ${{ inputs.branch }}
inter-deps-pattern: ${{ inputs.inter-deps-pattern }}
github-token: ${{ secrets.BOT_TOKEN_WORKFLOW }}
crates-io-token: ${{ secrets.CRATES_IO_TOKEN }}
32 changes: 32 additions & 0 deletions .github/workflows/publish-crates-debian.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
name: Publish crates (Debian)

on:
workflow_call:
inputs:
dry-run:
type: string
required: true
version:
type: string
required: true
workflow_dispatch:
inputs:
dry-run:
type: string
required: true
version:
type: string
required: true

jobs:
publish-crates-debian:
runs-on: ubuntu-latest
steps:
- uses: eclipse-zenoh/ci/publish-crates-debian@main
with:
dry-run: ${{ inputs.dry-run }}
version: ${{ inputs.version }}
ssh-host: [email protected]
ssh-host-path: /home/data/httpd/download.eclipse.org/zenoh/debian-repo
ssh-private-key: ${{ secrets.SSH_PRIVATE_KEY }}
ssh-passphrase: ${{ secrets.SSH_PASSPHRASE }}
38 changes: 38 additions & 0 deletions .github/workflows/publish-crates-eclipse.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,38 @@
name: Publish crates (Eclipse)

on:
workflow_call:
inputs:
dry-run:
type: string
required: true
version:
type: string
required: true
name:
type: string
required: true
workflow_dispatch:
inputs:
dry-run:
type: string
required: true
version:
type: string
required: true
name:
type: string
required: true

jobs:
publish-crates-debian:
runs-on: ubuntu-latest
steps:
- uses: eclipse-zenoh/ci/publish-crates-eclipse@main
with:
dry-run: ${{ inputs.dry-run }}
version: ${{ inputs.version }}
ssh-host: [email protected]
ssh-host-path: /home/data/httpd/download.eclipse.org/${{ inputs.name }}
ssh-private-key: ${{ secrets.SSH_PRIVATE_KEY }}
ssh-passphrase: ${{ secrets.SSH_PASSPHRASE }}
45 changes: 45 additions & 0 deletions .github/workflows/publish-crates-github.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,45 @@
name: Publish crates (GitHub)

on:
workflow_call:
inputs:
repo:
type: string
required: true
dry-run:
type: string
required: true
version:
type: string
required: true
branch:
type: string
required: true
workflow_dispatch:
inputs:
repo:
type: string
required: true
dry-run:
type: string
required: true
version:
type: string
required: true
branch:
type: string
required: true

jobs:
publish-crates-homebrew:
runs-on: macos-latest
steps:
- uses: eclipse-zenoh/ci/publish-crates-github@main
with:
repo: ${{ inputs.repo }}
dry-run: ${{ inputs.dry-run }}
version: ${{ inputs.version }}
branch: ${{ inputs.branch }}
ssh-private-key: ${{ secrets.SSH_PRIVATE_KEY }}
ssh-passphrase: ${{ secrets.SSH_PASSPHRASE }}
github-token: ${{ secrets.BOT_TOKEN_WORKFLOW }}
65 changes: 65 additions & 0 deletions .github/workflows/publish-crates-homebrew.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,65 @@
name: Publish crates (Homebrew)

on:
workflow_call:
inputs:
repo:
type: string
required: true
dry-run:
type: string
required: true
version:
type: string
required: true
branch:
type: string
required: true
artifact-patterns:
type: string
required: true
formulae:
type: string
required: true
workflow_dispatch:
inputs:
repo:
type: string
required: true
dry-run:
type: string
required: true
version:
type: string
required: true
branch:
type: string
required: true
artifact-patterns:
type: string
required: true
formulae:
type: string
required: true

jobs:
publish-crates-homebrew:
runs-on: macos-latest
steps:
- uses: eclipse-zenoh/ci/publish-crates-homebrew@main
with:
repo: ${{ inputs.repo }}
dry-run: ${{ inputs.dry-run }}
version: ${{ inputs.version }}
branch: ${{ inputs.branch }}
formulae: ${{ inputs.formulae }}
artifact-patterns: ${{ inputs.artifact-patterns }}
tap: eclipse-zenoh/homebrew-zenoh
ssh-host: [email protected]
ssh-host-path: /home/data/httpd/download.eclipse.org/zenoh/homebrew-tap
ssh-host-url: https://download.eclipse.org/zenoh/homebrew-tap
actor-name: eclipse-zenoh-bot
actor-email: [email protected]
ssh-private-key: ${{ secrets.SSH_PRIVATE_KEY }}
ssh-passphrase: ${{ secrets.SSH_PASSPHRASE }}
github-token: ${{ secrets.BOT_TOKEN_WORKFLOW }}
Loading

0 comments on commit 7a9e09f

Please sign in to comment.