Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
50 changes: 50 additions & 0 deletions .github/workflows/pages-deploy.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,50 @@
name: Build and Deploy GitHub Pages

on:
pull_request:
push:
branches:
- main
workflow_dispatch:

permissions:
contents: read
pages: write
id-token: write

Comment on lines +10 to +14
Copy link

Copilot AI Apr 19, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Workflow-level permissions grant pages: write and id-token: write to the build job (including on pull_request), even though only the deploy job needs them. To follow least-privilege, move these permissions to the deploy job (and keep contents: read for build), or set job-level permissions so PR builds don't get write-level tokens unnecessarily.

Copilot uses AI. Check for mistakes.
Copy link
Copy Markdown
Owner Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@copilot apply changes based on this feedback

concurrency:
group: pages
cancel-in-progress: false
Comment on lines +15 to +17
Copy link

Copilot AI Apr 19, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

concurrency.group: pages applies to the whole workflow (including PR builds), so multiple pull requests will be forced to run sequentially and can queue behind each other and behind main deployments. If you only need serialization for deployments, consider moving concurrency to the deploy job or keying the group by ref for PR builds.

Copilot uses AI. Check for mistakes.
Copy link
Copy Markdown
Owner Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@copilot apply changes based on this feedback


jobs:
build:
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v4

- name: Setup Pages
uses: actions/configure-pages@v5

- name: Build with Jekyll
uses: actions/jekyll-build-pages@v1
with:
source: ./
destination: ./_site

- name: Upload artifact
uses: actions/upload-pages-artifact@v3
with:
path: ./_site

deploy:
if: github.event_name == 'push' && github.ref == 'refs/heads/main'
environment:
name: github-pages
url: ${{ steps.deployment.outputs.page_url }}
needs: build
runs-on: ubuntu-latest
steps:
- name: Deploy to GitHub Pages
id: deployment
uses: actions/deploy-pages@v4
8 changes: 8 additions & 0 deletions .pymarkdown.json
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,14 @@
"allowed_elements": [
"br"
]
},
"md041": {
"enabled": false
}
},
"extensions": {
"front-matter": {
"enabled": true
}
}
}
1 change: 0 additions & 1 deletion CNAME

This file was deleted.

24 changes: 24 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,14 @@ and fenced code blocks to improve readability and collaboration.

## Repository layout

The repository now follows a GitHub Pages-friendly Jekyll content model:
- `_docs/` for evergreen cheat sheets.
- `_posts/` for dated blog entries.
- `_projects/` for platform engineering case studies.
- `index.md` as the homepage with clear paths to Cheat Sheets and Blog.

Legacy topic folders remain in place during the transition and can be gradually moved or aliased into `_docs/`.

Cheat sheets are organized by topic. Each directory contains one or more
`*.md` files.

Expand Down Expand Up @@ -43,3 +51,19 @@ Markdown linting is enforced in two ways:
Install the linter with `pip install pymarkdownlnt` or via `pre-commit`'s
managed environments. Running the checks keeps the cheat sheets consistently
formatted and ready for publishing.

## CI/CD

GitHub Actions now uses two workflows:

- `Markdown lint` (`.github/workflows/markdown-lint.yml`) for Markdown quality checks on pushes and pull requests.
- `Build and Deploy GitHub Pages` (`.github/workflows/pages-deploy.yml`) to build the Jekyll site on pull requests and deploy to GitHub Pages on pushes to `main`.

## GitHub Pages domain

This repository is configured to use the default GitHub Pages domain pattern (no custom `CNAME`).

- User site repo URL: `https://<username>.github.io/`
- Project site repo URL: `https://<username>.github.io/<repository>/`

For this repository, expect the project-site URL pattern to apply unless it is published from a dedicated user-site repository.
29 changes: 28 additions & 1 deletion _config.yml
Original file line number Diff line number Diff line change
@@ -1 +1,28 @@
theme: jekyll-theme-architect
title: System Engineer Cheat Sheets
description: Practical cheat sheets, platform engineering projects, and blog updates.
theme: jekyll-theme-architect

collections:
docs:
output: true
permalink: /cheat-sheets/:name/
projects:
output: true
permalink: /projects/:name/

defaults:
- scope:
path: ""
type: docs
values:
layout: default
- scope:
path: ""
type: projects
values:
layout: default
- scope:
path: ""
type: posts
values:
layout: default
10 changes: 10 additions & 0 deletions _data/navigation.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
- title: Home
url: /
- title: Cheat Sheets
url: /cheat-sheets/
- title: Projects
url: /projects/
- title: Blog
url: /blog/
- title: About
url: /about/
20 changes: 20 additions & 0 deletions _docs/getting-started.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
---
layout: default
title: Getting Started with the Docs Collection
permalink: /cheat-sheets/getting-started/
tags:
- docs
- migration
categories:
- cheat-sheets
---

# Getting Started with `_docs/`

Use this collection for evergreen content that should remain stable over time.

## Migration guidance

