Skip to content

CI が ameba の postinstall で失敗する(Crystal 1.21 非対応) #108

Description

@limit7412

現象

ci.ymlshards install が ameba の postinstall で失敗し、crystal tool format --check / ameba / crystal spec のいずれにも到達せずジョブが落ちる。

E: Failed postinstall of ameba on shards build -Dpreview_mt:
E: Error target ameba failed to compile:
In src/ameba/tokenizer.cr:88:15
 88 | lexer.next_string_array_token
            ^----------------------
Error: undefined method 'next_string_array_token' for Crystal::Lexer (compile-time type is Crystal::Lexer+)

例: https://github.com/limit7412/github_notifications_slack/actions/runs/30989030572/job/92250490708

原因

  • ci.ymlcrystal: latest を使っており、現在 Crystal 1.21.0 が入る
  • Crystal 1.21 で Crystal::Lexer#next_string_array_token が削除された
  • shard.yml の制約は ameba ~> 1.6 で、解決される最新の安定版は 1.6.4。1.6.4 はこのメソッドに依存しているためコンパイルできない

master の CI 最終成功は 2026-07-14 で、それ以降 master への push が無いため気付いていなかった。差分の内容によらず、いま PR を出すと必ず落ちる状態。

現状の上流

ameba の master には Crystal 1.21 対応が入っている(lexer.responds_to?(:next_string_array_token) で分岐)。ただしタグは v1.6.4 の次が v1.7.0-dev のみで、対応を含む安定版はまだリリースされていない

対応案

  1. CI の Crystal を固定する(例: crystal: 1.20.0
    • 変更が小さく再現性も上がる。ただし Crystal を上げるまで ameba の問題が残る
  2. ameba を master に追従させるbranch: master もしくは修正コミットを commit: で固定)
    • すぐ Crystal 1.21 に乗れるが、バージョン管理としては緩くなる。コミット固定なら実害は小さい
  3. ameba 1.7.0 のリリースを待つ
    • それまで CI が赤のままになるため、単独では選べない

1 か 2(あるいは併用)を想定。どちらを採るかは方針次第。

影響

いずれも差分自体は無関係だが、この問題で CI が赤のままになっている。

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions