Skip to content

Commit

Permalink
added -M option to show generated man page
Browse files Browse the repository at this point in the history
Ticket: ENT-11824
Changelog: None
Signed-off-by: Mikita Pilinka <[email protected]>
  • Loading branch information
mineralsfree committed Jun 7, 2024
1 parent 3d88acc commit 15b05a9
Show file tree
Hide file tree
Showing 6 changed files with 208 additions and 4 deletions.
46 changes: 46 additions & 0 deletions .github/workflows/python-update-manual.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,46 @@
name: Check-update manual page
on:
push:
branches: [ master ]
paths:
- cfbs/args.py
- setup.py
- cfbs/man_generator.py
jobs:
diff-detecton:
runs-on: ubuntu-latest
steps:
- name: checkout repo content
uses: actions/checkout@v3
- name: setup python
uses: actions/setup-python@v4
with:
python: 3.9
- name: Install cfbs
run: pip3 install .
- name: Install dependencies
run: pip3 install argparse-manpage
- name: run the manual generator
run: python cfbs/man_generator.py
- name: see if there are any changes
run: |
git diff --exit-code || touch git_diff_exists
if [ -f git_diff_exists ]; then echo "Changes need to be commited"; else echo "No changes to commit"; fi
- name: Commit new manual file
if: hashFiles('git_diff_exists') != ''
run: |
git config user.name 'GitHub'
git config user.email '<[email protected]>'
git add cfbs/cfbs.1
- name: Create Pull Request
if: hashFiles('git_diff_exists') != ''
uses: cfengine/create-pull-request@v6
with:
commit-message: 'updates to cfbs manual page'
base: 'master'
title: Manual page updated
body: ''
reviewers: |
olehermanse
nickanderson
branch: updating/manual
21 changes: 20 additions & 1 deletion cfbs/args.py
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
import argparse
import os

from cfbs import commands
from cfbs.utils import cache
Expand All @@ -15,10 +16,27 @@ def print_help():
parser.print_help()


def get_arg_parser():
return _get_arg_parser()


def get_manual():
try:
print(os.path.dirname(__file__) + "/cfbs.1")
with open(
os.path.dirname(__file__) + "/cfbs.1", "r", encoding="utf-8"
) as man_file:
man = man_file.read()
if man:
return man
except:
raise Exception("No manual page was generated")


@cache
def _get_arg_parser():
command_list = commands.get_command_names()
parser = argparse.ArgumentParser(description="CFEngine Build System.")
parser = argparse.ArgumentParser(prog="cfbs", description="CFEngine Build System.")
parser.add_argument(
"command",
metavar="cmd",
Expand All @@ -34,6 +52,7 @@ def _get_arg_parser():
type=str,
default="warning",
)
parser.add_argument("-M", "--manual", help="Print manual page", action="store_true")
parser.add_argument(
"--version", "-V", help="Print version number", action="store_true"
)
Expand Down
97 changes: 97 additions & 0 deletions cfbs/cfbs.1
Original file line number Diff line number Diff line change
@@ -0,0 +1,97 @@
.TH CFBS "1" "2024\-06\-07" "cfbs" "CFEngine Build System manual"
.SH NAME
cfbs \- combines multiple modules into 1 policy set to deploy on your infrastructure. Modules can be custom promise types, JSON files which enable certain functionality, or reusable CFEngine policy. The modules you use can be written by the CFEngine team, others in the community, your colleagues, or yourself.
.SH SYNOPSIS
.B cfbs
[-h] [--loglevel LOGLEVEL] [-M] [--version] [--force] [--non-interactive] [--index INDEX] [--check] [--checksum CHECKSUM] [--keep-order] [--git {yes,no}] [--git-user-name GIT_USER_NAME] [--git-user-email GIT_USER_EMAIL] [--git-commit-message GIT_COMMIT_MESSAGE] [--ignore-versions-json] [--masterfiles MASTERFILES] [cmd] [args ...]
.SH DESCRIPTION
CFEngine Build System.

.TP
\fBcmd\fR
The command to perform (pretty, init, status, search, add, remove, clean, update, validate, download, build, install, help, info, show, input, set\-input, get\-input)

.TP
\fBargs\fR
Command arguments

.SH OPTIONS
.TP
\fB\-\-loglevel\fR \fI\,LOGLEVEL\/\fR, \fB\-l\fR \fI\,LOGLEVEL\/\fR
Set log level for more/less detailed output

.TP
\fB\-M\fR, \fB\-\-manual\fR
Print manual page

.TP
\fB\-\-version\fR, \fB\-V\fR
Print version number

.TP
\fB\-\-force\fR
Force rebuild / redownload

