Skip to content

Commit fab9cef

Browse files
tkiliasckunki
andauthored
#193: Add push and build test-container CLI commands (#194)
* Adddd push and build test-container CLI commands * Refactored test resources * Adddd API for build and push test container, because the API compatibility test expect that Co-authored-by: Christoph Kuhnke <[email protected]>
1 parent 44b6582 commit fab9cef

File tree

102 files changed

+352
-17
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

102 files changed

+352
-17
lines changed

doc/changes/changes_0.17.0.md

Lines changed: 1 addition & 1 deletion

exasol_script_languages_container_tool/cli/commands/__init__.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,3 +8,5 @@
88
from .upload import upload
99
from .security_scan import security_scan
1010
from .install_starter_scripts import install_starter_scripts
11+
from .build_test_container import build_test_container
12+
from .push_test_container import push_test_container
Lines changed: 65 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,65 @@
1+
from typing import Tuple, Optional
2+
3+
from exasol_integration_test_docker_environment.cli.cli import cli
4+
from exasol_integration_test_docker_environment.cli.options.build_options import build_options
5+
from exasol_integration_test_docker_environment.cli.options.docker_repository_options import docker_repository_options
6+
from exasol_integration_test_docker_environment.cli.options.system_options import system_options
7+
from exasol_integration_test_docker_environment.cli.termination_handler import TerminationHandler
8+
from exasol_integration_test_docker_environment.lib.api.common import add_options
9+
10+
from exasol_script_languages_container_tool.cli.options.test_container_options import test_container_options
11+
from exasol_script_languages_container_tool.lib import api
12+
13+
14+
@cli.command(short_help="Builds the test container docker image.")
15+
@add_options(test_container_options)
16+
@add_options(build_options)
17+
@add_options(docker_repository_options)
18+
@add_options(system_options)
19+
def build_test_container(
20+
test_container_folder: str,
21+
force_rebuild: bool,
22+
force_rebuild_from: Tuple[str, ...],
23+
force_pull: bool,
24+
output_directory: str,
25+
temporary_base_directory: str,
26+
log_build_context_content: bool,
27+
cache_directory: Optional[str],
28+
build_name: Optional[str],
29+
source_docker_repository_name: str,
30+
source_docker_tag_prefix: str,
31+
source_docker_username: Optional[str],
32+
source_docker_password: Optional[str],
33+
target_docker_repository_name: str,
34+
target_docker_tag_prefix: str,
35+
target_docker_username: Optional[str],
36+
target_docker_password: Optional[str],
37+
workers: int,
38+
task_dependencies_dot_file: Optional[str]):
39+
"""
40+
Builds the test container docker image.
41+
42+
The test container is used during tests of the Script-Language-Container.
43+
"""
44+
with TerminationHandler():
45+
api.build_test_container(
46+
test_container_folder=test_container_folder,
47+
force_rebuild=force_rebuild,
48+
force_rebuild_from=force_rebuild_from,
49+
force_pull=force_pull,
50+
output_directory=output_directory,
51+
temporary_base_directory=temporary_base_directory,
52+
log_build_context_content=log_build_context_content,
53+
cache_directory=cache_directory,
54+
build_name=build_name,
55+
source_docker_repository_name=source_docker_repository_name,
56+
source_docker_tag_prefix=source_docker_tag_prefix,
57+
source_docker_username=source_docker_username,
58+
source_docker_password=source_docker_password,
59+
target_docker_repository_name=target_docker_repository_name,
60+
target_docker_tag_prefix=target_docker_tag_prefix,
61+
target_docker_username=target_docker_username,
62+
target_docker_password=target_docker_password,
63+
workers=workers,
64+
task_dependencies_dot_file=task_dependencies_dot_file
65+
)
Lines changed: 64 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,64 @@
1+
from typing import Tuple, Optional
2+
3+
from exasol_integration_test_docker_environment.cli.cli import cli
4+
from exasol_integration_test_docker_environment.cli.options.build_options import build_options
5+
from exasol_integration_test_docker_environment.cli.options.docker_repository_options import docker_repository_options
6+
from exasol_integration_test_docker_environment.cli.options.system_options import system_options
7+
from exasol_integration_test_docker_environment.cli.termination_handler import TerminationHandler
8+
from exasol_integration_test_docker_environment.lib.api.common import add_options
9+
10+
from exasol_script_languages_container_tool.cli.options.test_container_options import test_container_options
11+
from exasol_script_languages_container_tool.lib import api
12+
13+
14+
@cli.command(short_help="Pushes the test container docker image to the registry.")
15+
@add_options(test_container_options)
16+
@add_options(build_options)
17+
@add_options(docker_repository_options)
18+
@add_options(system_options)
19+
def push_test_container(
20+
test_container_folder: str,
21+
force_rebuild: bool,
22+
force_rebuild_from: Tuple[str, ...],
23+
force_pull: bool,
24+
output_directory: str,
25+
temporary_base_directory: str,
26+
log_build_context_content: bool,
27+
cache_directory: Optional[str],
28+
build_name: Optional[str],
29+
source_docker_repository_name: str,
30+
source_docker_tag_prefix: str,
31+
source_docker_username: Optional[str],
32+
source_docker_password: Optional[str],
33+
target_docker_repository_name: str,
34+
target_docker_tag_prefix: str,
35+
target_docker_username: Optional[str],
36+
target_docker_password: Optional[str],
37+
workers: int,
38+
task_dependencies_dot_file: Optional[str]):
39+
"""
40+
Push the test container docker image to the registry.
41+
42+
The test container is used during tests of the Script-Language-Container.
43+
"""
44+
with TerminationHandler():
45+
api.push_test_container(
46+
test_container_folder=test_container_folder,
47+
force_rebuild=force_rebuild,
48+
force_rebuild_from=force_rebuild_from,
49+
force_pull=force_pull,
50+
output_directory=output_directory,
51+
temporary_base_directory=temporary_base_directory,
52+
log_build_context_content=log_build_context_content,
53+
cache_directory=cache_directory,
54+
build_name=build_name,
55+
source_docker_repository_name=source_docker_repository_name,
56+
source_docker_tag_prefix=source_docker_tag_prefix,
57+
source_docker_username=source_docker_username,
58+
source_docker_password=source_docker_password,
59+
target_docker_repository_name=target_docker_repository_name,
60+
target_docker_tag_prefix=target_docker_tag_prefix,
61+
target_docker_username=target_docker_username,
62+
target_docker_password=target_docker_password,
63+
workers=workers,
64+
task_dependencies_dot_file=task_dependencies_dot_file)

