stages:
- formatting
- linting
- conventional-commits-linting
- conventional-commits-next-version-checking
- compiling
- unit-testing
- releasing
- crates-io-publishing
- release-binary-compiling
formatting:
stage: formatting
image: rust
before_script:
- rustup component add rustfmt
script:
- cargo fmt --all -- --check
rules:
- if: $CI_MERGE_REQUEST_ID
linting:
stage: linting
image: rust
before_script:
- rustup component add clippy
script:
- cargo clippy --verbose --workspace --all-targets -- -D warnings
- cargo clippy --verbose --workspace --all-targets --all-features -- -D warnings
- cargo clippy --verbose --workspace --all-targets --no-default-features -- -D warnings
rules:
- if: $CI_MERGE_REQUEST_ID
conventional-commits-linting:
stage: conventional-commits-linting
image: rust
before_script:
- cargo install conventional_commits_linter
script:
- COMMON_ANCESTOR_COMMIT=`git merge-base origin/$CI_MERGE_REQUEST_SOURCE_BRANCH_NAME origin/$CI_MERGE_REQUEST_TARGET_BRANCH_NAME`
- /usr/local/cargo/bin/conventional_commits_linter --from-commit-hash $COMMON_ANCESTOR_COMMIT --allow-angular-type-only
rules:
- if: $CI_MERGE_REQUEST_ID
conventional-commits-next-version-checking:
stage: conventional-commits-next-version-checking
image: rust
before_script:
- cargo install conventional_commits_next_version
script:
- CURRENT_VERSION=`grep '^version = "[0-9][0-9]*.[0-9][0-9]*.[0-9][0-9]*"$' Cargo.toml | cut -d '"' -f 2`
- LATEST_TAG=`git describe --tags --abbrev=0`
- echo $LATEST_TAG | grep "^[0-9][0-9]*.[0-9][0-9]*.[0-9][0-9]*$"
- /usr/local/cargo/bin/conventional_commits_next_version --batch-commits --from-reference $LATEST_TAG --from-version $LATEST_TAG --current-version $CURRENT_VERSION
rules:
- if: $CI_MERGE_REQUEST_ID
compiling:
stage: compiling
image: rust
script:
- cargo build --verbose --workspace
- cargo build --verbose --workspace --all-features
- cargo build --verbose --workspace --no-default-features
rules:
- if: $CI_MERGE_REQUEST_ID
- if: $CI_COMMIT_BRANCH == "master"
unit-testing:
stage: unit-testing
image: rust
script:
- cargo test --verbose --workspace
- cargo test --verbose --workspace --all-features
- cargo test --verbose --workspace --no-default-features
rules:
- if: $CI_MERGE_REQUEST_ID
- if: $CI_COMMIT_BRANCH == "master"
releasing:
stage: releasing
image: registry.gitlab.com/gitlab-org/release-cli
before_script:
- apk add git
script:
- CURRENT_VERSION=`grep '^version = "[0-9][0-9]*.[0-9][0-9]*.[0-9][0-9]*"$' Cargo.toml | cut -d '"' -f 2`
- git tag -l | grep "^${CURRENT_VERSION}$" && exit 0
- LATEST_TAG=`git describe --tags | cut -d '-' -f 1`
- LATEST_TAG_HASH=`git rev-parse $LATEST_TAG`
- echo $LATEST_TAG | grep "^[0-9][0-9]*.[0-9][0-9]*.[0-9][0-9]*$"
- wget https://github.com/clog-tool/clog-cli/releases/download/v0.9.3/clog-v0.9.3-x86_64-unknown-linux-musl.tar.gz
- tar xvf clog-v0.9.3-x86_64-unknown-linux-musl.tar.gz
- RELEASE_DESCRIPTION=`./clog --from $LATEST_TAG_HASH --link-style Gitlab --subtitle $CURRENT_VERSION | tail -n +2`
- release-cli create --name $CURRENT_VERSION --description "$RELEASE_DESCRIPTION"
--tag-name $CURRENT_VERSION --ref $CI_COMMIT_SHA
--assets-link '{"name":"x86_64-linux-musl-binary.zip","url":"https://gitlab.com/DeveloperC/duplicate_code/-/jobs/artifacts/'$CURRENT_VERSION'/download?job=release-binary-compiling-x86_64-linux-musl"}'
rules:
- if: $CI_COMMIT_BRANCH == "master"
crates-io-publishing:
stage: crates-io-publishing
image: rust
script:
- cargo publish --token $GITLAB_CRATES_IO_TOKEN
rules:
- if: $CI_COMMIT_TAG
release-binary-compiling-x86_64-linux-musl:
stage: release-binary-compiling
image: rust:alpine
before_script:
- apk add --no-cache musl-dev git
script:
- cargo build --release --target x86_64-unknown-linux-musl
- mv target/x86_64-unknown-linux-musl/release/duplicate_code duplicate_code
- strip duplicate_code
artifacts:
paths:
- duplicate_code
rules:
- if: $CI_COMMIT_TAG