Skip to content

Commit

Permalink
feat: Naloga 03
Browse files Browse the repository at this point in the history
  • Loading branch information
HlisTilen committed Nov 18, 2024
1 parent 5fe3434 commit 90dcbf6
Show file tree
Hide file tree
Showing 4 changed files with 227 additions and 9 deletions.
61 changes: 56 additions & 5 deletions .github/workflows/backend.yml
Original file line number Diff line number Diff line change
Expand Up @@ -11,9 +11,49 @@ on:
- main

jobs:
# Ime job-a za testiranje backenda
# Job za gradnjo backenda
build-backend:
runs-on: ubuntu-latest

steps:
- name: Checkout code # Kloniranje repozitorija
uses: actions/checkout@v3

- name: Setup Node.js # Namestitev Node.js okolja
uses: actions/setup-node@v3
with:
node-version: 16

- name: Cache node_modules # Caching odvisnosti
uses: actions/cache@v3
with:
path: 02_DevOps_Testing/primer/backend/node_modules # Pot do mape node_modules
key: ${{ runner.os }}-backend-${{ hashFiles('02_DevOps_Testing/primer/backend/package-lock.json') }} # Ključ za cache
restore-keys: |
${{ runner.os }}-backend-
# ⚠️ Caching:
# - Če cache obstaja (cache hit), se node_modules obnovi, preden se zažene npm install.
# - Če cache ne obstaja (cache miss), npm install ponovno ustvari mapo node_modules.

- name: Install dependencies # Namestitev odvisnosti
run: |
cd 02_DevOps_Testing/primer/backend
npm install
- name: Upload backend artifacts # Naložitev artefaktov za backend
uses: actions/upload-artifact@v3
with:
name: backend-build # Ime artefakta
path: |
02_DevOps_Testing/primer/backend/
02_DevOps_Testing/primer/backend/node_modules/
# Pot do celotne kode
# Nameščene odvisnosti

# Job za testiranje backenda
test-backend:
runs-on: ubuntu-latest # Okolje, v katerem bo job tekel
needs: build-backend # Testiranje se izvede po uspešni gradnji
runs-on: ubuntu-latest

steps:
- name: Checkout code # Kloniranje repozitorija
Expand All @@ -24,18 +64,29 @@ jobs:
with:
node-version: 16

- name: Cache node_modules # Caching odvisnosti
uses: actions/cache@v3
with:
path: 02_DevOps_Testing/primer/backend/node_modules # Pot do mape node_modules
key: ${{ runner.os }}-backend-${{ hashFiles('02_DevOps_Testing/primer/backend/package-lock.json') }} # Ključ za cache
restore-keys: |
${{ runner.os }}-backend-
- name: Install dependencies # Namestitev odvisnosti
run: |
cd 02_DevOps_Testing/primer/backend
npm install
# ⚠️ Cache hit:
# - Če je cache hit, npm install preveri obstoječe odvisnosti in ne namešča ničesar dodatnega.
# - Če je cache miss, npm install ponovno ustvari mapo node_modules.

- name: Run tests with coverage # Izvajanje testov s pokritostjo
run: |
cd 02_DevOps_Testing/primer/backend
npm run test:ci
- name: Upload coverage report # Naložitev poročila o pokritosti
- name: Upload coverage report # Naložitev poročila o pokritosti kode
uses: actions/upload-artifact@v3
with:
name: backend-coverage
path: 02_DevOps_Testing/primer/backend/coverage/
name: backend-coverage # Ime artefakta
path: 02_DevOps_Testing/primer/backend/coverage/ # Pot do poročila o pokritosti kode
62 changes: 58 additions & 4 deletions .github/workflows/frontend.yml
Original file line number Diff line number Diff line change
Expand Up @@ -11,8 +11,8 @@ on:
- main

jobs:
# Ime job-a za testiranje frontenda
test-frontend:
# Job za gradnjo frontenda
build-frontend:
runs-on: ubuntu-latest # Okolje, v katerem bo job tekel

steps:
Expand All @@ -24,17 +24,71 @@ jobs:
with:
node-version: 16