1. Keep the original topic file in place initially.
2. Create or update a canonical page in `_docs/`.
3. Add links between old and new pages until migration is complete.
33 changes: 33 additions & 0 deletions _layouts/default.html
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
<!DOCTYPE html>
<html lang="{{ site.lang | default: 'en-US' }}">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1">
{% seo %}
<link rel="stylesheet" href="{{ '/assets/css/style.css' | relative_url }}">
<style>
.top-nav { margin: 1rem 0 2rem; }
.top-nav ul { display: flex; flex-wrap: wrap; gap: 0.8rem; list-style: none; padding: 0; margin: 0; }
.top-nav a { font-weight: 700; text-decoration: none; }
</style>
</head>
<body>
<header>
<p><a href="{{ '/' | relative_url }}">{{ site.title }}</a></p>
<p>{{ site.description }}</p>
<nav class="top-nav" aria-label="Top navigation">
<ul>
{% for item in site.data.navigation %}
<li><a href="{{ item.url | relative_url }}">{{ item.title }}</a></li>
{% endfor %}
</ul>
</nav>
</header>

<main id="content" role="main">
<h1>{{ page.title | default: site.title }}</h1>
{{ content }}
Comment on lines +16 to +30
Copy link

Copilot AI Apr 19, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The default layout renders an <h1> that always shows site.title, but it never renders page.title. Several new pages (e.g., about.md, blog.md) don't include an H1 in their Markdown, so the visible primary heading will be the same on every page, which hurts navigation/accessibility. Consider rendering page.title as the main heading (or providing a per-page heading slot) so each page has a unique top-level heading.

Copilot uses AI. Check for mistakes.
Copy link
Copy Markdown
Owner Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@copilot apply changes based on this feedback

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Implemented in 93e2fb8: the layout now renders <h1>{{ page.title | default: site.title }}</h1> inside <main>, and the site title in the header is no longer the page H1.

Screenshot:
Updated default layout heading behavior

</main>
</body>
</html>
12 changes: 12 additions & 0 deletions _posts/2026-04-19-site-structure-update.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
---
layout: default
title: Site Structure Update
date: 2026-04-19 00:00:00 +0000
tags:
- blog
- migration
categories:
- updates
---

This post marks the transition to a Jekyll structure with dedicated docs, projects, and blog content paths.
18 changes: 18 additions & 0 deletions _projects/platform-engineering-case-study.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
---
layout: default
title: Platform Engineering Case Study Template
permalink: /projects/platform-engineering-case-study/
tags:
- projects
- platform-engineering
categories:
- case-study
---

# Platform Engineering Case Study Template

- **Problem:**
- **Constraints:**
- **Approach:**
- **Outcome:**
- **Follow-up work:**
9 changes: 9 additions & 0 deletions about.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
---
layout: default
title: About
permalink: /about/
tags: [about, metadata]
categories: [site]
---

This site documents practical system engineering operations, from evergreen cheat sheets to platform project case studies and time-based blog notes.
13 changes: 13 additions & 0 deletions blog.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
---
layout: default
title: Blog
permalink: /blog/
tags: [blog, posts]
categories: [navigation]
---

{% for post in site.posts %}

- [{{ post.title }}]({{ post.url | relative_url }}) — {{ post.date | date: "%B %-d, %Y" }}

{% endfor %}
24 changes: 24 additions & 0 deletions cheat-sheets.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
---
layout: default
title: Cheat Sheets
permalink: /cheat-sheets/
tags: [docs, cheat-sheets]
categories: [navigation]
---

These pages come from the `_docs/` collection and are intended to be evergreen references.

{% assign sorted_docs = site.docs | sort: 'title' %}
{% for doc in sorted_docs %}

- [{{ doc.title }}]({{ doc.url | relative_url }})

{% endfor %}

## Legacy topic folders

The original topic directories are preserved during transition:

- `Automation/`, `Backup/`, `Docker/`, `Firewall/`, `High Availability/`, `Load Balancing/`, `NTP/`, `SSH/`, `Tunning kernel/`, `Utils/`, `Web Services/`

As documents are modernized, corresponding pages will be moved or aliased into `_docs/`.
16 changes: 16 additions & 0 deletions index.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
---
layout: default
title: Home
permalink: /
tags: [home, navigation]
categories: [site]
---

Use the two primary paths below to get started quickly:

- [Cheat Sheets]({{ '/cheat-sheets/' | relative_url }}) — Evergreen, task-oriented operational references stored in the docs collection.
- [Blog]({{ '/blog/' | relative_url }}) — Time-based updates, release notes, and short operational writeups.

## Transitional note

Legacy topic folders remain available during migration. New and refreshed material will be published in `_docs/` and linked from this site structure.
14 changes: 14 additions & 0 deletions projects.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
---
layout: default
title: Projects
permalink: /projects/
tags: [projects, case-studies]
categories: [navigation]
---

{% assign sorted_projects = site.projects | sort: 'title' %}
{% for project in sorted_projects %}

- [{{ project.title }}]({{ project.url | relative_url }})

{% endfor %}
Loading