Skip to content

Commit 0af1027

Browse files
authored
Merge pull request #164 from ProblemSetters/aws-module-improvements
AWS module improvements
2 parents 2e8c1d6 + d6a07ea commit 0af1027

38 files changed

Lines changed: 1612 additions & 179 deletions

.editorconfig

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
# Editor configuration, see https://editorconfig.org
2+
root = true
3+
4+
[*]
5+
charset = utf-8
6+
end_of_line = lf
7+
indent_size = 2
8+
indent_style = space
9+
insert_final_newline = true
10+
max_line_length = 1234567890
11+
trim_trailing_whitespace = true
12+
13+
[Makefile.{blackbox,workflow}]
14+
indent_size = 4
15+
indent_style = tab
16+
17+
[*.md]
18+
indent_size = 4

Makefile.blackbox

Lines changed: 71 additions & 60 deletions
Original file line numberDiff line numberDiff line change
@@ -2,94 +2,105 @@
22
override blackbox/:=*
33

44
ifeq ($(origin .FEATURES),undefined)
5-
$(error `make` executable version "$(MAKE_VERSION)" is not supported. GNU Make 3.82 or above is required)
6-
endif
7-
8-
override SHELL:=/bin/bash
9-
10-
ifneq ($(value SHELL),$(shell echo $$BASH))
11-
$(error current shell executable is not supported. GNU Bash 4.3 or above is required)
5+
$(error `make` executable version `$(MAKE_VERSION)` is not supported. GNU Make 4.3 or above is required)
126
endif
137

148
ifeq ($(words $(MAKEFILE_LIST)),1)
15-
$(error `Makefile.blackbox` should be included, direct usage is not allowed)
9+
$(error `Makefile` should be included, direct usage is not allowed)
1610
endif
1711

18-
BLACKBOX_FLAG__DEBUG_MODE:=no
19-
BLACKBOX_FLAG__STEP_PROVISION:=yes
20-
BLACKBOX_FLAG__STEP_BUILD:=yes
21-
BLACKBOX_FLAG__STEP_EVALUATE:=yes
12+
ifeq ($(shell which gawk),)
13+
$(error `gawk` executable is required)
14+
endif
2215

23-
ifneq ($(BLACKBOX_DIR),$(abspath $(dir $(lastword $(MAKEFILE_LIST)))))
24-
$(error `BLACKBOX_DIR` configuration is not valid)
16+
ifeq ($(shell which vagrant),)
17+
$(error `vagrant` executable is required)
2518
endif
2619

27-
BLACKBOX_HOST:=blackbox-$(shell basename $(PWD) | cut -c 1-36)
28-
BLACKBOX_SPAWN:=blackbox-spawn-$(shell basename $(PWD) | cut -c 1-36)
29-
BLACKBOX_USER?=$(shell id -u):$(shell id -g)
30-
BLACKBOX_USER_NAME:=ubuntu
31-
BLACKBOX_USER_HOME:=/home/$(BLACKBOX_USER_NAME)
32-
BLACKBOX_USER_QUESTION_DIR=$(BLACKBOX_USER_HOME)/$(shell basename $(call blackbox/pwd))
33-
BLACKBOX_VERSION:=2404
20+
override SHELL:=/usr/bin/env bash -e +o pipefail
3421

35-
BLACKBOX_AWS_DEFAULT_REGION:="us-east-1"
36-
BLACKBOX_AWS_ACCESS_KEY_ID:=$(shell base64 -d <(base64 -d <<<"UVV0SlFWSTJUemRIU2s1WVdVSk1RVXBGTlRNSwo="))
37-
BLACKBOX_AWS_SECRET_ACCESS_KEY:=$(shell base64 -d <(base64 -d <<<"UVVaNFZUVXJWMEZoYml0eWVWUnpVSGhuY1ZWTk56VXlPVlp5Umt0Q1JFTkxRMHBFY3pKSFV3bz0K"))
22+
ifeq ($(shell echo $$BASH),)
23+
$(error current shell executable is not supported. GNU Bash 5.1 or above is required)
24+
endif
3825

