1
1
import argparse
2
2
import logging
3
- from typing import cast
3
+ from typing import Literal , cast
4
4
5
- from .ci_matrix import generate_matrix
5
+ from .build_matrix import build_matrix
6
6
from .dockerfiles import render_dockerfile_with_context
7
- from .readme import format_supported_versions , update_dynamic_readme
7
+ from .readme import update_dynamic_readme
8
8
from .settings import DISTROS
9
9
from .versions import (
10
10
decide_version_combinations ,
11
- fetch_supported_nodejs_versions ,
12
11
find_new_or_updated ,
13
- load_versions ,
14
12
persist_versions ,
15
- scrape_supported_python_versions ,
13
+ supported_versions ,
16
14
)
17
15
18
16
logger = logging .getLogger ("dpn" )
21
19
class CLIArgs (argparse .Namespace ):
22
20
dry_run : bool
23
21
distros : list [str ]
24
- ci_matrix : bool
25
- dockerfile_with_context : str
26
- ci_event : str
27
- release : bool
28
- force : bool
29
22
verbose : bool
23
+ command : Literal ["dockerfile" , "build-matrix" , "release" ]
24
+ force : bool # build-matrix and release command arg
30
25
26
+ context : str # dockerfile command arg
27
+ event : str # build-matrix command arg
31
28
32
- def main (args : CLIArgs ) -> None :
33
- if args .dry_run :
34
- logger .debug ("Dry run, outputing only." )
35
29
36
- if args .dockerfile_with_context :
37
- render_dockerfile_with_context (args .dockerfile_with_context , args .dry_run )
38
- return
30
+ def run_dockerfile (args : CLIArgs ) -> None :
31
+ render_dockerfile_with_context (args .context , args .dry_run )
39
32
40
- current_versions = load_versions ()
41
- suported_python_versions = scrape_supported_python_versions ()
42
- suported_nodejs_versions = fetch_supported_nodejs_versions ()
43
- supported_versions = format_supported_versions (suported_python_versions , suported_nodejs_versions )
44
- logger .debug (f"Found the following supported versions:\n { supported_versions } " )
45
33
34
+ def run_build_matrix (args : CLIArgs ) -> None :
35
+ suported_python_versions , suported_nodejs_versions = supported_versions ()
46
36
versions = decide_version_combinations (args .distros , suported_python_versions , suported_nodejs_versions )
47
- new_or_updated = find_new_or_updated (current_versions , versions , args .force )
37
+ new_or_updated = find_new_or_updated (versions , args .force )
38
+ build_matrix (new_or_updated , args .event )
39
+
48
40
49
- if args .ci_matrix :
50
- generate_matrix (new_or_updated , args .ci_event )
41
+ def run_release (args : CLIArgs ) -> None :
42
+ suported_python_versions , suported_nodejs_versions = supported_versions ()
43
+ versions = decide_version_combinations (args .distros , suported_python_versions , suported_nodejs_versions )
44
+ new_or_updated = find_new_or_updated (versions , args .force )
51
45
52
- if not new_or_updated and not args . ci_matrix :
46
+ if not new_or_updated :
53
47
logger .info ("No new or updated versions" )
54
48
return
55
49
56
- if args .release :
57
- persist_versions (versions , args .dry_run )
58
- update_dynamic_readme (versions , suported_python_versions , suported_nodejs_versions , args .dry_run )
50
+ persist_versions (versions , args .dry_run )
51
+ update_dynamic_readme (versions , suported_python_versions , suported_nodejs_versions , args .dry_run )
52
+
53
+
54
+ def main (args : CLIArgs ) -> None :
55
+ if args .dry_run :
56
+ logger .debug ("Dry run, outputing only." )
57
+
58
+ if args .command == "dockerfile" :
59
+ run_dockerfile (args )
60
+ elif args .command == "build-matrix" :
61
+ run_build_matrix (args )
62
+ elif args .command == "release" :
63
+ run_release (args )
59
64
60
65
61
66
def parse_args () -> CLIArgs :
@@ -75,16 +80,21 @@ def parse_args() -> CLIArgs:
75
80
dest = "dry_run" ,
76
81
help = "Skip persisting, README update, and pushing of builds" ,
77
82
)
78
- parser .add_argument ("--ci-matrix" , action = "store_true" , help = "Generate CI build matrix" )
79
- parser .add_argument (
80
- "--ci-event" ,
83
+ parser .add_argument ("--force" , action = "store_true" , help = "Force build all versions (even old)" )
84
+ parser .add_argument ("--verbose" , action = "store_true" , help = "Enable debug logging" )
85
+
86
+ subparsers = parser .add_subparsers (dest = "command" , help = "Sub-commands" )
87
+ # Dockerfile command
88
+ parser_dockerfile = subparsers .add_parser ("dockerfile" , help = "Render a dockerfile based on version config" )
89
+ parser_dockerfile .add_argument ("context" , default = "" , help = "Dockerfile version config" )
90
+ # Build matrix command
91
+ parser_build_matrix = subparsers .add_parser ("build-matrix" , help = "Generate CI build matrix" )
92
+ parser_build_matrix .add_argument (
93
+ "--event" ,
81
94
default = "webhook" ,
82
95
# https://docs.github.com/en/actions/learn-github-actions/contexts#github-context
83
96
help = "GitHub Action event name (github.event_name)" ,
84
97
)
85
- parser .add_argument ("--release" , action = "store_true" , help = "Persist versions and make a release" )
86
- parser .add_argument ("--dockerfile-with-context" , default = "" , help = "Render a dockerfile based on version config" )
87
- parser .add_argument ("--force" , action = "store_true" , help = "Force build all versions (even old)" )
88
- parser .add_argument ("--verbose" , action = "store_true" , help = "Enable debug logging" )
89
-
98
+ # Release command
99
+ subparsers .add_parser ("release" , help = "Persist versions and make a release" )
90
100
return cast (CLIArgs , parser .parse_args ())
0 commit comments