#!/usr/bin/env ruby # frozen_string_literal: true require 'jekyll' require 'tmpdir' tmp_dir = Dir.mktmpdir git_cmd = "git clone --depth=1 'https://github.com/spdx/license-list-data.git' #{tmp_dir}" system(git_cmd) text_dir = File.join(tmp_dir, 'text') site_path = File.expand_path('../', File.dirname(__FILE__)) config = Jekyll.configuration('source' => site_path) site = Jekyll::Site.new(config) site.read site.collections['licenses'].docs.each do |license| license_key = license.data['spdx-id'].downcase puts "Updating the #{license_key}..." only = (license_key.include? 'gpl') ? '-only' : '' text_file = File.join(text_dir, "#{license.data['spdx-id']}#{only}.txt") spdx_text = File.read(text_file) if license_key == 'afl-3.0' # https://github.com/spdx/license-list/pull/20 spdx_text = spdx_text.gsub(/^ 4\)/, '4)') elsif ['bsd-2-clause', 'bsd-3-clause'].include? license_key spdx_text = spdx_text.gsub(//, '[year]') spdx_text = spdx_text.gsub(//, '[fullname]') elsif license_key == 'bsd-3-clause-clear' spdx_text = spdx_text.gsub(/\[xxxx\]-\[xxxx\]/, '[year]') spdx_text = spdx_text.sub(/\[Owner Organization\]/, '[fullname]') spdx_text = spdx_text.sub(/\[Owner Organization\]/, 'the copyright holder') elsif license_key == 'isc' spdx_text = spdx_text.gsub(/Copyright.*Consortium/m, 'Copyright (c) [year], [fullname]') elsif license_key == 'mit' spdx_text = spdx_text.gsub(//, '[year]') spdx_text = spdx_text.gsub(//, '[fullname]') elsif license_key == 'ncsa' spdx_text = spdx_text.gsub(//, '[year]') spdx_text = spdx_text.gsub(//, '[fullname]') spdx_text = spdx_text.gsub(//, '[fullname]') spdx_text = spdx_text.gsub(//, '[project]') spdx_text = spdx_text.gsub(%r{}, '[project_url]') spdx_text = spdx_text.gsub(//, '[fullname], [project]') end license_text = '' spdx_text.lines.each do |line| if line.length > 78 indented_line = line.match(/\A(\s*)(.*)/) line_indent = indented_line[1] line_text = indented_line[2] .gsub(/\s+/, ' ') text_width = 78 - line_indent.length line = line_text.gsub(/(.{1,#{text_width}})(\s+|\Z)/, "#{line_indent}\\1\n") end license_text += line end raw_content = File.read(license.path) matches = raw_content.match Jekyll::Document::YAML_FRONT_MATTER_REGEXP output = matches[1] output << "---\n\n" output << license_text.gsub(/\s+$/m, "\n") File.write(license.path, output) end