- name: Cache node_modules # Caching odvisnosti
uses: actions/cache@v3
with:
path: 02_DevOps_Testing/primer/frontend/node_modules # Pot do mape node_modules
key: ${{ runner.os }}-frontend-${{ hashFiles('02_DevOps_Testing/primer/frontend/package-lock.json') }} # Ključ za cache
restore-keys: |
${{ runner.os }}-frontend-
# ⚠️ KAKO DELUJE CACHING:
# - Ob prvi izvedbi (cache miss) mapa node_modules še ne obstaja -> npm install ustvari mapo node_modules.
# - Po zaključku job-a se vsebina node_modules shrani v cache.
# - Ob naslednji izvedbi (cache hit) se node_modules obnovi iz cache-a, kar skrajša čas nameščanja odvisnosti.

- name: Install dependencies # Namestitev odvisnosti
run: |
cd 02_DevOps_Testing/primer/frontend
npm install
# Če node_modules že obstaja, npm samo preveri skladnost z datotekama package.json in package-lock.json.

- name: Build application # Gradnja aplikacije
run: |
cd 02_DevOps_Testing/primer/frontend
npm run build
- name: Upload build artifacts # Naložitev gradbenih artefaktov
uses: actions/upload-artifact@v3
with:
name: frontend-build
path: 02_DevOps_Testing/primer/frontend/build/

# Job za testiranje frontenda
test-frontend:
needs: build-frontend # Testiranje se izvede po uspešni gradnji
runs-on: ubuntu-latest

steps:
- name: Checkout code
uses: actions/checkout@v3

- name: Setup Node.js
uses: actions/setup-node@v3
with:
node-version: 16

- name: Cache node_modules # Caching odvisnosti
uses: actions/cache@v3
with:
path: 02_DevOps_Testing/primer/frontend/node_modules
key: ${{ runner.os }}-frontend-${{ hashFiles('02_DevOps_Testing/primer/frontend/package-lock.json') }}
restore-keys: |
${{ runner.os }}-frontend-
- name: Install dependencies
run: |
cd 02_DevOps_Testing/primer/frontend
npm install
# ⚠️ KAKO PREPOZNATI, DA JE CACHE USPEŠEN?
# - Če je cache hit, npm install ne namešča novih odvisnosti, ampak preveri obstoječe.
# - Če je cache miss, npm install ponovno ustvari mapo node_modules.

