diff --git a/.woodpecker.yml b/.woodpecker.yml index 2c9bb67..bd8e535 100644 --- a/.woodpecker.yml +++ b/.woodpecker.yml @@ -1,10 +1,98 @@ -pipeline: - build: - image: rust +variables: + - &rust_image "docker.io/rust:1.76" + - &slow_check_paths + - path: + # rust source code + - "crates/**" + - "src/**" + - "tests/**" + - "**/Cargo.toml" + - "Cargo.lock" + # database migrations + - "migrations/**" + # config files and scripts used by ci + - ".woodpecker.yml" + +steps: + + toml_fmt: + image: docker.io/tamasfe/taplo:0.8.1 + commands: + - taplo format --check + + + cargo_fmt: + image: docker.io/rustlang/rust:nightly + environment: + # store cargo data in repo folder so that it gets cached between steps + CARGO_HOME: .cargo_home + commands: + # need make existing toolchain available + - cargo +nightly fmt -- --check + + cargo_machete: + image: docker.io/rustlang/rust:nightly + commands: + - wget https://github.com/cargo-bins/cargo-binstall/releases/latest/download/cargo-binstall-x86_64-unknown-linux-musl.tgz + - tar -xvf cargo-binstall-x86_64-unknown-linux-musl.tgz + - cp cargo-binstall /usr/local/cargo/bin + - cargo binstall -y cargo-machete + - cargo machete + + ignored_files: + image: docker.io/alpine:3 + commands: + - apk add git + - IGNORED=$(git ls-files --cached -i --exclude-standard) + - if [[ "$IGNORED" ]]; then echo "Ignored files present:\n$IGNORED\n"; exit 1; fi + + check: + image: *rust_image + environment: + CARGO_HOME: .cargo_home + commands: + - cargo check + when: *slow_check_paths + + cargo_clippy: + image: *rust_image + environment: + CARGO_HOME: .cargo_home + commands: + - rustup component add clippy + - cargo clippy --tests --all-targets -- -D warnings + when: *slow_check_paths + + cargo_build: + image: *rust_image + environment: + CARGO_HOME: .cargo_home commands: - - rustup component add rustfmt - - cargo --version - - cargo fmt --check - cargo build - - cargo test + - mv target/debug/lemmy_server target/lemmy_server + when: *slow_check_paths + + cargo_test: + image: *rust_image + environment: + LEMMY_DATABASE_URL: postgres://lemmy:password@database:5432/lemmy + RUST_BACKTRACE: "1" + CARGO_HOME: .cargo_home + commands: + - cargo test --no-fail-fast + when: *slow_check_paths + + integration_test: + image: docker.io/debian-slim:latest + commands: - ./test.sh + + publish_to_crates_io: + image: *rust_image + commands: + - cargo login "$CARGO_REGISTRY_TOKEN" + - cargo publish --registry crates-io --no-verify --allow-branch "${CI_COMMIT_TAG}" --yes + secrets: [cargo_api_token] + when: + event: tag +