exasol_script_languages_container_tool/cli/commands/run_db_tests.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,8 @@
1212
from exasol_integration_test_docker_environment.cli.options.system_options import system_options
1313
from exasol_integration_test_docker_environment.cli.options.test_environment_options import test_environment_options, \
1414
docker_db_options, external_db_options
15+
16+
from exasol_script_languages_container_tool.cli.options.test_container_options import test_container_options
1517
from exasol_script_languages_container_tool.lib import api
1618
from exasol_script_languages_container_tool.lib.api import api_errors
1719

@@ -70,9 +72,7 @@
7072
@click.option('--reuse-test-environment/--no-reuse-test-environment', default=False,
7173
help="Reuse the whole test environment with docker network, test container, "
7274
"database, database setup and uploaded container")
73-
@click.option('--test-container-folder', type=click.Path(exists=True, file_okay=False, dir_okay=True),
74-
default="./test_container",
75-
help="Test folder containing 'Dockerfile', tests and test-data.")
75+
@add_options(test_container_options)
7676
@add_options(build_options)
7777
@add_options(docker_repository_options)
7878
@add_options(system_options)
Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
import click
2+
3+
TEST_CONTAINER_DEFAULT_DIRECTORY = "./test_container"
4+
5+
test_container_options = [
6+
click.option('--test-container-folder', type=click.Path(exists=True, file_okay=False, dir_okay=True),
7+
default=TEST_CONTAINER_DEFAULT_DIRECTORY,
8+
help="Test folder containing 'Dockerfile', tests and test-data.")
9+
]

