Skip to content

Commit eb185b1

Browse files
committed
Merge upstream/master and resolve conflicts
Signed-off-by: Heby T Paul <hebytpaul1111@gmail.com>
2 parents e8d06d4 + 2c04dba commit eb185b1

3 files changed

Lines changed: 151 additions & 101 deletions

File tree

Lines changed: 6 additions & 0 deletions
Loading

Makefile

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,6 @@ include .github/build/Makefile.show-help.mk
1818
#----------------------------------------------------------------------------
1919
# Academy
2020
# ---------------------------------------------------------------------------
21-
.PHONY: setup check-deps check-go build build-preview site serve clean theme-update
2221

2322
## ------------------------------------------------------------
2423
----LOCAL_BUILDS: Show help for available targets
@@ -56,6 +55,17 @@ clean:
5655
$(MAKE) setup
5756
$(MAKE) site
5857

58+
## Fix Markdown linting issues
59+
lint-fix:
60+
@echo "Checking for markdownlint-cli2..."
61+
@command -v markdownlint-cli2 > /dev/null || { \
62+
echo "markdownlint-cli2 not found. Attempting to install globally..."; \
63+
command -v npm > /dev/null || { echo "npm is not installed. Please install Node.js/npm and re-run 'make lint-fix'."; exit 1; }; \
64+
npm install -g markdownlint-cli2; \
65+
}
66+
@echo "Running markdownlint-cli2 --fix..."
67+
@markdownlint-cli2 --fix "**/*.md" "#node_modules" "#public" "#resources"
68+
5969
## ------------------------------------------------------------
6070
----MAINTENANCE: Show help for available targets
6171

@@ -68,3 +78,5 @@ check-go:
6878
theme-update: check-deps check-go
6979
@echo "Updating to latest academy-theme..."
7080
npm run update:theme
81+
82+
.PHONY: setup check-deps check-go build build-preview site serve clean lint-fix theme-update

README.md

Lines changed: 132 additions & 100 deletions
Original file line numberDiff line numberDiff line change
@@ -2,18 +2,26 @@
22
<img src=".github/assets/images/meshery-logo-dark-text-side.svg" width="70%" /> <br />
33
<img src="https://img.shields.io/badge/Meshery-Academy-00B39F?style=flat-square&logo=meshery&logoColor=white" />
44
<img alt="GitHub go.mod Go version" src="https://img.shields.io/github/go-mod/go-version/meshery-extensions/meshery-academy">
5-
5+
<img alt="Hugo" src="https://img.shields.io/badge/Hugo-Framework-FF4088?logo=hugo&logoColor=white">
66
</div>
77

8-
# Meshery Academy
8+
<h1><img src=".github/assets/images/meshery-academy-light.svg" alt="Meshery Academy" height="32px" valign="top" /> Meshery Academy</h1>
99

10-
This repo is the official content repository for the Meshery Academy, which can be run stand-alone and alongside your Meshery deployment(s) for an integrated learning experience. This academy contains learning paths, challenges, and certifications, helping engineers learn how to manage cloud-native infrastructure with Meshery.
10+
This repo is the official content repository for the Meshery Academy, which can be run stand-alone or alongside your Meshery deployment(s) for an integrated learning experience. This academy contains learning paths, challenges, and certifications, helping engineers learn how to manage cloud-native infrastructure with Meshery.
1111

