# HG changeset patch
# User Balasankar "Balu" C <balasankar@gitlab.com>
# Date 1633714171 -19800
#      Fri Oct 08 22:59:31 2021 +0530
# Node ID 2ebea7fe2de0e7737068e8b18f6d096012760ae4
# Parent  133f64a737ad5aff421f9417b9773670bd0a0fd9
Make license_finder print its report as JSON

Signed-off-by: Balasankar "Balu" C <balasankar@gitlab.com>

diff --git a/config/software/alertmanager.rb b/config/software/alertmanager.rb
--- a/config/software/alertmanager.rb
+++ b/config/software/alertmanager.rb
@@ -47,6 +47,6 @@
   command "go build -ldflags '#{prom_version.print_ldflags}' ./cmd/alertmanager", env: env, cwd: cwd
   copy 'alertmanager', "#{install_dir}/embedded/bin/"
 
-  command "license_finder report --decisions-file=#{Omnibus::Config.project_root}/support/dependency_decisions.yml --format=csv --save=license.csv"
-  copy "license.csv", "#{install_dir}/licenses/alertmanager.csv"
+  command "license_finder report --decisions-file=#{Omnibus::Config.project_root}/support/dependency_decisions.yml --format=json --save=license.json"
+  copy "license.json", "#{install_dir}/licenses/alertmanager.json"
 end
diff --git a/config/software/consul.rb b/config/software/consul.rb
--- a/config/software/consul.rb
+++ b/config/software/consul.rb
@@ -35,6 +35,6 @@
   mkdir "#{install_dir}/embedded/bin"
   copy 'bin/consul', "#{install_dir}/embedded/bin/"
 
-  command "license_finder report --decisions-file=#{Omnibus::Config.project_root}/support/dependency_decisions.yml --format=csv --save=license.csv"
-  copy "license.csv", "#{install_dir}/licenses/consul.csv"
+  command "license_finder report --decisions-file=#{Omnibus::Config.project_root}/support/dependency_decisions.yml --format=json --save=license.json"
+  copy "license.json", "#{install_dir}/licenses/consul.json"
 end
diff --git a/config/software/docker-distribution-pruner.rb b/config/software/docker-distribution-pruner.rb
--- a/config/software/docker-distribution-pruner.rb
+++ b/config/software/docker-distribution-pruner.rb
@@ -33,6 +33,6 @@
   command "go build -ldflags '-s -w' ./cmds/docker-distribution-pruner", env: env
   copy 'docker-distribution-pruner', "#{install_dir}/embedded/bin/"
 
-  command "license_finder report --decisions-file=#{Omnibus::Config.project_root}/support/dependency_decisions.yml --format=csv --save=license.csv"
-  copy "license.csv", "#{install_dir}/licenses/docker-distribution-pruner.csv"
+  command "license_finder report --decisions-file=#{Omnibus::Config.project_root}/support/dependency_decisions.yml --format=json --save=license.json"
+  copy "license.json", "#{install_dir}/licenses/docker-distribution-pruner.json"
 end
diff --git a/config/software/gitaly.rb b/config/software/gitaly.rb
--- a/config/software/gitaly.rb
+++ b/config/software/gitaly.rb
@@ -71,6 +71,6 @@
     end
   end
 
-  command "license_finder report --decisions-file=#{Omnibus::Config.project_root}/support/dependency_decisions.yml --format=csv --save=license.csv"
-  copy "license.csv", "#{install_dir}/licenses/gitaly.csv"
+  command "license_finder report --decisions-file=#{Omnibus::Config.project_root}/support/dependency_decisions.yml --format=json --save=license.json"
+  copy "license.json", "#{install_dir}/licenses/gitaly.json"
 end
diff --git a/config/software/gitlab-elasticsearch-indexer.rb b/config/software/gitlab-elasticsearch-indexer.rb
--- a/config/software/gitlab-elasticsearch-indexer.rb
+++ b/config/software/gitlab-elasticsearch-indexer.rb
@@ -33,6 +33,6 @@
   env = with_standard_compiler_flags(with_embedded_path)
 
   make "install PREFIX=#{install_dir}/embedded", env: env
-  command "license_finder report --decisions-file=#{Omnibus::Config.project_root}/support/dependency_decisions.yml --format=csv --save=license.csv"
-  copy "license.csv", "#{install_dir}/licenses/gitlab-elasticsearch-indexer.csv"
+  command "license_finder report --decisions-file=#{Omnibus::Config.project_root}/support/dependency_decisions.yml --format=json --save=license.json"
+  copy "license.json", "#{install_dir}/licenses/gitlab-elasticsearch-indexer.json"
 end
