Skip to content

Support Worker Function Invocation #1754

Support Worker Function Invocation

Support Worker Function Invocation #1754

Workflow file for this run

name: CI
on:
push:
tags:
- "v*.*.*"
branches:
- main
pull_request:
concurrency:
group: ${{ github.workflow }}-${{ github.ref }}
cancel-in-progress: true
permissions:
checks: write
pull-requests: write
env:
BUILD_TARGET: "x86_64-unknown-linux-gnu"
jobs:
docker-targets-build:
runs-on: ubuntu-latest
if: github.event_name == 'push' && github.ref_type == 'tag'
strategy:
fail-fast: false
matrix:
platform:
- platform: linux/amd64
name: linux/amd64
target: x86_64-unknown-linux-gnu
- platform: linux/arm64
name: linux/arm64
target: aarch64-unknown-linux-gnu
name: docker-targets-build (${{ matrix.platform.platform }})
steps:
- name: Checkout
uses: actions/checkout@v4
with:
submodules: recursive
fetch-depth: "0"
- name: Prepare
run: |
platform=${{ matrix.platform.platform }}
echo "PLATFORM_PAIR=${platform//\//-}" >> $GITHUB_ENV
- name: Setup Rust
uses: actions-rs/toolchain@v1
with:
toolchain: stable
target: ${{ matrix.platform.target }}
override: true
- uses: davidB/rust-cargo-make@v1
- name: Install Rust Target
run: rustup target add ${{ matrix.platform.target }}
- name: Install Protoc
uses: arduino/setup-protoc@v1
with:
repo-token: ${{ secrets.GITHUB_TOKEN }}
- name: Install gcc-aarch64-linux-gnu
if: matrix.platform.platform == 'linux/arm64'
run: |
sudo apt-get update
sudo apt-get install gcc-aarch64-linux-gnu
- uses: Swatinem/rust-cache@v2
with:
shared-key: release-gcc-aarch64-linux-gnu
cache-all-crates: true
- name: Run sccache-cache
uses: mozilla-actions/sccache-action@v0.0.3
- name: Build Executables
env:
PLATFORM_OVERRIDE: ${{ matrix.platform.name }}
SCCACHE_GHA_ENABLED: "true"
RUSTC_WRAPPER: "sccache"
run: cargo make build-release
- name: Prepare Targets
env:
PLATFORM_OVERRIDE: ${{ matrix.platform.name }}
SCCACHE_GHA_ENABLED: "true"
RUSTC_WRAPPER: "sccache"
run: cargo make package-release
- uses: actions/upload-artifact@v4
name: Upload Targets
with:
name: docker-targets-build-${{ env.PLATFORM_PAIR }}
path: target/${{ matrix.platform.target }}.tar
docker-publish:
runs-on: ubuntu-latest
needs: [docker-targets-build]
if: github.event_name == 'push' && github.ref_type == 'tag'
steps:
- name: Checkout
uses: actions/checkout@v4
with:
submodules: recursive
fetch-depth: "0"
- name: Prepare
run: |
echo "PLATFORMS=linux/amd64,linux/arm64" >> $GITHUB_ENV
- uses: actions/download-artifact@v4
name: Download Targets
with:
pattern: docker-targets-build-*
path: target
merge-multiple: true
- name: Extract Targets
run: |
ls -R target
cd target
for f in *.tar; do tar xvf "$f"; done
- name: Set up QEMU
uses: docker/setup-qemu-action@v3
- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v3
- name: Set Docker version
id: set-version
run: |
if [ "${{ github.event_name }}" == 'push' ] && [ "${{ github.ref_type }}" == 'tag' ]; then
DOCKER_VERSION=$(echo "${{ github.ref }}" | sed 's|^refs/tags/v||')
echo "DOCKER_VERSION=${DOCKER_VERSION}" >> $GITHUB_ENV
else
COMMIT_SHORT_HASH=$(git rev-parse --short=7 HEAD)
echo "DOCKER_VERSION=${COMMIT_SHORT_HASH}" >> $GITHUB_ENV
fi
- uses: jpribyl/action-docker-layer-caching@v0.1.1
continue-on-error: true
- name: Log in to Docker Hub
uses: docker/login-action@v3
with:
username: ${{ secrets.DOCKERHUB_USERNAME }}
password: ${{ secrets.DOCKERHUB_PASSWORD }}
- name: Extract metadata (tags, labels) for worker executor
id: meta-worker-executor
uses: docker/metadata-action@v5
with:
images: golemservices/golem-worker-executor
- name: Build and push worker executor image
uses: docker/build-push-action@v5
with:
context: .
file: ./golem-worker-executor/docker/Dockerfile
push: true
platforms: ${{ env.PLATFORMS }}
tags: ${{ steps.meta-worker-executor.outputs.tags }}
labels: ${{ steps.meta-worker-executor.outputs.labels }}
- name: Extract metadata (tags, labels) for shard manager
id: meta-shard-manager
uses: docker/metadata-action@v5
with:
images: golemservices/golem-shard-manager
- name: Build and push shard manager image
uses: docker/build-push-action@v5
with:
context: .
file: ./golem-shard-manager/docker/Dockerfile
push: true
platforms: ${{ env.PLATFORMS }}
tags: ${{ steps.meta-shard-manager.outputs.tags }}
labels: ${{ steps.meta-shard-manager.outputs.labels }}
- name: Extract metadata (tags, labels) for golem component service
id: meta-golem-component-service
uses: docker/metadata-action@v5
with:
images: golemservices/golem-component-service
- name: Build and push golem component service image
uses: docker/build-push-action@v5
with:
context: .
file: ./golem-component-service/docker/Dockerfile
push: true
platforms: ${{ env.PLATFORMS }}
tags: ${{ steps.meta-golem-component-service.outputs.tags }}
labels: ${{ steps.meta-golem-component-service.outputs.labels }}
- name: Extract metadata (tags, labels) for golem worker service
id: meta-golem-worker-service
uses: docker/metadata-action@v5
with:
images: golemservices/golem-worker-service
- name: Build and push golem worker service image
uses: docker/build-push-action@v5
with:
context: .
file: ./golem-worker-service/docker/Dockerfile
push: true
platforms: ${{ env.PLATFORMS }}
tags: ${{ steps.meta-golem-worker-service.outputs.tags }}
labels: ${{ steps.meta-golem-worker-service.outputs.labels }}
- name: Extract metadata (tags, labels) for golem component compilation service
id: meta-golem-component-compilation-service
uses: docker/metadata-action@v5
with:
images: golemservices/golem-component-compilation-service
- name: Build and push golem component compilation service image
uses: docker/build-push-action@v5
with:
context: .
file: ./golem-component-compilation-service/docker/Dockerfile
push: true
platforms: ${{ env.PLATFORMS }}
tags: ${{ steps.meta-golem-component-compilation-service.outputs.tags }}
labels: ${{ steps.meta-golem-component-compilation-service.outputs.labels }}
- name: Extract metadata (tags, labels) for golem router
id: meta-golem-router
uses: docker/metadata-action@v5
with:
images: golemservices/golem-router
- name: Build and push golem router
uses: docker/build-push-action@v5
with:
context: .
file: ./golem-router/docker/Dockerfile
push: true
platforms: ${{ env.PLATFORMS }}
tags: ${{ steps.meta-golem-router.outputs.tags }}
labels: ${{ steps.meta-golem-router.outputs.labels }}
check:
runs-on: ubuntu-latest-large
steps:
- name: Checkout
uses: actions/checkout@v4
with:
submodules: recursive
- name: Setup Rust
uses: actions-rs/toolchain@v1
with:
toolchain: stable
override: true
- uses: Swatinem/rust-cache@v2
with:
shared-key: debug
cache-all-crates: true
save-if: false
- name: Run sccache-cache
uses: mozilla-actions/sccache-action@v0.0.3
- uses: davidB/rust-cargo-make@v1
- name: Install Protoc
uses: arduino/setup-protoc@v1
with:
repo-token: ${{ secrets.GITHUB_TOKEN }}
- name: Check formatting and clippy rules
env:
SCCACHE_GHA_ENABLED: "true"
RUSTC_WRAPPER: "sccache"
run: cargo make check
build:
runs-on: ubuntu-latest-large
steps:
- name: Checkout
uses: actions/checkout@v4
with:
submodules: recursive
- name: Setup Rust
uses: actions-rs/toolchain@v1
with:
toolchain: stable
override: true
- uses: Swatinem/rust-cache@v2
with:
shared-key: debug
cache-all-crates: true
save-if: true
- name: Run sccache-cache
uses: mozilla-actions/sccache-action@v0.0.3
- uses: davidB/rust-cargo-make@v1
- name: Install Protoc
uses: arduino/setup-protoc@v1
with:
repo-token: ${{ secrets.GITHUB_TOKEN }}
- name: Build all targets
env:
SCCACHE_GHA_ENABLED: "true"
RUSTC_WRAPPER: "sccache"
run: cargo make build
unit-tests:
runs-on: ubuntu-latest-large
steps:
- name: Checkout
uses: actions/checkout@v4
with:
submodules: recursive
- name: Setup Rust
uses: actions-rs/toolchain@v1
with:
toolchain: stable
override: true
- uses: Swatinem/rust-cache@v2
with:
shared-key: debug
cache-all-crates: true
save-if: false
- name: Run sccache-cache
uses: mozilla-actions/sccache-action@v0.0.3
- uses: davidB/rust-cargo-make@v1
- name: Install Protoc
uses: arduino/setup-protoc@v1
with:
repo-token: ${{ secrets.GITHUB_TOKEN }}
- name: Check that OpenAPI specs are up-to-date
env:
SCCACHE_GHA_ENABLED: "true"
RUSTC_WRAPPER: "sccache"
run: cargo make check-openapi
- name: Unit tests
env:
SCCACHE_GHA_ENABLED: "true"
RUSTC_WRAPPER: "sccache"
run: cargo make unit-tests
worker-tests:
runs-on: ubuntu-latest-large
strategy:
fail-fast: true
matrix:
group:
- name: group1
- name: group2
- name: group3
- name: group4
- name: group5
name: worker-tests-${{ matrix.group.name }}
steps:
- name: Checkout
uses: actions/checkout@v4
with:
submodules: recursive
- name: Setup Rust
uses: actions-rs/toolchain@v1
with:
toolchain: stable
override: true
- uses: Swatinem/rust-cache@v2
with:
shared-key: debug-workertests
cache-all-crates: true
save-if: ${{ matrix.group.name == 'group1' }}
- name: Run sccache-cache
uses: mozilla-actions/sccache-action@v0.0.3
- uses: davidB/rust-cargo-make@v1
- name: Install Protoc
uses: arduino/setup-protoc@v1
with:
repo-token: ${{ secrets.GITHUB_TOKEN }}
- name: Setup Redis
uses: shogo82148/actions-setup-redis@v1.29.0
with:
redis-version: latest
auto-start: false
- name: Worker Executor integration tests
env:
SCCACHE_GHA_ENABLED: "true"
RUSTC_WRAPPER: "sccache"
run: cargo make worker-executor-tests-${{ matrix.group.name }}
timeout-minutes: 20
integration-tests:
runs-on: ubuntu-latest-large
steps:
- name: Checkout
uses: actions/checkout@v4
with:
submodules: recursive
- name: Setup Rust
uses: actions-rs/toolchain@v1
with:
toolchain: stable
override: true
- uses: Swatinem/rust-cache@v2
with:
shared-key: debug
cache-all-crates: true
save-if: false
- name: Run sccache-cache
uses: mozilla-actions/sccache-action@v0.0.3
- uses: davidB/rust-cargo-make@v1
- name: Install Protoc
uses: arduino/setup-protoc@v1
with:
repo-token: ${{ secrets.GITHUB_TOKEN }}
- name: Setup Redis
uses: shogo82148/actions-setup-redis@v1.29.0
with:
redis-version: latest
auto-start: false
- name: Integration tests
env:
QUIET: 1
SCCACHE_GHA_ENABLED: "true"
RUSTC_WRAPPER: "sccache"
run: cargo make integration-tests
timeout-minutes: 20
cli-tests:
runs-on: ubuntu-latest-large
steps:
- name: Checkout
uses: actions/checkout@v4
with:
submodules: recursive
- name: Setup Rust
uses: actions-rs/toolchain@v1
with:
toolchain: stable
override: true
- uses: Swatinem/rust-cache@v2
with:
shared-key: debug
cache-all-crates: true
save-if: false
- name: Run sccache-cache
uses: mozilla-actions/sccache-action@v0.0.3
- uses: davidB/rust-cargo-make@v1
- name: Install Protoc
uses: arduino/setup-protoc@v1
with:
repo-token: ${{ secrets.GITHUB_TOKEN }}
- name: Setup Redis
uses: shogo82148/actions-setup-redis@v1.29.0
with:
redis-version: latest
auto-start: false
- name: CLI tests
env:
QUIET: 1
SCCACHE_GHA_ENABLED: "true"
RUSTC_WRAPPER: "sccache"
run: cargo make cli-tests
timeout-minutes: 20
sharding-tests:
runs-on: ubuntu-latest-large
steps:
- name: Checkout
uses: actions/checkout@v4
with:
submodules: recursive
- name: Setup Rust
uses: actions-rs/toolchain@v1
with:
toolchain: stable
override: true
- uses: Swatinem/rust-cache@v2
with:
shared-key: debug
cache-all-crates: true
save-if: false
- name: Run sccache-cache
uses: mozilla-actions/sccache-action@v0.0.3
- uses: davidB/rust-cargo-make@v1
- name: Install Protoc
uses: arduino/setup-protoc@v1
with:
repo-token: ${{ secrets.GITHUB_TOKEN }}
- name: Setup Redis
uses: shogo82148/actions-setup-redis@v1.29.0
with:
redis-version: latest
auto-start: false
- name: Sharding tests
env:
QUIET: 1
SCCACHE_GHA_ENABLED: "true"
RUSTC_WRAPPER: "sccache"
run: cargo make sharding-tests
timeout-minutes: 20
publish:
needs:
[
build,
check,
unit-tests,
worker-tests,
integration-tests,
cli-tests,
sharding-tests,
]
if: "startsWith(github.ref, 'refs/tags/v')"
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v4
with:
submodules: recursive
- name: Setup Rust
uses: actions-rs/toolchain@v1
with:
toolchain: stable
override: true
- uses: Swatinem/rust-cache@v2
with:
shared-key: release
cache-all-crates: true
- name: Run sccache-cache
uses: mozilla-actions/sccache-action@v0.0.3
- uses: davidB/rust-cargo-make@v1
- name: Install Protoc
uses: arduino/setup-protoc@v1
with:
repo-token: ${{ secrets.GITHUB_TOKEN }}
- id: get_version
uses: battila7/get-version-action@v2
- name: Publish all packages
env:
CARGO_REGISTRY_TOKEN: ${{ secrets.CARGO_REGISTRY_TOKEN }}
VERSION: ${{ steps.get_version.outputs.version-without-v }}
SCCACHE_GHA_ENABLED: "true"
RUSTC_WRAPPER: "sccache"
run: cargo make publish