ratatui_ruby-devtools 0.2.1 → 0.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (134) hide show
  1. checksums.yaml +4 -4
  2. data/.rubocop.yml +1 -1
  3. data/AGENTS.md +1 -1
  4. data/CHANGELOG.md +53 -7
  5. data/README.md +49 -21
  6. data/Rakefile +1 -1
  7. data/bin/setup +20 -6
  8. data/bin/setup.ps1 +74 -0
  9. data/doc/contributors/documentation_style.md +3 -4
  10. data/exe/scaffold +8 -342
  11. data/lib/ratatui_ruby/devtools/scaffold/scaffold_config.rb +67 -0
  12. data/lib/ratatui_ruby/devtools/scaffold/template_renderer.rb +282 -0
  13. data/lib/ratatui_ruby/devtools/task_scope.rb +24 -0
  14. data/lib/ratatui_ruby/devtools/tasks/autodoc_tasks.rb +31 -0
  15. data/lib/ratatui_ruby/devtools/tasks/bump/bump_workflow.rb +71 -0
  16. data/lib/ratatui_ruby/devtools/tasks/bump/changelog.rb +60 -3
  17. data/lib/ratatui_ruby/devtools/tasks/bump/github_project.rb +26 -0
  18. data/lib/ratatui_ruby/devtools/tasks/bump/history.rb +3 -3
  19. data/lib/ratatui_ruby/devtools/tasks/bump/links.rb +39 -24
  20. data/lib/ratatui_ruby/devtools/tasks/bump/manifest.rb +9 -17
  21. data/lib/ratatui_ruby/devtools/tasks/bump/no_crate.rb +19 -0
  22. data/lib/ratatui_ruby/devtools/tasks/bump/no_links.rb +22 -0
  23. data/lib/ratatui_ruby/devtools/tasks/bump/patch_release.rb +25 -0
  24. data/lib/ratatui_ruby/devtools/tasks/bump/release_branch.rb +17 -0
  25. data/lib/ratatui_ruby/devtools/tasks/bump/release_from_trunk.rb +48 -0
  26. data/lib/ratatui_ruby/devtools/tasks/bump/repository.rb +143 -0
  27. data/lib/ratatui_ruby/devtools/tasks/bump/ruby_gem.rb +65 -59
  28. data/lib/ratatui_ruby/devtools/tasks/bump/rust_crate.rb +42 -0
  29. data/lib/ratatui_ruby/devtools/tasks/bump/sem_ver.rb +127 -10
  30. data/lib/ratatui_ruby/devtools/tasks/bump/source_hut_project.rb +26 -0
  31. data/lib/ratatui_ruby/devtools/tasks/bump/unbranched_release.rb +20 -0
  32. data/lib/ratatui_ruby/devtools/tasks/bump/unreleased_section.rb +19 -1
  33. data/lib/ratatui_ruby/devtools/tasks/bump_tasks.rb +47 -0
  34. data/lib/ratatui_ruby/devtools/tasks/cargo_tasks.rb +57 -0
  35. data/lib/ratatui_ruby/devtools/tasks/doc/documentation.rb +59 -0
  36. data/lib/ratatui_ruby/devtools/tasks/doc/link/file_url.rb +30 -0
  37. data/lib/ratatui_ruby/devtools/tasks/doc/link/relative_path.rb +61 -0
  38. data/lib/ratatui_ruby/devtools/tasks/doc/link/web_url.rb +55 -0
  39. data/lib/ratatui_ruby/devtools/tasks/doc/link.rb +52 -0
  40. data/lib/ratatui_ruby/devtools/tasks/doc/link_audit.rb +116 -0
  41. data/lib/ratatui_ruby/devtools/tasks/doc/problem.rb +40 -0
  42. data/lib/ratatui_ruby/devtools/tasks/doc/source_file.rb +93 -0
  43. data/lib/ratatui_ruby/devtools/tasks/doc_tasks.rb +937 -0
  44. data/lib/ratatui_ruby/devtools/tasks/license/blame.rb +72 -0
  45. data/lib/ratatui_ruby/devtools/tasks/license/changed_files.rb +34 -0
  46. data/lib/ratatui_ruby/devtools/tasks/license/contribution.rb +12 -0
  47. data/lib/ratatui_ruby/devtools/tasks/license/copyright.rb +47 -0
  48. data/lib/ratatui_ruby/devtools/tasks/license/directory_licensing.rb +42 -0
  49. data/lib/ratatui_ruby/devtools/tasks/license/existing_header.rb +21 -0
  50. data/lib/ratatui_ruby/devtools/tasks/license/header_revision.rb +45 -0
  51. data/lib/ratatui_ruby/devtools/tasks/license/licensed_file.rb +39 -0
  52. data/lib/ratatui_ruby/devtools/tasks/license/licensing.rb +35 -0
  53. data/lib/ratatui_ruby/devtools/tasks/license/markdown_document.rb +23 -0
  54. data/lib/ratatui_ruby/devtools/tasks/license/markdown_files.rb +31 -0
  55. data/lib/ratatui_ruby/devtools/tasks/license/markdown_header_syntax.rb +104 -0
  56. data/lib/ratatui_ruby/devtools/tasks/license/markdown_snippet_syntax.rb +159 -0
  57. data/lib/ratatui_ruby/devtools/tasks/license/missing_header.rb +18 -0
  58. data/lib/ratatui_ruby/devtools/tasks/license/rbs_files.rb +27 -0
  59. data/lib/ratatui_ruby/devtools/tasks/license/rbs_header_syntax.rb +31 -0
  60. data/lib/ratatui_ruby/devtools/tasks/license/rdoc_comment.rb +51 -0
  61. data/lib/ratatui_ruby/devtools/tasks/license/rdoc_examples.rb +41 -0
  62. data/lib/ratatui_ruby/devtools/tasks/license/rdoc_snippet_syntax.rb +119 -0
  63. data/lib/ratatui_ruby/devtools/tasks/license/renewal.rb +17 -0
  64. data/lib/ratatui_ruby/devtools/tasks/license/reuse_annotated_file.rb +12 -0
  65. data/lib/ratatui_ruby/devtools/tasks/license/reuse_tool.rb +34 -0
  66. data/lib/ratatui_ruby/devtools/tasks/license/ruby_comment_header.rb +49 -0
  67. data/lib/ratatui_ruby/devtools/tasks/license/ruby_files.rb +36 -0
  68. data/lib/ratatui_ruby/devtools/tasks/license/ruby_header_syntax.rb +39 -0
  69. data/lib/ratatui_ruby/devtools/tasks/license/rust_files.rb +27 -0
  70. data/lib/ratatui_ruby/devtools/tasks/license/rust_header_syntax.rb +59 -0
  71. data/lib/ratatui_ruby/devtools/tasks/license/snippet.rb +44 -0
  72. data/lib/ratatui_ruby/devtools/tasks/license/snippet_file.rb +29 -0
  73. data/lib/ratatui_ruby/devtools/tasks/license/snippet_opening.rb +39 -0
  74. data/lib/ratatui_ruby/devtools/tasks/license/snippet_revision.rb +75 -0
  75. data/lib/ratatui_ruby/devtools/tasks/license/spdx_header.rb +42 -0
  76. data/lib/ratatui_ruby/devtools/tasks/license/unknown_file.rb +12 -0
  77. data/lib/ratatui_ruby/devtools/tasks/license/unlicensed_files.rb +69 -0
  78. data/lib/ratatui_ruby/devtools/tasks/license/wrapped_snippet.rb +30 -0
  79. data/lib/ratatui_ruby/devtools/tasks/license_tasks.rb +71 -0
  80. data/lib/ratatui_ruby/devtools/tasks/lint/gem_lockfile.rb +29 -0
  81. data/lib/ratatui_ruby/devtools/tasks/lint/supported_rubies.rb +18 -0
  82. data/lib/ratatui_ruby/devtools/tasks/lint_tasks.rb +100 -0
  83. data/lib/ratatui_ruby/devtools/tasks/release/platform_gem.rb +21 -12
  84. data/lib/ratatui_ruby/devtools/tasks/release/versioned_binary.rb +1 -1
  85. data/lib/ratatui_ruby/devtools/tasks/release_tasks.rb +80 -0
  86. data/lib/ratatui_ruby/devtools/tasks/reuse_tasks.rb +39 -0
  87. data/lib/ratatui_ruby/devtools/tasks/{test.rake → test_tasks.rb} +13 -4
  88. data/lib/ratatui_ruby/devtools/tasks/website/hosted_source_tree.rb +24 -0
  89. data/lib/ratatui_ruby/devtools/tasks/website/index_page.rb +1 -4
  90. data/lib/ratatui_ruby/devtools/tasks/website/source_tree.rb +63 -0
  91. data/lib/ratatui_ruby/devtools/tasks/website/versioned_documentation.rb +14 -13
  92. data/lib/ratatui_ruby/devtools/tasks/website_tasks.rb +49 -0
  93. data/lib/ratatui_ruby/devtools/templates/.github/workflows/build-gems.yml.erb +7 -1
  94. data/lib/ratatui_ruby/devtools/templates/.github/workflows/ci.yml.erb +2 -2
  95. data/lib/ratatui_ruby/devtools/templates/.gitignore.erb +2 -1
  96. data/lib/ratatui_ruby/devtools/templates/.rubocop.yml.erb +1 -1
  97. data/lib/ratatui_ruby/devtools/templates/AGENTS.md.erb +1 -1
  98. data/lib/ratatui_ruby/devtools/templates/CHANGELOG.md.erb +3 -1
  99. data/lib/ratatui_ruby/devtools/templates/CONTRIBUTING.md.erb +3 -3
  100. data/lib/ratatui_ruby/devtools/templates/Gemfile.erb +2 -3
  101. data/lib/ratatui_ruby/devtools/templates/README.md.erb +7 -7
  102. data/lib/ratatui_ruby/devtools/templates/REUSE.toml.erb +1 -1
  103. data/lib/ratatui_ruby/devtools/templates/bin/setup.erb +5 -1
  104. data/lib/ratatui_ruby/devtools/templates/bin/setup.ps1.erb +5 -1
  105. data/lib/ratatui_ruby/devtools/templates/doc/concepts/application_architecture.md.erb +2 -2
  106. data/lib/ratatui_ruby/devtools/templates/doc/concepts/application_testing.md.erb +3 -3
  107. data/lib/ratatui_ruby/devtools/templates/doc/getting_started/quickstart.md.erb +4 -4
  108. data/lib/ratatui_ruby/devtools/templates/ext/Cargo.toml.erb +1 -1
  109. data/lib/ratatui_ruby/devtools/templates/gemspec.erb +1 -1
  110. data/lib/ratatui_ruby/devtools/templates/mise.toml.erb +3 -3
  111. data/lib/ratatui_ruby/devtools/version.rb +1 -1
  112. data/lib/ratatui_ruby/devtools.rb +54 -71
  113. data/mise.toml +2 -2
  114. data/sig/ratatui_ruby/devtools.rbs +16 -1
  115. metadata +93 -34
  116. data/.builds/ruby-4.0.yml +0 -38
  117. data/lib/ratatui_ruby/devtools/tasks/autodoc.rake +0 -21
  118. data/lib/ratatui_ruby/devtools/tasks/bump.rake +0 -80
  119. data/lib/ratatui_ruby/devtools/tasks/cargo.rake +0 -47
  120. data/lib/ratatui_ruby/devtools/tasks/doc.rake +0 -887
  121. data/lib/ratatui_ruby/devtools/tasks/license/headers_md.rb +0 -276
  122. data/lib/ratatui_ruby/devtools/tasks/license/headers_rb.rb +0 -236
  123. data/lib/ratatui_ruby/devtools/tasks/license/license_utils.rb +0 -143
  124. data/lib/ratatui_ruby/devtools/tasks/license/snippets_md.rb +0 -353
  125. data/lib/ratatui_ruby/devtools/tasks/license/snippets_rdoc.rb +0 -186
  126. data/lib/ratatui_ruby/devtools/tasks/license.rake +0 -91
  127. data/lib/ratatui_ruby/devtools/tasks/lint.rake +0 -80
  128. data/lib/ratatui_ruby/devtools/tasks/release.rake +0 -87
  129. data/lib/ratatui_ruby/devtools/tasks/resources/rubies.yml +0 -7
  130. data/lib/ratatui_ruby/devtools/tasks/reuse.rake +0 -104
  131. data/lib/ratatui_ruby/devtools/tasks/website.rake +0 -37
  132. data/lib/ratatui_ruby/devtools/templates/.builds/ruby.yml.erb +0 -47
  133. data/lib/ratatui_ruby/devtools/templates/tasks/resources/index.html.erb +0 -45
  134. data/lib/ratatui_ruby/devtools/templates/tasks/resources/rubies.yml.erb +0 -8
