Compare commits
1 Commits
main
...
yage/dev/v
Author | SHA1 | Date | |
---|---|---|---|
d1a17e4285 |
@ -2,23 +2,22 @@ from types import SimpleNamespace
|
|||||||
|
|
||||||
from pytest import fixture
|
from pytest import fixture
|
||||||
|
|
||||||
from scwrypts.test import generate
|
from scwrypts.test import get_generator
|
||||||
from scwrypts.test.character_set import uri
|
from scwrypts.test.character_set import uri
|
||||||
|
|
||||||
options = {
|
generate = get_generator({
|
||||||
'str_length_minimum': 8,
|
'str_length_minimum': 8,
|
||||||
'str_length_maximum': 128,
|
'str_length_maximum': 128,
|
||||||
'uuid_output_type': str,
|
'uuid_output_type': str,
|
||||||
}
|
})
|
||||||
|
|
||||||
def get_request_client_sample_data():
|
def get_request_client_sample_data():
|
||||||
return {
|
return {
|
||||||
'base_url' : generate(str, options | {'character_set': uri}),
|
'base_url' : generate(str, {'character_set': uri}),
|
||||||
'endpoint' : generate(str, options | {'character_set': uri}),
|
'endpoint' : generate(str, {'character_set': uri}),
|
||||||
'method' : generate(str, options),
|
'method' : generate(str),
|
||||||
'response' : generate('requests_Response', options | {'depth': 4}),
|
'response' : generate('requests_Response', {'depth': 4}),
|
||||||
'payload' : generate(dict, {
|
'payload' : generate(dict, {
|
||||||
**options,
|
|
||||||
'depth': 1,
|
'depth': 1,
|
||||||
'data_types': { str, 'uuid' },
|
'data_types': { str, 'uuid' },
|
||||||
}),
|
}),
|
||||||
@ -30,13 +29,11 @@ def fixture_sample():
|
|||||||
**get_request_client_sample_data(),
|
**get_request_client_sample_data(),
|
||||||
|
|
||||||
headers = generate(dict, {
|
headers = generate(dict, {
|
||||||
**options,
|
|
||||||
'depth': 1,
|
'depth': 1,
|
||||||
'data_types': { str, 'uuid' },
|
'data_types': { str, 'uuid' },
|
||||||
}),
|
}),
|
||||||
|
|
||||||
payload_headers = generate(dict, {
|
payload_headers = generate(dict, {
|
||||||
**options,
|
|
||||||
'depth': 1,
|
'depth': 1,
|
||||||
'data_types': { str, 'uuid' },
|
'data_types': { str, 'uuid' },
|
||||||
}),
|
}),
|
||||||
|
@ -2,15 +2,14 @@ from types import SimpleNamespace
|
|||||||
|
|
||||||
from pytest import fixture
|
from pytest import fixture
|
||||||
|
|
||||||
from scwrypts.test import generate
|
|
||||||
from scwrypts.test.character_set import uri
|
from scwrypts.test.character_set import uri
|
||||||
from ..conftest import options, get_request_client_sample_data
|
from ..conftest import generate, get_request_client_sample_data
|
||||||
|
|
||||||
|
|
||||||
@fixture(name='sample')
|
@fixture(name='sample')
|
||||||
def fixture_sample():
|
def fixture_sample():
|
||||||
return SimpleNamespace(
|
return SimpleNamespace(
|
||||||
**get_request_client_sample_data(),
|
**get_request_client_sample_data(),
|
||||||
api_token = generate(str, options | {'character_set': uri}),
|
api_token = generate(str, {'character_set': uri}),
|
||||||
query = generate(str, options),
|
query = generate(str),
|
||||||
)
|
)
|
||||||
|
@ -3,9 +3,8 @@ from types import SimpleNamespace
|
|||||||
|
|
||||||
from pytest import fixture
|
from pytest import fixture
|
||||||
|
|
||||||
from scwrypts.test import generate
|
|
||||||
from scwrypts.test.character_set import uri
|
from scwrypts.test.character_set import uri
|
||||||
from ..conftest import options, get_request_client_sample_data
|
from ..conftest import generate, get_request_client_sample_data
|
||||||
|
|
||||||
@fixture(name='sample')
|
@fixture(name='sample')
|
||||||
def fixture_sample():
|
def fixture_sample():
|
||||||
@ -14,12 +13,12 @@ def fixture_sample():
|
|||||||
**get_request_client_sample_data(),
|
**get_request_client_sample_data(),
|
||||||
'base_url': 'https://discord.com/api',
|
'base_url': 'https://discord.com/api',
|
||||||
},
|
},
|
||||||
bot_token = generate(str, options | {'character_set': uri}),
|
bot_token = generate(str, {'character_set': uri}),
|
||||||
username = generate(str, options | {'character_set': ascii_letters + digits}),
|
username = generate(str, {'character_set': ascii_letters + digits}),
|
||||||
avatar_url = generate(str, options | {'character_set': uri}),
|
avatar_url = generate(str, {'character_set': uri}),
|
||||||
webhook = generate(str, options | {'character_set': uri}),
|
webhook = generate(str, {'character_set': uri}),
|
||||||
channel_id = generate(str, options | {'character_set': uri}),
|
channel_id = generate(str, {'character_set': uri}),
|
||||||
content_header = generate(str, options),
|
content_header = generate(str),
|
||||||
content_footer = generate(str, options),
|
content_footer = generate(str),
|
||||||
content = generate(str, options),
|
content = generate(str),
|
||||||
)
|
)
|
||||||
|
@ -3,9 +3,8 @@ from types import SimpleNamespace
|
|||||||
|
|
||||||
from pytest import fixture
|
from pytest import fixture
|
||||||
|
|
||||||
from scwrypts.test import generate
|
|
||||||
from scwrypts.test.character_set import uri
|
from scwrypts.test.character_set import uri
|
||||||
from ..conftest import options, get_request_client_sample_data
|
from ..conftest import generate, get_request_client_sample_data
|
||||||
|
|
||||||
@fixture(name='sample')
|
@fixture(name='sample')
|
||||||
def fixture_sample():
|
def fixture_sample():
|
||||||
@ -14,6 +13,6 @@ def fixture_sample():
|
|||||||
**get_request_client_sample_data(),
|
**get_request_client_sample_data(),
|
||||||
'base_url': 'https://api.linear.app',
|
'base_url': 'https://api.linear.app',
|
||||||
},
|
},
|
||||||
api_token = generate(str, options | {'character_set': uri}),
|
api_token = generate(str, {'character_set': uri}),
|
||||||
query = generate(str, options),
|
query = generate(str),
|
||||||
)
|
)
|
||||||
|
@ -13,7 +13,7 @@ class MissingFlagAndEnvironmentVariableError(EnvironmentError, ArgumentError):
|
|||||||
|
|
||||||
class MissingScwryptsExecutableError(EnvironmentError):
|
class MissingScwryptsExecutableError(EnvironmentError):
|
||||||
def __init__(self):
|
def __init__(self):
|
||||||
super().__init__(f'scwrypts must be installed and available on your PATH')
|
super().__init__('scwrypts must be installed and available on your PATH')
|
||||||
|
|
||||||
|
|
||||||
class BadScwryptsLookupError(ValueError):
|
class BadScwryptsLookupError(ValueError):
|
||||||
|
@ -5,44 +5,54 @@ from subprocess import run
|
|||||||
from .exceptions import MissingScwryptsExecutableError, BadScwryptsLookupError, MissingScwryptsGroupOrTypeError
|
from .exceptions import MissingScwryptsExecutableError, BadScwryptsLookupError, MissingScwryptsGroupOrTypeError
|
||||||
|
|
||||||
|
|
||||||
def scwrypts(*args, patterns=None, name=None, group=None, _type=None, log_level=None):
|
def scwrypts(patterns=None, args=None, executable_args=None, name=None, group=None, _type=None):
|
||||||
'''
|
'''
|
||||||
top-level scwrypts invoker from python
|
top-level scwrypts invoker from python
|
||||||
|
|
||||||
- patterns allows for pattern-based scwrypt lookup
|
patterns str / list pattern-based scwrypt lookup
|
||||||
- name/group/type allos for precise-match lookup
|
args str / list arguments forwarded to the invoked scwrypt
|
||||||
|
executable_args str / list arguments for the 'scwrypts' executable
|
||||||
|
(str above assumes space-delimited values)
|
||||||
|
|
||||||
*args should be a list of strings and is forwarded to the
|
name str exact scwrypt lookup name (requires group and _type)
|
||||||
invoked scwrypt
|
group str exact scwrypt lookup group
|
||||||
|
_type str exact scwrypt lookup type
|
||||||
|
|
||||||
|
SCWRYPTS_EXECUTABLE configuration variable which defines the full path to scwrypts executable
|
||||||
|
|
||||||
see 'scwrypts --help' for more information
|
see 'scwrypts --help' for more information
|
||||||
'''
|
'''
|
||||||
executable = which('scwrypts')
|
|
||||||
if executable is None:
|
|
||||||
raise MissingScwryptsExecutableError()
|
|
||||||
|
|
||||||
if patterns is None and name is None:
|
if patterns is None and name is None:
|
||||||
raise BadScwryptsLookupError()
|
raise BadScwryptsLookupError()
|
||||||
|
|
||||||
pre_args = []
|
if name is not None and (group is None or _type is None):
|
||||||
|
|
||||||
if name is None:
|
|
||||||
pre_args += patterns
|
|
||||||
else:
|
|
||||||
pre_args += ['--name', name, '--group', group, '--type', _type]
|
|
||||||
if group is None or _type is None:
|
|
||||||
raise MissingScwryptsGroupOrTypeError(group, _type)
|
raise MissingScwryptsGroupOrTypeError(group, _type)
|
||||||
|
|
||||||
if log_level is not None:
|
executable = which(getenv('SCWRYPTS_EXECUTABLE', 'scwrypts'))
|
||||||
pre_args += ['--log-level', log_level]
|
|
||||||
|
if executable is None:
|
||||||
|
raise MissingScwryptsExecutableError()
|
||||||
|
|
||||||
|
lookup = _parse(patterns) if name is None else f'--name {name} --group {group} --type {_type}'
|
||||||
|
|
||||||
depth = getenv('SUBSCWRYPT', '')
|
depth = getenv('SUBSCWRYPT', '')
|
||||||
if depth != '':
|
if depth != '':
|
||||||
depth = int(depth) + 1
|
depth = int(depth) + 1
|
||||||
|
|
||||||
return run(
|
return run(
|
||||||
f'SUBSCWRYPT={depth} {executable} {" ".join(pre_args)} -- {" ".join(args)}',
|
f'SUBSCWRYPT={depth} {executable} {_parse(executable_args)} {lookup} -- {_parse(args)}',
|
||||||
shell=True,
|
shell=True,
|
||||||
executable='/bin/zsh',
|
executable='/bin/zsh',
|
||||||
check=False,
|
check=False,
|
||||||
|
capture_output=True,
|
||||||
|
text=True,
|
||||||
)
|
)
|
||||||
|
|
||||||
|
def _parse(string_or_list_args):
|
||||||
|
if string_or_list_args is None:
|
||||||
|
return ''
|
||||||
|
|
||||||
|
if isinstance(string_or_list_args, list):
|
||||||
|
return ' '.join(string_or_list_args)
|
||||||
|
|
||||||
|
return str(string_or_list_args)
|
||||||
|
184
py/lib/scwrypts/scwrypts/test_scwrypts.py
Normal file
184
py/lib/scwrypts/scwrypts/test_scwrypts.py
Normal file
@ -0,0 +1,184 @@
|
|||||||
|
from random import choice
|
||||||
|
from re import search
|
||||||
|
from string import ascii_letters, digits
|
||||||
|
from types import SimpleNamespace
|
||||||
|
from unittest.mock import patch
|
||||||
|
|
||||||
|
from pytest import fixture, raises
|
||||||
|
|
||||||
|
from scwrypts.test import get_generator
|
||||||
|
|
||||||
|
from .exceptions import MissingScwryptsExecutableError, BadScwryptsLookupError, MissingScwryptsGroupOrTypeError
|
||||||
|
from .scwrypts import scwrypts
|
||||||
|
|
||||||
|
#####################################################################
|
||||||
|
|
||||||
|
def test_scwrypts(sample, _scwrypts):
|
||||||
|
assert validate_scwrypts_output(sample, _scwrypts)
|
||||||
|
|
||||||
|
def test_scwrypts_finds_system_executable(sample, _scwrypts, mock_which):
|
||||||
|
mock_which.assert_called_once_with(sample.env['SCWRYPTS_EXECUTABLE'])
|
||||||
|
|
||||||
|
def test_scwrypts_uses_configured_executable_path(_scwrypts, mock_getenv):
|
||||||
|
mock_getenv.assert_any_call('SCWRYPTS_EXECUTABLE', 'scwrypts')
|
||||||
|
|
||||||
|
def test_scwrypts_uses_correct_depth(_scwrypts, mock_getenv):
|
||||||
|
mock_getenv.assert_any_call('SUBSCWRYPT', '')
|
||||||
|
|
||||||
|
def test_scwrypts_runs_subprocess(_scwrypts, mock_run):
|
||||||
|
mock_run.assert_called_once()
|
||||||
|
|
||||||
|
##########################################
|
||||||
|
|
||||||
|
def test_scwrypts_omit_optionals(sample, _scwrypts_omit_optionals):
|
||||||
|
assert validate_scwrypts_output(sample, _scwrypts_omit_optionals)
|
||||||
|
|
||||||
|
def test_scwrypts_omit_optionals_finds_system_executable(sample, _scwrypts_omit_optionals, mock_which):
|
||||||
|
mock_which.assert_called_once_with('scwrypts')
|
||||||
|
|
||||||
|
def test_scwrypts_omit_optionals_uses_configured_executable_path(_scwrypts_omit_optionals, mock_getenv):
|
||||||
|
mock_getenv.assert_any_call('SCWRYPTS_EXECUTABLE', 'scwrypts')
|
||||||
|
|
||||||
|
def test_scwrypts_omit_optionals_uses_correct_depth(_scwrypts_omit_optionals, mock_getenv):
|
||||||
|
mock_getenv.assert_any_call('SUBSCWRYPT', '')
|
||||||
|
|
||||||
|
def test_scwrypts_omit_optionals_runs_subprocess(_scwrypts_omit_optionals, mock_run):
|
||||||
|
mock_run.assert_called_once()
|
||||||
|
|
||||||
|
##########################################
|
||||||
|
|
||||||
|
def test_invalid_lookup_missing_patterns_and_name(sample):
|
||||||
|
sample.patterns = None
|
||||||
|
sample.name = None
|
||||||
|
with raises(BadScwryptsLookupError):
|
||||||
|
scwrypts(**get_scwrypts_args(sample))
|
||||||
|
|
||||||
|
def test_invalid_name_lookup_missing_group(sample):
|
||||||
|
sample.group = None
|
||||||
|
with raises(MissingScwryptsGroupOrTypeError):
|
||||||
|
scwrypts(**get_scwrypts_args(sample))
|
||||||
|
|
||||||
|
def test_invalid_name_lookup_missing_type(sample):
|
||||||
|
sample._type = None # pylint: disable=protected-access
|
||||||
|
with raises(MissingScwryptsGroupOrTypeError):
|
||||||
|
scwrypts(**get_scwrypts_args(sample))
|
||||||
|
|
||||||
|
def test_invalid_scwrypts_installation(sample, mock_which):
|
||||||
|
mock_which.return_value = None
|
||||||
|
with raises(MissingScwryptsExecutableError):
|
||||||
|
scwrypts(**get_scwrypts_args(sample))
|
||||||
|
|
||||||
|
#####################################################################
|
||||||
|
|
||||||
|
generate = get_generator({
|
||||||
|
'str_length_minimum': 8,
|
||||||
|
'str_length_maximum': 128,
|
||||||
|
'character_set': ascii_letters + digits + '/-_'
|
||||||
|
})
|
||||||
|
|
||||||
|
def _generate_str_or_list_arg():
|
||||||
|
random_arg = generate(list, {'data_types': {str}})
|
||||||
|
return random_arg if choice([str, list]) == list else ' '.join(random_arg)
|
||||||
|
|
||||||
|
@fixture(name='sample')
|
||||||
|
def fixture_sample():
|
||||||
|
sample = SimpleNamespace(
|
||||||
|
patterns = _generate_str_or_list_arg(),
|
||||||
|
args = _generate_str_or_list_arg(),
|
||||||
|
executable_args = _generate_str_or_list_arg(),
|
||||||
|
|
||||||
|
name = generate(str),
|
||||||
|
group = generate(str),
|
||||||
|
_type = generate(str),
|
||||||
|
|
||||||
|
executable = generate(str),
|
||||||
|
|
||||||
|
env = {
|
||||||
|
'SCWRYPTS_EXECUTABLE': generate(str),
|
||||||
|
'SUBSCWRYPT': str(generate(int, {'minimum': 1, 'maximum': 99})),
|
||||||
|
},
|
||||||
|
|
||||||
|
returncode = generate(int),
|
||||||
|
stdout = generate(str),
|
||||||
|
stderr = generate(str),
|
||||||
|
)
|
||||||
|
|
||||||
|
return sample
|
||||||
|
|
||||||
|
def get_scwrypts_args(sample):
|
||||||
|
return {
|
||||||
|
key: getattr(sample, key)
|
||||||
|
for key in [
|
||||||
|
'patterns',
|
||||||
|
'args',
|
||||||
|
'executable_args',
|
||||||
|
'name',
|
||||||
|
'group',
|
||||||
|
'_type',
|
||||||
|
]
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
#####################################################################
|
||||||
|
|
||||||
|
@fixture(name='mock_which', autouse=True)
|
||||||
|
def fixture_mock_which(sample):
|
||||||
|
with patch('scwrypts.scwrypts.scwrypts.which') as mock:
|
||||||
|
mock.return_value = sample.executable
|
||||||
|
yield mock
|
||||||
|
|
||||||
|
@fixture(name='mock_getenv', autouse=True)
|
||||||
|
def fixture_mock_getenv(sample):
|
||||||
|
with patch('scwrypts.scwrypts.scwrypts.getenv') as mock:
|
||||||
|
mock.side_effect = sample.env.get
|
||||||
|
yield mock
|
||||||
|
|
||||||
|
@fixture(name='mock_run', autouse=True)
|
||||||
|
def fixture_mock_run(sample):
|
||||||
|
with patch('scwrypts.scwrypts.scwrypts.run') as mock:
|
||||||
|
mock.side_effect = lambda *args, **_kwargs: SimpleNamespace(
|
||||||
|
args = args,
|
||||||
|
returncode = sample.returncode,
|
||||||
|
stdout = sample.stdout,
|
||||||
|
stderr = sample.stderr,
|
||||||
|
)
|
||||||
|
yield mock
|
||||||
|
|
||||||
|
#####################################################################
|
||||||
|
|
||||||
|
@fixture(name='_scwrypts')
|
||||||
|
def fixture_scwrypts(sample):
|
||||||
|
return scwrypts(**get_scwrypts_args(sample))
|
||||||
|
|
||||||
|
@fixture(name='_scwrypts_omit_optionals')
|
||||||
|
def fixture_scwrypts_omit_optionals(sample):
|
||||||
|
sample.args = None
|
||||||
|
sample.executable_args = None
|
||||||
|
|
||||||
|
del sample.env['SCWRYPTS_EXECUTABLE']
|
||||||
|
del sample.env['SUBSCWRYPT']
|
||||||
|
|
||||||
|
return scwrypts(**get_scwrypts_args(sample))
|
||||||
|
|
||||||
|
def validate_scwrypts_output(sample, output):
|
||||||
|
#
|
||||||
|
# I would love to use 'assert _scwrypts == SimpleNamespace(...expected...)'
|
||||||
|
# but the output.args is difficult to recreate without copying all the
|
||||||
|
# processing logic over from the scwrypts function
|
||||||
|
#
|
||||||
|
# opting for a bit of a strange equality test here, checking the args
|
||||||
|
# as closely as possible without copying parsing logic
|
||||||
|
#
|
||||||
|
run_args_reduced_to_a_single_string = len(output.args) == 1
|
||||||
|
run_args_follow_expected_form = search(
|
||||||
|
fr'^SUBSCWRYPT=.* {sample.executable} .*-- .*$',
|
||||||
|
output.args[0],
|
||||||
|
)
|
||||||
|
|
||||||
|
return all([
|
||||||
|
run_args_reduced_to_a_single_string,
|
||||||
|
run_args_follow_expected_form,
|
||||||
|
output.returncode == sample.returncode,
|
||||||
|
output.stdout == sample.stdout,
|
||||||
|
output.stderr == sample.stderr,
|
||||||
|
])
|
@ -5,6 +5,6 @@ __all__ = [
|
|||||||
'generate',
|
'generate',
|
||||||
]
|
]
|
||||||
|
|
||||||
from .generate import generate
|
from .generate import generate, get_generator
|
||||||
|
|
||||||
from .character_set import *
|
from .character_set import *
|
||||||
|
@ -45,6 +45,21 @@ DEFAULT_OPTIONS = {
|
|||||||
'requests_response_status_code': status_codes.codes[200],
|
'requests_response_status_code': status_codes.codes[200],
|
||||||
}
|
}
|
||||||
|
|
||||||
|
def get_generator(default_options=None):
|
||||||
|
if default_options is None:
|
||||||
|
default_options = {}
|
||||||
|
|
||||||
|
def generator_function(data_type=None, options_overrides=None):
|
||||||
|
if options_overrides is None:
|
||||||
|
options_overrides = {}
|
||||||
|
|
||||||
|
return generate(
|
||||||
|
data_type = data_type,
|
||||||
|
options = default_options | options_overrides,
|
||||||
|
)
|
||||||
|
|
||||||
|
return generator_function
|
||||||
|
|
||||||
def generate(data_type=None, options=None):
|
def generate(data_type=None, options=None):
|
||||||
'''
|
'''
|
||||||
generate random data with the call of a function
|
generate random data with the call of a function
|
||||||
|
32
scwrypts
32
scwrypts
@ -6,11 +6,6 @@ source "$(dirname $(readlink -f "$0"))/zsh/lib/import.driver.zsh" || exit 42
|
|||||||
cd "$SCWRYPTS_ROOT__scwrypts"
|
cd "$SCWRYPTS_ROOT__scwrypts"
|
||||||
GIT_SCWRYPTS() { git -C "$SCWRYPTS_ROOT__scwrypts" $@; }
|
GIT_SCWRYPTS() { git -C "$SCWRYPTS_ROOT__scwrypts" $@; }
|
||||||
|
|
||||||
local INSTALLATION_TYPE
|
|
||||||
[ ! -d "$SCWRYPTS_ROOT__scwrypts/.git" ] && [ ! -f "$SCWRYPTS_ROOT__scwrypts/.git" ] \
|
|
||||||
&& INSTALLATION_TYPE=$(cat "$SCWRYPTS_ROOT__scwrypts/MANAGED_BY" 2>/dev/null) \
|
|
||||||
|| INSTALLATION_TYPE=manual \
|
|
||||||
;
|
|
||||||
|
|
||||||
local ERRORS=0
|
local ERRORS=0
|
||||||
local USAGE='
|
local USAGE='
|
||||||
@ -38,6 +33,7 @@ source "$(dirname $(readlink -f "$0"))/zsh/lib/import.driver.zsh" || exit 42
|
|||||||
-h, --help display this message and exit
|
-h, --help display this message and exit
|
||||||
-l, --list print out command list and exit
|
-l, --list print out command list and exit
|
||||||
--list-envs print out environment list and exit
|
--list-envs print out environment list and exit
|
||||||
|
--root print out SCWRYPTS_ROOT__scwrypts and exit
|
||||||
--update update scwrypts library to latest version
|
--update update scwrypts library to latest version
|
||||||
--version print out scwrypts version and exit
|
--version print out scwrypts version and exit
|
||||||
|
|
||||||
@ -86,15 +82,20 @@ source "$(dirname $(readlink -f "$0"))/zsh/lib/import.driver.zsh" || exit 42
|
|||||||
;;
|
;;
|
||||||
|
|
||||||
--version )
|
--version )
|
||||||
case $INSTALLATION_TYPE in
|
case $SCWRYPTS_INSTALLATION_TYPE in
|
||||||
manual ) echo "scwrypts $(GIT_SCWRYPTS describe --tags) (via GIT)" ;;
|
manual ) echo "scwrypts $(GIT_SCWRYPTS describe --tags) (via GIT)" ;;
|
||||||
* ) echo scwrypts $(cat "$SCWRYPTS_ROOT__scwrypts/VERSION") ;;
|
* ) echo scwrypts $(cat "$SCWRYPTS_ROOT__scwrypts/VERSION") ;;
|
||||||
esac
|
esac
|
||||||
return 0
|
return 0
|
||||||
;;
|
;;
|
||||||
|
|
||||||
|
--root )
|
||||||
|
echo "$SCWRYPTS_ROOT__scwrypts"
|
||||||
|
return 0
|
||||||
|
;;
|
||||||
|
|
||||||
--update )
|
--update )
|
||||||
case $INSTALLATION_TYPE in
|
case $SCWRYPTS_INSTALLATION_TYPE in
|
||||||
aur )
|
aur )
|
||||||
SCWRYPTS_LOG_LEVEL=3 REMINDER "
|
SCWRYPTS_LOG_LEVEL=3 REMINDER "
|
||||||
This installation is built from the AUR. Update through 'makepkg' or use
|
This installation is built from the AUR. Update through 'makepkg' or use
|
||||||
@ -102,6 +103,10 @@ source "$(dirname $(readlink -f "$0"))/zsh/lib/import.driver.zsh" || exit 42
|
|||||||
"
|
"
|
||||||
;;
|
;;
|
||||||
|
|
||||||
|
homebrew )
|
||||||
|
SCWRYPTS_LOG_LEVEL=3 REMINDER "This installation is managed by homebrew. Update me with 'brew update scwrypts'"
|
||||||
|
;;
|
||||||
|
|
||||||
manual )
|
manual )
|
||||||
GIT_SCWRYPTS fetch --quiet origin main
|
GIT_SCWRYPTS fetch --quiet origin main
|
||||||
GIT_SCWRYPTS fetch --quiet origin main --tags
|
GIT_SCWRYPTS fetch --quiet origin main --tags
|
||||||
@ -294,9 +299,17 @@ source "$(dirname $(readlink -f "$0"))/zsh/lib/import.driver.zsh" || exit 42
|
|||||||
|
|
||||||
[[ $ENV_REQUIRED =~ true ]] && {
|
[[ $ENV_REQUIRED =~ true ]] && {
|
||||||
[ ! $ENV_NAME ] && ENV_NAME=$(SCWRYPTS__SELECT_ENV)
|
[ ! $ENV_NAME ] && ENV_NAME=$(SCWRYPTS__SELECT_ENV)
|
||||||
|
[ ! $ENV_NAME ] && ABORT
|
||||||
|
|
||||||
|
export ENV_NAME
|
||||||
|
export SCWRYPTS_ENV=$ENV_NAME
|
||||||
|
|
||||||
for GROUP in ${SCWRYPTS_GROUPS[@]}
|
for GROUP in ${SCWRYPTS_GROUPS[@]}
|
||||||
do
|
do
|
||||||
|
local REQUIRED_REGEX=$(eval echo '$SCWRYPTS_REQUIRED_ENVIRONMENT_REGEX__'$GROUP)
|
||||||
|
[ $REQUIRED_REGEX ] && {
|
||||||
|
[[ $ENV_NAME =~ $REQUIRED_REGEX ]] || continue
|
||||||
|
}
|
||||||
local ENV_FILE=$(SCWRYPTS__GET_ENV_FILE "$ENV_NAME" "$GROUP")
|
local ENV_FILE=$(SCWRYPTS__GET_ENV_FILE "$ENV_NAME" "$GROUP")
|
||||||
source "$ENV_FILE" || FAIL 5 "missing or invalid environment '$GROUP/$ENV_NAME'"
|
source "$ENV_FILE" || FAIL 5 "missing or invalid environment '$GROUP/$ENV_NAME'"
|
||||||
|
|
||||||
@ -305,8 +318,6 @@ source "$(dirname $(readlink -f "$0"))/zsh/lib/import.driver.zsh" || exit 42
|
|||||||
source "$f" || FAIL 5 "invalid static config '$f'"
|
source "$f" || FAIL 5 "invalid static config '$f'"
|
||||||
done
|
done
|
||||||
done
|
done
|
||||||
|
|
||||||
export ENV_NAME
|
|
||||||
}
|
}
|
||||||
|
|
||||||
[ $REQUIRED_ENVIRONMENT_REGEX ] && {
|
[ $REQUIRED_ENVIRONMENT_REGEX ] && {
|
||||||
@ -314,11 +325,12 @@ source "$(dirname $(readlink -f "$0"))/zsh/lib/import.driver.zsh" || exit 42
|
|||||||
|| FAIL 5 "group '$SCWRYPT_GROUP' requires current environment name to match '$REQUIRED_ENVIRONMENT_REGEX' (currently $ENV_NAME)"
|
|| FAIL 5 "group '$SCWRYPT_GROUP' requires current environment name to match '$REQUIRED_ENVIRONMENT_REGEX' (currently $ENV_NAME)"
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
##########################################
|
##########################################
|
||||||
|
|
||||||
[ ! $SUBSCWRYPT ] && export SUBSCWRYPT=0
|
[ ! $SUBSCWRYPT ] && export SUBSCWRYPT=0
|
||||||
|
|
||||||
[[ $INSTALLATION_TYPE =~ ^manual$ ]] && {
|
[[ $SCWRYPTS_INSTALLATION_TYPE =~ ^manual$ ]] && {
|
||||||
[[ $SUBSCWRYPT -eq 0 ]] && [[ $ENV_NAME =~ prod ]] && [[ $SCWRYPTS_LOG_LEVEL -gt 0 ]] && {
|
[[ $SUBSCWRYPT -eq 0 ]] && [[ $ENV_NAME =~ prod ]] && [[ $SCWRYPTS_LOG_LEVEL -gt 0 ]] && {
|
||||||
STATUS "on '$ENV_NAME'; checking diff against origin/main"
|
STATUS "on '$ENV_NAME'; checking diff against origin/main"
|
||||||
|
|
||||||
|
@ -1,12 +1,14 @@
|
|||||||
#####################################################################
|
#####################################################################
|
||||||
|
|
||||||
command -v scwrypts &>/dev/null || {
|
: \
|
||||||
echo 'scwrypts is required in your PATH in order to use the zsh plugins; skipping' >&2
|
&& command -v scwrypts &>/dev/null \
|
||||||
|
&& source "$(scwrypts --root)/zsh/lib/import.driver.zsh" \
|
||||||
|
&& unset __SCWRYPT \
|
||||||
|
|| {
|
||||||
|
echo 'scwrypts must be in PATH and properly configured; skipping zsh plugin setup' >&2
|
||||||
return 0
|
return 0
|
||||||
}
|
}
|
||||||
|
|
||||||
NO_EXPORT_CONFIG=1 source "${0:a:h}/zsh/lib/import.driver.zsh" || return 42
|
|
||||||
|
|
||||||
#####################################################################
|
#####################################################################
|
||||||
|
|
||||||
SCWRYPTS__ZSH_PLUGIN() {
|
SCWRYPTS__ZSH_PLUGIN() {
|
||||||
|
@ -1,11 +1,20 @@
|
|||||||
[[ $__SCWRYPT -eq 1 ]] && return 0
|
[[ $__SCWRYPT -eq 1 ]] && return 0
|
||||||
#####################################################################
|
#####################################################################
|
||||||
|
|
||||||
[ ! $SCWRYPTS_ROOT ] \
|
SCWRYPTS_ROOT="$(cd -- ${0:a:h}; git rev-parse --show-toplevel 2>/dev/null)"
|
||||||
&& SCWRYPTS_ROOT="$(cd $(dirname "${0:a:h}"); git rev-parse --show-toplevel 2>/dev/null)"
|
|
||||||
|
|
||||||
[ ! $SCWRYPTS_ROOT ] && [ -d /usr/share/scwrypts ] \
|
[ $SCWRYPTS_ROOT ] && [ -d "$SCWRYPTS_ROOT" ] \
|
||||||
&& SCWRYPTS_ROOT=/usr/share/scwrypts
|
|| SCWRYPTS_ROOT="echo \"${0:a:h}\" | sed -n 's|\(share/scwrypts\).*$|\1|p'"
|
||||||
|
|
||||||
|
[ $SCWRYPTS_ROOT ] && [ -d "$SCWRYPTS_ROOT" ] || {
|
||||||
|
echo "cannot determine scwrypts root path for current installation; aborting"
|
||||||
|
exit 1
|
||||||
|
}
|
||||||
|
|
||||||
|
[ -f "$SCWRYPTS_ROOT__scwrypts/MANAGED_BY" ] \
|
||||||
|
&& export SCWRYPTS_INSTALLATION_TYPE=$(cat "$SCWRYPTS_ROOT__scwrypts/MANAGED_BY") \
|
||||||
|
|| export SCWRYPTS_INSTALLATION_TYPE=manual \
|
||||||
|
;
|
||||||
|
|
||||||
export SCWRYPTS_ROOT__scwrypts="$SCWRYPTS_ROOT"
|
export SCWRYPTS_ROOT__scwrypts="$SCWRYPTS_ROOT"
|
||||||
|
|
||||||
@ -21,11 +30,13 @@ USER_CONFIG_OVERRIDES="$SCWRYPTS_CONFIG_PATH/config.zsh"
|
|||||||
}
|
}
|
||||||
source "$USER_CONFIG_OVERRIDES"
|
source "$USER_CONFIG_OVERRIDES"
|
||||||
|
|
||||||
[ ! -d $SCWRYPTS_CONFIG_PATH ] && mkdir -p $SCWRYPTS_CONFIG_PATH
|
mkdir -p \
|
||||||
[ ! -d $SCWRYPTS_DATA_PATH ] && mkdir -p $SCWRYPTS_DATA_PATH
|
"$SCWRYPTS_CONFIG_PATH" \
|
||||||
[ ! -d $SCWRYPTS_ENV_PATH ] && mkdir -p $SCWRYPTS_ENV_PATH
|
"$SCWRYPTS_DATA_PATH" \
|
||||||
[ ! -d $SCWRYPTS_LOG_PATH ] && mkdir -p $SCWRYPTS_LOG_PATH
|
"$SCWRYPTS_ENV_PATH" \
|
||||||
[ ! -d $SCWRYPTS_OUTPUT_PATH ] && mkdir -p $SCWRYPTS_OUTPUT_PATH
|
"$SCWRYPTS_LOG_PATH" \
|
||||||
|
"$SCWRYPTS_OUTPUT_PATH" \
|
||||||
|
;
|
||||||
|
|
||||||
export \
|
export \
|
||||||
SCWRYPTS_GROUPS \
|
SCWRYPTS_GROUPS \
|
||||||
@ -62,7 +73,8 @@ done
|
|||||||
&& [ ! "$SCWRYPTS_AUTODETECT_GROUP_BASEDIR" ] \
|
&& [ ! "$SCWRYPTS_AUTODETECT_GROUP_BASEDIR" ] \
|
||||||
&& [ $GITHUB_WORKSPACE ] \
|
&& [ $GITHUB_WORKSPACE ] \
|
||||||
&& [ ! $SCWRYPTS_GITHUB_NO_AUTOLOAD ] \
|
&& [ ! $SCWRYPTS_GITHUB_NO_AUTOLOAD ] \
|
||||||
&& SCWRYPTS_AUTODETECT_GROUP_BASEDIR="$GITHUB_WORKSPACE"
|
&& SCWRYPTS_AUTODETECT_GROUP_BASEDIR="$GITHUB_WORKSPACE" \
|
||||||
|
;
|
||||||
|
|
||||||
[ "$SCWRYPTS_AUTODETECT_GROUP_BASEDIR" ] && [ -d "$SCWRYPTS_AUTODETECT_GROUP_BASEDIR" ] && {
|
[ "$SCWRYPTS_AUTODETECT_GROUP_BASEDIR" ] && [ -d "$SCWRYPTS_AUTODETECT_GROUP_BASEDIR" ] && {
|
||||||
for GROUP_LOADER in $(find "$SCWRYPTS_AUTODETECT_GROUP_BASEDIR" -type f -name \*scwrypts.zsh)
|
for GROUP_LOADER in $(find "$SCWRYPTS_AUTODETECT_GROUP_BASEDIR" -type f -name \*scwrypts.zsh)
|
||||||
@ -72,5 +84,4 @@ done
|
|||||||
}
|
}
|
||||||
|
|
||||||
#####################################################################
|
#####################################################################
|
||||||
[ $NO_EXPORT_CONFIG ] || __SCWRYPT=1 # arbitrary; indicates currently inside a scwrypt
|
__SCWRYPT=1 # arbitrary; indicates currently inside a scwrypt
|
||||||
true
|
|
||||||
|
Loading…
Reference in New Issue
Block a user