Compare commits

...

6 Commits

9 changed files with 100 additions and 4 deletions

1
.gitignore vendored
View File

@ -26,3 +26,4 @@ gdb.txt
# Generated docs
_docs/
/man/

View File

@ -0,0 +1,36 @@
platform: 'linux/amd64'
branches:
exclude: [ main ]
depends_on:
- build
skip_clone: true
pipeline:
generate:
image: 'chewingbever/vlang:latest'
pull: true
commands:
- curl -o vieter -L "https://s3.rustybever.be/vieter/commits/$CI_COMMIT_SHA/vieter-linux-amd64"
- chmod +x vieter
- ./vieter man man
- cd man
# Generate an HTML page from each man page
- for f in $(ls -1 *.1); do mandoc -Thtml -O style=mandoc.css,man=%N.%S.html $f > "$f.html"; done
# Download the mandoc.css file from the official site
- curl -o mandoc.css -L https://mandoc.bsd.lv/mandoc.css
- tar czvf ../man.tar.gz *.html mandoc.css
deploy:
image: 'curlimages/curl'
secrets:
- 'site_api_key'
commands:
- 'curl -XPOST --fail -s -H "Authorization: Bearer $SITE_API_KEY" -T man.tar.gz https://rustybever.be/api/deploy?dir=man-vieter'
when:
event: push
branch: dev

View File

@ -15,6 +15,9 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
* GitRepo: filter by repo
* BuildLog: filter by start & end date, repo, exit code & arch
* CLI flags to take advantage of above API improvements
* Added CLI command to generate all man pages
* PKGBUILDs now install man pages
* CLI man pages are now hosted on https://rustybever.be
### Changed

View File

@ -60,6 +60,11 @@ api-docs:
rm -rf '$(SRC_DIR)/_docs'
cd '$(SRC_DIR)' && v doc -all -f html -m -readme .
.PHONY: man
man: vieter
rm -rf man
./vieter man man
# =====OTHER=====
.PHONY: lint

View File

@ -5,6 +5,7 @@ pkgbase='vieter'
pkgname='vieter'
pkgver='0.3.0_alpha.2'
pkgrel=1
pkgdesc="Vieter is a lightweight implementation of an Arch repository server."
depends=('glibc' 'openssl' 'libarchive' 'sqlite')
makedepends=('git' 'vieter-v')
arch=('x86_64' 'aarch64')
@ -17,11 +18,17 @@ build() {
cd "$pkgname"
make prod
# The default CFLAGS for some reason causes vieter to segfault if used
# inside the PKGBUILD. As a workaround, we use tcc to build a debug build
# that does work, so we can generate the manpages.
CFLAGS= LDFLAGS= make man
}
package() {
pkgdesc="Vieter is a lightweight implementation of an Arch repository server."
install -dm755 "$pkgdir/usr/bin"
install -Dm755 "$pkgname/pvieter" "$pkgdir/usr/bin/vieter"
install -dm755 "$pkgdir/usr/share/man/man1"
install -Dm644 "$pkgname/man"/*.1 "$pkgdir/usr/share/man/man1"
}

View File

@ -5,6 +5,7 @@ pkgbase='vieter-git'
pkgname='vieter-git'
pkgver=0.2.0.r25.g20112b8
pkgrel=1
pkgdesc="Vieter is a lightweight implementation of an Arch repository server."
depends=('glibc' 'openssl' 'libarchive' 'sqlite')
makedepends=('git' 'vieter-v')
arch=('x86_64' 'aarch64')
@ -25,11 +26,17 @@ build() {
cd "$pkgname"
make prod
# The default CFLAGS for some reason causes vieter to segfault if used
# inside the PKGBUILD. As a workaround, we use tcc to build a debug build
# that does work, so we can generate the manpages.
CFLAGS= LDFLAGS= make man
}
package() {
pkgdesc="Vieter is a lightweight implementation of an Arch repository server."
install -dm755 "$pkgdir/usr/bin"
install -Dm755 "$pkgname/pvieter" "$pkgdir/usr/bin/vieter"
install -dm755 "$pkgdir/usr/share/man/man1"
install -Dm644 "$pkgname/man"/*.1 "$pkgdir/usr/share/man/man1"
}

View File

@ -2,6 +2,8 @@ module console
import arrays
import strings
import cli
import os
// pretty_table converts a list of string data into a pretty table. Many thanks
// to @hungrybluedev in the Vlang Discord for providing this code!
@ -54,3 +56,15 @@ pub fn pretty_table(header []string, data [][]string) ?string {
return buffer.str()
}
// export_man_pages recursively generates all man pages for the given
// cli.Command & writes them to the given directory.
pub fn export_man_pages(cmd cli.Command, path string) ? {
man := cmd.manpage()
os.write_file(os.join_path_single(path, cmd.full_name().replace(' ', '-') + '.1'),
man)?
for sub_cmd in cmd.commands {
export_man_pages(sub_cmd, path)?
}
}

View File

@ -0,0 +1,21 @@
module man
import cli
import console
import os
// cmd returns the cli submodule that handles generating man pages.
pub fn cmd() cli.Command {
return cli.Command{
name: 'man'
description: 'Generate all man pages & save them in the given directory.'
usage: 'dir'
required_args: 1
execute: fn (cmd cli.Command) ? {
root := cmd.root()
os.mkdir_all(cmd.args[0])?
console.export_man_pages(root, cmd.args[0])?
}
}
}

View File

@ -6,6 +6,7 @@ import cli
import console.git
import console.logs
import console.schedule
import console.man
import cron
fn main() {
@ -29,6 +30,7 @@ fn main() {
cron.cmd(),
logs.cmd(),
schedule.cmd(),
man.cmd(),
]
}
app.setup()