--- stages: - lint - test - bot variables: DOCS_BASEURL: "https://docs.xmpp.rs" FEATURES: "" RUST_BACKTRACE: "full" RUSTFLAGS: " -D warnings" RUSTDOCFLAGS: " -D warnings" .show-version: before_script: - apt-get update; apt-get install -y --no-install-recommends pkg-config libssl-dev - rustc --version - cargo --version .stable: image: rust:slim extends: - .show-version .nightly: image: rustlang/rust:nightly-slim extends: - .show-version .test: stage: test script: - cargo test --verbose --release -- --include-ignored - cargo test --verbose --no-default-features rules: - if: $CI_PIPELINE_SOURCE == 'merge_request_event' - if: $CI_PIPELINE_SOURCE == 'push' && $CI_COMMIT_REF_NAME == 'main' .docs: stage: test script: - echo "Building docs to CI_DOC_TARGET=$CI_DOC_TARGET" - cargo +nightly doc --no-deps -Zrustdoc-map - | if [ -n "${SECRET_DOCS_SSH_PRIVATE:-}" ]; then set -e apt install -y rsync openssh-client mkdir -p $HOME/.ssh echo -e "Host docs\n\tHostname docs.xmpp.rs\n\tPort 1312\n\tUser xmpp-rs\n\tStrictHostKeyChecking no" > $HOME/.ssh/config echo "$SECRET_DOCS_SSH_PRIVATE" > $HOME/.ssh/id_ed25519 chmod 400 $HOME/.ssh/id_ed25519 rsync -av target/doc/ docs:$CI_DOC_TARGET # save artifact space rm -rf -- target/doc/* printf 'See here' "$DOCS_BASEURL/$CI_MERGE_REQUEST_IID/" > target/doc/index.html else echo "$CI_JOB_ID" > target/doc/job_id.txt fi - mv target/doc/ public artifacts: expose_as: "Rendered Docs" expire_in: "7 days" # The trailing slash is required for exposure to work! paths: - public/ rules: - if: $CI_PIPELINE_SOURCE == 'merge_request_event' variables: CI_DOC_TARGET: "$CI_MERGE_REQUEST_IID" - if: $CI_PIPELINE_SOURCE == 'push' && $CI_COMMIT_REF_NAME == 'main' variables: CI_DOC_TARGET: "main" rustfmt: stage: lint script: - rustup component add rustfmt - cargo fmt --check extends: - .stable rules: - if: $CI_PIPELINE_SOURCE == 'merge_request_event' - if: $CI_PIPELINE_SOURCE == 'push' && $CI_COMMIT_REF_NAME == 'main' stable-test: extends: - .test - .stable nightly-test: # It's not often, but it happens nightly breaks, surprisingly. allow_failure: true extends: - .test - .nightly docs: extends: - .docs - .nightly bot-comment: stage: bot image: alpine:latest dependencies: - docs script: - apk add --no-cache glab - | if [ -e "public/job_id.txt" ]; then # CI build could not upload to docs.xmpp.rs, so we have to link to the job artifacts instead. job_id="$(cat public/job_id.txt)" docs_url="https://xmpp-rs.gitlab.io/-/xmpp-rs/-/jobs/$job_id/artifacts/public/xmpp/index.html" else docs_url="$DOCS_BASEURL/$CI_MERGE_REQUEST_IID/" fi - glab mr --repo "$CI_MERGE_REQUEST_PROJECT_PATH" comment $CI_MERGE_REQUEST_IID --unique --message "Thanks for your MR! You can preview the docs [here]($docs_url)." rules: - if: $CI_PIPELINE_SOURCE == 'merge_request_event' variables: GITLAB_TOKEN: $MR_AUTOMATION_TOKEN