duplicate_code 0.1.0

A tool for parsing directories scanning all the files within to find duplicate segments of code across files.
stages:
    - formatting
    - linting
    - conventional-commits-linting
    - conventional-commits-next-version-checking
    - compiling
    - unit-testing


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`
        # Lint all the commits in the branch.
        - /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:
        # Get current version and latest tag.
        - CURRENT_VERSION=`grep '^version = "[0-9][0-9]*.[0-9][0-9]*.[0-9][0-9]*"$' Cargo.toml | cut -d '"' -f 2`
        # Get latest tag.
        - LATEST_TAG=`git describe --tags --abbrev=0`
        # Check latest tag is in semantic versioning.
        - echo $LATEST_TAG | grep "^[0-9][0-9]*.[0-9][0-9]*.[0-9][0-9]*$"
        # Check current vs expected.
        - /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"