diff --git a/.github/workflows/backend.yml b/.github/workflows/backend.yml index f134b4a..9d1a32c 100644 --- a/.github/workflows/backend.yml +++ b/.github/workflows/backend.yml @@ -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 @@ -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 diff --git a/.github/workflows/frontend.yml b/.github/workflows/frontend.yml index 8c7b1b1..afde0a7 100644 --- a/.github/workflows/frontend.yml +++ b/.github/workflows/frontend.yml @@ -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: @@ -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 diff --git a/02_DevOps_Testing/README.md b/02_DevOps_Testing/README.md index 6a375c5..977b36c 100644 --- a/02_DevOps_Testing/README.md +++ b/02_DevOps_Testing/README.md @@ -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. + +--- \ No newline at end of file diff --git a/03_DevOps_Building/README.md b/03_DevOps_Building/README.md new file mode 100644 index 0000000..d0d24eb --- /dev/null +++ b/03_DevOps_Building/README.md @@ -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**. + +---