Skip to content

Upravljanje skupnega razvoja

Anastasija Temova edited this page Jun 17, 2026 · 2 revisions

Sistem za spremljanje in analizo svetlobnih razmer za zdravje rastlin

Spremljanje programske kode s pomočjo orodja GitHub

Mentor: Marko Bizjak
Skupina: Anastasija Temova, David Boshevski, Damjan Milenković


1. Inicializacija projekta

Za spremljanje in verzioniranje programske kode študentskega projekta smo uporabili spletno orodje GitHub, ki temelji na sistemu za verzioniranje Git. GitHub omogoča centralizirano hranjenje kode, sledenje spremembam, sodelovanje med člani ekipe ter integracijo z orodji za vodenje projekta.

Vsak član mikroskupine je najprej opravil registracijo uporabniškega računa na spletni strani https://github.com. Po uspešni registraciji je vodja mikroskupine ustvaril nov repozitorij za hranjenje programske kode študentskega projekta, kot je prikazano na Sliki 1.

Slika 1: Ustvarjanje novega repozitorija v orodju GitHub

Repozitorij je bil sprva ustvarjen kot zaseben (private), kar pomeni, da je bil dostopen le povabljenim članom. To je med razvojem zagotavljalo varnost kode in nadzor nad dostopom do repozitorija.

Po uspešnem kreiranju repozitorija je vodja mikroskupine v nastavitve repozitorija (Settings → Collaborators) dodal vse člane mikroskupine z ustreznimi pravicami, kot je prikazano na Sliki 2:

  • Anastasija Temova — Write (pravice za pisanje in potrditev kode)
  • David Boshevski — Write (pravice za pisanje in potrditev kode)
  • Damjan Milenković — Write (pravice za pisanje in potrditev kode)
  • Marko Bizjak (mentor) — Read (pregled kode in vodenje poteka vaje)

Slika 2: Dodajanje članov v repozitorij (Settings → Collaborators)


2. Gitflow

V repozitoriju sledimo principu Gitflow, ki je uveljavljena metoda za upravljanje z vejami v sistemu Git. Gitflow predpisuje jasno strukturo vej, ki ločuje razvojno delo od stabilne produkcijske kode in olajša vzporeden razvoj več funkcionalnosti hkrati.

%%{init: {'theme':'base','gitGraph': {'mainBranchName': 'main','showCommitLabel': false}, 'themeVariables': {'git0':'#0b3d91','git1':'#1565c0','git2':'#1976d2','git3':'#2196f3','git4':'#42a5f5','git5':'#64b5f6','git6':'#90caf9','git7':'#0d47a1','gitBranchLabel0':'#ffffff','gitBranchLabel1':'#ffffff','gitBranchLabel2':'#ffffff','gitBranchLabel3':'#ffffff','gitBranchLabel4':'#000000','gitBranchLabel5':'#000000','gitBranchLabel6':'#000000','gitBranchLabel7':'#ffffff','tagLabelColor':'#ffffff','tagLabelBackground':'#0b3d91'}}}%%
gitGraph
   commit id: "init"
   branch develop
   checkout develop
   commit id: "setup"
   branch feature/stm32_communications
   checkout feature/stm32_communications
   commit
   commit
   checkout develop
   merge feature/stm32_communications
   branch feature/user-interface
   checkout feature/user-interface
   commit
   commit
   checkout develop
   merge feature/user-interface
   branch feature/recommendation-system
   checkout feature/recommendation-system
   commit
   checkout develop
   merge feature/recommendation-system
   branch feature/growth-model
   checkout feature/growth-model
   commit
   checkout develop
   merge feature/growth-model
   branch feature/detection
   checkout feature/detection
   commit
   commit
   checkout develop
   merge feature/detection
   branch dockerization
   checkout dockerization
   commit
   checkout develop
   merge dockerization
   branch feature/CI-CD
   checkout feature/CI-CD
   commit
   checkout develop
   merge feature/CI-CD
   checkout main
   merge develop tag: "v1.0"
Loading

2.1 Struktura vej

V skladu s principom Gitflow vzdržujemo naslednje veje:

Veja Ime veje Namen
Glavna (produkcijska) veja main Vsebuje stabilno, produkcijsko kodo. Na to vejo se izvaja združevanje samo iz veje develop po uspešnem testiranju. Vlogo produkcijske veje prevzema main; ob stabilni različici se na njej ustvari oznaka (tag).
Razvojna veja develop Aktivna razvojna veja, kamor se združujejo zaključene funkcionalnosti (feature veje). Osnova za vse razvojne aktivnosti.
Veje za funkcionalnosti feature/ime-funkcionalnosti Ločena veja za razvoj vsake posamezne funkcionalnosti. Po zaključku se združi nazaj v vejo develop.

Trenutne veje v repozitoriju:

  • main — glavna stabilna (produkcijska) veja
  • develop — aktivna razvojna veja
  • feature/growth-color-model — razvoj modela za napoved rasti in barve
  • feature/recommending-system — razvoj priporočilnega sistema
  • feature/stm32_communications — razvoj komunikacije s senzorji STM32
  • feature/user-interface — razvoj grafičnega vmesnika
  • feature/CI-CD — vzpostavitev sprotne integracije

2.2 Potek dela z vejami

Potek dela v okviru metodologije Gitflow poteka na naslednji način:

1. Ustvaritev nove feature veje iz veje develop:

git checkout develop
git pull origin develop
git checkout -b feature/ime-funkcionalnosti

2. Redno ustvarjanje potrditev med razvojem:

git add .
git commit -m "DEV-12 Dodaj branje intenzitete svetlobe"
git push origin feature/ime-funkcionalnosti

