bilingual-jekyll-resume-theme 1.0.1 → 1.0.2
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.
Potentially problematic release.
This version of bilingual-jekyll-resume-theme might be problematic. Click here for more details.
- checksums.yaml +4 -4
- data/CHANGELOG.md +16 -0
- data/README.md +8 -8
- data/{docs/_data/_config.sample.yml → _config.sample.yml} +5 -0
- data/_includes/language-switcher.html +1 -1
- data/bin/check-data-keys +5 -4
- data/bin/validate-resume +5 -4
- data/docs/ACCESSIBILITY_GUIDE.md +1 -1
- data/docs/COMPLETED_AUDIT.md +52 -45
- data/docs/CONFIG_GUIDE.md +2 -2
- data/docs/MULTILINGUAL_GUIDE.md +2 -2
- data/docs/PROJECT_OVERVIEW.md +6 -11
- data/docs/VALIDATION_GUIDE.md +10 -10
- data/lib/bilingual-jekyll-resume-theme/template_key_checker.rb +1 -1
- metadata +2 -88
- data/docs/_data/_config.demo.yml +0 -62
- data/docs/_data/ar/associations.yml +0 -36
- data/docs/_data/ar/certifications.yml +0 -51
- data/docs/_data/ar/courses.yml +0 -46
- data/docs/_data/ar/education.yml +0 -48
- data/docs/_data/ar/experience.yml +0 -55
- data/docs/_data/ar/header.yml +0 -7
- data/docs/_data/ar/interests.yml +0 -15
- data/docs/_data/ar/languages.yml +0 -29
- data/docs/_data/ar/links.yml +0 -24
- data/docs/_data/ar/projects.yml +0 -44
- data/docs/_data/ar/recognitions.yml +0 -42
- data/docs/_data/ar/skills.yml +0 -33
- data/docs/_data/ar/volunteering.yml +0 -44
- data/docs/_data/de/associations.yml +0 -36
- data/docs/_data/de/certifications.yml +0 -51
- data/docs/_data/de/courses.yml +0 -46
- data/docs/_data/de/education.yml +0 -48
- data/docs/_data/de/experience.yml +0 -55
- data/docs/_data/de/header.yml +0 -7
- data/docs/_data/de/interests.yml +0 -15
- data/docs/_data/de/languages.yml +0 -29
- data/docs/_data/de/links.yml +0 -24
- data/docs/_data/de/projects.yml +0 -44
- data/docs/_data/de/recognitions.yml +0 -42
- data/docs/_data/de/skills.yml +0 -33
- data/docs/_data/de/volunteering.yml +0 -44
- data/docs/_data/en/associations.yml +0 -36
- data/docs/_data/en/certifications.yml +0 -51
- data/docs/_data/en/courses.yml +0 -46
- data/docs/_data/en/education.yml +0 -48
- data/docs/_data/en/experience.yml +0 -55
- data/docs/_data/en/header.yml +0 -7
- data/docs/_data/en/interests.yml +0 -15
- data/docs/_data/en/languages.yml +0 -29
- data/docs/_data/en/links.yml +0 -24
- data/docs/_data/en/projects.yml +0 -44
- data/docs/_data/en/recognitions.yml +0 -42
- data/docs/_data/en/skills.yml +0 -33
- data/docs/_data/en/volunteering.yml +0 -44
- data/docs/_data/es/associations.yml +0 -36
- data/docs/_data/es/certifications.yml +0 -51
- data/docs/_data/es/courses.yml +0 -46
- data/docs/_data/es/education.yml +0 -48
- data/docs/_data/es/experience.yml +0 -55
- data/docs/_data/es/header.yml +0 -7
- data/docs/_data/es/interests.yml +0 -15
- data/docs/_data/es/languages.yml +0 -29
- data/docs/_data/es/links.yml +0 -24
- data/docs/_data/es/projects.yml +0 -44
- data/docs/_data/es/recognitions.yml +0 -42
- data/docs/_data/es/skills.yml +0 -33
- data/docs/_data/es/volunteering.yml +0 -44
- data/docs/_data/fr/associations.yml +0 -36
- data/docs/_data/fr/certifications.yml +0 -51
- data/docs/_data/fr/courses.yml +0 -46
- data/docs/_data/fr/education.yml +0 -48
- data/docs/_data/fr/experience.yml +0 -55
- data/docs/_data/fr/header.yml +0 -7
- data/docs/_data/fr/interests.yml +0 -15
- data/docs/_data/fr/languages.yml +0 -29
- data/docs/_data/fr/links.yml +0 -24
- data/docs/_data/fr/projects.yml +0 -44
- data/docs/_data/fr/recognitions.yml +0 -42
- data/docs/_data/fr/skills.yml +0 -33
- data/docs/_data/fr/volunteering.yml +0 -44
- data/docs/_data/ur/associations.yml +0 -36
- data/docs/_data/ur/certifications.yml +0 -51
- data/docs/_data/ur/courses.yml +0 -46
- data/docs/_data/ur/education.yml +0 -48
- data/docs/_data/ur/experience.yml +0 -55
- data/docs/_data/ur/header.yml +0 -7
- data/docs/_data/ur/interests.yml +0 -15
- data/docs/_data/ur/languages.yml +0 -29
- data/docs/_data/ur/links.yml +0 -24
- data/docs/_data/ur/projects.yml +0 -44
- data/docs/_data/ur/recognitions.yml +0 -42
- data/docs/_data/ur/skills.yml +0 -33
- data/docs/_data/ur/volunteering.yml +0 -44
- data/docs/assets/images/sherlock-holmes.jpg +0 -0
- data/docs/demo/ar.md +0 -5
- data/docs/demo/de.md +0 -5
- data/docs/demo/en.md +0 -5
- data/docs/demo/es.md +0 -5
- data/docs/demo/fr.md +0 -5
- data/docs/demo/ur.md +0 -5
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: b8eb8d16040a681b4a06c1d6eba60b957aee132434d038ce56b53415e74774f9
|
|
4
|
+
data.tar.gz: e7cb05ea3e65d241cab36fb5734062a13af1931e8cabe736ee749a108bf8655b
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: c13e0bd5ff9f935997e3977abe7e7e8b257ace6499f0fdc098f8955dc1999ffd36103518e5143c9d3357763f511cb9e5448e8fbb8cc41bc9c7be9ee9493cd432
|
|
7
|
+
data.tar.gz: '0069c903af37bd0e31ffa14ac4e5901d4f5c19d4ae3ffca36d41dd647196f931bd5d87593b65a158fd25017f75704cf7750f4803a6887e6a41665e6ed3ddda3a'
|
data/CHANGELOG.md
CHANGED
|
@@ -4,6 +4,21 @@ All notable changes to this project will be documented in this file.
|
|
|
4
4
|
|
|
5
5
|
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
|
|
6
6
|
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
|
|
7
|
+
## [1.0.2] - 2026-09-25
|
|
8
|
+
|
|
9
|
+
### Changed
|
|
10
|
+
* Update submodule to latest commit ([`f1779be`](https://github.com/kmutahar/bilingual-jekyll-resume-theme/commit/f1779be39697ccea22e9185b0bf57278e8a29707))
|
|
11
|
+
|
|
12
|
+
* Extract Sherlock Holmes demo to submodule and relocate sample config ([`bfd9e83`](https://github.com/kmutahar/bilingual-jekyll-resume-theme/commit/bfd9e8374753885fece3098cfd00f40606e5d26b))
|
|
13
|
+
|
|
14
|
+
* Archive completed features 3.2 and 3.3 and streamline audit log ([`39ae7f3`](https://github.com/kmutahar/bilingual-jekyll-resume-theme/commit/39ae7f346dff45828e74fafbfb445420b0d699dd))
|
|
15
|
+
|
|
16
|
+
|
|
17
|
+
### Fixed
|
|
18
|
+
* Render language switcher on error pages ([`8e942f9`](https://github.com/kmutahar/bilingual-jekyll-resume-theme/commit/8e942f9fccc23a2c6e097938992c3f23f446bf97))
|
|
19
|
+
|
|
20
|
+
* Register theme gem in jekyll_plugins group; bump demo submodule ([`392c192`](https://github.com/kmutahar/bilingual-jekyll-resume-theme/commit/392c19209a42f629aba5e1c1e9a2a964832bf0a9))
|
|
21
|
+
|
|
7
22
|
## [1.0.1] - 2026-09-24
|
|
8
23
|
|
|
9
24
|
### Changed
|
|
@@ -357,6 +372,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
|
|
357
372
|
|
|
358
373
|
* Initial commit (New Theme Template) ([`00af662`](https://github.com/kmutahar/bilingual-jekyll-resume-theme/commit/00af6628dfec7aefe0ef7d7083bf98c9713a5ffd))
|
|
359
374
|
|
|
375
|
+
[1.0.2]: https://github.com/kmutahar/bilingual-jekyll-resume-theme/compare/v1.0.1...v1.0.2
|
|
360
376
|
[1.0.1]: https://github.com/kmutahar/bilingual-jekyll-resume-theme/compare/v1.0.0...v1.0.1
|
|
361
377
|
[1.0.0]: https://github.com/kmutahar/bilingual-jekyll-resume-theme/compare/v0.9.0...v1.0.0
|
|
362
378
|
[0.9.0]: https://github.com/kmutahar/bilingual-jekyll-resume-theme/compare/v0.8.0...v0.9.0
|
data/README.md
CHANGED
|
@@ -42,9 +42,9 @@ bundle install
|
|
|
42
42
|
|
|
43
43
|
### Basic Setup
|
|
44
44
|
|
|
45
|
-
1. **Copy sample configuration**: Use `
|
|
45
|
+
1. **Copy sample configuration**: Use `_config.sample.yml` at the repository root as a starting point for your `_config.yml`. Keep a `languages.<lang>` entry for each language you publish and delete the rest.
|
|
46
46
|
|
|
47
|
-
2. **Copy sample data files**: Copy each language folder you need from `
|
|
47
|
+
2. **Copy sample data files**: Copy each language folder you need from `demo/_data/` (`en`, `ar`, `es`, `fr`, `de`, `ur`) to your site's `_data/`. Each holds 13 files, including `header.yml` for the intro paragraph.
|
|
48
48
|
|
|
49
49
|
3. **Create resume pages**: One page per language, all using the `resume` layout:
|
|
50
50
|
```yaml
|
|
@@ -130,7 +130,7 @@ See the [Configuration Guide](docs/CONFIG_GUIDE.md#3-languages) for every per-la
|
|
|
130
130
|
|
|
131
131
|
### Sample Files
|
|
132
132
|
|
|
133
|
-
`
|
|
133
|
+
`demo/_data/{en,ar,es,fr,de,ur}/` hold a complete Sherlock Holmes demo resume in six languages, covering all 12 section types. Copy the folders you need to your site.
|
|
134
134
|
|
|
135
135
|
### Locales
|
|
136
136
|
|
|
@@ -144,18 +144,18 @@ To develop this theme locally:
|
|
|
144
144
|
# Install dependencies
|
|
145
145
|
bundle install
|
|
146
146
|
|
|
147
|
-
# Serve the six-language demo
|
|
148
|
-
bundle exec jekyll serve --
|
|
147
|
+
# Serve the six-language demo from the demo submodule
|
|
148
|
+
bundle exec jekyll serve --source demo --destination _site
|
|
149
149
|
|
|
150
150
|
# Build static output
|
|
151
|
-
bundle exec jekyll build --
|
|
151
|
+
bundle exec jekyll build --source demo --destination _site
|
|
152
152
|
|
|
153
153
|
# Validate resume data schemas and parity (CLI or Rake)
|
|
154
|
-
./bin/validate-resume
|
|
154
|
+
./bin/validate-resume demo/_data
|
|
155
155
|
bundle exec rake validate
|
|
156
156
|
|
|
157
157
|
# Check that the theme's own templates only reference real data keys (CLI or Rake)
|
|
158
|
-
./bin/check-data-keys
|
|
158
|
+
./bin/check-data-keys demo/_data
|
|
159
159
|
bundle exec rake check_data_keys
|
|
160
160
|
|
|
161
161
|
# Validators, RuboCop, and tests together
|
|
@@ -274,6 +274,11 @@ analytics:
|
|
|
274
274
|
# ==============================================================================
|
|
275
275
|
# Required plugins (bundled as theme runtime dependencies)
|
|
276
276
|
plugins:
|
|
277
|
+
# Belt-and-suspenders: Jekyll auto-requires gems listed here (site.gems) regardless
|
|
278
|
+
# of Bundler group, guarding against a Gemfile that forgets to put the theme gem in
|
|
279
|
+
# the `:jekyll_plugins` group — without that, the build-time resume validator and
|
|
280
|
+
# HTTP error page generator silently never run.
|
|
281
|
+
- bilingual-jekyll-resume-theme
|
|
277
282
|
- jekyll-feed
|
|
278
283
|
- jekyll-seo-tag
|
|
279
284
|
- jekyll-sitemap
|
|
@@ -16,7 +16,7 @@ Include: Reusable Multilingual Language Switcher Component (Feature 1.2; dropdow
|
|
|
16
16
|
- Toggle: Disabled via site.resume_language_switcher: false in _config.yml.
|
|
17
17
|
{%- endcomment -%}
|
|
18
18
|
|
|
19
|
-
{% if site.resume_language_switcher != false and page.language_switcher != false
|
|
19
|
+
{% if site.resume_language_switcher != false and page.language_switcher != false %}
|
|
20
20
|
{%- assign current_lang = page.lang | default: site.default_lang | default: 'en' -%}
|
|
21
21
|
{%- assign current_locale = site.data.locales[current_lang] | default: site.data.locales[site.default_lang] -%}
|
|
22
22
|
|
data/bin/check-data-keys
CHANGED
|
@@ -20,7 +20,7 @@ parser = OptionParser.new do |opts|
|
|
|
20
20
|
opts.separator ""
|
|
21
21
|
opts.separator "Options:"
|
|
22
22
|
|
|
23
|
-
opts.on("-d", "--dir DIR", "Path to data directory (default: _data or
|
|
23
|
+
opts.on("-d", "--dir DIR", "Path to data directory (default: _data or demo/_data)") do |d|
|
|
24
24
|
options[:data_dir] = d
|
|
25
25
|
end
|
|
26
26
|
|
|
@@ -51,9 +51,10 @@ parser.parse!
|
|
|
51
51
|
# Positional argument takes precedence over -d, or fall back to standard data dirs
|
|
52
52
|
data_dir = ARGV[0] || options[:data_dir]
|
|
53
53
|
if data_dir.nil?
|
|
54
|
-
# Prefer a directory that holds at least one language folder (a site's _data, else the theme's
|
|
55
|
-
data_dir = %w[_data
|
|
56
|
-
|
|
54
|
+
# Prefer a directory that holds at least one language folder (a site's _data, else the theme's demo).
|
|
55
|
+
data_dir = %w[_data demo/_data].find do |dir|
|
|
56
|
+
BilingualJekyllResumeTheme::TemplateKeyChecker.new(dir).discover_languages.any?
|
|
57
|
+
end || "demo/_data"
|
|
57
58
|
end
|
|
58
59
|
|
|
59
60
|
checker = BilingualJekyllResumeTheme::TemplateKeyChecker.new(data_dir, config_path: options[:config_path])
|
data/bin/validate-resume
CHANGED
|
@@ -22,7 +22,7 @@ parser = OptionParser.new do |opts|
|
|
|
22
22
|
opts.separator ""
|
|
23
23
|
opts.separator "Options:"
|
|
24
24
|
|
|
25
|
-
opts.on("-d", "--dir DIR", "Path to data directory (default: _data or
|
|
25
|
+
opts.on("-d", "--dir DIR", "Path to data directory (default: _data or demo/_data)") do |d|
|
|
26
26
|
options[:data_dir] = d
|
|
27
27
|
end
|
|
28
28
|
|
|
@@ -66,9 +66,10 @@ parser.parse!
|
|
|
66
66
|
# Positional argument takes precedence over -d, or fall back to standard data dirs
|
|
67
67
|
data_dir = ARGV[0] || options[:data_dir]
|
|
68
68
|
if data_dir.nil?
|
|
69
|
-
# Prefer a directory that holds at least one language folder (a site's _data, else the theme's
|
|
70
|
-
data_dir = %w[_data
|
|
71
|
-
|
|
69
|
+
# Prefer a directory that holds at least one language folder (a site's _data, else the theme's demo).
|
|
70
|
+
data_dir = %w[_data demo/_data].find do |dir|
|
|
71
|
+
BilingualJekyllResumeTheme::ResumeValidator.new(dir).discover_languages.any?
|
|
72
|
+
end || "_data"
|
|
72
73
|
end
|
|
73
74
|
|
|
74
75
|
validator = BilingualJekyllResumeTheme::ResumeValidator.new(
|
data/docs/ACCESSIBILITY_GUIDE.md
CHANGED
|
@@ -127,7 +127,7 @@ Run the automated build and verify accessibility attributes:
|
|
|
127
127
|
|
|
128
128
|
```bash
|
|
129
129
|
# Build static site
|
|
130
|
-
bundle exec jekyll build --
|
|
130
|
+
bundle exec jekyll build --source demo --destination _site
|
|
131
131
|
|
|
132
132
|
# Verify skip link presence
|
|
133
133
|
grep -q 'class="skip-link' _site/index.html && echo "Skip link verified."
|
data/docs/COMPLETED_AUDIT.md
CHANGED
|
@@ -1,47 +1,20 @@
|
|
|
1
1
|
# Completed Historical Remediation & Engineering Audit Log
|
|
2
2
|
|
|
3
3
|
**Project:** `bilingual-jekyll-resume-theme`
|
|
4
|
-
**Current Release:** `v1.0.
|
|
4
|
+
**Current Release:** `v1.0.1` (Audited Baseline: `v0.7.0`)
|
|
5
5
|
**Milestone:** M1 Completed Audit Archival
|
|
6
6
|
**Audit Date:** September 2026
|
|
7
7
|
**Master Active Roadmap:** [`/FEATURE_ROADMAP.md`](../FEATURE_ROADMAP.md)
|
|
8
|
-
**Status:** Permanent Historical Record.
|
|
8
|
+
**Status:** Permanent Historical Record. All foundation items, completed features, and release deliverables are verified in git history and documented in this audit archive.
|
|
9
9
|
|
|
10
10
|
---
|
|
11
11
|
|
|
12
12
|
## 1. Executive Summary & Audit Overview
|
|
13
13
|
|
|
14
|
-
This document provides the definitive, permanent engineering record of all **
|
|
14
|
+
This document provides the definitive, permanent engineering record of all **bug fixes, security hardenings, data resilience enhancements, accessibility upgrades, and architectural feature deliverables** completed across the `bilingual-jekyll-resume-theme` repository. It serves as the immutable historical record of foundation remediations and completed features across releases.
|
|
15
15
|
|
|
16
16
|
To maintain strict hygiene in the active roadmap and eliminate document drift across planning cycles, completed items have been permanently retired from the active roadmap phases and archived in this audit document. For the active, forward-looking engineering roadmap detailing upcoming uncompleted features across Priorities 1 through 4, refer to the authoritative master roadmap at [`/FEATURE_ROADMAP.md`](../FEATURE_ROADMAP.md).
|
|
17
17
|
|
|
18
|
-
### 1.1 Remediation Metrics & Completion Summary
|
|
19
|
-
|
|
20
|
-
| Scope Phase | Total Audited | Completed & Verified | Completion Rate | Releases Delivered |
|
|
21
|
-
|---|---|---|---|---|
|
|
22
|
-
| **Priority 0 (Immediate Stability, Correctness & Security)** | 16 | 16 | **100%** | `v0.4.0`, `v0.7.0` |
|
|
23
|
-
| **Priority 1 (Visual Enhancements & Quick Wins)** | 2 (P1.2, P1.4) | 2 | **100%** | `v0.7.0`, `v0.8.0` |
|
|
24
|
-
| **Priority 2 (Core Functional & Architecture)** | 3 (P2.4, P2.7, #216) | 3 | **100%** | `v0.7.0`, `v0.8.0` |
|
|
25
|
-
| **Total Completed Engineering Deliverables** | **21** | **21** | **100%** | `v0.4.0` – `v0.8.0` |
|
|
26
|
-
| **v1.0.0 Roadmap Features (1.7, 2.8, 4.1, 4.6)** | 4 | 4 | **100%** | `v1.0.0` (on `feature/extended-multilingual-v1.0.0`, unreleased) |
|
|
27
|
-
|
|
28
|
-
### 1.2 Categorical Remediation Distribution
|
|
29
|
-
|
|
30
|
-
```
|
|
31
|
-
+-------------------------------------------------------------+
|
|
32
|
-
| Category Distribution of 21 Completed Items |
|
|
33
|
-
+-------------------------------------------------------------+
|
|
34
|
-
| Bug / Logic Fixes: 4 items (P0.1, P0.2, P0.3, P0.9)
|
|
35
|
-
| Security & HTML Correctness: 2 items (P0.5, P0.7)
|
|
36
|
-
| Data Resilience & Optionality: 3 items (P0.13, P0.14, P0.15)
|
|
37
|
-
| Accessibility (WCAG 2.1/2.2): 3 items (P0.10, P1.4, P2.7)
|
|
38
|
-
| RTL & Internationalization: 4 items (P0.8, P0.11, P1.4, P1.2)
|
|
39
|
-
| Architecture & Navigation: 4 items (P0.4, P0.16, P2.4, #216)
|
|
40
|
-
| Asset Management & 404s: 1 item (P0.6)
|
|
41
|
-
| Governance & Versioning: 1 item (P0.12)
|
|
42
|
-
+-------------------------------------------------------------+
|
|
43
|
-
```
|
|
44
|
-
|
|
45
18
|
---
|
|
46
19
|
|
|
47
20
|
## 2. Master Completed Remediation Matrix
|
|
@@ -73,6 +46,10 @@ To maintain strict hygiene in the active roadmap and eliminate document drift ac
|
|
|
73
46
|
| **F2.8** | Header Contact Icon and Text Alignment in Arabic Layout | Issue [#217](https://github.com/kmutahar/bilingual-jekyll-resume-theme/issues/217) | RTL / a11y | `v1.0.0` | `315356972b326d9fcd5ff58e0208da9a2140116f` | `_layouts/resume-ar.html` (carried into `_layouts/resume.html`) |
|
|
74
47
|
| **F4.1** | Extended Multilingual Support (EN, AR, ES, FR, DE, UR) | Issue [#15](https://github.com/kmutahar/bilingual-jekyll-resume-theme/issues/15) | i18n / Architecture | `v1.0.0` | `54b40a4`, `3e840a7`, `5058532`, `c37df29`, `da2cd74`, `3f467fe`, `5188e96` | `_data/locales/*.yml`, `_layouts/resume.html`, `_includes/resume-section.html`, `_includes/date-formatter.html`, `_sass/_resume-ltr.scss`, `assets/css/cv-{ltr,rtl}.scss`, every locale consumer, `docs/_data/`, `docs/demo/` |
|
|
75
48
|
| **F4.6** | Deprecation Retirement & Legacy Fallbacks Cleanup | Issue [#214](https://github.com/kmutahar/bilingual-jekyll-resume-theme/issues/214) | Cleanup / Config | `v1.0.0` | `2c88adf75c915cb682634ac0c98a2211caedb101` | `_includes/avatar.html`, `_includes/analytics-head.html`, `_includes/resume-section.html` |
|
|
49
|
+
| **F3.2** | Automated CI/CD Build & Verification Pipeline | Issue [#206](https://github.com/kmutahar/bilingual-jekyll-resume-theme/issues/206) | CI/CD | `v1.0.0` | `3be935f` | `.github/workflows/ci.yml`, `.github/workflows/lint.yml`, `README.md` |
|
|
50
|
+
| **F3.3** | YAML Resume Data Validator & Schema Linter | Issue [#13](https://github.com/kmutahar/bilingual-jekyll-resume-theme/issues/13) | Tooling / Quality | `v1.0.0` | `3be935f` | `bin/validate-resume`, `lib/bilingual-jekyll-resume-theme/resume_validator.rb`, `_plugins/resume_validator.rb`, `docs/VALIDATION_GUIDE.md`, `test/test_resume_validator.rb` |
|
|
51
|
+
| **F2.11** | Pin Language-Switcher/Dark-Mode-Toggle to Fixed Corners (Remove RTL Mirror) | Issue [#227](https://github.com/kmutahar/bilingual-jekyll-resume-theme/issues/227) | Layout / RTL | `v1.0.1` | `305408c` | `_sass/_layout.scss`, `_sass/_dark-mode.scss`, `_sass/_resume-rtl.scss`, `test/test_language_switcher.rb`, `docs/INCLUDES_GUIDE.md` |
|
|
52
|
+
| **F2.12** | Dropdown Language Switcher (Replace Per-Language Button Row) | Issue [#228](https://github.com/kmutahar/bilingual-jekyll-resume-theme/issues/228) | i18n / a11y | `v1.0.1` | `f37c6f6` | `_includes/language-switcher.html`, `_sass/_layout.scss`, `test/test_language_switcher.rb`, `docs/INCLUDES_GUIDE.md`, `docs/ACCESSIBILITY_GUIDE.md`, `docs/PROJECT_OVERVIEW.md` |
|
|
76
53
|
|
|
77
54
|
---
|
|
78
55
|
|
|
@@ -603,9 +580,9 @@ To maintain strict hygiene in the active roadmap and eliminate document drift ac
|
|
|
603
580
|
|
|
604
581
|
---
|
|
605
582
|
|
|
606
|
-
## 5. v1.0.0 Delivered Features (1.7, 2.8, 4.1, 4.6)
|
|
583
|
+
## 5. v1.0.0 Delivered Features (1.7, 2.8, 3.2, 3.3, 4.1, 4.6)
|
|
607
584
|
|
|
608
|
-
The v1.0.0 multilingual release was executed on branch `feature/extended-multilingual-v1.0.0` from an implementation plan that has since been retired; this section, [`../CHANGELOG.md`](../CHANGELOG.md), and [`MULTILINGUAL_GUIDE.md`](MULTILINGUAL_GUIDE.md) are its permanent record. v1.0.0 is a hard break with no compatibility aliases; the full removed-to-replacement table is in [`MULTILINGUAL_GUIDE.md`](MULTILINGUAL_GUIDE.md#breaking-changes--migration-v090-to-v100).
|
|
585
|
+
The v1.0.0 multilingual release was executed on branch `feature/extended-multilingual-v1.0.0` from an implementation plan that has since been retired; this section, [`../CHANGELOG.md`](../CHANGELOG.md), and [`MULTILINGUAL_GUIDE.md`](MULTILINGUAL_GUIDE.md) are its permanent record. v1.0.0 is a hard break with no compatibility aliases; the full removed-to-replacement table is in [`MULTILINGUAL_GUIDE.md`](MULTILINGUAL_GUIDE.md#breaking-changes--migration-v090-to-v100). All deliverables, including the CI/CD pipeline (#206) and the validator (#13), are verified live and permanently archived here.
|
|
609
586
|
|
|
610
587
|
### 5.1 Feature 1.7: Native Email Support in Social Links Include (#215)
|
|
611
588
|
|
|
@@ -638,35 +615,65 @@ The v1.0.0 multilingual release was executed on branch `feature/extended-multili
|
|
|
638
615
|
- **Delivered:** Removed the `site.avatar` fallback from `_includes/avatar.html`, the `analytics.ga` Universal Analytics branch from `_includes/analytics-head.html`, and the singular `resume_section.recognition` fallback (dropped in `_includes/resume-section.html`). Confirmed `site.resume_dark_mode` and `site.resume_header_intro` have no remaining references.
|
|
639
616
|
- **Commit:** `2c88adf75c915cb682634ac0c98a2211caedb101` (`chore(cleanup): purge deprecated site.avatar, analytics.ga, and resume_dark_mode fallbacks`).
|
|
640
617
|
|
|
618
|
+
### 5.5 Feature 3.2: Automated CI/CD Build & Verification Pipeline (#206)
|
|
619
|
+
|
|
620
|
+
- **Problem:** Absence of automated continuous integration allowed invalid front-matter, broken YAML data, or gem specification packaging defects to reach consumers unnoticed.
|
|
621
|
+
- **Delivered:** Configured `.github/workflows/ci.yml` matrix testing across modern Ruby releases (3.3, 3.4, 4.0), strict Jekyll demo build, RuboCop, unit test execution, and gem packaging verification. Added `.github/workflows/lint.yml` and CI status badge to `README.md`.
|
|
622
|
+
- **Commit:** `3be935f` (carried in from `feature/resume-validator-ecosystem`, verified live on PR #220).
|
|
623
|
+
|
|
624
|
+
### 5.6 Feature 3.3: YAML Resume Data Validator & Schema Linter (#13)
|
|
625
|
+
|
|
626
|
+
- **Problem:** Non-technical user errors in YAML syntax (missing fields, wrong data types, malformed dates, cross-locale file asymmetries) resulted in cryptic Liquid build failures.
|
|
627
|
+
- **Delivered:** Standalone CLI tool `bin/validate-resume` and core engine `lib/bilingual-jekyll-resume-theme/resume_validator.rb` validating all 13 standard resume files, date formats, active flags, and multi-locale parity. Includes build-time Jekyll plugin `_plugins/resume_validator.rb`, Rake task `rake validate`, comprehensive guide `docs/VALIDATION_GUIDE.md`, and full Minitest suite `test/test_resume_validator.rb`.
|
|
628
|
+
- **Commit:** `3be935f` (carried in from `feature/resume-validator-ecosystem`, verified live on PR #220).
|
|
629
|
+
|
|
630
|
+
---
|
|
631
|
+
|
|
632
|
+
## 6. v1.0.1 Delivered Features (2.11, 2.12)
|
|
633
|
+
|
|
634
|
+
The v1.0.1 maintenance release addressed two visual widget improvements scoped together before v1.0.0. Both were verified against live LTR and RTL builds and merged directly into `master`.
|
|
635
|
+
|
|
636
|
+
### 6.1 Feature 2.11: Pin Language-Switcher/Dark-Mode-Toggle to Fixed Corners (#227)
|
|
637
|
+
|
|
638
|
+
- **Problem:** `.language-switcher` and `.dark-mode-toggle` previously swapped top-left/top-right corners based on `locale.direction`, with mirror rules duplicated across `_sass/_layout.scss`, `_sass/_dark-mode.scss`, and `_sass/_resume-rtl.scss`.
|
|
639
|
+
- **Delivered:** Pinned `.language-switcher` fixed to top-left and `.dark-mode-toggle` fixed to top-right across all locales (LTR and RTL), removing all three RTL override locations. Verified against live `ar/cv/` and `ur/cv/` builds at desktop and mobile widths confirming no collision with right-aligned Arabic header titles.
|
|
640
|
+
- **Commit:** `305408c8885c194ad71d88831179b287d4a10ec3` (`feat(layout): pin language-switcher/dark-mode-toggle to fixed corners (Closes #227)`).
|
|
641
|
+
|
|
642
|
+
### 6.2 Feature 2.12: Dropdown Language Switcher (#228)
|
|
643
|
+
|
|
644
|
+
- **Problem:** `_includes/language-switcher.html` rendered one button per configured language in a flat row, taking excessive horizontal space and wrapping across multiple rows on mobile screens as locales increased.
|
|
645
|
+
- **Delivered:** Replaced the button row with a semantic `<details>/<summary>` disclosure element wrapping a `<nav>` landmark of per-language links with zero new JavaScript. Preserves full no-JS graceful degradation, keyboard navigation (Tab, Enter/Space, Esc), and accessible screen-reader states.
|
|
646
|
+
- **Commit:** `f37c6f6b410f5de4841ed36115db60408c805293` (`feat(i18n): replace language-switcher button row with a dropdown (Closes #228)`).
|
|
647
|
+
|
|
641
648
|
---
|
|
642
649
|
|
|
643
|
-
##
|
|
650
|
+
## 7. Verification Protocols & Independent Audit Attestation
|
|
644
651
|
|
|
645
652
|
The following independent verification commands confirm the integrity of the codebase following the completion of all 18 remediation tasks:
|
|
646
653
|
|
|
647
|
-
###
|
|
654
|
+
### 7.1 RubyGem Packaging Verification
|
|
648
655
|
```bash
|
|
649
656
|
gem build bilingual-jekyll-resume-theme.gemspec
|
|
650
657
|
```
|
|
651
658
|
*Passing Result:* Successfully built RubyGem `bilingual-jekyll-resume-theme-0.7.0.gem` with zero packaging errors. All new files (`404.html`, `403.html`, `500.html`, `_layouts/error.html`, `_data/error_pages.yml`, `_includes/avatar.html`) are verified in the gem manifest.
|
|
652
659
|
|
|
653
|
-
###
|
|
660
|
+
### 7.2 Liquid Syntax & Template Tag Inspection
|
|
654
661
|
All modified templates (`_layouts/resume-ar.html`, `_layouts/resume-en.html`, `_layouts/default.html`, `_layouts/error.html`, `_includes/analytics-body.html`, `_includes/analytics-head.html`, `_includes/avatar.html`, `_includes/resume-section-*.html`, `_includes/shared-head.html`, `_includes/social-links.html`, `_includes/print-social-links.html`) contain valid, balanced Liquid tags and conform to Jekyll 3.9+ / 4.x standards.
|
|
655
662
|
|
|
656
|
-
###
|
|
663
|
+
### 7.3 WCAG 2.1 AA Accessibility Attestation
|
|
657
664
|
- All social links contain `aria-label`, `title`, and visually-hidden `<span class="sr-only">` text.
|
|
658
665
|
- All SVG icons contain `aria-hidden="true" focusable="false"`.
|
|
659
666
|
- Avatar image component includes bilingual fallback alt text, Schema.org `itemprop="image"`, and accessible link targets.
|
|
660
667
|
|
|
661
|
-
###
|
|
668
|
+
### 7.4 RTL & Bidirectional Text Isolation Attestation
|
|
662
669
|
- Arabic templates enforce `dir="rtl"` root direction with `<span dir="ltr">` isolation for telephone links, URLs, and printed social links.
|
|
663
670
|
- Arabic Google Font Cairo loads reliably across all themes and custom palettes with preconnect hints.
|
|
664
671
|
|
|
665
672
|
---
|
|
666
673
|
|
|
667
|
-
##
|
|
674
|
+
## 8. Closed Redundant Duplicate Issues Registry & Root Cause Analysis
|
|
668
675
|
|
|
669
|
-
###
|
|
676
|
+
### 8.1 Duplicate Creation Root Cause Analysis (RCA)
|
|
670
677
|
|
|
671
678
|
Between `2026-09-12T11:37:00Z` and `2026-09-12T12:10:49Z`, an automated script executed 13 successive batch sweeps across the repository issue tracker. In each cycle, a batch of 14 items was generated:
|
|
672
679
|
1. 11 remediation items corresponding to Phase 0 bug fixes (P0.1–P0.11): immediately closed upon creation.
|
|
@@ -681,9 +688,9 @@ Because 13 successive batch runs were triggered, 13 identical copies of the Soci
|
|
|
681
688
|
|
|
682
689
|
The 13th batch produced `#204` and `#206`, which are designated as the **canonical active open issues** in [`/FEATURE_ROADMAP.md`](../FEATURE_ROADMAP.md). All preceding 24 issues were formally closed on GitHub using GitHub's native `state_reason: "duplicate"` linking to `#204` and `#206`, preceded by an explanatory cross-reference comment.
|
|
683
690
|
|
|
684
|
-
###
|
|
691
|
+
### 8.2 Social Media Platform Closed Duplicates
|
|
685
692
|
|
|
686
|
-
|
|
693
|
+
The duplicate issues share the title `"Expand Social Media Platforms (Mastodon, Discord, Bluesky, etc.)"`, labels `["enhancement", "phase-1"]`, and milestone `"Phase 1 (Quick Wins - 1-2 weeks)"`.
|
|
687
694
|
|
|
688
695
|
| Issue # | Title | Created (UTC) | Closed (UTC) | Status | Canonical Reference | Resolution Details |
|
|
689
696
|
|---|---|---|---|---|---|---|
|
|
@@ -700,9 +707,9 @@ All 12 duplicate issues share the title `"Expand Social Media Platforms (Mastodo
|
|
|
700
707
|
| [#176](https://github.com/kmutahar/bilingual-jekyll-resume-theme/issues/176) | Expand Social Media Platforms | 2026-09-12T12:05:43Z | 2026-09-12T14:06:23Z | `CLOSED (duplicate)` | [#204](https://github.com/kmutahar/bilingual-jekyll-resume-theme/issues/204) | Closed via GitHub API with cross-reference comment to #204 |
|
|
701
708
|
| [#190](https://github.com/kmutahar/bilingual-jekyll-resume-theme/issues/190) | Expand Social Media Platforms | 2026-09-12T12:08:26Z | 2026-09-12T14:06:35Z | `CLOSED (duplicate)` | [#204](https://github.com/kmutahar/bilingual-jekyll-resume-theme/issues/204) | Closed via GitHub API with cross-reference comment to #204 |
|
|
702
709
|
|
|
703
|
-
###
|
|
710
|
+
### 8.3 CI/CD Pipeline Closed Duplicates
|
|
704
711
|
|
|
705
|
-
|
|
712
|
+
The duplicate issues share the title `"Automated CI/CD Build & Verification Pipeline"`, labels `["enhancement", "phase-3"]`, and milestone `"Phase 3 (Long-term - 2-3 months)"`.
|
|
706
713
|
|
|
707
714
|
| Issue # | Title | Created (UTC) | Closed (UTC) | Status | Canonical Reference | Resolution Details |
|
|
708
715
|
|---|---|---|---|---|---|---|
|
|
@@ -719,7 +726,7 @@ All 12 duplicate issues share the title `"Automated CI/CD Build & Verification P
|
|
|
719
726
|
| [#178](https://github.com/kmutahar/bilingual-jekyll-resume-theme/issues/178) | Automated CI/CD Build & Pipeline | 2026-09-12T12:05:54Z | 2026-09-12T14:08:45Z | `CLOSED (duplicate)` | [#206](https://github.com/kmutahar/bilingual-jekyll-resume-theme/issues/206) | Closed via GitHub API with cross-reference comment to #206 |
|
|
720
727
|
| [#192](https://github.com/kmutahar/bilingual-jekyll-resume-theme/issues/192) | Automated CI/CD Build & Pipeline | 2026-09-12T12:08:37Z | 2026-09-12T14:08:57Z | `CLOSED (duplicate)` | [#206](https://github.com/kmutahar/bilingual-jekyll-resume-theme/issues/206) | Closed via GitHub API with cross-reference comment to #206 |
|
|
721
728
|
|
|
722
|
-
###
|
|
729
|
+
### 8.4 Closing Comment Audit Trail
|
|
723
730
|
|
|
724
731
|
Each duplicate issue received a courteous explanatory comment before closure on GitHub:
|
|
725
732
|
- **Social Media Comment:**
|
|
@@ -733,7 +740,7 @@ Each duplicate issue received a courteous explanatory comment before closure on
|
|
|
733
740
|
|
|
734
741
|
---
|
|
735
742
|
|
|
736
|
-
##
|
|
743
|
+
## 9. Pull Requests & Ancillary GitHub Records
|
|
737
744
|
|
|
738
745
|
| PR # | Status | Title | Description | Resolution |
|
|
739
746
|
|---|---|---|---|---|
|
data/docs/CONFIG_GUIDE.md
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# Configuration Guide (`_config.yml`)
|
|
2
2
|
|
|
3
|
-
Every setting the theme reads from a consuming site's `_config.yml`. The annotated master copy is [`
|
|
3
|
+
Every setting the theme reads from a consuming site's `_config.yml`. The annotated master copy is [`_config.sample.yml`](../_config.sample.yml); when this guide and that file disagree, the sample file is the one the build uses.
|
|
4
4
|
|
|
5
5
|
Per-language settings (name, title, address, data path, URL) live under `languages.<lang>`. Direction, fonts, and UI strings are not config at all: they come from `_data/locales/<lang>.yml` (see [`MULTILINGUAL_GUIDE.md`](MULTILINGUAL_GUIDE.md)). Upgrading from v0.9.0? The key-by-key migration table is in [`MULTILINGUAL_GUIDE.md`](MULTILINGUAL_GUIDE.md#breaking-changes--migration-v090-to-v100).
|
|
6
6
|
|
|
@@ -29,7 +29,7 @@ Per-language settings (name, title, address, data path, URL) live under `languag
|
|
|
29
29
|
## Quick Start
|
|
30
30
|
|
|
31
31
|
> [!TIP]
|
|
32
|
-
> Copy [`
|
|
32
|
+
> Copy [`_config.sample.yml`](../_config.sample.yml) to your site root as `_config.yml`. Starter resume data for six languages is available in the [`demo/_data/`](../demo/_data/) directory (`en`, `ar`, `es`, `fr`, `de`, `ur`).
|
|
33
33
|
>
|
|
34
34
|
> **System Requirements:** Ruby >= 3.3.0 (maintained on Ruby 3.3, 3.4, and 4.0) and Jekyll >= 4.4.0. Declare the gem inside `group :jekyll_plugins` in your `Gemfile`, or the error page generator and build-time validation never load.
|
|
35
35
|
|
data/docs/MULTILINGUAL_GUIDE.md
CHANGED
|
@@ -125,9 +125,9 @@ The validator builds each locale the same way (theme file, then site file deep-m
|
|
|
125
125
|
- Keep proper nouns consistent: transliterate them in non-Latin scripts and keep them as-is in Latin-script languages.
|
|
126
126
|
- Write dates as ISO (`YYYY-MM-DD`, `YYYY-MM`, or `YYYY`). Month names come from the locale file, so the data stays language-neutral.
|
|
127
127
|
- For ongoing roles, leave `enddate` blank or use any value from that locale's `present_values`.
|
|
128
|
-
- The Sherlock Holmes demo in [`_data/`](_data/) (`en`, `ar`, `es`, `fr`, `de`, `ur`) is a complete, parity-clean reference. Build it from the repository root with:
|
|
128
|
+
- The Sherlock Holmes demo in [`demo/_data/`](../demo/_data/) (`en`, `ar`, `es`, `fr`, `de`, `ur`) is a complete, parity-clean reference. Build it from the repository root with:
|
|
129
129
|
```bash
|
|
130
|
-
bundle exec jekyll build --
|
|
130
|
+
bundle exec jekyll build --source demo --destination _site
|
|
131
131
|
```
|
|
132
132
|
|
|
133
133
|
---
|
data/docs/PROJECT_OVERVIEW.md
CHANGED
|
@@ -52,16 +52,16 @@ Sections render in the order of `site.resume_section_order` through one dispatch
|
|
|
52
52
|
| Need / Task | Go To | Verification Method |
|
|
53
53
|
|---|---|---|
|
|
54
54
|
| Configure site settings, languages, avatar, or analytics | `_config.yml`, [`CONFIG_GUIDE.md`](CONFIG_GUIDE.md) | Demo build (below) |
|
|
55
|
-
| Add a language or change UI strings, fonts, or month names | `_data/locales/<lang>.yml`, [`MULTILINGUAL_GUIDE.md`](MULTILINGUAL_GUIDE.md) | `./bin/validate-resume
|
|
56
|
-
| Modify resume section data | `_data/<lang>/*.yml`, [`DATA_GUIDE.md`](DATA_GUIDE.md) | `./bin/validate-resume
|
|
55
|
+
| Add a language or change UI strings, fonts, or month names | `_data/locales/<lang>.yml`, [`MULTILINGUAL_GUIDE.md`](MULTILINGUAL_GUIDE.md) | `./bin/validate-resume demo/_data`, then inspect `_site/<lang>/cv/` |
|
|
56
|
+
| Modify resume section data | `_data/<lang>/*.yml`, [`DATA_GUIDE.md`](DATA_GUIDE.md) | `./bin/validate-resume demo/_data` |
|
|
57
57
|
| Customize error pages or return URLs | `_layouts/error.html`, `_plugins/error_pages_generator.rb`, `error_pages` in the locale files, [`LAYOUTS_GUIDE.md`](LAYOUTS_GUIDE.md) | Inspect `_site/404.html`, `_site/500.html` |
|
|
58
58
|
| Adjust dark mode colors or tokens | `_sass/_dark-mode.scss`, [`SASS_GUIDE.md`](SASS_GUIDE.md) | Inspect CSS variables on `:root` and `[data-theme="dark"]` |
|
|
59
59
|
| Adjust RTL mirroring | `_sass/_resume-rtl.scss`, [`SASS_GUIDE.md`](SASS_GUIDE.md) | Inspect `_site/ar/cv/` and `_site/ur/cv/` |
|
|
60
60
|
|
|
61
|
-
Demo build (renders the six-language Sherlock Holmes resume from `
|
|
61
|
+
Demo build (renders the six-language Sherlock Holmes resume from the `demo/` submodule):
|
|
62
62
|
|
|
63
63
|
```bash
|
|
64
|
-
bundle exec jekyll build --
|
|
64
|
+
bundle exec jekyll build --source demo --destination _site
|
|
65
65
|
```
|
|
66
66
|
|
|
67
67
|
---
|
|
@@ -144,12 +144,7 @@ bilingual-jekyll-resume-theme/
|
|
|
144
144
|
├── MULTILINGUAL_GUIDE.md # Locales, adding languages, v1.0.0 migration table
|
|
145
145
|
├── SASS_GUIDE.md # Styling system, tokens, RTL
|
|
146
146
|
├── VALIDATION_GUIDE.md # Validator, CLI, CI, proofing
|
|
147
|
-
|
|
148
|
-
├── demo/ # Six demo resume pages (layout: resume)
|
|
149
|
-
└── _data/
|
|
150
|
-
├── _config.sample.yml # Master sample configuration
|
|
151
|
-
├── _config.demo.yml # Demo overlay (data_dir: docs/_data, Sherlock Holmes persona)
|
|
152
|
-
└── en/ ar/ es/ fr/ de/ ur/ # Sherlock Holmes demo data, 13 files each
|
|
147
|
+
└── PROJECT_OVERVIEW.md # This file
|
|
153
148
|
```
|
|
154
149
|
|
|
155
150
|
---
|
|
@@ -169,4 +164,4 @@ bilingual-jekyll-resume-theme/
|
|
|
169
164
|
| **Completed Audit** | [`COMPLETED_AUDIT.md`](COMPLETED_AUDIT.md) | Historical record of completed fixes and features |
|
|
170
165
|
| **Master AI Manual** | [`../AGENTS.md`](../AGENTS.md) | Operating rules for AI agents |
|
|
171
166
|
| **Feature Roadmap** | [`../FEATURE_ROADMAP.md`](../FEATURE_ROADMAP.md) | Active feature blueprints, issue mappings, Delete-Zone |
|
|
172
|
-
| **Sample Config** | [
|
|
167
|
+
| **Sample Config** | [`../_config.sample.yml`](../_config.sample.yml) | Annotated configuration for consuming sites |
|
data/docs/VALIDATION_GUIDE.md
CHANGED
|
@@ -66,14 +66,14 @@ The gem installs `validate-resume` as an executable. In a consuming site run it
|
|
|
66
66
|
bundle exec validate-resume # auto-detects the data directory
|
|
67
67
|
bundle exec validate-resume _data # explicit data directory
|
|
68
68
|
bundle exec validate-resume _data -c _config.yml # explicit config
|
|
69
|
-
./bin/validate-resume
|
|
69
|
+
./bin/validate-resume demo/_data # this repository's six-language demo
|
|
70
70
|
```
|
|
71
71
|
|
|
72
|
-
With no `DATA_DIR`, the CLI uses the first of `_data` and `
|
|
72
|
+
With no `DATA_DIR`, the CLI uses the first of `_data` and `demo/_data` that contains at least one language folder, else `_data`. A positional `DATA_DIR` wins over `-d`.
|
|
73
73
|
|
|
74
74
|
| Flag | Long flag | Description | Default |
|
|
75
75
|
|---|---|---|---|
|
|
76
|
-
| `-d DIR` | `--dir DIR` | Data directory | `_data` or `
|
|
76
|
+
| `-d DIR` | `--dir DIR` | Data directory | `_data` or `demo/_data` |
|
|
77
77
|
| `-c FILE` | `--config FILE` | Jekyll config that declares `languages:` | First config found next to the data directory ([section 2](#2-how-languages-and-locales-are-resolved)) |
|
|
78
78
|
| `-l LANGS` | `--languages LANGS` | Comma-separated languages to validate; overrides the config | The config's `languages:` |
|
|
79
79
|
| `-a` | `--all-locales` | Also validate every language folder found by directory scan | off |
|
|
@@ -90,7 +90,7 @@ Exit codes: `0` when there are no errors (and no warnings under `-w`), `1` other
|
|
|
90
90
|
## 4. Rake Task (`rake validate`)
|
|
91
91
|
|
|
92
92
|
```bash
|
|
93
|
-
bundle exec rake validate # _data if _data/en exists, else
|
|
93
|
+
bundle exec rake validate # _data if _data/en exists, else demo/_data
|
|
94
94
|
bundle exec rake "validate[path/to/_data]"
|
|
95
95
|
```
|
|
96
96
|
|
|
@@ -193,7 +193,7 @@ Add the scheme, for example `https://github.com/user`.
|
|
|
193
193
|
|
|
194
194
|
This repository runs the validator (and the template key checker, [section 11](#11-template-key-checker-check-data-keys)) in two workflows:
|
|
195
195
|
|
|
196
|
-
- [`.github/workflows/lint.yml`](../.github/workflows/lint.yml): `./bin/validate-resume
|
|
196
|
+
- [`.github/workflows/lint.yml`](../.github/workflows/lint.yml): `./bin/validate-resume demo/_data --fail-on-warnings`, `rake validate[demo/_data]`, `./bin/check-data-keys demo/_data`, `rake check_data_keys[demo/_data]`, a gemspec executable check, and RuboCop.
|
|
197
197
|
- [`.github/workflows/ci.yml`](../.github/workflows/ci.yml): gem packaging, a strict Jekyll build, built-HTML proofing, both checkers, and the unit tests across Ruby 3.3, 3.4, and 4.0.
|
|
198
198
|
|
|
199
199
|
A consuming site can run the same check on every push:
|
|
@@ -222,7 +222,7 @@ Two development-only Rake tasks complement the data validator. Their gems are de
|
|
|
222
222
|
|
|
223
223
|
```bash
|
|
224
224
|
# Dead internal links, broken #anchors, missing images/favicons, hreflang/canonical targets.
|
|
225
|
-
bundle exec jekyll build --
|
|
225
|
+
bundle exec jekyll build --source demo --destination _site
|
|
226
226
|
bundle exec rake proof # proofs ./_site
|
|
227
227
|
|
|
228
228
|
# Proof a consuming site (config auto-detected next to its _site/, or passed explicitly):
|
|
@@ -246,15 +246,15 @@ bundle exec rake rubocop
|
|
|
246
246
|
Because "known keys" are derived from whatever the checked sample data actually contains, a field a template correctly references but that no language in the checked data happens to exercise (an optional field, e.g. `education.yml`'s `awards` list) will warn even though nothing is wrong. For this reason `check-data-keys` **never defaults to `--fail-on-warnings` in this repository's Rake task or CI steps**, unlike `validate-resume`. Warnings are printed and worth reading, but a warning alone does not mean the template is broken — cross-check against the field before "fixing" it.
|
|
247
247
|
|
|
248
248
|
```bash
|
|
249
|
-
./bin/check-data-keys
|
|
250
|
-
./bin/check-data-keys
|
|
251
|
-
bundle exec rake check_data_keys #
|
|
249
|
+
./bin/check-data-keys demo/_data # this repository's six-language demo (the default target)
|
|
250
|
+
./bin/check-data-keys demo/_data --fail-on-warnings # opt into strict mode yourself, once you trust your data's coverage
|
|
251
|
+
bundle exec rake check_data_keys # demo/_data by default
|
|
252
252
|
bundle exec rake "check_data_keys[path/to/_data]"
|
|
253
253
|
```
|
|
254
254
|
|
|
255
255
|
| Flag | Long flag | Description | Default |
|
|
256
256
|
|---|---|---|---|
|
|
257
|
-
| `-d DIR` | `--dir DIR` | Data directory | `_data` or `
|
|
257
|
+
| `-d DIR` | `--dir DIR` | Data directory | `_data` or `demo/_data` |
|
|
258
258
|
| `-c FILE` | `--config FILE` | Jekyll config that declares `languages:` | First config found next to the data directory ([section 2](#2-how-languages-and-locales-are-resolved)) |
|
|
259
259
|
| `-w` | `--fail-on-warnings` | Exit 1 on warnings | off |
|
|
260
260
|
| `-v` | `--verbose` | Verbose output | off |
|
|
@@ -62,7 +62,7 @@ module BilingualJekyllResumeTheme
|
|
|
62
62
|
# template_root: overrides where _layouts/_includes are scanned from (default:
|
|
63
63
|
# this gem's own root). Exists so tests can point the Liquid-tracing logic at
|
|
64
64
|
# synthetic fixture templates instead of the theme's real ones.
|
|
65
|
-
def initialize(data_dir = "
|
|
65
|
+
def initialize(data_dir = "_data", config_path: nil, config: nil, template_root: THEME_ROOT)
|
|
66
66
|
@data_dir = data_dir.to_s.chomp("/")
|
|
67
67
|
@config_path = config_path
|
|
68
68
|
@config = config
|
metadata
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: bilingual-jekyll-resume-theme
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 1.0.
|
|
4
|
+
version: 1.0.2
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Khaldoon Mutahar
|
|
@@ -178,6 +178,7 @@ files:
|
|
|
178
178
|
- CODE_OF_CONDUCT.md
|
|
179
179
|
- LICENSE.txt
|
|
180
180
|
- README.md
|
|
181
|
+
- _config.sample.yml
|
|
181
182
|
- _data/locales/ar.yml
|
|
182
183
|
- _data/locales/de.yml
|
|
183
184
|
- _data/locales/en.yml
|
|
@@ -256,93 +257,6 @@ files:
|
|
|
256
257
|
- docs/PROJECT_OVERVIEW.md
|
|
257
258
|
- docs/SASS_GUIDE.md
|
|
258
259
|
- docs/VALIDATION_GUIDE.md
|
|
259
|
-
- docs/_data/_config.demo.yml
|
|
260
|
-
- docs/_data/_config.sample.yml
|
|
261
|
-
- docs/_data/ar/associations.yml
|
|
262
|
-
- docs/_data/ar/certifications.yml
|
|
263
|
-
- docs/_data/ar/courses.yml
|
|
264
|
-
- docs/_data/ar/education.yml
|
|
265
|
-
- docs/_data/ar/experience.yml
|
|
266
|
-
- docs/_data/ar/header.yml
|
|
267
|
-
- docs/_data/ar/interests.yml
|
|
268
|
-
- docs/_data/ar/languages.yml
|
|
269
|
-
- docs/_data/ar/links.yml
|
|
270
|
-
- docs/_data/ar/projects.yml
|
|
271
|
-
- docs/_data/ar/recognitions.yml
|
|
272
|
-
- docs/_data/ar/skills.yml
|
|
273
|
-
- docs/_data/ar/volunteering.yml
|
|
274
|
-
- docs/_data/de/associations.yml
|
|
275
|
-
- docs/_data/de/certifications.yml
|
|
276
|
-
- docs/_data/de/courses.yml
|
|
277
|
-
- docs/_data/de/education.yml
|
|
278
|
-
- docs/_data/de/experience.yml
|
|
279
|
-
- docs/_data/de/header.yml
|
|
280
|
-
- docs/_data/de/interests.yml
|
|
281
|
-
- docs/_data/de/languages.yml
|
|
282
|
-
- docs/_data/de/links.yml
|
|
283
|
-
- docs/_data/de/projects.yml
|
|
284
|
-
- docs/_data/de/recognitions.yml
|
|
285
|
-
- docs/_data/de/skills.yml
|
|
286
|
-
- docs/_data/de/volunteering.yml
|
|
287
|
-
- docs/_data/en/associations.yml
|
|
288
|
-
- docs/_data/en/certifications.yml
|
|
289
|
-
- docs/_data/en/courses.yml
|
|
290
|
-
- docs/_data/en/education.yml
|
|
291
|
-
- docs/_data/en/experience.yml
|
|
292
|
-
- docs/_data/en/header.yml
|
|
293
|
-
- docs/_data/en/interests.yml
|
|
294
|
-
- docs/_data/en/languages.yml
|
|
295
|
-
- docs/_data/en/links.yml
|
|
296
|
-
- docs/_data/en/projects.yml
|
|
297
|
-
- docs/_data/en/recognitions.yml
|
|
298
|
-
- docs/_data/en/skills.yml
|
|
299
|
-
- docs/_data/en/volunteering.yml
|
|
300
|
-
- docs/_data/es/associations.yml
|
|
301
|
-
- docs/_data/es/certifications.yml
|
|
302
|
-
- docs/_data/es/courses.yml
|
|
303
|
-
- docs/_data/es/education.yml
|
|
304
|
-
- docs/_data/es/experience.yml
|
|
305
|
-
- docs/_data/es/header.yml
|
|
306
|
-
- docs/_data/es/interests.yml
|
|
307
|
-
- docs/_data/es/languages.yml
|
|
308
|
-
- docs/_data/es/links.yml
|
|
309
|
-
- docs/_data/es/projects.yml
|
|
310
|
-
- docs/_data/es/recognitions.yml
|
|
311
|
-
- docs/_data/es/skills.yml
|
|
312
|
-
- docs/_data/es/volunteering.yml
|
|
313
|
-
- docs/_data/fr/associations.yml
|
|
314
|
-
- docs/_data/fr/certifications.yml
|
|
315
|
-
- docs/_data/fr/courses.yml
|
|
316
|
-
- docs/_data/fr/education.yml
|
|
317
|
-
- docs/_data/fr/experience.yml
|
|
318
|
-
- docs/_data/fr/header.yml
|
|
319
|
-
- docs/_data/fr/interests.yml
|
|
320
|
-
- docs/_data/fr/languages.yml
|
|
321
|
-
- docs/_data/fr/links.yml
|
|
322
|
-
- docs/_data/fr/projects.yml
|
|
323
|
-
- docs/_data/fr/recognitions.yml
|
|
324
|
-
- docs/_data/fr/skills.yml
|
|
325
|
-
- docs/_data/fr/volunteering.yml
|
|
326
|
-
- docs/_data/ur/associations.yml
|
|
327
|
-
- docs/_data/ur/certifications.yml
|
|
328
|
-
- docs/_data/ur/courses.yml
|
|
329
|
-
- docs/_data/ur/education.yml
|
|
330
|
-
- docs/_data/ur/experience.yml
|
|
331
|
-
- docs/_data/ur/header.yml
|
|
332
|
-
- docs/_data/ur/interests.yml
|
|
333
|
-
- docs/_data/ur/languages.yml
|
|
334
|
-
- docs/_data/ur/links.yml
|
|
335
|
-
- docs/_data/ur/projects.yml
|
|
336
|
-
- docs/_data/ur/recognitions.yml
|
|
337
|
-
- docs/_data/ur/skills.yml
|
|
338
|
-
- docs/_data/ur/volunteering.yml
|
|
339
|
-
- docs/assets/images/sherlock-holmes.jpg
|
|
340
|
-
- docs/demo/ar.md
|
|
341
|
-
- docs/demo/de.md
|
|
342
|
-
- docs/demo/en.md
|
|
343
|
-
- docs/demo/es.md
|
|
344
|
-
- docs/demo/fr.md
|
|
345
|
-
- docs/demo/ur.md
|
|
346
260
|
- lib/bilingual-jekyll-resume-theme.rb
|
|
347
261
|
- lib/bilingual-jekyll-resume-theme/resume_validator.rb
|
|
348
262
|
- lib/bilingual-jekyll-resume-theme/template_key_checker.rb
|