Skip to content

Merge corrections #4562

Merge corrections

Merge corrections #4562

Workflow file for this run

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