39-
define blackbox/pwd=
40-
$(abspath $(dir $(firstword $(MAKEFILE_LIST)))/$(1))
41-
endef
26+
override blackbox/debug:=$(if $(filter debug,$(MAKECMDGOALS)),yes,no)
27+
override blackbox/host/blackbox/path:=$(abspath $(dir $(lastword $(MAKEFILE_LIST))))
28+
override blackbox/host/question/path:=$(abspath $(dir $(firstword $(MAKEFILE_LIST))))
29+
override blackbox/spawn/blackbox/path:=/blackbox
30+
override blackbox/spawn/question/path:=/question
31+
override blackbox/spawn/id:=blackbox-$(shell basename $(blackbox/host/question/path) | cut --characters="1-36")
32+
override blackbox/spawn/cpu/limit=$(if $(filter yes,$(blackbox/debug)),$(shell nproc),4)
33+
override blackbox/spawn/memory/limit=$(if $(filter yes,$(blackbox/debug)),$(shell awk '/MemTotal/ { printf "%.0f\n", $$2 / 1024 }' /proc/meminfo),4096)
34+
override blackbox/spawn/disk/limit:=20G
35+
override blackbox/spawn/username:=ubuntu
36+
37+
export VAGRANT_DEBUG=$(blackbox/debug)
38+
export VAGRANT_HOST_BLACKBOX_PATH=$(blackbox/host/blackbox/path)
39+
export VAGRANT_HOST_QUESTION_PATH=$(blackbox/host/question/path)
40+
export VAGRANT_SPAWN_ID=$(blackbox/spawn/id)
41+
export VAGRANT_SPAWN_BLACKBOX_PATH=$(blackbox/spawn/blackbox/path)
42+
export VAGRANT_SPAWN_QUESTION_PATH=$(blackbox/spawn/question/path)
43+
export VAGRANT_CPU_LIMIT=$(blackbox/spawn/cpu/limit)
44+
export VAGRANT_MEMORY_LIMIT=$(blackbox/spawn/memory/limit)
45+
export VAGRANT_VAGRANTFILE=$(blackbox/host/blackbox/path)/Vagrantfile
46+
47+
BLACKBOX_FLAG__DEBUG_MODE=$(blackbox/debug)
48+
BLACKBOX_FLAG__STEP_PROVISION:=yes
49+
BLACKBOX_FLAG__STEP_BUILD:=yes
50+
BLACKBOX_FLAG__STEP_EVALUATE:=yes
4251

4352
debug: ;@:
44-
$(eval BLACKBOX_FLAG__DEBUG_MODE:=yes)
45-
$(foreach variable,BLACKBOX_FLAG__DEBUG_MODE BLACKBOX_FLAG__STEP_PROVISION BLACKBOX_FLAG__STEP_BUILD BLACKBOX_FLAG__STEP_EVALUATE,$(info $(shell printf "\033[0;37m%s = %s\033[0m" "$(variable)" "$($(variable))")))
53+
$(foreach variable,$(filter blackbox/%,$(sort $(.VARIABLES))),$(info $(shell printf "\033[0;37m%s = %s\033[0m" "$(variable)" "$($(variable))")))
4654
$(info $(shell printf "\033[0;37m%s\033[0m" \\))
47-
$(foreach variable,$(filter-out BLACKBOX_FLAG__%,$(filter BLACKBOX_%,$(sort $(.VARIABLES)))),$(info $(shell printf "\033[0;37m%s = %s\033[0m" "$(variable)" "$($(variable))")))
55+
$(foreach variable,$(filter VAGRANT_%,$(sort $(.VARIABLES))),$(info $(shell printf "\033[0;37m%s = %s\033[0m" "$(variable)" "$($(variable))")))
56+
$(info $(shell printf "\033[0;37m%s\033[0m" \\))
57+
$(foreach variable,BLACKBOX_FLAG__DEBUG_MODE BLACKBOX_FLAG__STEP_PROVISION BLACKBOX_FLAG__STEP_BUILD BLACKBOX_FLAG__STEP_EVALUATE,$(info $(shell printf "\033[0;37m%s = %s\033[0m" "$(variable)" "$($(variable))")))
4858
$(if $(and $(filter-out $(words $(MAKECMDGOALS)),0),$(filter-out $(words $(MAKECMDGOALS)),1)),$(info $(shell printf "\033[0;37m%s\033[0m" --)))
4959

50-
all: uninstall install setup solve check
60+
all: uninstall install setup save solve check restore check
61+
62+
up: uninstall install setup save
63+
64+
100: restore solve check
65+
66+
0: restore check
5167