@@ -1,87 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- #--
4
- # SPDX-FileCopyrightText: 2026 Kerrick Long <me@kerricklong.com>
5
- # SPDX-License-Identifier: AGPL-3.0-or-later
6
- #++
7
-
8
- require_relative "release/native_gem_version"
9
-
10
- namespace :release do
11
- desc "Update stable branch to match release and set as default"
12
- task :update_stable do
13
- # Read version to determine tag
14
- version_file = RatatuiRuby::Devtools.version_file
15
- version_content = File.read(version_file)
16
- version = version_content.match(/VERSION = "(.+?)"/)[1]
17
- tag_name = "v#{version}"
18
-
19
- # Verify that the version file matches the actual git tag
20
- # This prevents updating stable to the wrong version if the release failed
21
- latest_tag = `git describe --tags --abbrev=0`.strip
22
- if latest_tag != tag_name
23
- abort "Fatal: Version mismatch! '#{version_file}' says #{tag_name}, but the latest git tag is #{latest_tag}."
24
- end
25
-
26
- # Get current stable version (if stable branch exists)
27
- stable_version_str = `git show stable:#{version_file} 2>/dev/null`.match(/VERSION = "(.+?)"/)&.[](1)
28
- if stable_version_str
29
- stable_version = Gem::Version.new(stable_version_str)
30
- new_version = Gem::Version.new(version)
31
-
32
- if new_version <= stable_version
33
- puts "Skipping stable update: #{version} is not newer than current stable #{stable_version_str}"
34
- next
35
- end
36
- end
37
-
38
- puts "Updating stable branch to point to #{tag_name}..."
39
- # Resolve the tag to a commit hash (peel annotated tags)
40
- # This renders a commit SHA that can be pushed to a branch head
41
- commit_sha = `git rev-parse #{tag_name}^{}`.strip
42
-
43
- # Update local stable branch to match
44
- sh "git branch -f stable #{commit_sha}"
45
-
46
- # Push the commit to remote stable branch
47
- # Force-push because stable is reset to each release, not fast-forwarded.
48
- sh "git push --force origin #{commit_sha}:stable"
49
- end
50
- end
51
-
52
- if Rake::Task.task_defined?("release")
53
- Rake::Task["release"].enhance do
54
- # Replace Bundler's normalized tag with semver-style for prerelease versions.
55
- # Bundler creates tags using normalized Gem::Version (e.g., v1.0.0.pre.beta.1).
56
- # Semver uses hyphens (e.g., v1.0.0-beta.1). We want only the semver tag.
57
- version_file = RatatuiRuby::Devtools.version_file
58
- version_content = File.read(version_file)
59
- version = version_content.match(/VERSION = "(.+?)"/)[1]
60
-
61
- if version.include?("-")
62
- normalized_tag = "v#{Gem::Version.new(version)}"
63
- semver_tag = "v#{version}"
64
-
65
- if normalized_tag != semver_tag
66
- puts "Replacing normalized tag #{normalized_tag} with semver tag #{semver_tag}..."
67
- # Delete the normalized tag locally and remotely
68
- sh "git tag -d #{normalized_tag}"
69
- sh "git push origin :refs/tags/#{normalized_tag}"
70
- # Create the semver tag pointing to the same commit
71
- sh "git tag #{semver_tag} HEAD"
72
- sh "git push origin #{semver_tag}"
73
- end
74
- end
75
-
76
- gem_name = RatatuiRuby::Devtools.gem_name
77
- has_rust = File.exist?("ext/#{gem_name}/Cargo.toml") ||
78
- File.exist?("ext/#{gem_name.tr('-', '_')}/Cargo.toml")
79
-
80
- if has_rust
81
- release_sha = `git rev-parse v#{version}^{}`.strip
82
- NativeGemVersion.new(version:, sha: release_sha).release
83
- end
84
-
85
- Rake::Task["release:update_stable"].invoke
86
- end
87
- end
@@ -1,7 +0,0 @@
1
- # SPDX-FileCopyrightText: 2025 Kerrick Long <me@kerricklong.com>
2
- # SPDX-License-Identifier: AGPL-3.0-or-later
3
-
4
- - "3.2"
5
- - "3.3"
6
- - "3.4"
7
- - "4.0"
@@ -1,104 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- #--
4
- # SPDX-FileCopyrightText: 2026 Kerrick Long <me@kerricklong.com>
5
- # SPDX-License-Identifier: AGPL-3.0-or-later
6
- #++
7
-
8
- namespace :reuse do
9
- desc "Run the REUSE Tool to confirm REUSE compliance"
10
- task :lint do
11
- sh "reuse lint"
12
- end
13
-
14
- desc "Add SPDX headers to files missing them (per AGENTS.md standards)"
15
- task :fix do
16
- copyright = ENV.fetch("REUSE_COPYRIGHT", "Kerrick Long <me@kerricklong.com>")
17
-
18
- # Code files: AGPL-3.0-or-later
19
- code_extensions = %w[rb rs rake gemspec rbs toml yml yaml json lock].freeze
20
- code_license = ENV.fetch("REUSE_CODE_LICENSE", "AGPL-3.0-or-later")
21
-
22
- # Documentation files: CC-BY-SA-4.0
23
- doc_extensions = %w[md txt].freeze
24
- doc_license = ENV.fetch("REUSE_DOC_LICENSE", "CC-BY-SA-4.0")
25
-
26
- # Find files missing headers (listed after "no copyright and licensing" message)
27
- puts "Checking for files missing REUSE headers..."
28
- output = `reuse lint 2>&1`
29
- in_missing_section = false
30
- missing_files = output.lines.filter_map do |line|
31
- in_missing_section = true if line.include?("no copyright and licensing")
32
- in_missing_section = false if line.start_with?("# ") && !line.include?("copyright")
33
- next unless in_missing_section
34
-
35
- line.match(/^\* (.+)/)&.[](1)
36
- end
37
-
38
- if missing_files.empty?
39
- puts "All files have REUSE headers!"
40
- else
41
- missing_files.each do |file|
42
- ext = File.extname(file).delete(".")
43
- license = if code_extensions.include?(ext)
44
- code_license
45
- elsif doc_extensions.include?(ext)
46
- doc_license
47
- else
48
- puts " Skipping #{file} (unknown extension: .#{ext})"
49
- next
50
- end
51
-
52
- puts " Annotating #{file} with #{license}"
53
- sh "reuse annotate --license #{license} --copyright '#{copyright}' --skip-existing '#{file}'", verbose: false
54
- end
55
- end
56
- end
57
-
58
- desc "Normalize Ruby files: frozen_string_literal at top, SPDX in #--/#++ block"
59
- task :normalize_ruby do
60
- ruby_extensions = %w[rb rake gemspec].freeze
61
- ruby_files = Dir.glob("**/*.{#{ruby_extensions.join(',')}}")
62
- .reject { |f| f.start_with?("vendor/", "tmp/", ".") }
63
-
64
- fixed_count = 0
65
- ruby_files.each do |file|
66
- content = File.read(file)
67
- original = content.dup
68
-
69
- # Skip if no SPDX header
70
- next unless content.match?(/# SPDX-/)
71
-
72
- # Extract components
73
- frozen = content.match?(/^# frozen_string_literal: true/)
74
- spdx_match = content.match(/(# SPDX-FileCopyrightText:[^\n]+\n(?:#[^\n]*\n)*# SPDX-License-Identifier:[^\n]+\n)/m)
75
- next unless spdx_match
76
-
77
- spdx_block = spdx_match[1]
78
-
79
- # Remove existing frozen_string_literal and SPDX block (and any #--/#++)
80
- cleaned = content
81
- .sub(/^# frozen_string_literal: true\n+/, "")
82
- .sub(/^#--\s*\n/, "")
83
- .sub(spdx_block, "")
84
- .sub(/^#\+\+\s*\n/, "")
85
- .sub(/\A\n+/, "") # Remove leading blank lines
86
-
87
- # Rebuild file in correct order: frozen, blank, #--, SPDX, #++, rest
88
- new_content = ""
89
- new_content += "# frozen_string_literal: true\n\n" if frozen
90
- new_content += "#--\n#{spdx_block}#++\n\n"
91
- new_content += cleaned.sub(/\A\n+/, "") # Ensure no double blank lines
92
-
93
- next unless new_content != original
94
-
95
- File.write(file, new_content)
96
- puts " Normalized #{file}"
97
- fixed_count += 1
98
- end
99
-
100
- puts fixed_count.zero? ? "All Ruby files properly normalized!" : "Fixed #{fixed_count} files."
101
- end
102
- end
103
-
104
- task(:reuse) { Rake::Task["reuse:lint"].invoke }
@@ -1,37 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- #--
4
- # SPDX-FileCopyrightText: 2026 Kerrick Long <me@kerricklong.com>
5
- # SPDX-License-Identifier: AGPL-3.0-or-later
6
- #++
7
-
8
- require "erb"
9
- require "fileutils"
10
- require "tmpdir"
11
- require_relative "rdoc_config"
12
-
13
- namespace :website do
14
- desc "Build documentation for trunk (current dir) and all git tags"
15
- task :build do
16
- require_relative "website/website"
17
-
18
- spec = Gem::Specification.load(Dir["*.gemspec"].first)
19
- globs = RDocConfig::RDOC_FILES + ["*.gemspec", "doc/images/**/*", "examples/**/*"]
20
-
21
- # Allow projects to customize via website_config.rb in their tasks/ directory
22
- config = if File.exist?("tasks/website_config.rb")
23
- load File.expand_path("tasks/website_config.rb", Dir.pwd)
24
- WebsiteConfig::CONFIG
25
- else
26
- {}
27
- end
28
-
29
- Website.new(
30
- at: config[:output_dir] || "www",
31
- project_name: spec.name,
32
- globs:,
33
- assets: config[:assets] || ["doc/images"],
34
- branding: config[:branding] || {}
35
- ).build
36
- end
37
- end
@@ -1,47 +0,0 @@
1
- # REUSE-IgnoreStart
2
- # SPDX-FileCopyrightText: <%= Time.now.year %> <%= copyright_holder %>
3
- # SPDX-License-Identifier: <%= license %>
4
- # REUSE-IgnoreEnd
5
-
6
- image: archlinux
7
- packages:
8
- - bash
9
- - base-devel
10
- - curl
11
- - openssl
12
- - libyaml
13
- - zlib
14
- - readline
15
- - gdbm
16
- - ncurses
17
- - libffi
18
- - git
19
- sources:
20
- - https://git.sr.ht/~kerrick/<%= gem_name %>
21
- tasks:
22
- - setup: |
23
- curl https://mise.jdx.dev/install.sh | sh
24
- echo 'export PATH="$HOME/.local/bin:$PATH"' >> ~/.buildenv
25
- echo 'eval "$($HOME/.local/bin/mise activate bash)"' >> ~/.buildenv
26
- echo 'export LANG="en_US.UTF-8"' >> ~/.buildenv
27
- echo 'export LC_ALL="en_US.UTF-8"' >> ~/.buildenv
28
- . ~/.buildenv
29
- export CI="true"
30
- cd <%= gem_name %>
31
- sed -i 's/ruby = .*/ruby = "<%= ruby_version %>"/' mise.toml
32
- mise install
33
- mise x -- pip install reuse
34
- mise x -- gem install bundler
35
- mise reshim
36
- mise x -- bundle config set --local frozen 'true'
37
- mise x -- bundle install
38
- - test: |
39
- . ~/.buildenv
40
- cd <%= gem_name %>
41
- echo "Testing Ruby <%= ruby_version %>"
42
- mise x -- bundle exec rake test
43
- - lint: |
44
- . ~/.buildenv
45
- cd <%= gem_name %>
46
- echo "Linting Ruby <%= ruby_version %>"
47
- mise x -- bundle exec rake lint
@@ -1,45 +0,0 @@
1
- <%# REUSE-IgnoreStart -%>
2
- <%= "<%#" %>
3
- SPDX-FileCopyrightText: <%= Time.now.year %> <%= copyright_holder %>
4
- SPDX-License-Identifier: <%= license %>
5
- %>
6
- <%# REUSE-IgnoreEnd -%>
7
-
8
- <!DOCTYPE html>
9
- <html>
10
- <head>
11
- <title><%%= project_name %> documentation</title>
12
- <meta name="viewport" content="width=device-width, initial-scale=1">
13
- <style>
14
- :root { color-scheme: light dark; }
15
- body { font-family: system-ui, sans-serif; max-width: 800px; margin: 0 auto; padding: 2rem; line-height: 1.5; color: light-dark(#111, #eee); background: light-dark(#fff, #111); }
16
- h1 { border-bottom: 2px solid light-dark(#eee, #333); padding-bottom: 0.5rem; }
17
- ul { list-style: none; padding: 0; }
18
- li { margin: 0.5rem 0; border: 1px solid light-dark(#ddd, #444); border-radius: 4px; }
19
- a { display: block; padding: 1rem; text-decoration: none; color: light-dark(#0055aa, #44aaff); font-weight: bold; }
20
- a:hover { background: light-dark(#f5f5f5, #222); }
21
- .meta { font-weight: normal; color: light-dark(#666, #aaa); font-size: 0.9em; float: right; }
22
- </style>
23
- </head>
24
- <body>
25
- <h1><%%= project_name %> documentation</h1>
26
- <ul>
27
- <%% versions.each do |version| %>
28
- <li>
29
- <a href="<%%= version.slug %>/index.html">
30
- <%%= version.name %>
31
- <span class="meta">
32
- <%% if version.latest? %>
33
- Latest
34
- <%% elsif version.edge? %>
35
- Edge
36
- <%% else %>
37
- Historical
38
- <%% end %>
39
- </span>
40
- </a>
41
- </li>
42
- <%% end %>
43
- </ul>
44
- </body>
45
- </html>
@@ -1,8 +0,0 @@
1
- <%# REUSE-IgnoreStart -%>
2
- # SPDX-FileCopyrightText: <%= Time.now.year %> <%= copyright_holder %>
3
- # SPDX-License-Identifier: <%= license %>
4
- <%# REUSE-IgnoreEnd -%>
5
-
6
- <% rubies.each do |ruby| -%>
7
- - "<%= ruby %>"
8
- <% end -%>