diff --git a/config/software/gitlab-kas.rb b/config/software/gitlab-kas.rb
--- a/config/software/gitlab-kas.rb
+++ b/config/software/gitlab-kas.rb
@@ -33,6 +33,6 @@
   make 'kas', env: env
   move 'build/kas', "#{install_dir}/embedded/bin/gitlab-kas"
 
-  command "license_finder report --decisions-file=#{Omnibus::Config.project_root}/support/dependency_decisions.yml --format=csv --save=license.csv"
-  copy "license.csv", "#{install_dir}/licenses/gitlab-kas.csv"
+  command "license_finder report --decisions-file=#{Omnibus::Config.project_root}/support/dependency_decisions.yml --format=json --save=license.json"
+  copy "license.json", "#{install_dir}/licenses/gitlab-kas.json"
 end
diff --git a/config/software/gitlab-pages.rb b/config/software/gitlab-pages.rb
--- a/config/software/gitlab-pages.rb
+++ b/config/software/gitlab-pages.rb
@@ -35,6 +35,6 @@
   make 'gitlab-pages', env: env
   move 'gitlab-pages', "#{install_dir}/embedded/bin/gitlab-pages"
 
-  command "license_finder report --decisions-file=#{Omnibus::Config.project_root}/support/dependency_decisions.yml --format=csv --save=license.csv"
-  copy "license.csv", "#{install_dir}/licenses/gitlab-pages.csv"
+  command "license_finder report --decisions-file=#{Omnibus::Config.project_root}/support/dependency_decisions.yml --format=json --save=license.json"
+  copy "license.json", "#{install_dir}/licenses/gitlab-pages.json"
 end
diff --git a/config/software/gitlab-rails.rb b/config/software/gitlab-rails.rb
--- a/config/software/gitlab-rails.rb
+++ b/config/software/gitlab-rails.rb
@@ -154,9 +154,17 @@
   move "#{Omnibus::Config.source_dir}/gitlab-rails/tmp/cache", "#{Omnibus::Config.project_root}/assets_cache"
   move "#{Omnibus::Config.source_dir}/gitlab-rails/node_modules", Omnibus::Config.project_root.to_s
 
-  bundle "exec license_finder report --decisions-file=config/dependency_decisions.yml --format=csv --save=licenses.csv", env: env
-  command "license_finder report --decisions-file=#{Omnibus::Config.project_root}/support/dependency_decisions.yml --format=csv --save=license.csv", cwd: "#{Omnibus::Config.source_dir}/gitlab-rails/workhorse"
-  command "sort -u licenses.csv workhorse/license.csv > #{install_dir}/licenses/gitlab-rails.csv"
+  bundle "exec license_finder report --decisions-file=config/dependency_decisions.yml --format=json --save=rails-license.json", env: env
+  command "license_finder report --decisions-file=#{Omnibus::Config.project_root}/support/dependency_decisions.yml --format=json --save=workhorse-license.json", cwd: "#{Omnibus::Config.source_dir}/gitlab-rails/workhorse"
+
+  # Merge rails and workhorse license files.
+  block "Merge license files of rails and workhorse" do
+    require 'json'
+    rails_licenses = JSON.parse(File.read("#{Omnibus::Config.source_dir}/gitlab-rails/rails-license.json"))['dependencies']
+    workhorse_licenses = JSON.parse(File.read("#{Omnibus::Config.source_dir}/gitlab-rails/workhorse/workhorse-license.json"))['dependencies']
+    output = { dependencies: rails_licenses.concat(workhorse_licenses).uniq }
+    File.write("#{install_dir}/licenses/gitlab-rails.json", JSON.pretty_generate(output))
+  end
 
   # Tear down now that gitlab:assets:compile is done.
   delete 'config/gitlab.yml'
diff --git a/config/software/node-exporter.rb b/config/software/node-exporter.rb
--- a/config/software/node-exporter.rb
+++ b/config/software/node-exporter.rb
@@ -44,6 +44,6 @@
   command "go build -ldflags '#{prom_version.print_ldflags}'", env: env
   copy 'node_exporter', "#{install_dir}/embedded/bin/"
 
-  command "license_finder report --decisions-file=#{Omnibus::Config.project_root}/support/dependency_decisions.yml --format=csv --save=license.csv"
-  copy "license.csv", "#{install_dir}/licenses/node-exporter.csv"
+  command "license_finder report --decisions-file=#{Omnibus::Config.project_root}/support/dependency_decisions.yml --format=json --save=license.json"
+  copy "license.json", "#{install_dir}/licenses/node-exporter.json"
 end
