Skip to content

Commit aed33e4

Browse files
committed
RADAS: Add sign command skeleton
1 parent 460bfe3 commit aed33e4

File tree

2 files changed

+153
-0
lines changed

2 files changed

+153
-0
lines changed

charon/cmd/__init__.py

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@
1919
from charon.cmd.cmd_index import index
2020
from charon.cmd.cmd_checksum import init_checksum, checksum
2121
from charon.cmd.cmd_cache import init_cf, cf
22+
from charon.cmd.cmd_sign import sign
2223

2324

2425
@group()
@@ -43,3 +44,6 @@ def cli(ctx):
4344
# init checksum command
4445
init_checksum()
4546
cli.add_command(checksum)
47+
48+
# radas sign cmd
49+
cli.add_command(sign)

charon/cmd/cmd_sign.py

Lines changed: 149 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,149 @@
1+
"""
2+
Copyright (C) 2022 Red Hat, Inc. (https://github.com/Commonjava/charon)
3+
4+
Licensed under the Apache License, Version 2.0 (the "License");
5+
you may not use this file except in compliance with the License.
6+
You may obtain a copy of the License at
7+
8+
http://www.apache.org/licenses/LICENSE-2.0
9+
10+
Unless required by applicable law or agreed to in writing, software
11+
distributed under the License is distributed on an "AS IS" BASIS,
12+
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13+
See the License for the specific language governing permissions and
14+
limitations under the License.
15+
"""
16+
from typing import List
17+
18+
from charon.config import get_config, RadasConfig
19+
from charon.cmd.internal import (
20+
_decide_mode, _safe_delete
21+
)
22+
from click import command, option, argument
23+
24+
import traceback
25+
import logging
26+
import sys
27+
import datetime
28+
29+
logger = logging.getLogger(__name__)
30+
31+
32+
@argument(
33+
"repo_url",
34+
type=str
35+
)
36+
@option(
37+
"--requester",
38+
"-r",
39+
help="""
40+
The requester who sends the signing request.
41+
"""
42+
)
43+
@option(
44+
"--result_path",
45+
"-p",
46+
help="""
47+
The path which will save the sign result file.
48+
"""
49+
)
50+
@option(
51+
"--ignore_patterns",
52+
"-i",
53+
multiple=True,
54+
help="""
55+
The regex patterns list to filter out the files which should
56+
not be allowed to upload to S3. Can accept more than one pattern.
57+
"""
58+
)
59+
@option(
60+
"--work_dir",
61+
"-w",
62+
help="""
63+
The temporary working directory into which archives should
64+
be extracted, when needed.
65+
"""
66+
)
67+
@option(
68+
"--config",
69+
"-c",
70+
help="""
71+
The charon configuration yaml file path. Default is
72+
$HOME/.charon/charon.yaml
73+
"""
74+
)
75+
@option(
76+
"--sign_key",
77+
"-k",
78+
help="""
79+
rpm-sign key to be used, will replace {{ key }} in default configuration for signature.
80+
Does noting if detach_signature_command does not contain {{ key }} field.
81+
"""
82+
)
83+
@option(
84+
"--debug",
85+
"-D",
86+
help="Debug mode, will print all debug logs for problem tracking.",
87+
is_flag=True,
88+
default=False
89+
)
90+
@option(
91+
"--quiet",
92+
"-q",
93+
help="Quiet mode, will shrink most of the logs except warning and errors.",
94+
is_flag=True,
95+
default=False
96+
)
97+
@command()
98+
def sign(
99+
repo_url: str,
100+
requester: str,
101+
result_path: str,
102+
ignore_patterns: List[str] = None,
103+
work_dir: str = None,
104+
config: str = None,
105+
sign_key: str = "redhatdevel",
106+
debug=False,
107+
quiet=False,
108+
dryrun=False
109+
):
110+
"""Do signing against files in the repo zip in repo_url through
111+
radas service. The repo_url points to the maven zip repository
112+
in quay.io, which will be sent as the source of the signing.
113+
"""
114+
tmp_dir = work_dir
115+
logger.debug("%s", ignore_patterns)
116+
try:
117+
current = datetime.datetime.now().strftime("%Y%m%d%I%M")
118+
_decide_mode("radas_sign", current, is_quiet=quiet, is_debug=debug)
119+
if dryrun:
120+
logger.info("Running in dry-run mode, no files will signed.")
121+
conf = get_config(config)
122+
if not conf:
123+
logger.error("The charon configuration is not valid!")
124+
sys.exit(1)
125+
radas_conf = conf.get_radas_config()
126+
if not radas_conf or not radas_conf.validate():
127+
logger.error("The configuration for radas is not valid!")
128+
sys.exit(1)
129+
sign_in_radas(repo_url, requester, sign_key, result_path, radas_conf, dryrun)
130+
except Exception:
131+
print(traceback.format_exc())
132+
sys.exit(2) # distinguish between exception and bad config or bad state
133+
finally:
134+
if not debug and tmp_dir:
135+
_safe_delete(tmp_dir)
136+
137+
def sign_in_radas(repo_url: str,
138+
requester: str,
139+
sign_key: str,
140+
result_path: str,
141+
radas_config: RadasConfig):
142+
'''This function will be responsible to do the overall controlling of the whole process,
143+
like trigger the send and register the receiver, and control the wait and timeout there.
144+
'''
145+
logger.debug(f"""params. repo_url: {repo_url}, requester: {requester},
146+
sign_key: {sign_key}, result_path: {result_path},
147+
radas_config: {radas_config}""")
148+
logger.info("Not implemented yet!")
149+
pass

0 commit comments

Comments
 (0)