プロジェクト

全般

プロフィール

Vote #78989

未完了

Gemify redmine plugins

Admin Redmine さんがほぼ4年前に追加. ほぼ4年前に更新.

ステータス:
New
優先度:
通常
担当者:
-
カテゴリ:
Plugin API_20
対象バージョン:
-
開始日:
2022/05/09
期日:
進捗率:

0%

予定工数:
category_id:
20
version_id:
0
issue_org_id:
27705
author_id:
284508
assigned_to_id:
0
comments:
6
status_id:
1
tracker_id:
2
plus1:
2
affected_version:
closed_on:
affected_version_id:
ステータス-->[New]

説明

I want to install redmine plugins by adding gem name to Gemfile.local like "redmine_github_hook":https://github.com/koppen/redmine_github_hook plugin.

Current installing/updating method have below cautions for me.

  • Difficult to specify plugin version ** Server maintainer should exec $ git clone [--depth=1] -b <release version> https://github.com/foo/bar/, but plugin README often describes installing master
  • Difficult to detect plugins vulnerability with using "bundler-audit":https://github.com/rubysec/bundler-audit ** We have to check each plugins by hand now

I'm happy if Redmine::Plugin.load requires gem's init.rb.

  • Pros ** Easy to install plugin: only writing gem name to Gemfile.local ** Easy to specify plugin version: only specifying gem version to Gemfile.local ** Easy to update plugin: only executing $ bundle update <plugin gem name> ** Easy to detect (only gemified) plugins vulnerability with using bundler-audit
  • Cons ** Redmine should detect wheather redmine plugin or not from all bundle installed gem

For example, support_gem_plugin.patch can load gemified plugin.

Gemfile.local example is below(I fixed little existing sidebar_hide plugin).

gem 'sidebar_hide', github: 'sho-h/sidebar_hide', branch: 'redmine_support_gem_plugin_test'

This was gemified and "specified directory":https://github.com/sho-h/sidebar_hide/blob/redmine_support_gem_plugin_test/init.rb#L11 in init.rb.


journals

+100

I have a question.
"require initializer" is called twice. Is it correct?
One is in this patch and another is in original code.

--------------------------------------------------------------------------------
> +100

Thanks!

> "require initializer" is called twice. Is it correct?
> One is in this patch and another is in original code.

Oh... Maybe it's cause problem.

I left original code. Original code is for loading current structure plugins.

I think, there are below patterns.

# Same plugin and same version: Maybe, problem doesn't break to the surface.
# Same plugin and different version: Cause problems. Both require will success. Overwritten by plugin dir's one halfway.
# Different plugins and same ID: Cause problems. Both require will success. Each function will not be conflicted. But redmine will misunderstand only plugin dir's one was loaded.
# Different plugins and different IDs: No problem.

1., 2., 3. have same problem. @registered_plugins[id] was overwritten.
To fix this, for example, Redmine::Plugin.register(id) raises(or fails) if plugin was already installed.

<pre><code class="diff">
def self.register(id, &block)
+ raise ... if installed?(id) # or return
+
p = new(id)
p.instance_eval(&block)
</code></pre>

I think, it is difficult to find 2. by administrator if only return.
--------------------------------------------------------------------------------
+1 .
I agree.
I want all plugin and installation of Redmine main body to change to Gem. Also, I would like the installation work to be easy.
--------------------------------------------------------------------------------
Sho HASHIMOTO wrote:
> I think, it is difficult to find 2. by administrator if only return.

Can we raise exception if plugin name is duplicate?
--------------------------------------------------------------------------------
>> I think, it is difficult to find 2. by administrator if only return.
>>
> Can we raise exception if plugin name is duplicate?

OK. I created another ticket. #28412
--------------------------------------------------------------------------------

他の形式にエクスポート: Atom PDF

いいね!0
いいね!0