xmpp-rs/.gitlab-ci.yml
Jonas Schäfer 057306fba1 ci: use shallow fetch
No need to fetch the entire history. The merge base is likely within the
last couple commits because we require it to be so anyway, because the
repo requires fast-forward merges currently.

skip-changelog, because this doesn't touch library code.
2025-01-26 17:36:51 +01:00

123 lines
3.5 KiB
YAML

---
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
- 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"
- RUSTDOCFLAGS="--cfg docsrs -D warnings" RUSTFLAGS="--cfg xmpprs_doc_build" cargo +nightly doc --no-deps -Zrustdoc-map --all-features
- 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
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 --version
- cargo fmt --check
extends:
- .stable
rules:
- if: $CI_PIPELINE_SOURCE == 'merge_request_event'
- if: $CI_PIPELINE_SOURCE == 'push' && $CI_COMMIT_REF_NAME == 'main'
changelog-update:
stage: lint
image: alpine:latest
# Check in the commit message for "skip.?changelog", if not present
# then check for changes in changelogs.
# XXX: It looks like $CI_COMMIT_MESSAGE mangles newlines so it's not
# possible to require the "skip.?changelog" string to be on its own line,
# that means it would also trigger within a wall of text. Not so obvious.
# TODO: Check the whole MR for updates in changelogs, not just the last
# commit.
script:
- apk add --no-cache python3 git
- python3 --version
- git version
- git fetch --depth 16 origin main
- |
if ! git log --oneline "${CI_MERGE_REQUEST_DIFF_BASE_SHA}.." --; then
echo "Failed to find revision ${CI_MERGE_REQUEST_DIFF_BASE_SHA}.." >&2
echo "This likely means that you need to rebase your branch." >&2
exit 1
fi
- python3 .forgejo/workflows/check-changelog.py
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
# script:
# - apk add --no-cache glab
# - 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_BASEURL/$CI_MERGE_REQUEST_IID/)."
# rules:
# - if: $CI_PIPELINE_SOURCE == 'merge_request_event'
# variables:
# GITLAB_TOKEN: $MR_AUTOMATION_TOKEN