Merge corrections #4562
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
name: build | |
on: | |
push: | |
paths: | |
- "**" | |
- "!docs/**" | |
- "!examples/**" | |
- "!images/**" | |
- "!**.md" | |
- "!**.ipynb" | |
- "resources/**" | |
# manual trigger | |
workflow_dispatch: { } | |
env: | |
RUST_LOG: "debug" | |
RUST_LOG_SPAN_EVENTS: "new,close" | |
RUST_BACKTRACE: "1" | |
jobs: | |
lint_fmt: | |
name: Lint / Code | |
runs-on: ubuntu-latest | |
steps: | |
- uses: actions/checkout@v4 | |
- uses: actions-rs/toolchain@v1 | |
with: | |
components: rustfmt, clippy | |
- name: cargo fmt --check | |
uses: actions-rs/cargo@v1 | |
with: | |
command: fmt | |
args: --check | |
- name: Lint dividing lines | |
run: | | |
cargo test -p kamu-repo-tools -- dividing_lines | |
- name: Lint license headers | |
run: | | |
cargo test -p kamu-repo-tools -- license_header | |
- name: Lint OpenAPI spec | |
run: | | |
make lint-openapi | |
- name: clippy | |
uses: actions-rs/cargo@v1 | |
with: | |
command: clippy | |
args: --workspace --all-targets -- -D warnings | |
lint_deps: | |
name: Lint / Dependencies | |
runs-on: ubuntu-latest | |
steps: | |
- uses: actions/checkout@v4 | |
- uses: actions-rs/toolchain@v1 | |
- uses: cargo-bins/cargo-binstall@main | |
- run: cargo binstall cargo-deny -y | |
- run: cargo deny check | |
- run: cargo binstall cargo-udeps -y | |
- run: cargo udeps --all-targets | |
test: | |
strategy: | |
fail-fast: false | |
matrix: | |
include: | |
- name: Linux / amd64 | |
runs-on: ubuntu-latest | |
cargo-flags: --profile ci --features ingest-ftp,web-ui | |
nextest-flags: --cargo-profile ci --features ingest-ftp,web-ui | |
nextest-exclusions-main-set-tests: -E '!(test(::database::) | test(::spark::)| test(::flink::))' | |
nextest-exclusions-database-set-part: '' | |
container-runtime: podman | |
ipfs: true | |
database: true | |
# TODO: Not running docker as it takes ~7 minutes to install | |
# See: https://github.com/actions/runner/issues/1456 | |
- name: MacOS / amd64 | |
runs-on: macos-13 | |
cargo-flags: --profile ci --features ingest-ftp | |
nextest-flags: --cargo-profile ci --features ingest-ftp | |
nextest-exclusions-main-set-tests: -E '!(test(::containerized::) | test(::database::))' | |
nextest-exclusions-database-set-part: '& !(test(::containerized::))' | |
container-runtime: '' | |
ipfs: false | |
database: false | |
# TODO: M1 cannot run docker due to lack of nested virtualization | |
# See: https://github.com/marketplace/actions/setup-docker-on-macos#arm64-processors-m1-m2-m3-series-used-on-macos-14-images-are-unsupported | |
- name: MacOS / arm64 | |
runs-on: macos-14 | |
cargo-flags: --profile ci | |
nextest-flags: --cargo-profile ci | |
nextest-exclusions-main-set-tests: -E '!(test(::containerized::) | test(::database::))' | |
nextest-exclusions-database-set-part: '& !(test(::containerized::))' | |
container-runtime: '' | |
ipfs: false | |
database: false | |
# TODO: DataFusion tests are temporarily disabled | |
# See: https://github.com/kamu-data/kamu-cli/issues/226 | |
- name: Windows / amd64 | |
runs-on: windows-latest | |
cargo-flags: --profile ci | |
nextest-flags: --cargo-profile ci | |
# platform(target) is a workaround for Windows only issue in cargo-nextest upon proc macro crates | |
nextest-exclusions-main-set-tests: -E 'platform(target) & !(test(::containerized::) | test(::datafusion::) | test(::database::))' | |
nextest-exclusions-database-set-part: '& !(test(::datafusion::))' | |
container-runtime: '' | |
ipfs: false | |
database: false | |
name: Test / ${{ matrix.name }} | |
runs-on: ${{ matrix.runs-on }} | |
services: | |
postgres: | |
image: ${{ matrix.database && 'postgres:16' || '' }} | |
env: | |
POSTGRES_USER: root | |
POSTGRES_PASSWORD: root | |
POSTGRES_DB: kamu-test | |
ports: | |
- 5432:5432 | |
mariadb: | |
image: ${{ matrix.database && 'mariadb:11' || '' }} | |
env: | |
MARIADB_ROOT_PASSWORD: root | |
MARIADB_DATABASE: kamu-test | |
ports: | |
- 3306:3306 | |
steps: | |
- name: Setup IPFS | |
uses: ibnesayeed/setup-ipfs@master | |
if: matrix.ipfs | |
with: | |
ipfs_version: "0.19" | |
- uses: actions/checkout@v4 | |
- uses: actions-rs/toolchain@v1 | |
- uses: swatinem/rust-cache@v2 | |
with: | |
cache-on-failure: true | |
- uses: cargo-bins/cargo-binstall@main | |
- name: Install cargo tools | |
run: | | |
cargo binstall cargo-nextest -y --force | |
- name: Configure runtime | |
if: matrix.container-runtime != '' | |
run: | | |
echo '{ "kind": "CLIConfig", "version": 1, "content": {"engine": { "runtime": "${{ matrix.container-runtime }}" } } }' > ~/.kamuconfig | |
echo "KAMU_CONTAINER_RUNTIME_TYPE=${{ matrix.container-runtime }}" >> $GITHUB_ENV | |
- name: Build | |
# Note: only be used to test the "web-ui" feature building | |
env: | |
# To test just building, we embed a tiny folder | |
KAMU_WEB_UI_DIR: '../../../.github' | |
run: | | |
cargo test ${{ matrix.cargo-flags }} --no-run | |
- name: Pull test images | |
if: matrix.container-runtime != '' | |
run: cargo nextest run ${{ matrix.nextest-flags }} -E 'test(::setup::)' --no-capture | |
- name: Run main set of tests | |
run: cargo nextest run ${{ matrix.nextest-flags }} ${{ matrix.nextest-exclusions-main-set-tests }} -v | |
# Note: SQLite does not require a container and may run on any platform | |
- name: SQLite database tests | |
env: | |
SQLX_OFFLINE: false | |
DATABASE_URL: sqlite://kamu.sqlite.db | |
# platform(target) is a workaround for Windows only issue in cargo-nextest upon proc macro crates | |
run: cargo nextest run ${{ matrix.nextest-flags }} -E 'platform(target) & test(::sqlite::) ${{ matrix.nextest-exclusions-database-set-part }}' | |
- name: Postgres database tests | |
if: matrix.database | |
env: | |
SQLX_OFFLINE: false | |
DATABASE_URL: postgres://root:root@localhost:5432/kamu-test | |
run: cargo nextest run ${{ matrix.nextest-flags }} -E 'test(::postgres::) ${{ matrix.nextest-exclusions-database-set-part }}' | |
- name: MariaDB database tests | |
if: matrix.database | |
env: | |
SQLX_OFFLINE: false | |
DATABASE_URL: mariadb://root:root@localhost:3306/kamu-test | |
run: cargo nextest run ${{ matrix.nextest-flags }} -E 'test(::mysql::) ${{ matrix.nextest-exclusions-database-set-part }}' | |
# Not running on windows due to line ending differences | |
- name: Check generated files | |
if: "!contains(matrix.runs-on, 'windows')" | |
run: git diff && git diff-index --quiet HEAD |