.TP
\fB\-\-non\-interactive\fR
Don't prompt, use defaults (only for testing)

.TP
\fB\-\-index\fR \fI\,INDEX\/\fR
Specify alternate index

.TP
\fB\-\-check\fR
Check if file(s) would be reformatted

.TP
\fB\-\-checksum\fR \fI\,CHECKSUM\/\fR
Expected checksum of the downloaded file

.TP
\fB\-\-keep\-order\fR
Keep order of items in the JSON in 'cfbs pretty'

.TP
\fB\-\-git\fR \fI\,{yes,no}\/\fR
Override git option in cfbs.json

.TP
\fB\-\-git\-user\-name\fR \fI\,GIT_USER_NAME\/\fR
Specify git user name

.TP
\fB\-\-git\-user\-email\fR \fI\,GIT_USER_EMAIL\/\fR
Specify git user email

.TP
\fB\-\-git\-commit\-message\fR \fI\,GIT_COMMIT_MESSAGE\/\fR
Specify git commit message

.TP
\fB\-\-ignore\-versions\-json\fR
Ignore versions.json. Necessary in case of a custom index or testing changes to the default index.

.TP
\fB\-\-masterfiles\fR \fI\,MASTERFILES\/\fR
Add masterfiles on cfbs init choose between

.br
Binary packages may be downloaded from https://cfengine.com/download/.
.br
The source code is available at https://github.com/cfengine/
.SH BUGS
Please see the public bug-tracker at https://northerntech.atlassian.net/projects/CFE/.
.br
GitHub pull-requests may be submitted to https://github.com/cfengine/cfbs.
.SH "SEE ALSO"
.BR cf-promises (8),
.BR cf-agent (8),
.BR cf-serverd (8),
.BR cf-execd (8),
.BR cf-monitord (8),
.BR cf-runagent (8),
.BR cf-key (8)
.SH AUTHOR
Northern.tech AS

6 changes: 4 additions & 2 deletions cfbs/main.py
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@
from cfbs.utils import user_error, is_cfbs_repo, ProgrammerError
from cfbs.cfbs_config import CFBSConfig
from cfbs import commands
from cfbs.args import get_args, print_help
from cfbs.args import get_args, print_help, get_manual


def init_logging(level):
Expand All @@ -36,7 +36,9 @@ def init_logging(level):
def main() -> int:
args = get_args()
init_logging(args.loglevel)

if args.manual:
print(get_manual())
return 0
if args.version:
print("cfbs %s" % version())
return 0
Expand Down
38 changes: 38 additions & 0 deletions cfbs/man_generator.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,38 @@
from build_manpages.manpage import Manpage
from args import get_arg_parser
import os


def generate_man_page():
manpage = Manpage(get_arg_parser())
manpage.manual = "CFEngine Build System manual"
manpage.description = "combines multiple modules into 1 policy set to deploy on your infrastructure. Modules can be custom promise types, JSON files which enable certain functionality, or reusable CFEngine policy. The modules you use can be written by the CFEngine team, others in the community, your colleagues, or yourself."
body = str(manpage)
body = body + (
"""
.br
Binary packages may be downloaded from https://cfengine.com/download/.
.br
The source code is available at https://github.com/cfengine/
.SH BUGS
Please see the public bug-tracker at https://northerntech.atlassian.net/projects/CFE/.
.br
GitHub pull-requests may be submitted to https://github.com/cfengine/cfbs.
.SH "SEE ALSO"
.BR cf-promises (8),
.BR cf-agent (8),
.BR cf-serverd (8),
.BR cf-execd (8),
.BR cf-monitord (8),
.BR cf-runagent (8),
.BR cf-key (8)
.SH AUTHOR
Northern.tech AS
"""
)
with open(os.path.dirname(__file__) + "/cfbs.1", "w", encoding="utf-8") as man_file:
man_file.write(body)
return body


generate_man_page()
4 changes: 3 additions & 1 deletion setup.py
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,8 @@
with open("cfbs/VERSION", "w", encoding="utf-8") as fh:
fh.write("%s\n" % cfbs_version)

assert os.path.isfile("cfbs/cfbs.1")

with open("README.md", "r", encoding="utf-8") as fh:
long_description = fh.read()

Expand All @@ -35,7 +37,7 @@
long_description_content_type="text/markdown",
url="https://github.com/cfengine/cfbs",
packages=setuptools.find_packages(exclude=["tests*"]),
package_data={"cfbs": ["VERSION"]},
package_data={"cfbs": ["VERSION", "cfbs.1"]},
include_package_data=True,
classifiers=[
"Programming Language :: Python :: 3",
Expand Down

0 comments on commit 15b05a9

Please sign in to comment.