diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml new file mode 100644 index 0000000..2403019 --- /dev/null +++ b/.github/workflows/ci.yml @@ -0,0 +1,27 @@ +name: CI + +on: + pull_request: + branches: ["main"] + push: + branches: ["main"] + +jobs: + test: + runs-on: ubuntu-latest + steps: + - name: Checkout repository + uses: actions/checkout@v4 + + - name: Set up Python + uses: actions/setup-python@v5 + with: + python-version: "3.11" + + - name: Install dependencies + run: | + python -m pip install --upgrade pip + pip install -r requirements.txt + + - name: Run tests + run: pytest -q diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml new file mode 100644 index 0000000..cac292f --- /dev/null +++ b/.github/workflows/release.yml @@ -0,0 +1,31 @@ +name: Release Artifact + +on: + push: + branches: ["main"] + +jobs: + release: + runs-on: ubuntu-latest + steps: + - name: Checkout repository + uses: actions/checkout@v4 + + - name: Set up Python + uses: actions/setup-python@v5 + with: + python-version: "3.11" + + - name: Install dependencies + run: | + python -m pip install --upgrade pip + pip install -r requirements.txt + + - name: Generate site artifact + run: python tools/generate_site.py + + - name: Upload artifact + uses: actions/upload-artifact@v4 + with: + name: site-dist + path: dist/index.html diff --git a/app/__init__.py b/app/__init__.py new file mode 100644 index 0000000..36b8e57 --- /dev/null +++ b/app/__init__.py @@ -0,0 +1 @@ +"""App package.""" diff --git a/app/message.py b/app/message.py new file mode 100644 index 0000000..508018b --- /dev/null +++ b/app/message.py @@ -0,0 +1,5 @@ +def render_message(name: str) -> str: + name = (name or "").strip() + if not name: + name = "anonymous" + return f"Hello, {name}!" diff --git a/data/name.txt b/data/name.txt new file mode 100644 index 0000000..2873b8a --- /dev/null +++ b/data/name.txt @@ -0,0 +1 @@ +Yeji diff --git a/dist/index.html b/dist/index.html new file mode 100644 index 0000000..45ae3ff --- /dev/null +++ b/dist/index.html @@ -0,0 +1,20 @@ + + + + + + Day4 Artifact Demo + + + +
+

CI + Artifact CD Demo

+

Name: Yeji

+

Message: Hello, Yeji!

+

Generated at (UTC): 2026-01-15 16:32:49 UTC

+
+ + diff --git a/requirements.txt b/requirements.txt new file mode 100644 index 0000000..fe93bd5 --- /dev/null +++ b/requirements.txt @@ -0,0 +1 @@ +pytest==8.3.2 diff --git a/submissions/kyeowo1221.md b/submissions/kyeowo1221.md deleted file mode 100644 index eb34b3a..0000000 --- a/submissions/kyeowo1221.md +++ /dev/null @@ -1,8 +0,0 @@ -'EOF' - -github: kyeowo1221 - -takeaway: 강의 잘 이해하기 - -EOF - diff --git a/tests/test_message.py b/tests/test_message.py new file mode 100644 index 0000000..d851c71 --- /dev/null +++ b/tests/test_message.py @@ -0,0 +1,20 @@ +from pathlib import Path +import sys + +ROOT = Path(__file__).resolve().parents[1] +if str(ROOT) not in sys.path: + sys.path.insert(0, str(ROOT)) + +from app.message import render_message + + +def test_render_message_normal(): + assert render_message("Yeji") == "Hello, Yeji!" + + +def test_render_message_trims(): + assert render_message(" Yeji ") == "Hello, Yeji!" + + +def test_render_message_empty(): + assert render_message("") == "Hello, anonymous!" diff --git a/tools/generate_site.py b/tools/generate_site.py new file mode 100644 index 0000000..9c1bdbc --- /dev/null +++ b/tools/generate_site.py @@ -0,0 +1,46 @@ +from datetime import datetime, timezone +from pathlib import Path +import sys + +ROOT = Path(__file__).resolve().parents[1] +if str(ROOT) not in sys.path: + sys.path.insert(0, str(ROOT)) + +from app.message import render_message +DATA = ROOT / "data" / "name.txt" +OUT = ROOT / "dist" / "index.html" + + +def main(): + name = DATA.read_text(encoding="utf-8").strip() + rendered = render_message(name) + now = datetime.now(timezone.utc).strftime("%Y-%m-%d %H:%M:%S UTC") + + html = f""" + + + + + Day4 Artifact Demo + + + +
+

CI + Artifact CD Demo

+

Name: {name}

+

Message: {rendered}

+

Generated at (UTC): {now}

+
+ + +""" + OUT.parent.mkdir(parents=True, exist_ok=True) + OUT.write_text(html, encoding="utf-8") + print(f"Wrote {OUT}") + + +if __name__ == "__main__": + main()