|
Some checks failed
ci.yml / refactor: streamline report handling and validation logic (push) Failing after 0s
- 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. |
||
|---|---|---|
| .forgejo/workflows | ||
| cmd | ||
| util | ||
| .gitignore | ||
| .goreleaser.yaml | ||
| example-reports.json | ||
| go.mod | ||
| go.sum | ||
| LICENSE | ||
| main.go | ||
| README.MD | ||
Een command-line applicatie voor het beheren van bug reports,
Vereisten
- Go 1.24.3 of hoger
- Git (optioneel)
Stappen
- Clone of download het project:
git clone https://forgejo.nas.zakariao.nl/skillsheroes/skillsheroes2025.git
cd skillsheroes2025
- Installeer dependencies:
go mod download
- Build de applicatie:
go build -o skillsheroes.exe
- (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, ofhigh--status- Status:open,in_progress, ofclosed
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, ofclosed
Optionele parameters:
--priority- Filter ook op prioriteit:low,medium, ofhigh
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.jsonin 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)
- Valid Report Creation - Rapport aanmaken met alle correcte velden
- Valid Filtering - Rapporten filteren op status en prioriteit
- Multiple Reports - Meerdere rapporten toevoegen en ophalen
❌ Foute Situaties (Error Cases)
- Missing Required Fields - Ontbrekende verplichte velden (title, description)
- Invalid Priority Enum - Verkeerde prioriteit waarde (niet low/medium/high)
- Invalid Status Enum - Verkeerde status waarde (niet open/in_progress/closed)
- Empty Values - Lege strings voor verplichte velden
- 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, ofhighzijn - ✅ Status moet
open,in_progress, ofclosedzijn - ✅ 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-reportcommando
"invalid value for --priority"
- Controleer of je
low,medium, ofhighgebruikt (lowercase) - Gebruik geen hoofdletters of andere waarden
"invalid value for --status"
- Gebruik alleen
open,in_progress, ofclosed(lowercase) - Let op de underscore in
in_progress
Build errors
- Controleer of Go correct is geïnstalleerd:
go version - Run
go mod tidyom dependencies op te schonen - Verwijder
go.sumen rungo mod downloadopnieuw
👤 Auteur
Zakaria Aourzag
- Email: skills@zakariao.nl
📄 Licentie
Copyright © 2025 Zakaria Aourzag
Gemaakt met ❤️ voor SkillsHeroes