5268
install:
53-
docker login --username AWS --password-stdin 134148934511.dkr.ecr.us-east-1.amazonaws.com < <(docker run -it --env="AWS_DEFAULT_REGION=$(BLACKBOX_AWS_DEFAULT_REGION)" --env="AWS_ACCESS_KEY_ID=$(BLACKBOX_AWS_ACCESS_KEY_ID)" --env="AWS_SECRET_ACCESS_KEY=$(BLACKBOX_AWS_SECRET_ACCESS_KEY)" --rm amazon/aws-cli:2.11.25 ecr get-login-password)
54-
cat <(echo FROM 134148934511.dkr.ecr.us-east-1.amazonaws.com/hr/blackbox_2404:abstract) <(echo RUN groupadd docker) | docker buildx build --build-arg="BLACKBOX_USER=$(BLACKBOX_USER)" --build-arg="BLACKBOX_USER_NAME=$(BLACKBOX_USER_NAME)" --build-arg="BLACKBOX_USER_HOME=$(BLACKBOX_USER_HOME)" --build-arg="BLACKBOX_VERSION=$(BLACKBOX_VERSION)" --network="host" --progress="plain" --tag="blackbox:$(BLACKBOX_HOST)" -
55-
docker run -di --group-add docker --hostname="blackbox" --name="$(BLACKBOX_HOST)" --privileged --cgroupns=host $(if $(filter debug,$(MAKECMDGOALS)),--volume="$(BLACKBOX_DIR):/blackbox:ro") --volume="$(call blackbox/pwd)/setup.sh:$(BLACKBOX_USER_HOME)/setup.sh:ro" --volume="$(call blackbox/pwd)/check.sh:$(BLACKBOX_USER_HOME)/check.sh:ro" --volume="$(call blackbox/pwd)/solve.sh:$(BLACKBOX_USER_HOME)/solve.sh:ro" --volume="$(call blackbox/pwd)/evaluate.sh:$(BLACKBOX_USER_HOME)/evaluate.sh:ro" blackbox:$(BLACKBOX_HOST) >/dev/null
69+
vagrant --no-color up $(blackbox/spawn/id)
70+
vagrant --no-color snapshot save -f $(blackbox/spawn/id) install
71+
72+
reinstall:
73+
vagrant --no-color snapshot restore $(blackbox/spawn/id) install
5674

5775
setup:
58-
docker exec -it --env="BLACKBOX_FLAG__DEBUG_MODE=$(BLACKBOX_FLAG__DEBUG_MODE)" --env="BLACKBOX_FLAG__STEP_PROVISION=$(BLACKBOX_FLAG__STEP_PROVISION)" --env="BLACKBOX_USER_QUESTION_DIR=$(BLACKBOX_USER_QUESTION_DIR)" --env="BLACKBOX_VERSION=$(BLACKBOX_VERSION)" $(BLACKBOX_HOST) $(SHELL) setup.sh
76+
vagrant ssh --command="sudo BLACKBOX_FLAG__DEBUG_MODE=$(BLACKBOX_FLAG__DEBUG_MODE) bash $(blackbox/spawn/question/path)/setup.sh" $(blackbox/spawn/id)
5977

60-
solve:
61-
docker exec -it --user="$(BLACKBOX_USER)" $(BLACKBOX_HOST) $(SHELL) solve.sh
62-
docker exec -it -w $(BLACKBOX_USER_QUESTION_DIR) --user="$(BLACKBOX_USER)" $(BLACKBOX_HOST) $(SHELL) -c "source /blackbox/blackbox &>/dev/null; solve"
78+
save:
79+
vagrant --no-color snapshot save -f $(blackbox/spawn/id) latest
6380

64-
evaluate:
65-
docker exec -it $(BLACKBOX_HOST) $(SHELL) evaluate.sh
81+
restore:
82+
vagrant --no-color snapshot restore $(blackbox/spawn/id) latest
83+
84+
solve:
85+
vagrant ssh --command="sudo bash $(blackbox/spawn/question/path)/solve.sh" $(blackbox/spawn/id)
6686

