314 lines
8.5 KiB
YAML
314 lines
8.5 KiB
YAML
version: 2.1
|
|
|
|
aliases:
|
|
- &plume-docker
|
|
image: plumeorg/plume-buildenv:v0.0.5
|
|
- &defaults
|
|
docker:
|
|
- *plume-docker
|
|
working_directory: ~/projects/Plume
|
|
- &postgresql
|
|
docker:
|
|
- *plume-docker
|
|
- image: circleci/postgres:9.6-alpine
|
|
environment:
|
|
POSTGRES_USER: postgres
|
|
POSTGRES_DB: plume
|
|
working_directory: ~/projects/Plume
|
|
- &selenium
|
|
docker:
|
|
- *plume-docker
|
|
- image: elgalu/selenium:latest
|
|
working_directory: ~/projects/Plume
|
|
- &postgresql_selenium
|
|
docker:
|
|
- *plume-docker
|
|
- image: circleci/postgres:9.6-alpine
|
|
environment:
|
|
POSTGRES_USER: postgres
|
|
POSTGRES_DB: plume
|
|
- image: elgalu/selenium:latest
|
|
working_directory: ~/projects/Plume
|
|
|
|
- &attach_workspace
|
|
attach_workspace:
|
|
at: ~/projects/Plume/
|
|
- &persist_to_workspace
|
|
persist_to_workspace:
|
|
root: ~/projects/Plume/
|
|
paths:
|
|
- ./
|
|
|
|
- &env_postgresql
|
|
environment:
|
|
MIGRATION_DIRECTORY: migrations/postgres
|
|
FEATURES: postgres
|
|
DATABASE_URL: postgres://postgres@localhost/plume
|
|
RUST_TEST_THREADS: 1
|
|
- &env_sqlite
|
|
environment:
|
|
MIGRATION_DIRECTORY: migrations/sqlite
|
|
FEATURES: sqlite
|
|
DATABASE_URL: plume.sqlite3
|
|
RUST_TEST_THREADS: 1
|
|
|
|
- &restore_cache
|
|
restore_cache:
|
|
keys:
|
|
- v2-plume-notest-{{ checksum "Cargo.lock" }}
|
|
- v2-plume-notest
|
|
- &save_cache
|
|
save_cache:
|
|
key: v2-plume-notest-{{ checksum "Cargo.lock" }}
|
|
paths:
|
|
- ~/.cargo/
|
|
- ./target
|
|
|
|
- &restore_cache_web
|
|
restore_cache:
|
|
keys:
|
|
- v2-plume-web-{{ checksum "Cargo.lock" }}
|
|
- v2-plume-web
|
|
- &save_cache_web
|
|
save_cache:
|
|
key: v2-plume-web-{{ checksum "Cargo.lock" }}
|
|
paths:
|
|
- ~/.cargo/
|
|
- ./target
|
|
|
|
- &restore_cache_cli
|
|
restore_cache:
|
|
keys:
|
|
- v2-plume-notest-{{ checksum "Cargo.lock" }}-{{ checksum "/FEATURES" }}-cli
|
|
- v2-plume-notest-{{ checksum "Cargo.lock" }}-{{ checksum "/FEATURES" }}
|
|
- v2-plume-notest-{{ checksum "Cargo.lock" }}
|
|
- v2-plume-notest
|
|
- &save_cache_cli
|
|
save_cache:
|
|
key: v2-plume-notest-{{ checksum "Cargo.lock" }}-{{ checksum "/FEATURES" }}-cli
|
|
paths:
|
|
- ~/.cargo/
|
|
- target
|
|
|
|
- &restore_cache_release
|
|
restore_cache:
|
|
keys:
|
|
- v2-plume-release-{{ checksum "Cargo.lock" }}
|
|
- v2-plume-release
|
|
- v2-plume-notest-{{ checksum "Cargo.lock" }}
|
|
- v2-plume-notest
|
|
- &save_cache_release
|
|
save_cache:
|
|
key: v2-plume-release-{{ checksum "Cargo.lock" }}
|
|
paths:
|
|
- ~/.cargo
|
|
- target/release
|
|
- target/wasm32-unknown-unknown/release
|
|
|
|
- &restore_cache_plume_dead_code
|
|
restore_cache:
|
|
keys:
|
|
- v2-plume-test-{{ checksum "/FEATURES" }}-{{ checksum "Cargo.lock" }}-plume
|
|
- v2-plume-test-{{ checksum "/FEATURES" }}-{{ checksum "Cargo.lock" }}
|
|
- v2-plume-test-{{ checksum "/FEATURES" }}
|
|
- v2-plume-notest-{{ checksum "Cargo.lock" }}-{{ checksum "/FEATURES" }}
|
|
- v2-plume-notest-{{ checksum "Cargo.lock" }}
|
|
- v2-plume-notest
|
|
- &save_cache_plume_dead_code
|
|
save_cache:
|
|
key: v2-plume-test-{{ checksum "/FEATURES" }}-{{ checksum "Cargo.lock" }}-plume
|
|
paths:
|
|
- ~/.cargo/
|
|
- target
|
|
|
|
- &test_cli
|
|
steps:
|
|
- *attach_workspace
|
|
- run:
|
|
name: Set cache key
|
|
command: echo "$FEATURES" > /FEATURES
|
|
- *restore_cache_cli
|
|
- run:
|
|
name: clippy
|
|
command: cargo clippy --no-default-features --features="${FEATURES}" --release -p plume-cli -- -D warnings
|
|
- *save_cache_cli
|
|
- &test_unit
|
|
steps:
|
|
- *attach_workspace
|
|
- run:
|
|
name: Set cache key
|
|
command: echo "$FEATURES" > /FEATURES
|
|
- *restore_cache_plume_dead_code
|
|
- run:
|
|
name: clippy
|
|
command: cargo clippy --no-default-features --features="${FEATURES}" --release -- -D warnings
|
|
- run:
|
|
name: compile test
|
|
command: cargo test --no-default-features --features="${FEATURES}" --all --exclude plume-front --no-run || cargo test --no-default-features --features="${FEATURES}" --all --exclude plume-front --no-run
|
|
- run:
|
|
name: run test
|
|
command: ./script/run_unit_test.sh
|
|
- run:
|
|
name: upload coverage
|
|
command: ./script/upload_coverage.sh unit
|
|
- *save_cache_plume_dead_code
|
|
|
|
- &test_browser
|
|
steps:
|
|
- *attach_workspace
|
|
- run:
|
|
name: Set cache key
|
|
command: echo "$FEATURES" > /FEATURES
|
|
- *restore_cache_plume_dead_code
|
|
- run:
|
|
name: install server
|
|
command: cargo install --debug --no-default-features --features="${FEATURES}",test --path . --force || cargo install --debug --no-default-features --features="${FEATURES}",test --path . --force
|
|
- run:
|
|
name: install plm
|
|
command: cargo install --debug --no-default-features --features="${FEATURES}" --path plume-cli --force || cargo install --debug --no-default-features --features="${FEATURES}" --path plume-cli --force
|
|
- run:
|
|
name: run test
|
|
command: ./script/run_browser_test.sh
|
|
environment:
|
|
BROWSER: firefox
|
|
- run:
|
|
name: upload coverage
|
|
command: ./script/upload_coverage.sh integration
|
|
- *save_cache_plume_dead_code
|
|
|
|
- &release
|
|
steps:
|
|
- *attach_workspace
|
|
- *restore_cache_release
|
|
- run:
|
|
name: build frontend
|
|
command: cargo web deploy -p plume-front --release
|
|
- run:
|
|
name: build server
|
|
command: cargo build --release --no-default-features --features="${FEATURES}" || cargo build --release --no-default-features --features="${FEATURES}"
|
|
- run:
|
|
name: build plm
|
|
command: cargo build --release --no-default-features --features="${FEATURES}" -p plume-cli || cargo build --release --no-default-features --features="${FEATURES}" -p plume-cli
|
|
- *save_cache_release
|
|
- run: script/generate_artifact.sh
|
|
- store_artifacts:
|
|
path: plume.tar.gz
|
|
destination: plume.tar.gz
|
|
|
|
|
|
jobs:
|
|
download_deps:
|
|
<<: *defaults
|
|
steps:
|
|
- checkout
|
|
- *attach_workspace
|
|
- *restore_cache
|
|
- run: git config --global --remove-section url."ssh://git@github.com"
|
|
- run: cargo fetch
|
|
- *save_cache
|
|
- *persist_to_workspace
|
|
|
|
cargo_fmt:
|
|
<<: *defaults
|
|
steps:
|
|
- *attach_workspace
|
|
- run: cargo fmt --all -- --check
|
|
|
|
build_web:
|
|
<<: *defaults
|
|
steps:
|
|
- *attach_workspace
|
|
- *restore_cache_web
|
|
- run: cargo clippy -p plume-front -- -D warnings
|
|
- run: cargo web deploy -p plume-front
|
|
- *save_cache_web
|
|
- *persist_to_workspace
|
|
|
|
test_cli_postgresql:
|
|
<<: *postgresql
|
|
<<: *env_postgresql
|
|
<<: *test_cli
|
|
|
|
test_cli_sqlite:
|
|
<<: *defaults
|
|
<<: *env_sqlite
|
|
<<: *test_cli
|
|
|
|
test_unit_postgresql:
|
|
<<: *postgresql
|
|
<<: *env_postgresql
|
|
<<: *test_unit
|
|
|
|
test_unit_sqlite:
|
|
<<: *defaults
|
|
<<: *env_sqlite
|
|
<<: *test_unit
|
|
|
|
test_browser_postgresql:
|
|
<<: *postgresql_selenium
|
|
<<: *env_postgresql
|
|
<<: *test_browser
|
|
|
|
test_browser_sqlite:
|
|
<<: *selenium
|
|
<<: *env_sqlite
|
|
<<: *test_browser
|
|
all_ok:
|
|
docker:
|
|
- image: alpine:3.7
|
|
steps:
|
|
- run: /bin/true
|
|
release_postgresql:
|
|
<<: *defaults
|
|
<<: *env_postgresql
|
|
<<: *release
|
|
release_sqlite:
|
|
<<: *defaults
|
|
<<: *env_sqlite
|
|
<<: *release
|
|
|
|
workflows:
|
|
version: 2
|
|
build_and_test:
|
|
jobs:
|
|
- download_deps
|
|
- cargo_fmt:
|
|
requires:
|
|
- download_deps
|
|
- build_web:
|
|
requires:
|
|
- download_deps
|
|
- test_cli_postgresql:
|
|
requires:
|
|
- download_deps
|
|
- test_cli_sqlite:
|
|
requires:
|
|
- download_deps
|
|
- test_unit_postgresql:
|
|
requires:
|
|
- download_deps
|
|
- test_unit_sqlite:
|
|
requires:
|
|
- download_deps
|
|
- test_browser_postgresql:
|
|
requires:
|
|
- build_web
|
|
- test_browser_sqlite:
|
|
requires:
|
|
- build_web
|
|
- all_ok:
|
|
requires:
|
|
- cargo_fmt
|
|
- test_cli_postgresql
|
|
- test_cli_sqlite
|
|
- test_unit_postgresql
|
|
- test_unit_sqlite
|
|
- test_browser_postgresql
|
|
- test_browser_sqlite
|
|
- release_postgresql:
|
|
requires:
|
|
- all_ok
|
|
- release_sqlite:
|
|
requires:
|
|
- all_ok
|