diff --git a/apps/dashboard/app/models/concerns/job_logger.rb b/apps/dashboard/app/models/concerns/job_logger.rb index ba235dfae0..7a94983b98 100644 --- a/apps/dashboard/app/models/concerns/job_logger.rb +++ b/apps/dashboard/app/models/concerns/job_logger.rb @@ -49,9 +49,7 @@ def jobs(directory) class JobLoggerHelper class << self def log_file(directory) - Pathname.new("#{directory}/.ondemand/job_log.yml").tap do |path| - FileUtils.touch(path.to_s) unless path.exist? - end + Pathname.new("#{directory}/.ondemand/job_log.yml") end def write_log(directory, jobs) diff --git a/apps/dashboard/app/models/project.rb b/apps/dashboard/app/models/project.rb index c83cbd50df..8f407f8969 100644 --- a/apps/dashboard/app/models/project.rb +++ b/apps/dashboard/app/models/project.rb @@ -302,6 +302,10 @@ def update_attrs(attributes) def make_dir project_dataroot.mkpath unless project_dataroot.exist? configuration_directory.mkpath unless configuration_directory.exist? + workflow_directory = Workflow.workflow_dir(project_dataroot) + workflow_directory.mkpath unless workflow_directory.exist? + logfile_path = JobLogger::JobLoggerHelper.log_file(project_dataroot) + FileUtils.touch(logfile_path.to_s) unless logfile_path.exist? true rescue StandardError => e errors.add(:save, "Failed to make directory: #{e.message}") diff --git a/apps/dashboard/app/models/workflow.rb b/apps/dashboard/app/models/workflow.rb index b0698a41db..5925c7cca3 100644 --- a/apps/dashboard/app/models/workflow.rb +++ b/apps/dashboard/app/models/workflow.rb @@ -5,9 +5,7 @@ class Workflow class << self def workflow_dir(project_dir) - dir = Pathname.new("#{project_dir}/.ondemand/workflows") - FileUtils.mkdir_p(dir) unless dir.exist? - dir + Pathname.new("#{project_dir}/.ondemand/workflows") end def find(id, project_dir) diff --git a/apps/dashboard/test/models/projects_test.rb b/apps/dashboard/test/models/projects_test.rb index 1e0162053b..e306efa359 100644 --- a/apps/dashboard/test/models/projects_test.rb +++ b/apps/dashboard/test/models/projects_test.rb @@ -145,7 +145,7 @@ class ProjectsTest < ActiveSupport::TestCase assert Dir.glob(cache_json_path).present? && Dir.glob("#{project.directory}/.ondemand/launchers/*/cache.json").empty? assert Dir.glob(job_log_path).present? && - Dir.glob("#{project.directory}/.ondemand/*").exclude?("#{project.directory}/.ondemand/job_log.yml") + File.read("#{project.directory}/.ondemand/job_log.yml").empty? end end diff --git a/apps/dashboard/test/models/workflow_test.rb b/apps/dashboard/test/models/workflow_test.rb index cb631e98ff..0eeba7a696 100644 --- a/apps/dashboard/test/models/workflow_test.rb +++ b/apps/dashboard/test/models/workflow_test.rb @@ -26,7 +26,8 @@ class WorkflowsTest < ActiveSupport::TestCase invalid_directory = tmp workflow = Workflow.new({ name: 'test', project_dir: invalid_directory.to_s}) - + # this step is done by the project + Workflow.workflow_dir(invalid_directory).mkpath assert workflow.save assert_equal 0, workflow.errors.size end @@ -128,6 +129,8 @@ class WorkflowsTest < ActiveSupport::TestCase def create_workflow(id: nil, name: 'test-workflow', description: 'description', project_dir: nil, launcher_ids: [], source_ids: [], target_ids: []) attrs = { name: name, id: id, description: description, project_dir: project_dir, launcher_ids: launcher_ids, source_ids: source_ids, target_ids: target_ids} workflow = Workflow.new(attrs) + # this directory is usually created by the project + Workflow.workflow_dir(project_dir).mkpath assert workflow.save workflow