6787
check:
68-
docker exec -it --env="BLACKBOX_SPAWN=$(BLACKBOX_SPAWN)" --env="BLACKBOX_USER_QUESTION_DIR=$(BLACKBOX_USER_QUESTION_DIR)" --env="BLACKBOX_FLAG__DEBUG_MODE=$(BLACKBOX_FLAG__DEBUG_MODE)" --env="BLACKBOX_FLAG__STEP_PROVISION=$(BLACKBOX_FLAG__STEP_PROVISION)" --env="BLACKBOX_FLAG__STEP_BUILD=$(BLACKBOX_FLAG__STEP_BUILD)" --env="BLACKBOX_FLAG__STEP_EVALUATE=$(BLACKBOX_FLAG__STEP_EVALUATE)" --env="BLACKBOX_VERSION=$(BLACKBOX_VERSION)" $(BLACKBOX_HOST) $(SHELL) check.sh
88+
vagrant ssh --command="sudo BLACKBOX_FLAG__DEBUG_MODE=$(BLACKBOX_FLAG__DEBUG_MODE) BLACKBOX_FLAG__STEP_PROVISION=$(BLACKBOX_FLAG__STEP_PROVISION) BLACKBOX_FLAG__STEP_BUILD=$(BLACKBOX_FLAG__STEP_BUILD) BLACKBOX_FLAG__STEP_EVALUATE=$(BLACKBOX_FLAG__STEP_EVALUATE) bash $(blackbox/spawn/question/path)/check.sh" $(blackbox/spawn/id) | tee >(awk '/Partial Credit/ { if (!reset) { reset = 1; next }; total_score += $$3; ok += ($$3 > 0); failed += ($$3 == 0) } END { printf("\n--\nSuccess: %d\nFail: %d\n\nTotal: %d\n--\n\nTotal Credit: %d\n", ok, failed, ok + failed, total_score) }')
6989

7090
check\:evaluate:
71-
$(MAKE) BLACKBOX_FLAG__STEP_PROVISION=no BLACKBOX_FLAG__STEP_BUILD=no BLACKBOX_FLAG__STEP_EVALUATE=yes check
91+
$(eval BLACKBOX_FLAG__STEP_PROVISION:=no)
92+
$(eval BLACKBOX_FLAG__STEP_BUILD:=no)
93+
$(MAKE) check
7294

7395
shell:
74-
docker exec -it -w $(BLACKBOX_USER_QUESTION_DIR) --user="$(BLACKBOX_USER)" $(BLACKBOX_HOST) $(SHELL)
75-
76-
hr:
77-
cat <(xargs -r xdg-open 2>/dev/null < <(grep -o 'https://www.hackerrank.com.*' README.md))
78-
79-
gh:
80-
cat <(xargs -r xdg-open 2>/dev/null < <(grep -o 'https://github.com.*' README.md))
81-
82-
shell\:spawn:
83-
docker exec -it $(BLACKBOX_HOST) $(SHELL) -c "docker exec -it -w $(BLACKBOX_USER_QUESTION_DIR) $(BLACKBOX_SPAWN) $(SHELL)"
96+
vagrant ssh $(blackbox/spawn/id) --command="sudo su - $(blackbox/spawn/username)"
8497

8598
uninstall:
86-
xargs -r docker rm -f >/dev/null < <(docker ps -aq -f "name=$(BLACKBOX_HOST)")
87-
docker rmi blackbox:$(BLACKBOX_HOST) 2>/dev/null || true
99+
vagrant destroy -f
100+
rm -rf .vagrant
88101

89-
prune:
90-
xargs -r docker stop >/dev/null < <(docker ps -aq -f "name=blackbox-")
91-
docker system prune -a --volumes
102+
gh:
103+
grep -o "https://github.com.*" "$(blackbox/host/question/path)/README.md" | xargs -r xdg-open &>/dev/null
92104

93-
ifeq ($(filter debug,$(MAKECMDGOALS)),)
94-
.SILENT:
95-
endif
105+
hr:
106+
grep -o "https://www.hackerrank.com.*" "$(blackbox/host/question/path)/README.md" | xargs -r xdg-open &>/dev/null

Makefile.vagrant

Lines changed: 0 additions & 89 deletions
This file was deleted.

Vagrantfile

