Skip to content
Snippets Groups Projects
Select Git revision
  • master default protected
1 result

rust

  • Clone with SSH
  • Clone with HTTPS
  • GitLab CI template for Rust

    This project implements a GitLab CI/CD template to build, test, and analyse your Rust projects.

    Usage

    This template can be used both as a CI/CD component or using the legacy include:project syntax.

    Use as a CI/CD component

    Add the following to your .gitlab-ci.yml:

    include:
      # 1: include the component
      - component: $CI_SERVER_FQDN/to-be-continuous/rust/gitlab-ci-rust@1.0.0
        # 2: set/override component inputs
        inputs:
          # ⚠ this is only an example
          build-args: "build --with-my-args"

    Use as a CI/CD template (legacy)

    Add the following to your .gitlab-ci.yml:

    include:
      # 1: include the template
      - project: "to-be-continuous/rust"
        ref: "1.0.0"
        file: "/templates/gitlab-ci-rust.yml"
    
    variables:
      # 2: set/override template variables
      # ⚠ this is only an example
      RUST_BUILD_ARGS: "build --with-my-args"

    Global configuration

    The Rust template uses some global configuration used throughout all jobs.

    Input / Variable Description Default value
    image / RUST_IMAGE The Docker image used to run cargo docker.io/rust:latest

    Jobs

    rust-build job

    This job performs build and tests at once.

    It uses the following variable:

    Input / Variable Description Default value
    build-args / RUST_BUILD_ARGS Arguments used by the build job build --with-default-args
    node-build-job-tags / NODE_BUILD_JOB_TAGS Tags to be used for selecting runners for the job []

    SonarQube analysis

    If you're using the SonarQube template to analyse your RUST code, here are 2 sample sonar-project.properties files.

    # see: https://docs.sonarqube.org/latest/analysis/languages/rust/
    # set your source directories here (relative to the sonar-project.properties file)
    sonar.sources=.
    # exclude unwanted directories and files from being analysed
    sonar.exclusions=output/**,**/*_test.rust
    
    # set your tests directories here (relative to the sonar-project.properties file)
    sonar.tests=.
    sonar.test.inclusions=**/*_test.rust
    
    # tests report (TODO)
    sonar.rust.testExecutionReportPaths=reports/sonar_test_report.xml
    # coverage report (TODO)
    sonar.rust.coverage.reportPaths=reports/coverage.cov

    More info:

    rust-lint job

    This job performs a lint analysis of your code, mapped to the build stage.

    It uses the following variables:

    Input / Variable Description Default value
    lint-image / RUST_LINT_IMAGE The Docker image used to run the lint tool rust-lint:latest
    lint-disabled / RUST_LINT_DISABLED Set to true to disable the lint analysis none (enabled)
    lint-args / RUST_LINT_ARGS Lint options and arguments --serevity=medium
    node-lint-job-tags / NODE_LINT_JOB_TAGS Tags to be used for selecting runners for the job []

    rust-depcheck job

    This job enables a manual dependency check analysis of your code, mapped to the test stage.

    It uses the following variables:

    Input / Variable Description Default value
    depcheck-image / RUST_DEPCHECK_IMAGE The Docker image used to run the dependency check tool rust-depcheck:latest
    depcheck-args / RUST_DEPCHECK_ARGS Dependency check options and arguments none
    node-depcheck-job-tags / NODE_DEPCHECK_JOB_TAGS Tags to be used for selecting runners for the job []

    rust-publish job

    This job is disabled by default and performs a publish of your built binaries.

    It uses the following variables:

    Input / Variable Description Default value
    publish-enabled / RUST_PUBLISH_ENABLED Variable to enable the publish job none (disabled)
    publish-args / RUST_PUBLISH_ARGS Arguments used by the publish job publish --with-default-args
    🔒 RUST_PUBLISH_LOGIN Login to use to publish must be defined
    🔒 RUST_PUBLISH_PASSWORD Password to use to publish must be defined
    node-publish-job-tags / NODE_PUBLISH_JOB_TAGS Tags to be used for selecting runners for the job []

    Secrets management

    Here are some advices about your secrets (variables marked with a 🔒):

    1. Manage them as project or group CI/CD variables:
      • masked to prevent them from being inadvertently displayed in your job logs,
      • protected if you want to secure some secrets you don't want everyone in the project to have access to (for instance production secrets).
    2. In case a secret contains characters that prevent it from being masked, simply define its value as the Base64 encoded value prefixed with @b64@: it will then be possible to mask it and the template will automatically decode it prior to using it.
    3. Don't forget to escape special characters (e.g.: $ -> $$).