moult 0.1.0 → 0.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (5) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +37 -2
  3. data/README.md +40 -10
  4. data/lib/moult/version.rb +1 -1
  5. metadata +2 -2
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 26e4c98c7cb6b20201d221d79e1fd186ca2a263b927bdd920c20e79cc93f1d25
4
- data.tar.gz: 8a8be94ede4c3f6e76b2e70cdcefc054756d58567d84af93e6d27906206f4d5a
3
+ metadata.gz: 5da8cf8ae9bf6dae1b9a05494fdf1280d1b3c62742cd8700e24a60ca9fc66eeb
4
+ data.tar.gz: f487eadae0717dc3f221612234699ea175c005a0b3c1801af57f71b34aa9cfc1
5
5
  SHA512:
6
- metadata.gz: e58d63bcc230e5cbd39cc6a61a4f5addc0e979ef0f3f314b014e9376d2adf55b8027762ca04eb14b7e184af5f82e328c803188166062ddc80a46965f4a61defe
7
- data.tar.gz: 53c7e7b6c1f0055133cd5f135acc6accdc073fcbd7c28e2c2f1b7064eaacfac64b1dcc8a44b547121c3f2b3db5981aa7e7d312c863c0c7cb57348520d93cea7d
6
+ metadata.gz: 136f27d5540be7e6fb4d2174b198703ec44dbab7c3bff8735f8f6cfb40217af2df230fd48e70965a4680740c3fdf8f2325c9c3c31b589b88a56939d2bfcf5b06
7
+ data.tar.gz: 677b2b5fdbb133f49046baa84e4a4a286e587c9da8904e44397a01d6ef116f5d7e4480bba88b73cfbaae45a37318e36b02d1981dc8ec6d6c44be912bcea20329
data/CHANGELOG.md CHANGED
@@ -11,6 +11,11 @@ follow [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
11
11
 
12
12
  ## [Unreleased]
13
13
 
14
+ ## [0.3.0] - 2026-07-02
15
+
16
+ (v0.2.0 was tagged in git but never published as a gem — its changes are
17
+ included here.)
18
+
14
19
  ### Added
15
20
  - `Moult::CloudUpload.projection` — the sanitised payload builder for the
16
21
  `moult-action` → Moult Cloud upload (allow-lists top-level keys; normalises
@@ -19,12 +24,41 @@ follow [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
19
24
  CI and uploads the projected result with keyless GitHub OIDC auth.
20
25
  - Open-source release setup: Apache-2.0 license, Trusted Publishing release
21
26
  workflow, `SECURITY.md`, `CONTRIBUTING.md`, `CODE_OF_CONDUCT.md`.
27
+ - `.ruby-version` (3.3), read by `ruby/setup-ruby` in CI and in the action.
22
28
 
23
29
  ### Changed
24
30
  - License changed from MIT to **Apache-2.0** (adds an explicit patent grant;
25
31
  the chosen open-core core license).
32
+ - `moult-action` installs moult from the action checkout instead of running
33
+ `bundle exec` against the caller's bundle — consuming repos no longer need
34
+ moult in their Gemfile (or a Gemfile at all).
35
+ - `moult-action`'s `moult-cloud-url` input now defaults to
36
+ `https://moultrb.com`, so a bare `- uses: moult-rb/moult-rb@v1` step works
37
+ with no `with:` block; the input remains overridable for self-hosted
38
+ instances.
39
+ - Release workflow only triggers on full-semver tags (`vX.Y.Z`), so the
40
+ floating `v1` major tag can be re-pointed without triggering a gem publish.
41
+ - The gem publishes as `moult` again (reverting the brief `moult-rb` rename):
42
+ `moult` 0.1.0 is already the published package, and `gem install moult`
43
+ should keep resolving to current releases. The repository and action stay
44
+ `moult-rb/moult-rb`.
45
+
46
+ ### Fixed
47
+ - `moult-action` fails with an actionable message — instead of a raw Ruby
48
+ `KeyError` backtrace — when the workflow is missing
49
+ `permissions: id-token: write`, and cleanly skips the upload (verdict still
50
+ enforced) on pull requests from forks, which GitHub never grants an OIDC
51
+ identity. Non-2xx responses from GitHub's token endpoint are now reported
52
+ with their status and body.
53
+ - `moult-action`'s `base-sha` now defaults to the pull request's base branch
54
+ (or the merge queue's base SHA), falling back to the repository's default
55
+ branch — previously a hardcoded `origin/main` broke PR scans in any
56
+ repository whose base branch isn't `main`.
57
+ - `moult-action` auto mode maps `merge_group` events to `pr` scans (diffed
58
+ against the queue's base SHA) and rejects `pull_request_target`, which
59
+ checks out the base branch and would silently gate an empty diff as a pass.
26
60
 
27
- ## [0.1.0] - unreleased
61
+ ## [0.1.0] - 2026-06-30
28
62
 
29
63
  Initial development version. The static + runtime analysis suite:
30
64
 
@@ -40,5 +74,6 @@ Initial development version. The static + runtime analysis suite:
40
74
  - `moult health` — composite, confidence-graded health score.
41
75
  - `moult gate` — diff-aware PR risk gate (the only verdict layer).
42
76
 
43
- [Unreleased]: https://github.com/moult-rb/moult-rb/compare/v0.1.0...HEAD
77
+ [Unreleased]: https://github.com/moult-rb/moult-rb/compare/v0.3.0...HEAD
78
+ [0.3.0]: https://github.com/moult-rb/moult-rb/compare/v0.1.0...v0.3.0
44
79
  [0.1.0]: https://github.com/moult-rb/moult-rb/releases/tag/v0.1.0
data/README.md CHANGED
@@ -4,16 +4,43 @@ Codebase intelligence for Ruby and Rails. Moult sheds dead code.
4
4
 
5
5
  ## moult-action (GitHub Action)
6
6
 
7
- Add the gate to your CI and upload results to Moult Cloud:
7
+ Add the gate to your CI and upload results to Moult Cloud. Create
8
+ `.github/workflows/moult.yml` with:
8
9
 
9
10
  ```yaml
10
- - uses: moult-rb/moult-rb@v1
11
- with:
12
- base-sha: ${{ github.event.pull_request.base.sha }}
13
- moult-cloud-url: https://app.moult.dev
11
+ name: Moult
12
+ on:
13
+ push:
14
+ branches: [main] # seeds/advances the baseline on merge
15
+ pull_request:
16
+
17
+ permissions:
18
+ contents: read
19
+ id-token: write # keyless OIDC auth to Moult Cloud
20
+
21
+ jobs:
22
+ moult:
23
+ runs-on: ubuntu-latest
24
+ steps:
25
+ - uses: moult-rb/moult-rb@v1
14
26
  ```
15
27
 
16
- Your workflow needs `permissions: id-token: write` for OIDC authentication.
28
+ That's the whole file. The action checks out your code (full history),
29
+ installs moult itself, runs the gate, and uploads the result — your repo does
30
+ not need moult in its Gemfile. Three prerequisites:
31
+
32
+ 1. Install the [Moult Cloud GitHub App](https://github.com/apps/moult-cloud)
33
+ on the repository.
34
+ 2. `permissions: id-token: write` on the workflow or job (shown above) — it
35
+ lets the action mint the GitHub OIDC token that authenticates the upload.
36
+ Pull requests from forks never receive an OIDC identity, so they are
37
+ gated in CI but their results are not uploaded.
38
+ 3. A `.ruby-version` or `.tool-versions` file in the repository (read by
39
+ `ruby/setup-ruby`; Ruby 3.3+).
40
+
41
+ Results appear on your dashboard at [moultrb.com](https://moultrb.com). The
42
+ `moult-cloud-url` input only needs setting for self-hosted Moult Cloud
43
+ instances.
17
44
 
18
45
  Three commands today:
19
46
 
@@ -52,7 +79,9 @@ Or install directly:
52
79
  gem install moult
53
80
  ```
54
81
 
55
- Requires Ruby 3.3+.
82
+
83
+ The gem is published as `moult`; the command and library are still `moult`
84
+ (`require "moult"`, `moult hotspots`, …). Requires Ruby 3.3+.
56
85
 
57
86
  ## Usage
58
87
 
@@ -316,9 +345,10 @@ Outside a git repository churn is `0`, so files rank by complexity alone.
316
345
 
317
346
  The `moult` gem — the CLI and every analysis in it — is free and open source
318
347
  under [Apache-2.0](LICENSE.txt). **Moult Cloud** is a separate commercial
319
- product: a hosted GitHub App that turns `moult gate` into an enforced,
320
- team-visible PR check with history, trends, and dashboards. The gem stands on
321
- its own; the cloud is optional.
348
+ product: a hosted [GitHub App](https://github.com/apps/moult-cloud) that turns
349
+ `moult gate` into an enforced, team-visible PR check with history, trends, and
350
+ dashboards at [moultrb.com](https://moultrb.com). The gem stands on its own;
351
+ the cloud is optional.
322
352
 
323
353
  ## Contributing
324
354
 
data/lib/moult/version.rb CHANGED
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Moult
4
- VERSION = "0.1.0"
4
+ VERSION = "0.3.0"
5
5
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: moult
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.0
4
+ version: 0.3.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - The Moult authors
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2026-06-30 00:00:00.000000000 Z
11
+ date: 2026-07-02 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: prism