12-
**[Academies as Meshery Extensions](https://docs.meshery.io/extensions/academies/)**
12+
<img src=".github/assets/images/meshery-academy-light.svg" alt="Meshery Academy" height="20px" valign="top" /> **[Academies as Meshery Extensions](https://docs.meshery.io/extensions/academies/)**
1313

1414
Academies are modular, Git-native learning management systems (LMS), which can be run stand-alone and/or as an extension of your Meshery deployment(s) for an integrated learning experience. Academies emphasize hands-on, cloud-native education (AI, Cloud, Kubernetes, CNCF projects, configuration and infrastructure management) through structured curricula, interactive Labs, embedded visualizations, and verifiable credentials.
1515

16-
---
16+
---
17+
18+
| | |
19+
|--------------|-------------|
20+
| **Purpose** | Primary source of Meshery learning content |
21+
| **Platform** | Runs stand-alone or alongside your Meshery deployment(s) |
22+
| **Authoring** | Markdown-based content with live local preview via Hugo |
23+
| **Content types** | Learning paths · Challenges · Certifications · Infrastructure designs |
24+
| **Org ID** | `c5ada327-8a58-4c8a-b9fa-51b95696488c` |
1725

1826
## 📚 Overview
1927

@@ -34,155 +42,150 @@ Academies are modular, Git-native learning management systems (LMS), which can b
3442

3543
## 🔗 Related Repositories
3644

37-
- [meshery/meshery](https://github.com/meshery/meshery) – Meshery core project
38-
- [meshery-extensions/meshery-academy](https://github.com/meshery-extensions/meshery-academy) – this repo
39-
- [meshery-extensions/digitalocean-academy](https://github.com/meshery-extensions/digitalocean-academy)
40-
- [meshery-extensions/tcslabs-academy](https://github.com/meshery-extensions/tcslabs-academy)
45+
- [meshery/meshery](https://github.com/meshery/meshery) – Meshery core project
46+
- [meshery-extensions/meshery-academy](https://github.com/meshery-extensions/meshery-academy) – this repo
47+
- [meshery-extensions/digitalocean-academy](https://github.com/meshery-extensions/digitalocean-academy)
48+
- [meshery-extensions/tcslabs-academy](https://github.com/meshery-extensions/tcslabs-academy)
4149

4250
---
4351

44-
## 🚀 Quick Start (Local Preview)
4552

46-
> Use the local preview is only needed while authoring content.
53+
## 🛠️ Prerequisites
4754

48-
1. **Install prerequisites**
55+
Before you begin, ensure you have the following installed:
4956

50-
- [Go](https://go.dev/dl/) ≥ 1.26
51-
- [Hugo Extended](https://gohugo.io/getting-started/installing/) ≥ 0.158 (required for `hugo.Sites` in offline search index; CI uses 0.158)
57+
| Tool | Version | Link |
58+
|------|---------|------|
59+
| **Go** | see go.mod| [Install Go](https://go.dev/doc/install) |
60+
| **Node.js / npm** | see package.json | [Install Node.js](https://nodejs.org/) |
61+
| **Git** | Latest | [Install Git](https://git-scm.com/) |
62+
63+
*(Note: Hugo Extended is managed locally via npm and does not need to be installed globally).*
64+
65+
---
66+
67+
## 🚀 Getting Started
68+
69+
### 1. Fork & Clone
70+
71+
```bash
72+
# Fork this repository on GitHub, then clone your fork
73+
git clone https://github.com/<your-username>/meshery-academy.git
74+
cd meshery-academy
75+
```
5276

53-
2. **Fetch dependencies and install local Hugo**
77+
### 2. Install Dependencies
5478

5579
```bash
56-
go mod tidy
5780
make setup
5881
```
5982

60-
3. **Run the local Hugo server**
83+
### 3. Run the Site Locally
84+
85+
_Preferred:_ Start the Hugo development server with drafts and future content enabled, using the Makefile target:
6186

6287
```bash
6388
make site
6489
```
6590

66-
*(This uses the locally installed `hugo-extended` version to prevent version conflicts).*
67-
68-
The local preview uses the academy-theme or any styling updates that you have made. When paired with a Remote Provider, academy content might be presented differently.
6991

70-
---
7192

72-
## Add Your Content
7393

74-
Now you're ready to create your learning path. The structure is: Learning Path → Course → Chapter → Lesson.
94+
The site will be available at `http://localhost:1313/academy/` (or the port shown in your terminal).
7595

76-
A high-level view of the structure looks like this:
96+
> **Note:** The local preview uses basic styling. Full Academy branding is applied after content is integrated into the cloud platform.
7797
78-
```text
79-
content/
80-
└── learning-paths/
81-
├── _index.md
82-
└── <organization-uid>/
83-
└── <learning-path>/
84-
├── _index.md
85-
└── <course-1>/
86-
└── <course-2>/
87-
├── _index.md
88-
└── content/
89-
└── lesson-1.md
90-
└── lesson-2.md
91-
```
98+
### 4. Other Useful Commands
9299

93-
- Create your folder structure following the hierarchy.
94-
- Add your lessons as Markdown (.md) files inside the content directory of a course.
95-
- Each `_index.md` and `lesson` file should begin with Hugo front-matter specifying title, description, and weight.
100+
| Command | Description |
101+
|---------|-------------|
102+
| `make setup` | Install npm dependencies |
103+
| `make site` | Build and run site locally with draft and future content enabled |
104+
| `make build` | Build the site for production |
105+
| `make build-preview` | Build site for preview draft and future content enabled (honors `BASEURL`) |
106+
| `make clean` | Clear build cache and restart the dev server |
107+
| `make lint-fix` | Fix Markdown linting issues with `markdownlint-cli2` |
108+
| `make check-go` | Verify Go is installed locally |
109+
| `make theme-update` | Update the `academy-theme` Hugo module to the latest version |
96110

97-
```yaml
98-
---
99-
title: "Title of Section"
100-
description: "One-liner summary"
101-
weight: 10 # for menu order, lower numbers appear first
102111
---
112+
113+
## 📁 Repository Structure
114+
```text
115+
meshery-academy/
116+
├── .github/ # GitHub-related resources and automation
117+
| ├── archive/meetings # Archived meeting minutes and discussion notes
118+
| ├── assets/images # README assets
119+
│ ├── build/ # Makefile includes
120+
│ ├── ISSUE_TEMPLATE/ # Templates for bug reports, feature requests, and documentation issues
121+
| ├── welcome/ # Assets used in contributor welcome messages
122+
│ ├── workflows/ # CI/CD pipelines
123+
│ └── PULL_REQUEST_TEMPLATE.md
124+
├── content/ # 📝 All learning content lives here
125+
│ ├── _index.md # Site root page
126+
│ ├── learning-paths/ # Learning paths
127+
│ ├── certifications/ # Certification content
128+
│ ├── challenges/ # Challenge content
129+
│ └── content-formatting-examples/ # Examples of Markdown and Hugo shortcodes
130+
├── layouts/ # Hugo layout overrides & shortcodes
131+
│ ├── _partials/ # Partial templates
132+
│ └── shortcodes/ # Custom Hugo shortcodes
133+
├── static/ # Static assets
134+
├── public/ # Generated site output (git-ignored)
135+
├── resources/ # Hugo resource cache
136+
├── go.mod / go.sum # Go module dependencies
137+
├── hugo.yaml # Hugo configuration
138+
├── Makefile # Build & development commands
139+
├── package.json # Node.js dependencies
140+
└── README.md # Project documentation
103141
```
104142

105143
---
106-
## Developing Certification Exams
107144

108-
Now you're ready to create your certification exam.
109-
A high-level view of the structure looks like this:
145+
## ✍️ Content Authoring
146+
147+
### Content Hierarchy
148+
149+
The Academy content follows this structure: **Learning Path → Course → Chapter → Lesson**.
110150

111151
```text
112152
content/
113-
└── certifications/
153+
└── learning-paths/
114154
├── _index.md
115-
└── <organization-uid>/
116-
└── certified-meshery-associate/
155+
└── <orgID>
156+
└── <your-learning-path>/
117157
├── _index.md
118-
└── exam-1.md
119-
└── exam-2.md
120-
└── certified-meshery-contributor/
121-
├── _index.md
122-
└── exam-1.md
123-
└── exam-2.md
124-
```
125-
- Create your folder structure following the hierarchy.
126-
- Add your exam as Markdown (.md) files inside the exam directory, for e.g. in `certified-meshery-contributor` directory.
127-
- Each `_index.md` and `exam` file should begin with Hugo frontmatter specifying title, description, weight, `passPercentage`, `maxAttempts`, `timeLimit`, `numberOfQuestions`, and `questions`.
128-
- Give every question a stable `id`, and give every option within a question a stable `id`. These author-facing IDs may be short values like `q1`, `a`, or `true`, but question IDs must be unique within one assessment and option IDs must be unique within one question. The Academy theme converts them into stable UUIDs in the generated JSON consumed by Meshery Cloud.
129-
130-
```yaml
131-
---
132-
title: "Meshery xxxx Contributor Exam"
133-
type: "test"
134-
layout: "test"
135-
weight: 2
136-
passPercentage: 70
137-
maxAttempts: 3
138-
timeLimit: 30
139-
numberOfQuestions: 25
140-
questions:
141-
- id: "q1"
142-
text: "Meshery manages cloud native infrastructure."
143-
type: "true-false"
144-
marks: 1
145-
options:
146-
- id: "true"
147-
text: "True"
148-
isCorrect: true
149-
- id: "false"
150-
text: "False"
151-
152-
---
158+
└── <your-course>/
159+
├── _index.md
160+
└── content/
161+
├── lesson-1.md
162+
└── lesson-2.md
153163
```
154-
- Ensure that each `exam` contains question pool as multiple of `numberOfQuestions`. For e.g., if the exam has `numberOfQuestions` is 25, the question pool could be 50 or 75 or so on.
155-
156-
## Managing Assets: Images, Videos, and Embedded Designs
157-
158-
Enhance your courses with images and rich visual content using the Page Bundling method for optimal compatibility.
159164

160165
### How to Add an Image
161166

162167
1. Place your image files directly in the same directory as your markdown content (Page Bundling method):
163168

164-
```text
165-
content/learning-paths/1e2a8e46-937c-47ea-ab43-5716e3bcab2e/
169+
```shell
170+
content/learning-paths/<orgID>/
166171
└── your-course/
167172
└── your-module/
168173
├── _index.md
169174
└── meshery-logo.png
170175
```
171176

172-
In your markdown file, reference the image using standard Markdown syntax:
173-
174-
`![Meshery Logo](./.github/readme/images/mershery-icon.png)`
175-
176177
### How to Add a Video
177178

178179
Embed videos in a visually distinct card using:
179180

181+
```markdown
180182
{{</*card title="Video: Example" */>}}
181183
<video width="100%" height="100%" controls>
182184
<source src="https://example.com/your-video.mp4" type="video/mp4">
183185
Your browser does not support the video tag.
184186
</video>
185187
{{</* /card*/>}}
188+
```
186189

187190
### How to Add a Meshery Design
188191

@@ -202,6 +205,35 @@ src="cdn.js"
202205

203206
> Always use these shortcodes for images, videos, and embedded designs. This keeps assets portable, ensures they resolve correctly for each organization, and integrates properly with the Academy platform’s build and deployment flow.
204207
208+
### Adding Assessments
209+
210+
Assessment files use the Academy test layout. Question and option IDs must be unique within their scope.
211+
212+
```yaml
213+
---
214+
title: "Assessment Example"
215+
id: "assessment-example"
216+
type: "test"
217+
layout: "test"
218+
passPercentage: 70
219+
maxAttempts: 3
220+
timeLimit: 30
221+
numberOfQuestions: 1
222+
questions:
223+
- id: "q1"
224+
text: "Meshery Academy content is authored in Markdown."
225+
type: "true-false"
226+
marks: 1
227+
options:
228+
- id: "true"
229+
text: "True"
230+
isCorrect: true
231+
- id: "false"
232+
text: "False"
233+
---
234+
```
235+
236+
205237
---
206238

207239
## Local Development
@@ -231,8 +263,8 @@ We welcome contributions to improve:
231263
- Additional learning paths, challenges, or certifications
232264
- Shortcodes, layouts, and formatting
233265

234-
1. See [CONTRIBUTING.md](https://github.com/meshery-extensions/meshery-academy/blob/master/CONTRIBUTING.md) for details on branching, committing, and opening PRs.
235-
2. Please review our [CODE_OF_CONDUCT.md](https://github.com/meshery-extensions/meshery-academy/blob/master/CODE_OF_CONDUCT.md) and [SECURITY.md](https://github.com/meshery-extensions/meshery-academy/blob/master/SECURITY.md) before contributing.
266+
1. See [CONTRIBUTING.md](CONTRIBUTING.md) for details on branching, committing, and opening PRs.
267+
2. Please review our [CODE_OF_CONDUCT.md](CODE_OF_CONDUCT.md) and [SECURITY.md](SECURITY.md) before contributing.
236268

237269
---
238270

0 commit comments

Comments
 (0)