3. Po zaključku razvoja član ustvari zahtevo za združitev (Pull Request) v vejo develop. Ostali člani pregledajo kodo, podajo komentarje in po odobritvi se feature veja združi v develop, kot je prikazano na Sliki 4.

4. Po uspešnem testiranju se veja develop združi v vejo main, kjer se za stabilno različico ustvari oznaka:

git checkout main
git merge develop
git tag -a v1.0 -m "Različica 1.0"

Slika 3: Pregled vej v repozitoriju GitHub

Slika 4: Primer Pull Request iz feature veje v vejo develop


3. Integracija z Jiro

Za povezavo med repozitorijem GitHub in sistemom za vodenje projekta Jira smo uporabili integracijo GitHub for Jira. Povezava omogoča, da se potrditve (commits) in feature veje samodejno prikažejo pri ustreznem opravilu v Jiri, in sicer na podlagi navedbe ključa opravila v sporočilu potrditve.

Pri vsakem commitu na začetku sporočila navedemo ključ opravila iz Jire (DEV-<številka>), ki mu sledi kratek opis spremembe:

DEV-<številka> kratek opis spremembe

Primeri dejansko uporabljenih commit sporočil:

DEV-58 Code structure cleanup: split pages, add models and database
DEV-59 BugFix - TclError "bad screen distance" when opening Dashboard
DEV-60 Implement dark/light theme toggle
DEV-63 Detection model untrained — replace with trained EfficientNetB0 CNN

Opomba: Ključ opravila (npr. DEV-58) na začetku sporočila omogoča, da integracija GitHub for Jira commit samodejno poveže z ustreznim opravilom v Jiri. Povezane potrditve so vidne v razdelku Development posameznega opravila.

Slika 5: Primer commit sporočila z navedbo opravila iz Jire


4. Sledenje napakam in predlogom (GitHub Issues)

Poleg opravil v Jiri smo za sprotno beleženje napak, znanih omejitev in predlogov izboljšav uporabljali tudi GitHub Issues. Issues omogočajo, da so težave in nadaljnje naloge dokumentirane neposredno ob kodi, dodeljene posameznim članom ter po potrebi povezane s spremembami (commiti in Pull Requesti).

Vsako issue vsebuje naslov, opis težave oziroma predloga, dodeljeno osebo (Assignee) in stanje (odprto / zaprto). Med razvojem smo zabeležili med drugim naslednje issue-je:

  • Dockerization works only on Ubuntu/Linux — kontejnerizacija je trenutno podprta le na okolju Ubuntu/Linux.
  • Plant-height models are not calibrated against ground truth — modeli za oceno višine niso umerjeni glede na referenčne meritve.
  • Detection model is untrained — predictions not reliable — model za zaznavanje zdravja je bilo treba dodatno naučiti (kasneje rešeno z učenjem modela EfficientNetB0 na slikah celotnih rastlin).
  • Add unit tests and verify CI workflow runs — dodajanje testov enot in preverjanje delovanja CI.
  • Do not version-control runtime data (ui/plants_data.json) — izvajalni (runtime) podatki naj ne bodo pod verzioniranjem.

Z beleženjem issue-jev zagotavljamo preglednost znanih omejitev in nadaljnjih korakov razvoja.

Slika 6: Pregled zabeleženih GitHub Issues


5. Sprotna integracija (CI/CD)

V repozitoriju smo vzpostavili sprotno integracijo (Continuous Integration / Continuous Deployment — CI/CD) s pomočjo orodja GitHub Actions. Sprotna integracija zagotavlja samodejno testiranje in preverjanje kakovosti kode ob vsaki novi potrditvi (commit), kar zmanjšuje tveganje za napake in zagotavlja stabilnost kode.

Konfiguracija se nahaja v datotekah v mapi .github/workflows/ v korenu repozitorija. Vzpostavili smo dva ločena poteka (workflow):

  • CI — razvojna veja — samodejno testiranje enot ob vsakem commitu na vejo develop in pri Pull Requestih,
  • CD — produkcija — samodejno prevajanje in objava ob vsakem commitu na vejo main.
# CI - razvojna veja
name: CI - Development branch
on:
  push:
    branches: [ develop ]
  pull_request:
    branches: [ develop ]

jobs:
  test:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v3
      - name: Set up Python
        uses: actions/setup-python@v4
        with:
          python-version: '3.11'
      - name: Install dependencies
        run: pip install -r requirements.txt
      - name: Run tests
        run: pytest tests/ -v

Na razvojni veji (develop) se ob vsakem commitu samodejno izvedejo testi enot. Na glavni veji (main) pa se koda samodejno prevede in objavi. Člani skupine prejmejo e-poštno obvestilo o uspehu ali napaki posameznega koraka.

Slika 7: Pregled potekov GitHub Actions (zavihek Actions)

Slika 8: Podroben prikaz poteka (pipeline) v orodju GitHub Actions


6. Zaključek

Z vzpostavitvijo repozitorija na platformi GitHub in uvedbo metodologije Gitflow smo zagotovili strukturirano upravljanje s programsko kodo študentskega projekta. Jasna delitev na veje main, develop in feature/* omogoča vzporeden razvoj funkcionalnosti brez tveganja za nestabilnost produkcijske kode.

Navedba ključev opravil iz Jire v commit sporočilih zagotavlja sledljivost med opravili v sistemu za vodenje projekta in posameznimi potrditvami kode. Beleženje znanih omejitev prek GitHub Issues ohranja preglednost nad nadaljnjimi koraki, vzpostavljena sprotna integracija (CI/CD) z GitHub Actions pa zagotavlja samodejno testiranje in objavo kode, kar zmanjšuje možnost vnosa napak in pospešuje postopek objave novih različic aplikacije.


Zadnja posodobitev: junij 2026