Skip to content

v0.10.0

Choose a tag to compare

@github-actions github-actions released this 02 Nov 23:21
· 258 commits to main since this release
0a9a9c2

Highlights

  • Several repositories as one tree. glasir serve on a directory holding more than one git repository (up to two levels down) serves them as one graph: HTTP routes already joined across repositories, and now detect_changes, co_changes, change_history, impact-of and the git hooks work per repository, with each path prefixed by its repository.
  • Workflows and local actions are in the graph. .github/workflows/*.yml and every action.yml are read for what they express: jobs are symbols, needs connects them, and uses: ./… and the scripts a step runs connect the job to those files. impact on a script shows the workflow that runs it; glasir review on a workflow change has symbols to report. .github/workflows, .github/actions and .github/scripts enter the indexed scope; issue templates, dependabot and the rest of .github stay out.
  • Rust calls through a module resolve. commits::changes() reaches changes in commits.rs — beside the caller, under the crate's src/, or as a mod.rs — where before the bare name was refused whenever two files defined it.

Review

  • A symbol a test reads through a reference (a constant, a table a check iterates) now counts as reached by that test; review reported such code as untested before.
  • A file the history says usually changes with a changed one is a medium reason now, not high: a reminder, not a blocked merge on its own. high is a changed symbol with callers and no test reaching it.

Fixes

  • Directories named parsers, bench/deep or bench/langs were left out of every tree. Those rules belonged to this repository and are in its own .glasirignore now; the indexer's fixed rules keep only tmp and vendor at the root and target, node_modules and dot-directories anywhere.
  • Shell scripts: only the command is a call. set -e no longer yields a call to e, echo hi none to hi, local owner=… none to owner; flags, variables, operands and continuation lines are arguments. A shell script has a top-level node even when it calls nothing, so a step running it has something to point at.
  • A Rust value named like a file (community.get(i) beside community.rs) was read as a call into that file.
  • A root action.yml read as plain YAML produced dozens of nodes named after its keys.

The snapshot format and the scanner identity changed; the first analyse after upgrading rebuilds the graph.

Install

  • Homebrew: brew install attackwave/glasir/glasir
  • Scoop: add the bucket Attackwave/scoop-glasir, then run scoop install glasir
  • Archives for Linux (static, x86_64 and arm64), macOS (arm64 and x86_64) and Windows are attached, each with a SHA-256 checksum, the licences and an SBOM.