- name: Run tests with coverage # Izvajanje testov s pokritostjo
- name: Run tests with coverage
run: |
cd 02_DevOps_Testing/primer/frontend
npm run test:ci
- name: Upload coverage report # Naložitev poročila o pokritosti
- name: Upload coverage report
uses: actions/upload-artifact@v3
with:
name: frontend-coverage
Expand Down
21 changes: 21 additions & 0 deletions 02_DevOps_Testing/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -38,3 +38,24 @@ Za primer implementacije si oglejte [primer aplikacije v repozitoriju](https://g
3. **Implementacija GitHub Actions** za avtomatizirano testiranje in generiranje poročil o pokritosti kode.

---

## 🔍 Ocenjevanje
1. **Vzpostavitev repozitorija (10%)**
- Repozitorij vsebuje jasno ločeno strukturo za `frontend` in `backend`.
- Koda je organizirana in pripravljena za uporabo z GitHub Actions.

2. **Pisanje testov (30%)**
- Vključenih je **vsaj 20 testov** (npr. 10 za frontend in 10 za backend).
- Testi delujejo brez napak in pokrivajo ključno logiko aplikacije.
- Testi so raznoliki in smiselni (unit testi, validacije, poslovna logika).

3. **Implementacija GitHub Actions (40%)**
- CI/CD pipeline pravilno izvaja avtomatizirano testiranje za oba dela aplikacije.
- Pipeline vključuje jasno definirane job-e in korake (`jobs`, `steps`).
- Prikazana je ustrezna organizacija testne faze.

4. **Artefakti (20%)**
- Poročila o pokritosti kode so pravilno shranjena kot artefakti v zavihku **Actions**.
- Artefakti so dostopni in pravilno organizirani za pregled.

---
92 changes: 92 additions & 0 deletions 03_DevOps_Building/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,92 @@
# 📝 Vaja 3: Implementacija nove funkcionalnosti, testiranje in gradnja z GitHub Actions

## 📑 Namen vaje
Cilj te vaje je implementirati novo funkcionalnost v aplikacijo, napisati ustrezne teste za njeno delovanje, ter razširiti obstoječi CI/CD pipeline z ločeno fazo za **gradnjo aplikacije**. Študenti bodo prav tako implementirali **caching** za svoje odvisnosti, ne glede na uporabljeno tehnologijo, kar bo skrajšalo čas izvajanja pipeline-a.

---

## 📅 Rok za oddajo

- **Ponedeljkova skupina:** 2. 12. 2024
- **Sredina skupina:** 4. 12. 2024

### Točkovnik
- Oddaja do roka: možnih 100%.
- Zamuda do 1 teden: največ 75%.
- Zamuda do konca semestra: največ 50%.

---

## 📋 Zahteve naloge

### 1. Implementacija nove funkcionalnosti
- Dodajte **novo funkcionalnost** v aplikacijo.
- Funkcionalnost mora biti smiselna in uporabna.
- Primeri:
- Dodajanje nove strani ali obrazca (frontend).
- Nova API metoda za obdelavo podatkov (backend).
- Validacija ali obogatitev obstoječih podatkov.
- Funkcionalnost je lahko implementirana v **frontend**, **backend**, ali oboje.

### 2. Pisanje testov za novo funkcionalnost
- Napišite **vsaj 5 novih unit testov**, ki preverjajo delovanje nove funkcionalnosti.
- Testi so lahko na frontendu, backendu ali kombinacija obojega.

### 3. Razširitev CI/CD pipeline
- Dodajte novo fazo za **gradnjo aplikacije**:
- Gradnja mora biti izvedena za frontend in/ali backend, odvisno od strukture vaše aplikacije.
- Implementirajte **caching**, ki bo zapisoval in obnavljal **odvisnosti** vaše aplikacije (odvisno od uporabljene tehnologije):
- **Primeri odvisnosti glede na tehnologijo:**
- **Node.js:** `node_modules`.
- **Python:** mapa z virtualnim okoljem (npr. `.venv` ali `__pycache__`).
- **Java:** mapa `~/.m2` za Maven ali `build` za Gradle.
- Uporabite ustrezne ključe za caching, da se odvisnosti shranijo in ponovno uporabijo, če se ne spremenijo.

### 4. Shranjevanje artefaktov
- Shranite gradbene rezultate aplikacije kot artefakte:
- **Frontend:** Npr. `dist` mapa za aplikacijo, pripravljeno za distribucijo.
- **Backend:** Npr. `build` mapa ali binarne datoteke.

---

## 🎯 Zahteve za CI/CD pipeline
1. **Faza gradnje:**
- Dodajte job za gradnjo aplikacije (frontend in/ali backend).
- Implementirajte caching za odvisnosti glede na uporabljeno tehnologijo.
- Shranite gradbene rezultate kot artefakte.

2. **Faza testiranja:**
- Vključite obstoječe teste in novih 5 testov za novo funkcionalnost.
- Preverite, da obstoječa funkcionalnost še vedno deluje brez napak.

---

## 📘 Primer rešitve
Za primer implementacije si oglejte [primer aplikacije v repozitoriju](https://github.com/HlisTilen/RIRS/tree/main/02_DevOps_Testing/primer) in [primer cevovodov v repozitoriju](https://github.com/HlisTilen/RIRS/tree/main/.github/workflows).

---

## 🔄 Povzetek naloge
1. **Dodajte novo funkcionalnost** v aplikacijo.
2. **Napišite 5 novih unit testov** za novo funkcionalnost.
3. **Dodajte novo fazo gradnje** za aplikacijo v CI/CD pipeline.
4. **Implementirajte caching**, ki ustreza vaši tehnologiji.
5. **Shranjujte artefakte** gradnje za poznejšo uporabo.

---

## 🔍 Ocenjevanje
1. **Nova funkcionalnost (20%)**
- Funkcionalnost je pravilno implementirana.

2. **Testi (20%)**
- Novi testi pokrivajo novo funkcionalnost.

3. **Gradnja aplikacije (50%)**
- Gradnja je pravilno implementirana za frontend in/ali backend.
- Caching odvisnosti je pravilen in učinkovit.

4. **Artefakti (10%)**
- Gradbeni artefakti so shranjeni v zavihku **Actions**.

---

0 comments on commit 90dcbf6

Please sign in to comment.