feat: setup MkDocs + Forgejo Actions deploy ke vm-edge
Some checks failed
Deploy Buku Online → helmibahara.my.id/book/sim/ / Build MkDocs & Deploy ke vm-edge (push) Has been cancelled

This commit is contained in:
hb_alim 2026-04-25 17:24:24 +07:00
parent e52a9ca0b5
commit 11b1e998ce
3 changed files with 315 additions and 0 deletions

View file

@ -0,0 +1,67 @@
name: Deploy Buku Online → helmibahara.my.id/book/sim/
on:
push:
branches: [main]
paths:
- "chapters/**"
- "backmatter/**"
- "foundation/RPS-SIM.md"
- "mkdocs.yml"
- "scripts/sync-docs.py"
workflow_dispatch:
jobs:
deploy:
name: Build MkDocs & Deploy ke vm-edge
runs-on: ubuntu-latest # Forgejo self-hosted runner
steps:
- name: Checkout
uses: actions/checkout@v4
with:
fetch-depth: 0
- name: Setup Python 3.12
uses: actions/setup-python@v5
with:
python-version: "3.12"
cache: "pip"
- name: Install MkDocs + Material
run: |
pip install --upgrade pip
pip install \
mkdocs==1.6.* \
mkdocs-material==9.* \
mkdocs-minify-plugin \
pymdown-extensions
- name: Sync chapters → docs/
run: python scripts/sync-docs.py --verbose
- name: Build site MkDocs
run: mkdocs build --strict
# ── Deploy ke vm-edge via rsync over SSH ────────────────────────
# Secret yang dibutuhkan di Forgejo repo → Settings → Secrets:
# DEPLOY_KEY → private key (ed25519) untuk akses vm-edge
# Di vm-edge tambahkan public key ke authorized_keys deploy user
# ─────────────────────────────────────────────────────────────────
- name: Setup SSH deploy key
run: |
mkdir -p ~/.ssh
echo "${{ secrets.DEPLOY_KEY }}" > ~/.ssh/deploy_key
chmod 600 ~/.ssh/deploy_key
ssh-keyscan -H 192.168.18.202 >> ~/.ssh/known_hosts
- name: Rsync site/ → vm-edge:/var/www/sim-book/
run: |
rsync -avz --delete \
-e "ssh -i ~/.ssh/deploy_key -o StrictHostKeyChecking=no" \
site/ \
deploy@192.168.18.202:/var/www/sim-book/
- name: Cleanup SSH key
if: always()
run: rm -f ~/.ssh/deploy_key

124
mkdocs.yml Normal file
View file

@ -0,0 +1,124 @@
site_name: Sistem Informasi Manajemen di Era AI
site_description: Perspektif Strategis dan Pengambilan Keputusan — Helmi Bahar Alim, S.Kom., M.Kom.
site_author: Helmi Bahar Alim
site_url: https://helmibahara.my.id/book/sim/ # slug: ganti "sim" jika perlu
repo_name: forgejo/sim-manajement-book
repo_url: https://forgejo.upb.ac.id/helmi-upb/sim-manajement-book # ganti host jika perlu
edit_uri: edit/main/chapters/
docs_dir: docs
site_dir: site
theme:
name: material
language: id
palette:
- scheme: default
primary: indigo
accent: blue
toggle:
icon: material/weather-sunny
name: Beralih ke mode gelap
- scheme: slate
primary: indigo
accent: blue
toggle:
icon: material/weather-night
name: Beralih ke mode terang
font:
text: Source Serif 4
code: JetBrains Mono
features:
- navigation.tabs
- navigation.tabs.sticky
- navigation.sections
- navigation.expand
- navigation.top
- navigation.footer
- search.highlight
- search.suggest
- content.action.edit
- content.code.copy
- toc.follow
icon:
repo: fontawesome/brands/git-alt
edit: material/pencil
plugins:
- search:
lang: id
- minify:
minify_html: true
markdown_extensions:
- admonition
- pymdownx.details
- pymdownx.superfences
- pymdownx.tabbed:
alternate_style: true
- pymdownx.emoji:
emoji_index: !!python/name:material.extensions.emoji.twemoji
emoji_generator: !!python/name:material.extensions.emoji.to_svg
- pymdownx.highlight:
anchor_linenums: true
- tables
- toc:
permalink: true
title: Daftar Isi Bab
- attr_list
- def_list
- footnotes
- md_in_html
extra:
social:
- icon: fontawesome/brands/git-alt
link: https://forgejo.upb.ac.id/helmi-upb/sim-manajement-book
name: Source di Forgejo
generator: false
copyright: >
© 2026 Helmi Bahar Alim — Universitas Putra Bangsa, Kebumen.
Hak cipta dilindungi.
nav:
- Beranda: index.md
- Kata Pengantar: kata-pengantar.md
- "Bagian I — Konteks Strategis":
- "Bab 1: Peran SI dalam Organisasi Modern": bab-01.md
- "Bab 2: Keselarasan Strategi Bisnis dan SI": bab-02.md
- "Bagian II — Fondasi Berpikir Manajerial":
- "Bab 3: Data dan Informasi sebagai Aset": bab-03.md
- "Bab 4: Analisis Permasalahan Organisasi": bab-04.md
- "Bab 5: Kebutuhan Informasi Manajerial": bab-05.md
- "Bagian III — SI dalam Proses Bisnis dan Keputusan":
- "Bab 6: SI dalam Fungsi Bisnis": bab-06.md
- "Bab 7: Sistem Perusahaan dan Integrasi": bab-07.md
- "Bab 8: Pengambilan Keputusan Berbasis Data": bab-08.md
- "Bab 9: Business Intelligence dan Analitik": bab-09.md
- "Bagian IV — Perancangan Solusi SI":
- "Bab 10: Pemodelan Proses Bisnis": bab-10.md
- "Bab 11: Perancangan Konseptual SI": bab-11.md
- "Bab 12: Alternatif Solusi Custom-Komersial-Cloud": bab-12.md
- "Bagian V — Implementasi, Evaluasi & Risiko":
- "Bab 13: Implementasi Sistem Informasi": bab-13.md
- "Bab 14: Evaluasi Kelayakan dan ROI": bab-14.md
- "Bab 15: Risiko, Keamanan, dan Tata Kelola SI": bab-15.md
- "Bagian VI — Transformasi Digital, AI & Masa Depan":
- "Bab 16: Transformasi Digital dan E-Business": bab-16.md
- "Bab 17: AI dalam Pengambilan Keputusan": bab-17.md
- "Bab 18: Tren SI dan Masa Depan Organisasi": bab-18.md
- Referensi & Back Matter:
- Daftar Referensi: references.md
- Glosarium: glosarium.md
- Indeks: indeks.md
- Tentang Penulis: tentang-penulis.md
- RPS Mata Kuliah: rps-sim.md

