Commit Graph
12362 Commits
Author SHA1 Message Date
Daniel O'Connor 52cd3a3746 Merge branch 'mainline' into dev release92 2026-09-20 13:59:33 +09:30
eb427f00de Optimize PaperTrail whodunnit query in CropsController#show (#4796)
* Optimize PaperTrail whodunnit query in CropsController#show

Replace @crop.versions.map(&:whodunnit) with
@crop.versions.distinct.pluck(:whodunnit) to avoid instantiating all PaperTrail version objects and loading object/object_changes into memory.

Co-authored-by: CloCkWeRX <365751+CloCkWeRX@users.noreply.github.com>

* Optimize PaperTrail whodunnit query in CropsController#show

Replace @crop.versions.map(&:whodunnit) with
@crop.versions.distinct.pluck(:whodunnit) to avoid instantiating all PaperTrail version objects and loading object/object_changes into memory. Added unit test in spec/controllers/crops_controller_spec.rb.

Co-authored-by: CloCkWeRX <365751+CloCkWeRX@users.noreply.github.com>

* Optimize PaperTrail whodunnit query in CropsController#show

Use @crop.versions.reorder(nil).distinct.pluck(:whodunnit) to avoid instantiating all PaperTrail version objects into memory and prevent PostgreSQL PG::InvalidColumnReference errors with SELECT DISTINCT.

Co-authored-by: CloCkWeRX <365751+CloCkWeRX@users.noreply.github.com>

* Fix crop route parameter in controller spec

Update parameter key from id to slug in CropsController show spec to match param: :slug route definition.

Co-authored-by: CloCkWeRX <365751+CloCkWeRX@users.noreply.github.com>

---------

Co-authored-by: google-labs-jules[bot] <161369871+google-labs-jules[bot]@users.noreply.github.com>
2026-09-20 13:53:58 +09:30
Daniel O'Connorandgoogle-labs-jules[bot] a349ce784a Optimize Like lookups in Likeable concern (#4799)
- Update liked_by? to return false if member is nil and use likes.exists?(member_id: member.id) instead of allocating login name arrays.
- Simplify liked_by_members_names to use members.pluck(:login_name).
- Update app/views/photos/_likes.html.haml to use photo.liked_by?(current_member).
- Add unit tests for liked_by? in spec/models/like_spec.rb.

