Changelog - April 2025

StringsLint plugin

April 30, 2025

We’ve added a plugin for StringsLint which is ensures that localized strings in a Swift project are complete and never unused.

StringsLint runs on macOS and targets files with the extensions *.strings, *.stringsdict, *.swift, *.m, *.xib, and *.storyboard. You can enable it using the Qlty CI:

$qlty plugins enable stringslint

StringsLint only runs on macOS and is not available on Qlty Cloud which runs on Linux.

SwiftFormat plugin

April 30, 2025

We’ve added a plugin for SwiftFormat, the official auto-formatter for Swift. This auto-formatter targets Swift files, runs on macOS, and can be enabled using the Qlty CI:

$qlty plugins enable swiftformat

SwiftFormat only runs on macOS and is not available on Qlty Cloud which runs on Linux.

Cloud authentication improvements

April 28, 2025

We’ve significantly improved the latency of most web pages by using a short-lived caching strategy for our GitHub authorization checks. Navigating around the website should feel faster. (The exception is the Dashboard, which we will be optimizing soon.)

Also, for organizations that use SAML on GitHub, we now detect when GitHub requires SAML re-authorization and use that information to render better error messages. Users accessing a GitHub organization with SAML enabled need to re-authorize occasionaly, and we now show a message with instructions on how to do that.

Out-of-the-box linter configs

April 27, 2025

The Qlty CLI now provides out-of-the-box linter configurations for several popular linters. These linter configuration files are copied into your project when you run qlty init or qlty plugins enable PLUGIN.

This allows you to quickly set up your project with sensible defaults without needing to create a configuration file manually. Once the configuration files are in place, you can customize them to fit your project’s needs.

ast-grep plugin

April 26, 2025

We’ve added a plugin for ast-grep (sg), a fast polyglot structural search and linting tool supporting 20+ languages. ast-grep offers a pattern language to support writing your own custom checks or adopting checks provided by the ast-grep community.

$qlty plugins enable ast-grep

Improved coverage uploader output

April 25, 2025

We’ve updated the output from qlty coverage publish to include more information to improve the setup an debugging experience.

1 SETTINGS
2
3 cwd: /home/runner/work/qlty/qlty
4 add-prefix: src/
5
6 METADATA
7
8 CI: GitHub
9 Commit: c6dc5239a9e011e55ebdd598e35ce5700dc29741
10 Branch: main
11 Build ID: 14975425147:1
12
13 COVERAGE FILES: 1
14
15 Coverage File Format Size
16 remix/api-coverage/lcov.info lcov 2.32 KiB
17
18 COVERAGE DATA
19
20 5 unique code file paths
21 All code files in the coverage data were found on disk.
22
23 Covered Lines: 57
24 Uncovered Lines: 24
25 Omitted Lines: 161
26
27 Line Coverage: 70.37%
28
29 EXPORTING...
30
31 Exported: tmp/qlty-coverage/coverage.zip
32
33 AUTHENTICATION
34
35 Auth Method: OIDC
36 Token: ***
37
38 PREPARING TO UPLOAD...
39
40 Upload ID: 0efcc860-ede8-4466-9170-038cee46ccd1
41
42 UPLOADING...
43
44 Uploaded 2.34 KiB in 0.28s!
45 View report: https://qlty.sh/gh/qltysh/projects/qlty/settings/coverage/uploads/0efcc860-ede8-4466-9170-038cee46ccd1

Package lockfiles

April 17, 2025

The Qlty CLI now uses package lockfiles (e.g. package-lock.json, yarn.lock, Gemfile.lock) when they are available and the package_file directive is specified in the qlty.toml configuration file. This ensures the exact same linter versions are used across all machines, including Qlty Cloud.

V1 of Coverage GitHub Action

April 17, 2025

We’ve release v1.0.0 of our reusable GitHub Action for coverage uploading. We adhere to semantic versioning so going forward breaking changes will be represented with a bump in the major version.

To use the latest version on the v1 line, pin your CI workflows to @v1 like this:

1- uses: qltysh/qlty-action/coverage@v1
2 with:
3 oidc: true
4 files: coverage/lcov.info

BuildKite support

April 15, 2025

We now support automatic detection of build metadata from BuildKite. Therefore, uploading code coverage data from BuildKite only requires executing the Qlty CLI with the path to the coverage data file.

$qlty coverage publish coverage.lcov

OpenID Connect (OIDC)

April 11, 2025

We now support OpenID Connect (OIDC) authentication for code coverage uploads from GitHub Actions.

OIDC allows us to authenticate the repository running a GitHub Actions workflow with a short-lived token. This enables coverage uploading without needing to manage a long-lived token, providing better security and easier coverage setup.

1permissions:
2 contents: read
3 id-token: write # IMPORTANT
4
5# ... Later in a workflow job: ...
6- uses: qltysh/qlty-action/coverage@v1
7 with:
8 oidc: true
9 files: coverage/lcov.info

dockerfmt plugin

April 8, 2025

We’ve add a plugin for dockerfmt, a tool for automatically formatting Dockerfiles.

$qlty plugins enable dockerfmt

Support Linux Arm64 Musl

April 4, 2025

The Qlty CLI now supports Linux systems using Arm64 architecture with Musl. We’re now compiling binaries for these target systems with each release.

To install the Qlty CLI on an Arm64 Linux system using Musl, use our installer:

$curl https://qlty.sh | sh