124
scripts/sync-docs.py Normal file
View file

@ -0,0 +1,124 @@
#!/usr/bin/env python3
"""
sync-docs.py Salin chapters/ ke docs/ untuk MkDocs
=====================================================
Bersihkan:
- metadata block (```metainfo ... ```)
- HTML comment (<!-- ... -->)
- mermaid block ganti dengan blockquote keterangan
- baris kosong berlebih (maks 2)
Buat docs/index.md dan docs/rps-sim.md otomatis.
"""
import re
import argparse
import shutil
from pathlib import Path
ROOT = Path(__file__).parent.parent
CHAPTERS = ROOT / "chapters"
BACKMATTER = ROOT / "backmatter"
FOUNDATION = ROOT / "foundation"
DOCS = ROOT / "docs"
def clean(text: str) -> str:
# 1. Hapus metadata block
text = re.sub(r"^```metainfo\s*\n.*?```\s*\n?", "", text,
flags=re.DOTALL | re.MULTILINE)
# 2. Hapus HTML comment
text = re.sub(r"<!--.*?-->", "", text, flags=re.DOTALL)
# 3. Ganti mermaid dengan keterangan
def mermaid_sub(m: re.Match) -> str:
first = m.group(1).strip().splitlines()[0] if m.group(1).strip() else "Diagram"
return f"\n> **[Diagram]** *{first}* — lihat versi cetak.\n"
text = re.sub(r"```mermaid\s*\n(.*?)```", mermaid_sub, text, flags=re.DOTALL)
# 4. Normalisasi baris kosong
text = re.sub(r"\n{3,}", "\n\n", text)
return text.strip() + "\n"
def write(dst: Path, content: str) -> None:
dst.write_text(content, encoding="utf-8")
def sync(verbose: bool) -> None:
if verbose:
print(f"docs/ → {DOCS}")
DOCS.mkdir(parents=True, exist_ok=True)
# Chapters
for src in sorted(CHAPTERS.glob("bab-*.md")):
write(DOCS / src.name, clean(src.read_text("utf-8")))
if verbose:
print(f"{src.name}")
# Backmatter
for name in ["kata-pengantar.md", "references.md", "glosarium.md",
"indeks.md", "tentang-penulis.md"]:
src = BACKMATTER / name
if src.exists():
write(DOCS / name, clean(src.read_text("utf-8")))
if verbose:
print(f"{name}")
# RPS
rps = FOUNDATION / "RPS-SIM.md"
if rps.exists():
write(DOCS / "rps-sim.md", clean(rps.read_text("utf-8")))
if verbose:
print(" ✓ rps-sim.md")
# index.md
index = """\
# Sistem Informasi Manajemen di Era AI
**Perspektif Strategis dan Pengambilan Keputusan**
*Helmi Bahar Alim, S.Kom., M.Kom.* Universitas Putra Bangsa, Kebumen · Edisi 2025/2026
---
## Tentang Buku Ini
Buku ajar mata kuliah **Sistem Informasi Manajemen (SIM)** yang dirancang untuk era
kecerdasan buatan. Buku ini membekali mahasiswa dengan kerangka berpikir manajerial
untuk menggunakan SI sebagai senjata pengambilan keputusan.
## Struktur Buku
| Bagian | Topik | Bab |
|--------|-------|-----|
| I | Konteks Strategis | 12 |
| II | Fondasi Berpikir Manajerial | 35 |
| III | SI dalam Proses Bisnis & Keputusan | 69 |
| IV | Perancangan Solusi SI | 1012 |
| V | Implementasi, Evaluasi & Risiko | 1315 |
| VI | Transformasi Digital, AI & Masa Depan | 1618 |
## Navigasi Cepat
- [Kata Pengantar](kata-pengantar.md)
- [BAB 1 Mulai dari sini ](bab-01.md)
- [Glosarium](glosarium.md)
- [Referensi](references.md)
- [RPS Mata Kuliah](rps-sim.md)
"""
write(DOCS / "index.md", index)
if verbose:
print(" ✓ index.md")
print("✅ Sync selesai → docs/")
if __name__ == "__main__":
parser = argparse.ArgumentParser()
parser.add_argument("--verbose", "-v", action="store_true")
parser.add_argument("--clean", action="store_true",
help="Hapus docs/ dulu sebelum sync")
args = parser.parse_args()
if args.clean and DOCS.exists():
shutil.rmtree(DOCS)
sync(args.verbose)