# Static checks on the code.

image: registry.gitlab.com/satoshilabs/trezor/trezor-firmware/trezor-firmware-env.nix

# Caching
.gitlab_caching: &gitlab_caching
  cache:
    key: "$CI_COMMIT_REF_SLUG"
    paths:
      - .venv/

# Check the code for style correctness and perform some static code analysis.
# Biggest part is the python one - using `flake8`, `isort`, `black`, `pylint` and `pyright`,
# also checking Rust files by `rustfmt` and C files by `clang-format`.
# Changelogs formats are checked.
style prebuild:
  stage: prebuild
  variables:
    GIT_SUBMODULE_STRATEGY: "none"
  <<: *gitlab_caching
  script:
    - $NIX_SHELL --run "poetry run make -j1 style_check"

# Check validity of coin definitions and protobuf files.
common prebuild:
  stage: prebuild
  <<: *gitlab_caching
  script:
    - $NIX_SHELL --run "poetry run make defs_check"

# Check validity of auto-generated files.
gen prebuild:
  stage: prebuild
  <<: *gitlab_caching
  script:
    - $NIX_SHELL --run "poetry run make -j1 gen_check"

# Checking format of .editorconfig files.
editor prebuild:
  stage: prebuild
  <<: *gitlab_caching
  script:
    - $NIX_SHELL --run "make editor_check"

# Checking the format of release commit messages.
release commit messages prebuild:
  stage: prebuild
  before_script: []  # nothing needed
  variables:
    # We need to clone the repo properly so we can work with origin/main.
    GIT_STRATEGY: clone
  only:
    refs:
      - /^release\//
    variables:
      # We want this to run on gitlab.com/satoshilabs/trezor/trezor-firmware only.
      - $CI_PROJECT_PATH_SLUG == 'satoshilabs-trezor-trezor-firmware'
  script:
    - $NIX_SHELL --run "ci/check_release_commit_messages.sh"

# Verifying that all commits changing some functionality have a changelog entry
# or contain `[no changelog]` in the commit message.
changelog prebuild:
  stage: prebuild
  except:
    - main
  before_script: []  # nothing needed
  variables:
    GIT_SUBMODULE_STRATEGY: "none"
    GIT_STRATEGY: clone
  script:
    - $NIX_SHELL --run "ci/check_changelog.sh"
