blob: bf88d866deb4b55d77b3551c82a39708f4445e9e [file] [log] [blame]
# Licensed to the Apache Software Foundation (ASF) under one or more
# contributor license agreements. See the NOTICE file distributed with
# this work for additional information regarding copyright ownership.
# The ASF licenses this file to You under the Apache License, Version 2.0
# (the "License"); you may not use this file except in compliance with
# the License. You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
name: Rust
on:
push:
branches:
- master
- debug
pull_request:
branches:
- "**"
env:
CARGO_TERM_COLOR: always
RUST_BACKTRACE: "1"
RUSTFLAGS: "-D warnings"
LLVM_CONFIG_PATH: llvm-config-10
RUST_STABLE_TOOLCHAIN: "1.65"
RUST_NIGHTLY_TOOLCHAIN: "nightly-2023-01-28"
jobs:
required:
needs:
- test
- fmt
runs-on: ubuntu-20.04
steps:
- name: Check results
run: |
[[ ${{ needs.test.result }} == 'success' ]] || exit 1;
[[ ${{ needs.fmt.result }} == 'success' ]] || exit 1;
test:
name: Test
strategy:
fail-fast: false
matrix:
os:
- ubuntu-20.04
- macos-12
version:
# Many composer dependencies need PHP 7.2+
- php: "7.2"
swoole: "4.6.7"
- php: "7.3"
swoole: "4.7.1"
- php: "7.4"
swoole: "4.8.10"
- php: "8.0"
swoole: "5.0.0"
- php: "8.1"
swoole: "5.0.0"
- php: "8.2"
swoole: "5.0.0"
runs-on: ${{ matrix.os }}
steps:
- name: Checkout
uses: actions/checkout@v2
with:
submodules: "recursive"
- name: Install libclang and protobuf for Linux
if: matrix.os == 'ubuntu-20.04'
run: sudo apt-get install -y llvm-10-dev libclang-10-dev protobuf-compiler
- name: Install protobuf for Macos
if: matrix.os == 'macos-12'
run: brew install protobuf
- name: Setup PHP
uses: shivammathur/setup-php@v2
with:
php-version: ${{ matrix.version.php }}
tools: php-config, composer:v2
extensions: >
bcmath, calendar, ctype, dom, exif, gettext, iconv, intl, json, mbstring,
mysqli, mysqlnd, opcache, pdo, pdo_mysql, phar, posix, readline, redis,
memcached, swoole-${{ matrix.version.swoole }}, xml, xmlreader, xmlwriter,
yaml, zip
- name: Setup php-fpm for Linux
if: matrix.os == 'ubuntu-20.04'
run: |
sudo apt-get install -y php${{ matrix.version.php }}-fpm
sudo ln -sf /usr/sbin/php-fpm${{ matrix.version.php }} /usr/sbin/php-fpm
- name: PHP version
run: |
which php ; php --version ; php -m
which php-fpm ; php-fpm --version ; php-fpm -m
php-config || true
php -r 'echo "Swoole version: " . phpversion("swoole") . "\n";'
composer --version
[[ `php --version` == PHP\ ${{ matrix.version.php }}.* ]] || exit 1;
[[ `php-fpm --version` == PHP\ ${{ matrix.version.php }}.* ]] || exit 1;
[[ `php-config --version` == ${{ matrix.version.php }}.* ]] || exit 1;
- name: Install Rust
uses: actions-rs/toolchain@v1
with:
toolchain: ${{ env.RUST_STABLE_TOOLCHAIN }}
override: true
components: clippy
- name: Setup cargo cache
uses: actions/cache@v3
with:
path: |
~/.cargo/bin/
~/.cargo/registry/index/
~/.cargo/registry/cache/
~/.cargo/git/db/
target/
key: ${{ matrix.os }}-test-${{ matrix.version.php }}-${{ hashFiles('**/Cargo.lock') }}
- name: Cargo clippy
uses: actions-rs/cargo@v1
with:
toolchain: ${{ env.RUST_STABLE_TOOLCHAIN }}
command: clippy
args: --release --workspace
- name: Cargo build
uses: actions-rs/cargo@v1
with:
toolchain: ${{ env.RUST_STABLE_TOOLCHAIN }}
command: build
args: --release --workspace
- name: Composer install
run: composer install --working-dir=tests/php
# Build mixture for cargo test.
- name: Docker compose
if: matrix.os == 'ubuntu-20.04'
run: docker compose up -d
# Build mixture for cargo test.
- name: Vagrant up for docker compose
if: matrix.os == 'macos-12'
run: vagrant up
# Try cargo test.
- name: Cargo test
id: cargo-test-step
uses: actions-rs/cargo@v1
with:
toolchain: ${{ env.RUST_STABLE_TOOLCHAIN }}
command: test
args: --release --workspace
continue-on-error: true
# Rebuild the mixture when cargo test failed.
- name: Docker compose restart
if: matrix.os == 'ubuntu-20.04' && steps.cargo-test-step.outcome != 'success'
run: docker compose restart
# Rebuild the mixture when cargo test failed.
- name: Vagrant reload for docker compose
if: matrix.os == 'macos-12' && steps.cargo-test-step.outcome != 'success'
run: vagrant reload
# Delay before retry.
- name: Delay
if: steps.cargo-test-step.outcome != 'success'
run: sleep 20
# Retry cargo test.
- name: Cargo test
if: steps.cargo-test-step.outcome != 'success'
uses: actions-rs/cargo@v1
with:
toolchain: ${{ env.RUST_STABLE_TOOLCHAIN }}
command: test
args: --release --workspace
- name: View logs
if: always()
run: |
cat /tmp/*.log
fmt:
name: Fmt
strategy:
fail-fast: false
matrix:
os:
- ubuntu-20.04
runs-on: ${{ matrix.os }}
steps:
- name: Checkout
uses: actions/checkout@v2
with:
submodules: "recursive"
- name: Install Rust Nightly
uses: actions-rs/toolchain@v1
with:
toolchain: ${{ env.RUST_NIGHTLY_TOOLCHAIN }}
override: true
components: rustfmt
- name: Cargo fmt
uses: actions-rs/cargo@v1
with:
toolchain: ${{ env.RUST_NIGHTLY_TOOLCHAIN }}
command: fmt
args: --all -- --check