diff --git a/config/software/pgbouncer-exporter.rb b/config/software/pgbouncer-exporter.rb
--- a/config/software/pgbouncer-exporter.rb
+++ b/config/software/pgbouncer-exporter.rb
@@ -43,6 +43,6 @@
   command "go build -mod=vendor -ldflags '#{prom_version.print_ldflags}'", env: env
   copy 'pgbouncer_exporter', "#{install_dir}/embedded/bin/"
 
-  command "license_finder report --decisions-file=#{Omnibus::Config.project_root}/support/dependency_decisions.yml --format=csv --save=license.csv"
-  copy "license.csv", "#{install_dir}/licenses/pgbouncer-exporter.csv"
+  command "license_finder report --decisions-file=#{Omnibus::Config.project_root}/support/dependency_decisions.yml --format=json --save=license.json"
+  copy "license.json", "#{install_dir}/licenses/pgbouncer-exporter.json"
 end
diff --git a/config/software/postgres-exporter.rb b/config/software/postgres-exporter.rb
--- a/config/software/postgres-exporter.rb
+++ b/config/software/postgres-exporter.rb
@@ -45,6 +45,6 @@
   command "go build -ldflags '#{ldflags}' ./cmd/postgres_exporter", env: env
   copy 'postgres_exporter', "#{install_dir}/embedded/bin/"
 
-  command "license_finder report --decisions-file=#{Omnibus::Config.project_root}/support/dependency_decisions.yml --format=csv --save=license.csv"
-  copy "license.csv", "#{install_dir}/licenses/postgres-exporter.csv"
+  command "license_finder report --decisions-file=#{Omnibus::Config.project_root}/support/dependency_decisions.yml --format=json --save=license.json"
+  copy "license.json", "#{install_dir}/licenses/postgres-exporter.json"
 end
diff --git a/config/software/prometheus.rb b/config/software/prometheus.rb
--- a/config/software/prometheus.rb
+++ b/config/software/prometheus.rb
@@ -47,6 +47,6 @@
   command "go build -tags netgo,builtinassets -ldflags '#{prom_version.print_ldflags}' ./cmd/prometheus", env: env, cwd: cwd
   copy 'prometheus', "#{install_dir}/embedded/bin/prometheus"
 
-  command "license_finder report --decisions-file=#{Omnibus::Config.project_root}/support/dependency_decisions.yml --format=csv --save=license.csv"
-  copy "license.csv", "#{install_dir}/licenses/prometheus.csv"
+  command "license_finder report --decisions-file=#{Omnibus::Config.project_root}/support/dependency_decisions.yml --format=json --save=license.json"
+  copy "license.json", "#{install_dir}/licenses/prometheus.json"
 end
diff --git a/config/software/redis-exporter.rb b/config/software/redis-exporter.rb
--- a/config/software/redis-exporter.rb
+++ b/config/software/redis-exporter.rb
@@ -47,6 +47,6 @@
   command "go build -ldflags '#{ldflags}'", env: env
   copy 'redis_exporter', "#{install_dir}/embedded/bin/"
 
-  command "license_finder report --decisions-file=#{Omnibus::Config.project_root}/support/dependency_decisions.yml --format=csv --save=license.csv"
-  copy "license.csv", "#{install_dir}/licenses/redis-exporter.csv"
+  command "license_finder report --decisions-file=#{Omnibus::Config.project_root}/support/dependency_decisions.yml --format=json --save=license.json"
+  copy "license.json", "#{install_dir}/licenses/redis-exporter.json"
 end
diff --git a/config/software/registry.rb b/config/software/registry.rb
--- a/config/software/registry.rb
+++ b/config/software/registry.rb
@@ -43,6 +43,6 @@
   make "binaries", env: env, cwd: cwd
   move "#{cwd}/bin/*", "#{install_dir}/embedded/bin", force: true
 
-  command "license_finder report --decisions-file=#{Omnibus::Config.project_root}/support/dependency_decisions.yml --format=csv --save=license.csv"
-  copy "license.csv", "#{install_dir}/licenses/registry.csv"
+  command "license_finder report --decisions-file=#{Omnibus::Config.project_root}/support/dependency_decisions.yml --format=json --save=license.json"
+  copy "license.json", "#{install_dir}/licenses/registry.json"
 end