Lines changed: 14 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,22 @@
11
Vagrant.configure("2") do |config|
22
config.vm.box = "bento/ubuntu-24.04"
33
config.vm.hostname = "taskserver"
4+
5+
config.vm.define ENV["VAGRANT_SPAWN_ID"] do |machine|
6+
config.vm.provider "virtualbox" do |vb|
7+
vb.name = ENV["VAGRANT_SPAWN_ID"]
8+
vb.cpus = ENV["VAGRANT_CPU_LIMIT"]
9+
vb.memory = ENV["VAGRANT_MEMORY_LIMIT"]
10+
end
11+
end
12+
413
config.vm.synced_folder ".", "/vagrant", disabled: true
5-
if ENV["BLACKBOX_FLAG__DEBUG_MODE"] == "yes"
6-
config.vm.synced_folder ENV["BLACKBOX_DIR"], "/blackbox", mount_options: ["uid=0", "gid=0", "ro"]
14+
15+
if ENV["VAGRANT_DEBUG"] == "yes"
16+
config.vm.synced_folder ENV["VAGRANT_HOST_BLACKBOX_PATH"], ENV["VAGRANT_SPAWN_BLACKBOX_PATH"], mount_options: ["uid=0", "gid=0", "ro"]
717
end
8-
config.vm.synced_folder ENV["BLACKBOX_HOST_TEST_DIR"], "/test", mount_options: ["uid=0", "gid=0", "ro"]
18+
19+
config.vm.synced_folder ENV["VAGRANT_HOST_QUESTION_PATH"], ENV["VAGRANT_SPAWN_QUESTION_PATH"], mount_options: ["uid=0", "gid=0", "ro"]
920
config.vm.provision "shell", inline: <<-SHELL
1021
apt update && {
1122
DEBIAN_FRONTEND=noninteractive apt install -y unzip

blackbox

Lines changed: 13 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,8 @@
1414
# @set BLACKBOX_FLAG__STEP_BUILD type=enum<yes|no> Build step flag, indicates whether the "build" step is included or excluded (for development process only)
1515
# @set BLACKBOX_FLAG__STEP_EVALUATE type=enum<yes|no> Evaluate step flag, indicates whether the "evaluate" step is included or excluded (for development process only)
1616
# @set BLACKBOX_PROVISION_WITH_OPTS type=function,default=auto Provision hook definition, a function that implements an additional set of instructions that must be executed during the "provision" step
17+
# @set BLACKBOX_HEAP_WITH_OPTS type=function,default=auto Heap hook definition, a function that implements an additional set of heap instructions that might be executed during the "provision" step step
18+
# @set BLACKBOX_SNAPSHOT_WITH_OPTS type=function,default=auto Snapshot hook definition, a function that implements an additional set of snapshot instructions that might be executed during the "provision" step step
1719
# @set BLACKBOX_BUILD_WITH_OPTS type=function,default=auto Build hook definition, a function that implements an additional set of instructions that must be executed during the "build" step
1820
#
1921
# @set BLACKBOX_DIR readonly,type=string,default=auto Path to the Blackbox installation directory (sets automatically, do not override)
@@ -25,6 +27,7 @@
2527
# @set BLACKBOX_VERSION readonly,type=string,default=auto [DEPRECATED] Version of the Blackbox to use (sets automatically, do not override)
2628
# @set BLACKBOX_HEAP_DIR readonly,type=path,default=auto Path to the question "heap" directory, a place where question assets might be generated (sets automatically, do not override)
2729
# @set BLACKBOX_STORAGE_DIR readonly,type=path,default=auto Path to the question "artifacts" directory, a place where question artifacts will be generated (sets automatically, do not override)
30+
# @set BLACKBOX_SNAPSHOT_DIR readonly,type=path,default=auto Path to the question "snapshot" directory, a place where question snapshot will be generated (sets automatically, do not override)
2831
# @set BLACKBOX_BUILD_LOG readonly,type=path,default=auto Path to the build log (sets automatically, do not override)
2932
# @set BLACKBOX_BUILD_STREAM_DISPLAY_LINES readonly,type=integer,default=auto Number of output lines before trim and ellipsis
3033
#
@@ -62,10 +65,15 @@ blackbox() {
6265
# shellcheck disable=SC2155
6366
export BLACKBOX_PROVISION_WITH_OPTS=$(sed "s/\({\);/\1/g; s/\(;\)\{2\}/\1/g" <(awk 'ORS="; "' <(sed '1,2d; $d; s/[[:space:]]$//g; s/^[[:space:]]\+//g' <(declare -f BLACKBOX_PROVISION_WITH_OPTS))))
6467
# shellcheck disable=SC2155
68+
export BLACKBOX_SNAPSHOT_WITH_OPTS=$(sed "s/\({\);/\1/g; s/\(;\)\{2\}/\1/g" <(awk 'ORS="; "' <(sed '1,2d; $d; s/[[:space:]]$//g; s/^[[:space:]]\+//g' <(declare -f BLACKBOX_SNAPSHOT_WITH_OPTS))))
69+
# shellcheck disable=SC2155
70+
export BLACKBOX_HEAP_WITH_OPTS=$(sed "s/\({\);/\1/g; s/\(;\)\{2\}/\1/g" <(awk 'ORS="; "' <(sed '1,2d; $d; s/[[:space:]]$//g; s/^[[:space:]]\+//g' <(declare -f BLACKBOX_HEAP_WITH_OPTS))))
71+
# shellcheck disable=SC2155
6572
export BLACKBOX_BUILD_WITH_OPTS=$(sed "s/\({\);/\1/g; s/\(;\)\{2\}/\1/g" <(awk 'ORS="; "' <(sed '1,2d; $d; s/[[:space:]]$//g; s/^[[:space:]]\+//g' <(declare -f BLACKBOX_BUILD_WITH_OPTS))))
6673

67-
export BLACKBOX_HEAP_DIR="/tmp/${3}"
74+
export BLACKBOX_HEAP_DIR="/tmp/data"
6875
export BLACKBOX_STORAGE_DIR="/var/save/${3}"
76+
export BLACKBOX_SNAPSHOT_DIR="${BLACKBOX_STORAGE_DIR}/.snapshot"
6977
export BLACKBOX_BUILD_LOG="${BLACKBOX_STORAGE_DIR}/build.log"
7078
export BLACKBOX_BUILD_STREAM_DISPLAY_LINES=255
7179

@@ -220,8 +228,8 @@ blackbox() {
220228
declare header=$(</dev/stdin)
221229

222230
typeset entrypoint=$1
223-
typeset args=("$2")
224-
typeset opts=("$3")
231+
typeset -a args=("$2")
232+
typeset -a opts=("$3")
225233

226234
if [ -n "${args[*]}" ]; then
227235
args=("$(sed ':a;N;$!ba;s/\n/\t/g; s/[[:space:]]\+/ /g' <<<"${args[*]/#/ < }")")
@@ -271,7 +279,7 @@ blackbox() {
271279

272280
if [ ! -e "$BLACKBOX_DIR" ]; then
273281
wget -S --output-document="/tmp/blackbox.zip" "https://codeload.github.com/ProblemSetters/devops-blackbox/zip/refs/heads/${BLACKBOX_VERSION}" && {
274-
unzip /tmp/blackbox.zip -x "devops-blackbox-2404/.github/*" "devops-blackbox-2404/docs/*" "devops-blackbox-2404/tests/*" "devops-blackbox-2404/.gitignore" "devops-blackbox-2404/Makefile.*" "devops-blackbox-2404/README.md" "devops-blackbox-2404/Vagrantfile" -d /tmp && {
282+
unzip /tmp/blackbox.zip -x "devops-blackbox-2404/.github/*" "devops-blackbox-2404/docs/*" "devops-blackbox-2404/tests/*" "devops-blackbox-2404/.editorconfig" "devops-blackbox-2404/.gitignore" "devops-blackbox-2404/Makefile.*" "devops-blackbox-2404/README.md" "devops-blackbox-2404/Vagrantfile" -d /tmp && {
275283
mv "/tmp/devops-blackbox-${BLACKBOX_VERSION}" "$BLACKBOX_DIR"
276284
rm -rf /tmp/*blackbox*
277285
}
@@ -288,7 +296,7 @@ blackbox() {
288296
fi
289297

290298
blackbox.framework.inventory.install.directory "$BLACKBOX_USER_QUESTION_DIR" && {
291-
pushd "$BLACKBOX_USER_QUESTION_DIR" && {
299+
pushd "$BLACKBOX_USER_QUESTION_DIR" &>/dev/null && {
292300
blackbox.framework.module.load "$module_name" "${module_args[@]}"
293301
}
294302
}

0 commit comments

Comments
 (0)