Skip to content

Commit cad2e31

Browse files
committed
Address review feedback for workflow support detection
1 parent 5424c33 commit cad2e31

10 files changed

Lines changed: 79 additions & 51 deletions

File tree

apps/dashboard/app/controllers/application_controller.rb

Lines changed: 0 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -9,12 +9,6 @@ class ApplicationController < ActionController::Base
99
before_action :set_featured_group, :set_custom_navigation
1010
before_action :check_required_announcements
1111

12-
helper_method :workflows_supported?
13-
14-
def workflows_supported?
15-
@workflows_supported ||= Workflow.supported?
16-
end
17-
1812
def check_required_announcements
1913
return if instance_of?(SettingsController)
2014

apps/dashboard/app/controllers/projects_controller.rb

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ def show
1515
end
1616
else
1717
@launchers = Launcher.all(@project.directory)
18-
@workflows = workflows_supported? ? Workflow.all(@project.directory) : []
18+
@workflows = Workflow.supported? ? Workflow.all(@project.directory) : []
1919
@valid_project = Launcher.clusters?
2020
@valid_scripts = Launcher.scripts?(@project.directory)
2121

apps/dashboard/app/controllers/workflows_controller.rb

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -123,7 +123,7 @@ def submit
123123
private
124124

125125
def ensure_workflows_supported!
126-
return if workflows_supported?
126+
return if Workflow.supported?
127127

128128
message = I18n.t('dashboard.jobs_workflows_not_supported')
129129

apps/dashboard/app/helpers/projects_helper.rb

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,10 @@
22

33
# Helpers for the projects page
44
module ProjectsHelper
5+
def workflows_supported?
6+
Workflow.supported?
7+
end
8+
59
def render_readme(readme_location)
610
file_content = File.read(readme_location)
711

apps/dashboard/app/models/launcher.rb

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -55,10 +55,6 @@ def scripts?(project_dir)
5555
script_attribute = SmartAttributes::AttributeFactory.build('auto_scripts', { directory: project_dir })
5656
script_attribute.select_choices(hide_excludable: false).any?
5757
end
58-
59-
def workflows_supported?
60-
Workflow.supported?
61-
end
6258
end
6359

6460
ID_REX = /\A\w{8}\Z/.freeze

apps/dashboard/app/models/workflow.rb

Lines changed: 4 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -6,19 +6,11 @@ class Workflow
66

77
class << self
88
def supported?
9-
dependency_keys = %i[after afterok afternotok afterany].freeze
9+
enabled = Configuration.dashboard_workflows_enabled
10+
return enabled unless enabled.nil?
1011

11-
clusters_obj = OodAppkit.clusters
12-
clusters =
13-
if clusters_obj.respond_to?(:values)
14-
Array(clusters_obj.values)
15-
elsif clusters_obj.respond_to?(:to_a)
16-
Array(clusters_obj.to_a)
17-
elsif clusters_obj.respond_to?(:each)
18-
clusters_obj.each.to_a
19-
else
20-
[]
21-
end.compact
12+
dependency_keys = %i[after afterok afternotok afterany].freeze
13+
clusters = Configuration.job_clusters.to_a
2214
return false if clusters.empty?
2315

2416
clusters.any? do |cluster|

apps/dashboard/config/configuration_singleton.rb

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -141,6 +141,13 @@ def job_clusters
141141
)
142142
end
143143

144+
# @return [Boolean, nil] configured workflow support override when set, otherwise nil to fall back to auto-detection
145+
def dashboard_workflows_enabled
146+
return nil unless ENV.key?('OOD_DASHBOARD_WORKFLOWS_ENABLED')
147+
148+
read_bool(ENV['OOD_DASHBOARD_WORKFLOWS_ENABLED'])
149+
end
150+
144151
# @return [String, nil] version string from VERSION file, or nil if no file avail
145152
def version_from_file(dir)
146153
file = Pathname.new(dir).join("VERSION")

apps/dashboard/test/config/configuration_singleton_test.rb

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -210,6 +210,22 @@ def no_config_env
210210
end
211211
end
212212

213+
test "dashboard_workflows_enabled is nil when unset" do
214+
with_modified_env(OOD_DASHBOARD_WORKFLOWS_ENABLED: nil) do
215+
assert_nil ConfigurationSingleton.new.dashboard_workflows_enabled
216+
end
217+
end
218+
219+
test "dashboard_workflows_enabled can force workflows on or off" do
220+
with_modified_env(OOD_DASHBOARD_WORKFLOWS_ENABLED: 'true') do
221+
assert ConfigurationSingleton.new.dashboard_workflows_enabled
222+
end
223+
224+
with_modified_env(OOD_DASHBOARD_WORKFLOWS_ENABLED: 'false') do
225+
refute ConfigurationSingleton.new.dashboard_workflows_enabled
226+
end
227+
end
228+
213229
test "support_ticket_enabled? is false by default" do
214230
assert_equal false, ConfigurationSingleton.new.support_ticket_enabled?
215231
end

