No description
Find a file
Zakaria Aourzag 4d7597a18b
Some checks failed
ci.yml / refactor: streamline report handling and validation logic (push) Failing after 0s
refactor: streamline report handling and validation logic
- Removed Makefile as it was no longer needed.
- Updated listReports and report commands to utilize new report validation and loading functions.
- Consolidated report validation logic into a single function for better maintainability.
- Added comprehensive tests for report validation, loading, and filtering functionalities.
- Introduced a new reportstore.go file to encapsulate report-related operations.
- Deleted outdated SignPath setup documentation.
2025-11-13 13:48:55 +01:00
.forgejo/workflows Remove redundant 'runs-on: docker' lines from CI workflow 2025-10-09 13:58:35 +02:00
cmd refactor: streamline report handling and validation logic 2025-11-13 13:48:55 +01:00
util refactor: streamline report handling and validation logic 2025-11-13 13:48:55 +01:00
.gitignore cleanup 2025-10-09 13:29:38 +02:00
.goreleaser.yaml Reorganize release section in .goreleaser.yaml for clarity and maintainability 2025-10-09 15:47:46 +02:00
example-reports.json cleanup 2025-10-09 12:49:03 +02:00
go.mod cleanup 2025-10-09 12:32:34 +02:00
go.sum cleanup 2025-10-09 12:32:34 +02:00
LICENSE initial commit 2025-10-09 12:13:00 +02:00
main.go cleanup 2025-10-09 12:32:34 +02:00
README.MD docs: Simplify README.md content 2025-10-09 22:45:15 +02:00

Go Version License

Een command-line applicatie voor het beheren van bug reports,

Vereisten

  • Go 1.24.3 of hoger
  • Git (optioneel)

Stappen

  1. Clone of download het project:
git clone https://forgejo.nas.zakariao.nl/skillsheroes/skillsheroes2025.git
cd skillsheroes2025
  1. Installeer dependencies:
go mod download
  1. Build de applicatie:
go build -o skillsheroes.exe
  1. (Optioneel) Run zonder te builden:
go run main.go [command] [flags]

💻 Gebruik

Commando's

De applicatie heeft twee hoofdcommando's:

1. add-report - Voeg een nieuw rapport toe

Voegt een bug report toe aan het systeem.

Verplichte parameters:

  • --title - De titel van het rapport
  • --description - Beschrijving van het probleem
  • --priority - Prioriteit: low, medium, of high
  • --status - Status: open, in_progress, of closed

Voorbeelden:

# Basis gebruik
.\skillsheroes.exe add-report --title "Login bug" --description "Gebruikers kunnen niet inloggen" --priority "high" --status "open"

# Met go run
go run main.go add-report --title "UI probleem" --description "Knop is niet klikbaar" --priority "medium" --status "open"

# Verschillende prioriteiten
.\skillsheroes.exe add-report --title "Langzame performance" --description "Pagina laadt traag" --priority "low" --status "in_progress"

Output:

Report added successfully!
[
  {
    "title": "Login bug",
    "description": "Gebruikers kunnen niet inloggen",
    "priority": "high",
    "status": "open"
  }
]

2. list-reports - Toon alle rapporten

Toont alle bug reports gefilterd op status en optioneel op prioriteit.

Verplichte parameters:

  • --status - Filter op status: open, in_progress, of closed

Optionele parameters:

  • --priority - Filter ook op prioriteit: low, medium, of high

Voorbeelden:

# Alle open rapporten
.\skillsheroes.exe list-reports --status open

# Open rapporten met hoge prioriteit
.\skillsheroes.exe list-reports --status open --priority high

# Gesloten rapporten met lage prioriteit
.\skillsheroes.exe list-reports --status closed --priority low



**Output:**

Gevonden rapporten: 2 Filter: status=open

Report #1 Titel: Login bug Beschrijving: Gebruikers kunnen niet inloggen Prioriteit: high Status: open

Report #2 Titel: UI probleem Beschrijving: Knop is niet klikbaar Prioriteit: medium Status: open


### Help Commando's

