# eweOS User Repository (Draft)
## Repositories
- template: provide package repo example
- registry: list of packages and git endpoints (accept PRs)
- registry-data: content of EUR, stores collected info about packages
## Directory Structure of User Repository
```
git://endpoint/repo.git
/
.SRCINFO (Required): workflow reads/checks this file and writes to registry
PKGBUILD (Required): workflow also checks (but not source) this file and report errors
build_files (Optional)
```
## Directory Structure of Package Registry
```
git://github.com/eweOS-UserRepo/repos.git
/
.github/workflow/
packages/
{packagebase1}.json
{packagebase2}.json
{packagebase3}.json
...
workflow/
```
### Structure of `{pkgbase}.json`
```
{
"endpoint": "git://endpoint/repo.git",
"branch": "master (optional)",
"keyword": ["keyword1","keyword2"],
"maintainer": "User <user@user.com>",
"maintainer": "Alternative <user[at]user[dot]com>",
"deprecated": false
...... (WIP)
}
```
## Directory Structure of Package Data Registry (Generated)
WIP
```
/
packages.json: brief list
packages/
{packagebase1}.json
{packagebase2}.json
......
```
### Structure of `packages.json`
```
{
"packages": [
{
"pkgname": "pkgname1",
"pkgdesc": "A simple package",
"pkgver": "1.14.5.14",
"maintainer": "Test <test[at]test[dot].com>",
"lastupdated": 1145141919,
"flags": [
"sync_fail",
"invalid_pkgbuild",
"deprecated",
......
]
},
......
],
"updated": 1145141919
}
```
### Structure of `{packagebase}.json`
```
```
## Workflow
```
Package 1 --+
|
Package 2 --+
| +--> Database (Cloudflare)
Package 3 --+ |
+---> Workflow --+
Package 4 --+ |
| +--> Files in Package Registry
Package 5 --+
|
Package 6 --+
```
### Add package
- open PR
- workflow triggered
- try connect to git endpoint (report if failure)
- checkout .SRCINFO, extract info
- checkout PKGBUILD, do rule-based check (fail if something wrong)
- approve PR
### Update info
- cron job triggered / manually triggered
- try connect to git endpoint (report if failure)
- compare HEAD sha (do nothing if no change)
- checkout .SRCINFO, extract info
- checkout PKGBUILD, do rule-based check (tag to info if something wrong)
- update check timestamp