exasol_script_languages_container_tool/lib/api/__init__.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,3 +9,5 @@
99
from .upload import upload
1010
from .security_scan import security_scan
1111
from .install_starter_scripts import install_starter_scripts
12+
from .build_test_container import build_test_container
13+
from .push_test_container import push_test_container
Lines changed: 56 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,56 @@
1+
from typing import Tuple, Optional
2+
3+
from exasol_integration_test_docker_environment.lib import api
4+
from exasol_integration_test_docker_environment.lib.api.common import cli_function
5+
from exasol_integration_test_docker_environment.lib.docker.images.image_info import ImageInfo
6+
7+
from exasol_script_languages_container_tool.cli.options.test_container_options import TEST_CONTAINER_DEFAULT_DIRECTORY
8+
from exasol_script_languages_container_tool.lib.tasks.test.test_container_content import build_test_container_content
9+
10+
11+
@cli_function
12+
def build_test_container(
13+
test_container_folder: str = TEST_CONTAINER_DEFAULT_DIRECTORY,
14+
force_rebuild: bool = False,
15+
force_rebuild_from: Tuple[str, ...] = tuple(),
16+
force_pull: bool = False,
17+
output_directory: str = ".build_output",
18+
temporary_base_directory: str = "/tmp",
19+
log_build_context_content: bool = False,
20+
cache_directory: Optional[str] = None,
21+
build_name: Optional[str] = None,
22+
source_docker_repository_name: str = 'exasol/script-language-container',
23+
source_docker_tag_prefix: str = '',
24+
source_docker_username: Optional[str] = None,
25+
source_docker_password: Optional[str] = None,
26+
target_docker_repository_name: str = 'exasol/script-language-container',
27+
target_docker_tag_prefix: str = '',
28+
target_docker_username: Optional[str] = None,
29+
target_docker_password: Optional[str] = None,
30+
workers: int = 5,
31+
task_dependencies_dot_file: Optional[str] = None) -> ImageInfo:
32+
"""
33+
Build the test container docker image.
34+
35+
The test container is used during tests of the Script-Language-Container.
36+
"""
37+
return api.build_test_container(
38+
test_container_content=build_test_container_content(test_container_folder),
39+
force_rebuild=force_rebuild,
40+
force_rebuild_from=force_rebuild_from,
41+
force_pull=force_pull,
42+
output_directory=output_directory,
43+
temporary_base_directory=temporary_base_directory,
44+
log_build_context_content=log_build_context_content,
45+
cache_directory=cache_directory,
46+
build_name=build_name,
47+
source_docker_repository_name=source_docker_repository_name,
48+
source_docker_tag_prefix=source_docker_tag_prefix,
49+
source_docker_username=source_docker_username,
50+
source_docker_password=source_docker_password,
51+
target_docker_repository_name=target_docker_repository_name,
52+
target_docker_tag_prefix=target_docker_tag_prefix,
53+
target_docker_username=target_docker_username,
54+
target_docker_password=target_docker_password,
55+
workers=workers,
56+
task_dependencies_dot_file=task_dependencies_dot_file)
Lines changed: 56 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,56 @@
1+
from typing import Tuple, Optional
2+
3+
from exasol_integration_test_docker_environment.lib import api
4+
from exasol_integration_test_docker_environment.lib.api.common import cli_function
5+
from exasol_integration_test_docker_environment.lib.docker.images.image_info import ImageInfo
6+
7+
from exasol_script_languages_container_tool.cli.options.test_container_options import TEST_CONTAINER_DEFAULT_DIRECTORY
8+
from exasol_script_languages_container_tool.lib.tasks.test.test_container_content import build_test_container_content
9+
10+
11+
@cli_function
12+
def push_test_container(
13+
test_container_folder: str = TEST_CONTAINER_DEFAULT_DIRECTORY,
14+
force_rebuild: bool = False,
15+
force_rebuild_from: Tuple[str, ...] = tuple(),
16+
force_pull: bool = False,
17+
output_directory: str = ".build_output",
18+
temporary_base_directory: str = "/tmp",
19+
log_build_context_content: bool = False,
20+
cache_directory: Optional[str] = None,
21+
build_name: Optional[str] = None,
22+
source_docker_repository_name: str = 'exasol/script-language-container',
23+
source_docker_tag_prefix: str = '',
24+
source_docker_username: Optional[str] = None,
25+
source_docker_password: Optional[str] = None,
26+
target_docker_repository_name: str = 'exasol/script-language-container',
27+
target_docker_tag_prefix: str = '',
28+
target_docker_username: Optional[str] = None,
29+
target_docker_password: Optional[str] = None,
30+
workers: int = 5,
31+
task_dependencies_dot_file: Optional[str] = None) -> ImageInfo:
32+
"""
33+
Push the test container docker image to the registry.
34+
35+
The test container is used during tests of the Script-Language-Container.
36+
"""
37+
return api.push_test_container(
38+
test_container_content=build_test_container_content(test_container_folder),
39+
force_rebuild=force_rebuild,
40+
force_rebuild_from=force_rebuild_from,
41+
force_pull=force_pull,
42+
output_directory=output_directory,
43+
temporary_base_directory=temporary_base_directory,
44+
log_build_context_content=log_build_context_content,
45+
cache_directory=cache_directory,
46+
build_name=build_name,
47+
source_docker_repository_name=source_docker_repository_name,
48+
source_docker_tag_prefix=source_docker_tag_prefix,
49+
source_docker_username=source_docker_username,
50+
source_docker_password=source_docker_password,
51+
target_docker_repository_name=target_docker_repository_name,
52+
target_docker_tag_prefix=target_docker_tag_prefix,
53+
target_docker_username=target_docker_username,
54+
target_docker_password=target_docker_password,
55+
workers=workers,
56+
task_dependencies_dot_file=task_dependencies_dot_file)

test/resources/__init__.py

Whitespace-only changes.

0 commit comments

Comments
 (0)