Co-authored-by: google-labs-jules[bot] <161369871+google-labs-jules[bot]@users.noreply.github.com>
2026-09-20 13:46:02 +09:30
Brenda WallaceandClaude Sonnet 5 3545177b31 Fix Dockerfile base image: add missing ruby: prefix (#4802)
The Ruby 4.0.6 bump left the first line as `FROM 4.0.6-trixie`, which
docker resolves as an image named "4.0.6-trixie" and fails to pull.

Co-authored-by: Claude Sonnet 5 <noreply@anthropic.com>
2026-09-20 13:40:06 +09:30
Brenda WallaceandClaude Sonnet 5 571405a840 Stop Rack::Attack depending on memcached, and cut the memcached timeout (#4800)
* Keep Rack::Attack counters in process memory

Rack::Attack was storing its request counters in Rails.cache, which is
memcached in production. On 2026-09-19, memcached calls were timing out
in the production logs. When that happens, the counters stop working.

In the same log window, one IP made 753 requests. 717 of them
succeeded. The 15 per minute throttle and the 500 per day ban did not
stop it.

Rack::Attack now uses its own in-memory store, capped at 8 MB. Each
Puma worker keeps its own counters, so the limits apply per worker.

Refs #1640

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>

* Add BLOCKED_IPS list to Rack::Attack

When one crawler overloads the site, we need a fast way to block it.
Rack::Attack now blocks every IP listed in the BLOCKED_IPS environment
variable. The list is comma separated.

Setting the variable does not need a code change. It also keeps IP
addresses out of the repository.

Refs #1640

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>

* Lower the memcached socket timeout to 0.5 seconds

The production cache store waited up to 1.5 seconds for each memcached
call. Dalli's own default is 1 second. Dalli also retries after a
failure, so one bad cache call can block a Puma thread for longer than
the timeout.

On 2026-09-19, the production logs showed memcached timeouts every few
seconds. With only 5 threads per Puma worker, blocked threads make the
site slow. Slow requests hold memory for longer.

The timeout is now 0.5 seconds. A healthy memcached call takes a few
milliseconds. A call that takes 0.5 seconds has failed in practice, so the
request is better off skipping the cache.

Refs #1640

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>

---------

Co-authored-by: Claude Sonnet 5 <noreply@anthropic.com>
2026-09-20 13:36:25 +09:30
Brenda WallaceandClaude Sonnet 5 82480f9ce8 Fix races in the members list and places search feature specs (#4801)
* Wait for the page reload in the members list spec

The "members list" feature specs click "Show" and then read the list of
members right away. "Show" submits a GET form, so the browser loads a
whole new page. The spec could read the list from the old page. The old
page was then replaced, and Selenium raised StaleElementReferenceError.

This failed once in CI on the pull request for #4800:
https://github.com/Growstuff/growstuff/actions/runs/35477162596

Both examples now wait for the new URL before they read the list. The
URL contains the chosen sort order, so the wait only ends once the new
page has loaded.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>

* Wait for the place page in the places search spec

The "User searches" specs fill in the search form, click "Search", and
then read the page straight away. The search goes to /places/search,
which redirects to /places/<place>. The spec could read the page while
the browser was still moving to the new page.

Selenium then raised "Node with given id does not belong to the
document". It failed in CI on the first example in "with a valid place":
https://github.com/Growstuff/growstuff/actions/runs/35481754102

The search_with helper now waits for the place page URL before it
returns. A blank search stays on the same URL, so it does not wait.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>

* Rename the places CI workflow from "Admin" to "Places"

The workflow in ci-features-places.yml was named "CI Features - Admin".
It looks like it was copied from the admin workflow and never renamed.
It runs spec/features/places/.

Two workflows then had the same name. Every commit showed two
"CI Features - Admin" runs. A failing places spec appeared under the
admin name, which sent people to the wrong specs:
https://github.com/Growstuff/growstuff/actions/runs/35481754102

Branch protection requires a check called "rspec". That is the job
name, not the workflow name, so the required check does not change.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>

---------

Co-authored-by: Claude Sonnet 5 <noreply@anthropic.com>
2026-09-20 13:35:25 +09:30
4d87d9ccb9 Optimize places memory usage by paginating, plucking fields, and limiting nearest_to (#4792)
Co-authored-by: google-labs-jules[bot] <161369871+google-labs-jules[bot]@users.noreply.github.com>
Co-authored-by: Brenda Wallace <brenda@wallace.net.nz>
2026-09-20 13:30:42 +09:30
Daniel O'Connorandgoogle-labs-jules[bot] c0614b50bc Optimize CanCan abilities using declarative hash conditions (#4797)
Refactor block-based CanCan ability definitions for ScientificName, AlternateName, Planting, Activity, and Harvest into declarative hash conditions to eliminate per-record SQL queries and N+1 evaluation overhead.

Co-authored-by: google-labs-jules[bot] <161369871+google-labs-jules[bot]@users.noreply.github.com>
2026-09-20 14:31:20 +12:00
dependabot[bot] 41887c9447 Bump adm-zip from 0.6.0 to 0.6.1 (#4798)
Bumps [adm-zip](https://github.com/cthackers/adm-zip) from 0.6.0 to 0.6.1.
- [Release notes](https://github.com/cthackers/adm-zip/releases)
- [Changelog](https://github.com/cthackers/adm-zip/blob/master/history.md)
- [Commits](https://github.com/cthackers/adm-zip/compare/v0.6.0...v0.6.1)

---
updated-dependencies:
- dependency-name: adm-zip
  dependency-version: 0.6.1
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-09-20 14:31:20 +12:00
Daniel O'Connor ce00cc9c5f Merge pull request #4794 from Growstuff/improve-cache-memory-usage-9918781528129420138
Optimize caching memory usage in PhotoCapable and CropsHelper
2026-09-20 14:31:20 +12:00
google-labs-jules[bot]andCloCkWeRX 9d10682ff3 Remove Unicorn dependency and update Gemfile.lock, enable Puma clustered workers with preloading
Co-authored-by: CloCkWeRX <365751+CloCkWeRX@users.noreply.github.com>
2026-09-20 14:31:20 +12:00
google-labs-jules[bot]andCloCkWeRX 882b479334 Remove Unicorn dependency and enable Puma clustered workers with preloading
Co-authored-by: CloCkWeRX <365751+CloCkWeRX@users.noreply.github.com>
2026-09-20 14:31:20 +12:00
dependabot[bot] 88bb77ab01 Bump aws-sdk-s3 from 1.229.0 to 1.232.0
Bumps [aws-sdk-s3](https://github.com/aws/aws-sdk-ruby) from 1.229.0 to 1.232.0.
- [Release notes](https://github.com/aws/aws-sdk-ruby/releases)
- [Changelog](https://github.com/aws/aws-sdk-ruby/blob/version-3/gems/aws-sdk-s3/CHANGELOG.md)
- [Commits](https://github.com/aws/aws-sdk-ruby/commits)

---
updated-dependencies:
- dependency-name: aws-sdk-s3
  dependency-version: 1.232.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-09-20 14:31:20 +12:00
google-labs-jules[bot]andCloCkWeRX bbcef2163b Use database distinct count for GardenType gardens
Replaces in-memory `.uniq.count`, `.uniq.empty?`, and `.uniq.each` calls
with database-level `.distinct` queries on GardenType gardens association.

Co-authored-by: CloCkWeRX <365751+CloCkWeRX@users.noreply.github.com>
2026-09-20 14:31:20 +12:00
google-labs-jules[bot]andCloCkWeRX 6fba37fc9c Add require: false to aws-sdk-s3 in Gemfile
Prevents aws-sdk-s3, aws-sdk-core, and aws-sdk-kms from auto-loading
on application boot across web and worker processes. The gem is
required on-demand in config/sitemap.rb.

Co-authored-by: CloCkWeRX <365751+CloCkWeRX@users.noreply.github.com>
2026-09-20 14:31:20 +12:00
dependabot[bot] a1659f3600 Bump msgpack from 1.8.4 to 1.8.5
Bumps [msgpack](https://github.com/msgpack/msgpack-ruby) from 1.8.4 to 1.8.5.
- [Changelog](https://github.com/msgpack/msgpack-ruby/blob/master/ChangeLog)
- [Commits](https://github.com/msgpack/msgpack-ruby/compare/v1.8.4...v1.8.5)

---
updated-dependencies:
- dependency-name: msgpack
  dependency-version: 1.8.5
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-09-20 14:31:20 +12:00
Brenda Wallace f65e715ef3 Merge branch 'mainline' into dev 2026-09-20 13:27:37 +12:00
Daniel O'Connorandgoogle-labs-jules[bot] 4dee371b34 Optimize CanCan abilities using declarative hash conditions (#4797)
Refactor block-based CanCan ability definitions for ScientificName, AlternateName, Planting, Activity, and Harvest into declarative hash conditions to eliminate per-record SQL queries and N+1 evaluation overhead.

Co-authored-by: google-labs-jules[bot] <161369871+google-labs-jules[bot]@users.noreply.github.com>
2026-09-19 18:19:00 +09:30
dependabot[bot] d1d8185ea8 Bump adm-zip from 0.6.0 to 0.6.1 (#4798)
Bumps [adm-zip](https://github.com/cthackers/adm-zip) from 0.6.0 to 0.6.1.
- [Release notes](https://github.com/cthackers/adm-zip/releases)
- [Changelog](https://github.com/cthackers/adm-zip/blob/master/history.md)
- [Commits](https://github.com/cthackers/adm-zip/compare/v0.6.0...v0.6.1)

---
updated-dependencies:
- dependency-name: adm-zip
  dependency-version: 0.6.1
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-09-19 17:46:33 +09:30
Daniel O'Connor 07f07e4c3d Merge pull request #4794 from Growstuff/improve-cache-memory-usage-9918781528129420138
Optimize caching memory usage in PhotoCapable and CropsHelper
2026-09-18 13:24:31 +09:30
Daniel O'Connor 2c2f48ba32 Merge pull request #4793 from Growstuff/remove-unicorn-enable-puma-workers-17519278420943304583
Remove Unicorn and enable Puma workers with preloading
2026-09-18 12:59:39 +09:30
google-labs-jules[bot]andCloCkWeRX d7ab2d929f Remove Unicorn dependency and update Gemfile.lock, enable Puma clustered workers with preloading
Co-authored-by: CloCkWeRX <365751+CloCkWeRX@users.noreply.github.com>
2026-09-18 02:40:38 +00:00
Daniel O'Connor ef9b1e053f Merge pull request #4788 from Growstuff/dependabot/bundler/aws-sdk-s3-1.232.0
Bump aws-sdk-s3 from 1.229.0 to 1.232.0
2026-09-18 06:51:25 +09:30
google-labs-jules[bot]andCloCkWeRX dc8503c20c Remove Unicorn dependency and enable Puma clustered workers with preloading
Co-authored-by: CloCkWeRX <365751+CloCkWeRX@users.noreply.github.com>
2026-09-17 21:21:20 +00:00
dependabot[bot] 72beddcdbf Bump aws-sdk-s3 from 1.229.0 to 1.232.0
Bumps [aws-sdk-s3](https://github.com/aws/aws-sdk-ruby) from 1.229.0 to 1.232.0.
- [Release notes](https://github.com/aws/aws-sdk-ruby/releases)
- [Changelog](https://github.com/aws/aws-sdk-ruby/blob/version-3/gems/aws-sdk-s3/CHANGELOG.md)
- [Commits](https://github.com/aws/aws-sdk-ruby/commits)

---
updated-dependencies:
- dependency-name: aws-sdk-s3
  dependency-version: 1.232.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-09-17 21:10:38 +00:00
Daniel O'Connor c1dd9b9d16 Merge pull request #4790 from Growstuff/use-distinct-count-garden-type-5875013298046569013
Use database distinct count for GardenType gardens
2026-09-18 06:39:09 +09:30
Daniel O'Connor ab7db65a6e Merge pull request #4791 from Growstuff/prevent-aws-sdk-s3-autoload-5646302232458678253
Add require: false to aws-sdk-s3 in Gemfile
2026-09-18 06:38:20 +09:30
google-labs-jules[bot]andCloCkWeRX 04d2d7364c Add require: false to aws-sdk-s3 in Gemfile
Prevents aws-sdk-s3, aws-sdk-core, and aws-sdk-kms from auto-loading
on application boot across web and worker processes. The gem is
required on-demand in config/sitemap.rb.

Co-authored-by: CloCkWeRX <365751+CloCkWeRX@users.noreply.github.com>
2026-09-17 12:43:34 +00:00
google-labs-jules[bot]andCloCkWeRX 298a56f1c8 Use database distinct count for GardenType gardens
Replaces in-memory `.uniq.count`, `.uniq.empty?`, and `.uniq.each` calls
with database-level `.distinct` queries on GardenType gardens association.

Co-authored-by: CloCkWeRX <365751+CloCkWeRX@users.noreply.github.com>
2026-09-17 12:41:39 +00:00
Daniel O'Connor 33aa407f04 Merge pull request #4787 from Growstuff/dependabot/bundler/msgpack-1.8.5
Bump msgpack from 1.8.4 to 1.8.5
release91
2026-09-17 18:04:37 +09:30
Cesy eacc2a726d Merge pull request #4789 from Growstuff/dev 2026-09-17 06:59:27 +01:00
Daniel O'Connor fa592e850c Remove rescue from index_everything method
Remove error handling from index_everything method.
2026-09-16 18:50:30 +12:00
google-labs-jules[bot]andCloCkWeRX 9ebd98de2d Harden Rack::Attack and pagination against aggressive web crawlers
- Configure Allow2Ban in Rack::Attack to ban IPs requesting >500 pages per day for 1 week (7 days).
- Add honeypot route /dont-crawl-me disallowed in robots.txt and configure Fail2Ban in Rack::Attack to ban IPs visiting it for 7 days upon 1 hit.
- Update PhotosController#index to raise ActiveRecord::RecordNotFound when page parameter is out of bounds, returning 404 Not Found to crawlers instead of 200 OK.
- Add request and controller specs for Rack::Attack rules and pagination 404 responses.

Co-authored-by: CloCkWeRX <365751+CloCkWeRX@users.noreply.github.com>
2026-09-16 18:50:30 +12:00
Brenda Wallace b45f6b6f44 Merge branch 'mainline' into dev 2026-09-16 18:23:36 +12:00
dependabot[bot] ac7ebc21fd Bump msgpack from 1.8.4 to 1.8.5
Bumps [msgpack](https://github.com/msgpack/msgpack-ruby) from 1.8.4 to 1.8.5.
- [Changelog](https://github.com/msgpack/msgpack-ruby/blob/master/ChangeLog)
- [Commits](https://github.com/msgpack/msgpack-ruby/compare/v1.8.4...v1.8.5)

---
updated-dependencies:
- dependency-name: msgpack
  dependency-version: 1.8.5
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-09-15 07:04:43 +00:00
Daniel O'Connor 5db5d6bcd4 Merge pull request #4782 from Growstuff/dependabot/npm_and_yarn/js-yaml-4.3.2
Bump js-yaml from 4.3.1 to 4.3.2
2026-09-15 08:03:13 +09:30
Daniel O'Connor 8269060fed Merge pull request #4785 from Growstuff/dependabot/bundler/selenium-webdriver-4.49.0
Bump selenium-webdriver from 4.48.0 to 4.49.0
2026-09-14 23:33:21 +09:30
dependabot[bot] cb246617b3 Bump selenium-webdriver from 4.48.0 to 4.49.0
Bumps [selenium-webdriver](https://github.com/SeleniumHQ/selenium) from 4.48.0 to 4.49.0.
- [Release notes](https://github.com/SeleniumHQ/selenium/releases)
- [Changelog](https://github.com/SeleniumHQ/selenium/blob/trunk/rb/CHANGES)
- [Commits](https://github.com/SeleniumHQ/selenium/compare/selenium-4.48.0...selenium-4.49.0)

---
updated-dependencies:
- dependency-name: selenium-webdriver
  dependency-version: 4.49.0
  dependency-type: direct:development
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-09-14 07:06:16 +00:00
dependabot[bot] ed9d166403 Bump js-yaml from 4.3.1 to 4.3.2
Bumps [js-yaml](https://github.com/nodeca/js-yaml) from 4.3.1 to 4.3.2.
- [Changelog](https://github.com/nodeca/js-yaml/blob/4.3.2/CHANGELOG.md)
- [Commits](https://github.com/nodeca/js-yaml/compare/4.3.1...4.3.2)

---
updated-dependencies:
- dependency-name: js-yaml
  dependency-version: 4.3.2
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-09-13 04:56:26 +00:00
Daniel O'Connor 6c1e1bbb20 Merge pull request #4775 from Growstuff/dependabot/bundler/scout_apm-6.3.0
Bump scout_apm from 6.2.1 to 6.3.0
2026-09-08 12:48:35 +09:30
dependabot[bot] ef9c12b0fb Bump scout_apm from 6.2.1 to 6.3.0
Bumps [scout_apm](https://github.com/scoutapp/scout_apm_ruby) from 6.2.1 to 6.3.0.
- [Changelog](https://github.com/scoutapp/scout_apm_ruby/blob/master/CHANGELOG.markdown)
- [Commits](https://github.com/scoutapp/scout_apm_ruby/compare/v6.2.1...v6.3.0)

---
updated-dependencies:
- dependency-name: scout_apm
  dependency-version: 6.3.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-09-07 15:35:15 +00:00
Daniel O'Connor f3a4b5193a Merge pull request #4780 from Growstuff/dependabot/bundler/haml-7.5.1
Bump haml from 7.5.0 to 7.5.1
2026-09-08 01:03:06 +09:30
dependabot[bot] 88dcefd113 Bump haml from 7.5.0 to 7.5.1
Bumps [haml](https://github.com/haml/haml) from 7.5.0 to 7.5.1.
- [Release notes](https://github.com/haml/haml/releases)
- [Changelog](https://github.com/haml/haml/blob/main/CHANGELOG.md)
- [Commits](https://github.com/haml/haml/compare/v7.5.0...v7.5.1)

---
updated-dependencies:
- dependency-name: haml
  dependency-version: 7.5.1
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-09-07 07:04:02 +00:00
Daniel O'Connor f551e87e2f Merge pull request #4776 from Growstuff/dependabot/bundler/responders-3.2.1
Bump responders from 3.2.0 to 3.2.1
2026-09-03 19:33:57 +09:30
dependabot[bot] 636c75979c Bump responders from 3.2.0 to 3.2.1
Bumps [responders](https://github.com/heartcombo/responders) from 3.2.0 to 3.2.1.
- [Release notes](https://github.com/heartcombo/responders/releases)
- [Changelog](https://github.com/heartcombo/responders/blob/main/CHANGELOG.md)
- [Commits](https://github.com/heartcombo/responders/compare/v3.2.0...v3.2.1)

---
updated-dependencies:
- dependency-name: responders
  dependency-version: 3.2.1
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-09-03 05:03:20 +00:00
Daniel O'Connor 63acd37b2b Merge pull request #4777 from Growstuff/dependabot/bundler/selenium-webdriver-4.48.0
Bump selenium-webdriver from 4.47.0 to 4.48.0
2026-09-03 14:30:35 +09:30
dependabot[bot] 38e99c66fb Bump selenium-webdriver from 4.47.0 to 4.48.0
Bumps [selenium-webdriver](https://github.com/SeleniumHQ/selenium) from 4.47.0 to 4.48.0.
- [Release notes](https://github.com/SeleniumHQ/selenium/releases)
- [Changelog](https://github.com/SeleniumHQ/selenium/blob/trunk/rb/CHANGES)
- [Commits](https://github.com/SeleniumHQ/selenium/compare/selenium-4.47.0...selenium-4.48.0)

---
updated-dependencies:
- dependency-name: selenium-webdriver
  dependency-version: 4.48.0
  dependency-type: direct:development
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-09-02 10:15:25 +00:00
Daniel O'Connor 191e22ab02 Merge pull request #4779 from Growstuff/dependabot/bundler/bullet-8.2.0
Bump bullet from 8.1.3 to 8.2.0
2026-09-02 19:43:11 +09:30
dependabot[bot] 30456498c3 Bump bullet from 8.1.3 to 8.2.0
Bumps [bullet](https://github.com/flyerhzm/bullet) from 8.1.3 to 8.2.0.
- [Changelog](https://github.com/flyerhzm/bullet/blob/main/CHANGELOG.md)
- [Commits](https://github.com/flyerhzm/bullet/compare/8.1.3...8.2.0)

---
updated-dependencies:
- dependency-name: bullet
  dependency-version: 8.2.0
  dependency-type: direct:development
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-09-02 07:06:25 +00:00
Daniel O'Connor 0998191673 Merge pull request #4778 from Growstuff/dependabot/bundler/haml-7.5.0
Bump haml from 7.4.1 to 7.5.0
2026-08-31 17:22:55 +09:30