```powershell
# Algemene help
.\skillsheroes.exe --help

# Help voor specifiek commando
.\skillsheroes.exe add-report --help
.\skillsheroes.exe list-reports --help

📁 JSON Data Bestand

Locatie en Naam

De applicatie slaat alle bug reports op in een JSON-bestand:

  • Bestandsnaam: reports.json
  • Locatie: In dezelfde map als waar je de applicatie draait (working directory)
  • Formaat: JSON array met report objecten

Structuur

[
  {
    "title": "Bug titel",
    "description": "Beschrijving van het probleem",
    "priority": "high",
    "status": "open"
  }
]

JSON Bestand Beheren

Bestand resetten/leeg maken

Er zijn meerdere manieren om het bestand leeg te maken:

Optie 1: Verwijder het bestand

# Windows PowerShell
Remove-Item reports.json

# Of handmatig via Windows Verkenner

Optie 2: Maak een leeg array

# Maak een leeg JSON bestand
echo "[]" > reports.json

Optie 3: Handmatig bewerken

  • Open reports.json in een teksteditor
  • Vervang de inhoud met: []
  • Sla op

Handmatig data toevoegen

Je kunt reports.json ook handmatig bewerken met een teksteditor. Let op:

  • Gebruik geldige JSON syntax
  • Zorg dat alle verplichte velden aanwezig zijn
  • Gebruik alleen toegestane enum waarden

🧪 Tests

De applicatie bevat unit tests voor verschillende scenario's.

Tests Uitvoeren

Alle tests draaien:

go test ./...

Tests met verbose output:

go test -v ./...

Tests met coverage:

go test -cover ./...

Coverage rapport genereren:

go test -coverprofile=coverage.out ./...
go tool cover -html=coverage.out

Specifieke package testen:

go test ./cmd
go test ./util

Test Categorieën

De tests dekken de volgende scenario's:

Goede Situaties (Happy Path)

  1. Valid Report Creation - Rapport aanmaken met alle correcte velden
  2. Valid Filtering - Rapporten filteren op status en prioriteit
  3. Multiple Reports - Meerdere rapporten toevoegen en ophalen

Foute Situaties (Error Cases)

  1. Missing Required Fields - Ontbrekende verplichte velden (title, description)
  2. Invalid Priority Enum - Verkeerde prioriteit waarde (niet low/medium/high)
  3. Invalid Status Enum - Verkeerde status waarde (niet open/in_progress/closed)
  4. Empty Values - Lege strings voor verplichte velden
  5. Filter Behavior - Correct filteren van rapporten

📂 Project Structuur

skillsheroes2025/
├── main.go                      # Entry point van de applicatie
├── go.mod                       # Go module definitie
├── go.sum                       # Dependency checksums
├── README.MD                    # Dit bestand
├── LICENSE                      # Licentie
├── reports.json                 # Data opslag (wordt automatisch aangemaakt)
├── example-reports.json         # Voorbeelddata
├── .gitignore                   # Git ignore regels
├── .forgejo/
│   └── workflows/
│       ├── ci.yml              # Continuous Integration
│       └── release.yml         # Release & Code Signing
├── cmd/                         # Cobra commando's
│   ├── root.go                 # Root commando
│   ├── report.go               # add-report commando
│   └── listReports.go          # list-reports commando
├── util/                        # Utility functies en structs
│   ├── structs.go              # Report struct definitie
│   └── structs_test.go         # Unit tests
└── docs/
    └── SIGNPATH-SETUP.md       # SignPath configuratie gids

🔄 CI/CD & Releases

Cross-Compilation op Linux

Alle builds worden gedaan op Linux omdat Forgejo geen Windows runners heeft. Go's cross-compilation support maakt het mogelijk om vanaf Linux te bouwen voor:

  • 🪟 Windows (AMD64) - Digitaal getekend met SignPath
  • 🐧 Linux (AMD64, ARM64)
  • 🍎 macOS (Intel & Apple Silicon)

Automatische Pipeline

Bij elke push naar main/master/develop:

  • Tests met race detection
  • Cross-compile voor alle platforms
  • Coverage rapportage (minimum 50%)
  • Code quality checks (go vet, go fmt)
  • Artifacts beschikbaar voor 7 dagen

Bij nieuwe tag (bijv. v1.0.0):

  • 🔨 Cross-compile op Linux voor alle platforms
  • 🔐 Windows .exe digitaal tekenen met SignPath
  • 🚀 Automatische release aanmaken
  • 📦 Upload signed binaries
  • 🔒 Generate SHA256 checksums
  • 📝 Release notes met installatie instructies

Een Release Maken

# Tag een nieuwe versie
git tag -a v1.0.0 -m "Release v1.0.0"
git push origin v1.0.0

# Forgejo Actions doet automatisch:
# 1. Build alle platforms op Linux
# 2. Sign Windows .exe met SignPath
# 3. Create release met alle binaries

De applicatie valideert automatisch:

  • Alle verplichte velden zijn ingevuld
  • Priority moet low, medium, of high zijn
  • Status moet open, in_progress, of closed zijn
  • JSON structuur is geldig

Error Handling

  • Duidelijke foutmeldingen bij ongeldige input
  • Validatie voordat data wordt opgeslagen
  • Graceful handling van ontbrekende bestanden

📝 Voorbeelddata

Om snel te kunnen testen, kun je dit voorbeeld reports.json bestand gebruiken:

[
  {
    "title": "Login probleem",
    "description": "Gebruikers kunnen niet inloggen met hun wachtwoord",
    "priority": "high",
    "status": "open"
  },
  {
    "title": "Trage dashboard",
    "description": "Dashboard laadt langer dan 5 seconden",
    "priority": "medium",
    "status": "in_progress"
  },
  {
    "title": "Typfout in footer",
    "description": "Copyright jaar is verkeerd",
    "priority": "low",
    "status": "closed"
  }
]

Kopieer dit naar een nieuw reports.json bestand om direct te kunnen filteren en testen.

🐛 Troubleshooting

"reports.json not found"

  • Dit is normaal bij eerste gebruik
  • Het bestand wordt automatisch aangemaakt bij het eerste add-report commando

"invalid value for --priority"

  • Controleer of je low, medium, of high gebruikt (lowercase)
  • Gebruik geen hoofdletters of andere waarden

"invalid value for --status"

  • Gebruik alleen open, in_progress, of closed (lowercase)
  • Let op de underscore in in_progress

Build errors

  • Controleer of Go correct is geïnstalleerd: go version
  • Run go mod tidy om dependencies op te schonen
  • Verwijder go.sum en run go mod download opnieuw

👤 Auteur

Zakaria Aourzag

📄 Licentie

Copyright © 2025 Zakaria Aourzag


Gemaakt met ❤️ voor SkillsHeroes