apps/dashboard/test/models/launcher_test.rb

Lines changed: 0 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -157,31 +157,4 @@ def setup
157157
refute(Dir.exist?(Launcher.launchers_dir(tmp).to_s))
158158
end
159159
end
160-
161-
class PositionalHashSubmitAdapter
162-
def submit(_script, _opts = {}); end
163-
end
164-
165-
class KeywordSubmitAdapter
166-
def submit(_script, after: [], afterok: [], afternotok: [], afterany: []); end
167-
end
168-
169-
class KeyrestSubmitAdapter
170-
def submit(_script, **_kwargs); end
171-
end
172-
173-
test 'workflows_supported? returns false when submit does not accept keywords' do
174-
OodAppkit.stubs(:clusters).returns({ test: OpenStruct.new(job_adapter: PositionalHashSubmitAdapter.new) })
175-
assert_equal false, Launcher.workflows_supported?
176-
end
177-
178-
test 'workflows_supported? returns true when submit accepts dependency keywords' do
179-
OodAppkit.stubs(:clusters).returns({ test: OpenStruct.new(job_adapter: KeywordSubmitAdapter.new) })
180-
assert_equal true, Launcher.workflows_supported?
181-
end
182-
183-
test 'workflows_supported? returns true when submit accepts arbitrary keywords' do
184-
OodAppkit.stubs(:clusters).returns({ test: OpenStruct.new(job_adapter: KeyrestSubmitAdapter.new) })
185-
assert_equal true, Launcher.workflows_supported?
186-
end
187160
end

apps/dashboard/test/models/workflow_test.rb

Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -183,6 +183,52 @@ class WorkflowsTest < ActiveSupport::TestCase
183183
assert_equal({'bc_num_hours' => '1', 'auto_queues' => 'batch', 'afterok' => ['1234'], 'ood_workflow_sync_key' => 'abc123TOKEN'}, with_key)
184184
end
185185

186+
class PositionalHashSubmitAdapter
187+
def submit(_script, _opts = {}); end
188+
end
189+
190+
class KeywordSubmitAdapter
191+
def submit(_script, after: [], afterok: [], afternotok: [], afterany: []); end
192+
end
193+
194+
class KeyrestSubmitAdapter
195+
def submit(_script, **_kwargs); end
196+
end
197+
198+
test 'supported? returns false when no job clusters exist' do
199+
Configuration.stubs(:job_clusters).returns([])
200+
assert_equal false, Workflow.supported?
201+
end
202+
203+
test 'supported? returns false when submit does not accept dependency keywords' do
204+
Configuration.stubs(:job_clusters).returns([OpenStruct.new(job_adapter: PositionalHashSubmitAdapter.new)])
205+
assert_equal false, Workflow.supported?
206+
end
207+
208+
test 'supported? returns true when submit accepts dependency keywords' do
209+
Configuration.stubs(:job_clusters).returns([OpenStruct.new(job_adapter: KeywordSubmitAdapter.new)])
210+
assert_equal true, Workflow.supported?
211+
end
212+
213+
test 'supported? returns true when submit accepts arbitrary keywords' do
214+
Configuration.stubs(:job_clusters).returns([OpenStruct.new(job_adapter: KeyrestSubmitAdapter.new)])
215+
assert_equal true, Workflow.supported?
216+
end
217+
218+
test 'supported? honors OOD_DASHBOARD_WORKFLOWS_ENABLED=false override' do
219+
Configuration.stubs(:job_clusters).returns([OpenStruct.new(job_adapter: KeywordSubmitAdapter.new)])
220+
with_modified_env(OOD_DASHBOARD_WORKFLOWS_ENABLED: 'false') do
221+
assert_equal false, Workflow.supported?
222+
end
223+
end
224+
225+
test 'supported? honors OOD_DASHBOARD_WORKFLOWS_ENABLED=true override' do
226+
Configuration.stubs(:job_clusters).returns([])
227+
with_modified_env(OOD_DASHBOARD_WORKFLOWS_ENABLED: 'true') do
228+
assert_equal true, Workflow.supported?
229+
end
230+
end
231+
186232
def create_workflow(id: nil, name: 'test-workflow', description: 'description', project_dir: nil, launcher_ids: [], sync_key_enabled: '0')
187233
attrs = { name: name, id: id, description: description, project_dir: project_dir, launcher_ids: launcher_ids, sync_key_enabled: sync_key_enabled}
188234
workflow = Workflow.new(attrs)

0 commit comments

Comments
 (0)