Add checklist for testing in a clean scratch environment - #63
Merged
Conversation
Added a checklist item for testing instructions in a clean environment.
✅
|
| Descriptor | Linter | Files | Fixed | Errors | Warnings | Elapsed time |
|---|---|---|---|---|---|---|
| bash-exec | 32 | 29 | 0 | 0.39s | ||
| ✅ BASH | shellcheck | 32 | 0 | 0 | 1.2s | |
| shfmt | 32 | 23 | 0 | 0.02s | ||
| markdownlint | 3 | 63 | 0 | 0.75s | ||
| ✅ MARKDOWN | markdown-table-formatter | 3 | 0 | 0 | 0.29s |
Detailed Issues
⚠️ BASH / bash-exec - 29 errors
Results of bash-exec linter (version 5.3.3)
See documentation on https://megalinter.io/9.4.0/descriptors/bash_bash_exec/
-----------------------------------------------
✅ [SUCCESS] cap
❌ [ERROR] cap_completion.sh
Error: File:[cap_completion.sh] is not executable
❌ [ERROR] commands/env.sh
Error: File:[commands/env.sh] is not executable
❌ [ERROR] commands/help.sh
Error: File:[commands/help.sh] is not executable
❌ [ERROR] commands/md5.sh
Error: File:[commands/md5.sh] is not executable
❌ [ERROR] commands/new.sh
Error: File:[commands/new.sh] is not executable
❌ [ERROR] commands/run.sh
Error: File:[commands/run.sh] is not executable
❌ [ERROR] commands/update.sh
Error: File:[commands/update.sh] is not executable
❌ [ERROR] commands/verify.sh
Error: File:[commands/verify.sh] is not executable
❌ [ERROR] commands/version.sh
Error: File:[commands/version.sh] is not executable
❌ [ERROR] configure.sh
Error: File:[configure.sh] is not executable
❌ [ERROR] install.sh
Error: File:[install.sh] is not executable
❌ [ERROR] lib/environment.sh
Error: File:[lib/environment.sh] is not executable
❌ [ERROR] lib/environment_functions.sh
Error: File:[lib/environment_functions.sh] is not executable
❌ [ERROR] lib/functions.sh
Error: File:[lib/functions.sh] is not executable
❌ [ERROR] lib/functions/cap_array_value.sh
Error: File:[lib/functions/cap_array_value.sh] is not executable
❌ [ERROR] lib/functions/cap_container.sh
Error: File:[lib/functions/cap_container.sh] is not executable
❌ [ERROR] lib/functions/cap_data_download.sh
Error: File:[lib/functions/cap_data_download.sh] is not executable
❌ [ERROR] lib/functions/commands/cap_check_environment.sh
Error: File:[lib/functions/commands/cap_check_environment.sh] is not executable
❌ [ERROR] lib/functions/commands/cap_root_required.sh
Error: File:[lib/functions/commands/cap_root_required.sh] is not executable
❌ [ERROR] lib/functions/verify/cap_verify_append.sh
Error: File:[lib/functions/verify/cap_verify_append.sh] is not executable
❌ [ERROR] lib/functions/verify/cap_verify_md5.sh
Error: File:[lib/functions/verify/cap_verify_md5.sh] is not executable
❌ [ERROR] tests/fixtures/env/.caprc
Error: File:[tests/fixtures/env/.caprc] is not executable
❌ [ERROR] tests/fixtures/run/array_job.sh
Error: File:[tests/fixtures/run/array_job.sh] is not executable
❌ [ERROR] tests/fixtures/run/job.sh
Error: File:[tests/fixtures/run/job.sh] is not executable
❌ [ERROR] tests/fixtures/verify/verifications/test_cap_verify_md5.sh
Error: File:[tests/fixtures/verify/verifications/test_cap_verify_md5.sh] is not executable
❌ [ERROR] tests/fixtures/verify/verifications/test_dry_run.sh
Error: File:[tests/fixtures/verify/verifications/test_dry_run.sh] is not executable
❌ [ERROR] tests/fixtures/verify/verifications/test_name.sh
Error: File:[tests/fixtures/verify/verifications/test_name.sh] is not executable
❌ [ERROR] tests/fixtures/verify/verifications/test_output_file.sh
Error: File:[tests/fixtures/verify/verifications/test_output_file.sh] is not executable
✅ [SUCCESS] tests/install
✅ [SUCCESS] tests/run
❌ [ERROR] tests/setup_suite.bash
Error: File:[tests/setup_suite.bash] is not executable
⚠️ MARKDOWN / markdownlint - 63 errors
.github/pull_request_template.md:1 error MD041/first-line-heading/first-line-h1 First line in a file should be a top-level heading [Context: "## Summary"]
.github/pull_request_template.md:6:21 error MD059/descriptive-link-text Link text should be descriptive [Context: "[here]"]
.github/pull_request_template.md:39 error MD040/fenced-code-language Fenced code blocks should have a language specified [Context: "```"]
.github/pull_request_template.md:52 error MD040/fenced-code-language Fenced code blocks should have a language specified [Context: "```"]
.github/pull_request_template.md:59 error MD040/fenced-code-language Fenced code blocks should have a language specified [Context: "```"]
.github/pull_request_template.md:64 error MD040/fenced-code-language Fenced code blocks should have a language specified [Context: "```"]
.github/pull_request_template.md:70 error MD040/fenced-code-language Fenced code blocks should have a language specified [Context: "```"]
.github/pull_request_template.md:77 error MD040/fenced-code-language Fenced code blocks should have a language specified [Context: "```"]
CHANGELOG.md:1 error MD041/first-line-heading/first-line-h1 First line in a file should be a top-level heading [Context: "## CAPTURE 1.0.0 (January 16, ..."]
README.md:1 error MD041/first-line-heading/first-line-h1 First line in a file should be a top-level heading [Context: "CAPTURE"]
README.md:28 error MD040/fenced-code-language Fenced code blocks should have a language specified [Context: "```"]
README.md:33 error MD040/fenced-code-language Fenced code blocks should have a language specified [Context: "```"]
README.md:38 error MD040/fenced-code-language Fenced code blocks should have a language specified [Context: "```"]
README.md:46 error MD040/fenced-code-language Fenced code blocks should have a language specified [Context: "```"]
README.md:55 error MD040/fenced-code-language Fenced code blocks should have a language specified [Context: "```"]
README.md:74 error MD040/fenced-code-language Fenced code blocks should have a language specified [Context: "```"]
README.md:78 error MD040/fenced-code-language Fenced code blocks should have a language specified [Context: "```"]
README.md:129 error MD040/fenced-code-language Fenced code blocks should have a language specified [Context: "```"]
README.md:181 error MD040/fenced-code-language Fenced code blocks should have a language specified [Context: "```"]
README.md:195 error MD040/fenced-code-language Fenced code blocks should have a language specified [Context: "```"]
README.md:207 error MD040/fenced-code-language Fenced code blocks should have a language specified [Context: "```"]
README.md:225 error MD040/fenced-code-language Fenced code blocks should have a language specified [Context: "```"]
README.md:247 error MD040/fenced-code-language Fenced code blocks should have a language specified [Context: "```"]
README.md:281 error MD040/fenced-code-language Fenced code blocks should have a language specified [Context: "```"]
README.md:303 error MD040/fenced-code-language Fenced code blocks should have a language specified [Context: "```"]
README.md:346 error MD040/fenced-code-language Fenced code blocks should have a language specified [Context: "```"]
README.md:387 error MD040/fenced-code-language Fenced code blocks should have a language specified [Context: "```"]
README.md:391 error MD040/fenced-code-language Fenced code blocks should have a language specified [Context: "```"]
README.md:419 error MD040/fenced-code-language Fenced code blocks should have a language specified [Context: "```"]
README.md:438 error MD040/fenced-code-language Fenced code blocks should have a language specified [Context: "```"]
README.md:447 error MD040/fenced-code-language Fenced code blocks should have a language specified [Context: "```"]
README.md:451 error MD040/fenced-code-language Fenced code blocks should have a language specified [Context: "```"]
README.md:461 error MD040/fenced-code-language Fenced code blocks should have a language specified [Context: "```"]
README.md:472 error MD040/fenced-code-language Fenced code blocks should have a language specified [Context: "```"]
README.md:477 error MD040/fenced-code-language Fenced code blocks should have a language specified [Context: "```"]
README.md:486 error MD040/fenced-code-language Fenced code blocks should have a language specified [Context: "```"]
README.md:515 error MD040/fenced-code-language Fenced code blocks should have a language specified [Context: "```"]
README.md:524 error MD040/fenced-code-language Fenced code blocks should have a language specified [Context: "```"]
README.md:534 error MD040/fenced-code-language Fenced code blocks should have a language specified [Context: "```"]
README.md:556 error MD040/fenced-code-language Fenced code blocks should have a language specified [Context: "```"]
README.md:578 error MD040/fenced-code-language Fenced code blocks should have a language specified [Context: "```"]
README.md:583:72 error MD026/no-trailing-punctuation Trailing punctuation in heading [Punctuation: ':']
README.md:587 error MD040/fenced-code-language Fenced code blocks should have a language specified [Context: "```"]
README.md:594 error MD040/fenced-code-language Fenced code blocks should have a language specified [Context: "```"]
README.md:613 error MD040/fenced-code-language Fenced code blocks should have a language specified [Context: "```"]
README.md:617 error MD040/fenced-code-language Fenced code blocks should have a language specified [Context: "```"]
README.md:630 error MD040/fenced-code-language Fenced code blocks should have a language specified [Context: "```"]
README.md:649 error MD024/no-duplicate-heading Multiple headings with the same content [Context: "Examples for a verification na..."]
README.md:649:72 error MD026/no-trailing-punctuation Trailing punctuation in heading [Punctuation: ':']
README.md:652 error MD040/fenced-code-language Fenced code blocks should have a language specified [Context: "```"]
README.md:656 error MD040/fenced-code-language Fenced code blocks should have a language specified [Context: "```"]
README.md:663 error MD040/fenced-code-language Fenced code blocks should have a language specified [Context: "```"]
README.md:667 error MD040/fenced-code-language Fenced code blocks should have a language specified [Context: "```"]
README.md:672 error MD040/fenced-code-language Fenced code blocks should have a language specified [Context: "```"]
README.md:676 error MD040/fenced-code-language Fenced code blocks should have a language specified [Context: "```"]
README.md:697 error MD040/fenced-code-language Fenced code blocks should have a language specified [Context: "```"]
README.md:710 error MD040/fenced-code-language Fenced code blocks should have a language specified [Context: "```"]
README.md:715 error MD040/fenced-code-language Fenced code blocks should have a language specified [Context: "```"]
README.md:724 error MD040/fenced-code-language Fenced code blocks should have a language specified [Context: "```"]
README.md:728 error MD040/fenced-code-language Fenced code blocks should have a language specified [Context: "```"]
README.md:734 error MD040/fenced-code-language Fenced code blocks should have a language specified [Context: "```"]
README.md:741 error MD040/fenced-code-language Fenced code blocks should have a language specified [Context: "```"]
README.md:746 error MD040/fenced-code-language Fenced code blocks should have a language specified [Context: "```"]
⚠️ BASH / shfmt - 23 errors
termine the output folder or file name.
- # There is an assumption that the name of a tar file matches
- # the name of the output. This assumption will probably need
- # to be removed but we will wait until we have a real example
- # before we try to change this.
- local file_name
- if [ -n "$cap_data_download_source_file_name" ]; then
- file_name="$cap_data_download_source_file_name"
- else
- file_name=$(basename "$cap_data_download_url")
- fi
- local output_name
- output_name="${file_name//\.tar.*/}"
- output_name="${output_name//\.gz/}"
-
- local download_path="$CAP_DATA_PATH"
- if [ -n "$cap_data_download_subdirectory" ]; then
- download_path="$CAP_DATA_PATH/$cap_data_download_subdirectory"
- mkdir -p "$download_path"
- fi
-
- # Download data if the final output does not exist.
- if [ -e "$download_path/$output_name" ] || [ -e "$download_path/$file_name" ]; then
- echo "$file_name has already been downloaded"
- else
-
- local download_file
- download_file="${download_path}/${file_name}"
-
- # Download the file.
- if ! wget -nv --retry-connrefused -O "$download_file" "$cap_data_download_url"; then
- echo "Error: URL not found" >&2
- exit 1
- fi
-
- # Check the md5sum if it is provided.
- if [ -n "$cap_data_download_md5sum" ]; then
- if echo "$cap_data_download_md5sum $download_file" | md5sum -c -; then
- echo "File download checksum verified!"
- else
- echo >&2
- echo "File $file_name checksum verification failed!" >&2
- echo "The file was left in place for debugging purposes. It will" >&2
- echo "need to be deleted before attempting another download." >&2
- echo >&2
- exit 1
- fi
- fi
-
- if [[ "$cap_data_download_unzip" == "true" ]]; then
- case "$file_name" in
- # Untar and remove downloads that are tar archives.
- *.tar|*.tar.gz)
- if tar -xf "$download_file" -C "$download_path"; then
- rm "$download_file"
- fi
- ;;
- # Unzip and remove downloads that are compressed files.
- *.gz)
- (
- cd "$download_path" || exit
- gunzip "$file_name"
- )
- ;;
- *)
- echo "Error: Unsupported file extension '$file_name'" >&2
- exit 1
- ;;
- esac
- fi
- fi
+ cap_data_download_parse_commandline_parameters "$@"
+
+ # Determine the output folder or file name.
+ # There is an assumption that the name of a tar file matches
+ # the name of the output. This assumption will probably need
+ # to be removed but we will wait until we have a real example
+ # before we try to change this.
+ local file_name
+ if [ -n "$cap_data_download_source_file_name" ]; then
+ file_name="$cap_data_download_source_file_name"
+ else
+ file_name=$(basename "$cap_data_download_url")
+ fi
+ local output_name
+ output_name="${file_name//\.tar.*/}"
+ output_name="${output_name//\.gz/}"
+
+ local download_path="$CAP_DATA_PATH"
+ if [ -n "$cap_data_download_subdirectory" ]; then
+ download_path="$CAP_DATA_PATH/$cap_data_download_subdirectory"
+ mkdir -p "$download_path"
+ fi
+
+ # Download data if the final output does not exist.
+ if [ -e "$download_path/$output_name" ] || [ -e "$download_path/$file_name" ]; then
+ echo "$file_name has already been downloaded"
+ else
+
+ local download_file
+ download_file="${download_path}/${file_name}"
+
+ # Download the file.
+ if ! wget -nv --retry-connrefused -O "$download_file" "$cap_data_download_url"; then
+ echo "Error: URL not found" >&2
+ exit 1
+ fi
+
+ # Check the md5sum if it is provided.
+ if [ -n "$cap_data_download_md5sum" ]; then
+ if echo "$cap_data_download_md5sum $download_file" | md5sum -c -; then
+ echo "File download checksum verified!"
+ else
+ echo >&2
+ echo "File $file_name checksum verification failed!" >&2
+ echo "The file was left in place for debugging purposes. It will" >&2
+ echo "need to be deleted before attempting another download." >&2
+ echo >&2
+ exit 1
+ fi
+ fi
+
+ if [[ "$cap_data_download_unzip" == "true" ]]; then
+ case "$file_name" in
+ # Untar and remove downloads that are tar archives.
+ *.tar | *.tar.gz)
+ if tar -xf "$download_file" -C "$download_path"; then
+ rm "$download_file"
+ fi
+ ;;
+ # Unzip and remove downloads that are compressed files.
+ *.gz)
+ (
+ cd "$download_path" || exit
+ gunzip "$file_name"
+ )
+ ;;
+ *)
+ echo "Error: Unsupported file extension '$file_name'" >&2
+ exit 1
+ ;;
+ esac
+ fi
+ fi
}
cap_data_download_parse_commandline_parameters() {
- # Define the named commandline options
- if ! OPTIONS=$(getopt -o "" --long source-file-name:,md5sum:,unzip,subdirectory: -- "$@"); then
- echo "See CAPTURE help for cap_data_download." >&2
- exit 1
- fi
- eval set -- "$OPTIONS"
-
- # Set default values for the named parameters
- cap_data_download_source_file_name=""
- cap_data_download_md5sum=""
- cap_data_download_subdirectory=""
- cap_data_download_unzip=false
-
- # Parse the optional named command line options
- while true; do
- case "$1" in
- --source-file-name)
- cap_data_download_source_file_name="$2"
- shift 2 ;;
- --md5sum)
- cap_data_download_md5sum="$2"
- shift 2 ;;
- --subdirectory)
- cap_data_download_subdirectory="$2"
- shift 2 ;;
- --unzip)
- cap_data_download_unzip=true
- shift 1 ;;
- --)
- shift
- break;;
- esac
- done
-
- # Check that the required file url parameter was provided
- if [ "$#" -ne 1 ]; then
- echo "Error: incorrect number of parameters" >&2
- echo "Usage: cap_data_download [options] URL" >&2
- echo "See CAPTURE help for cap_data_download" >&2
- exit 1
- fi
- cap_data_download_url=$1
+ # Define the named commandline options
+ if ! OPTIONS=$(getopt -o "" --long source-file-name:,md5sum:,unzip,subdirectory: -- "$@"); then
+ echo "See CAPTURE help for cap_data_download." >&2
+ exit 1
+ fi
+ eval set -- "$OPTIONS"
+
+ # Set default values for the named parameters
+ cap_data_download_source_file_name=""
+ cap_data_download_md5sum=""
+ cap_data_download_subdirectory=""
+ cap_data_download_unzip=false
+
+ # Parse the optional named command line options
+ while true; do
+ case "$1" in
+ --source-file-name)
+ cap_data_download_source_file_name="$2"
+ shift 2
+ ;;
+ --md5sum)
+ cap_data_download_md5sum="$2"
+ shift 2
+ ;;
+ --subdirectory)
+ cap_data_download_subdirectory="$2"
+ shift 2
+ ;;
+ --unzip)
+ cap_data_download_unzip=true
+ shift 1
+ ;;
+ --)
+ shift
+ break
+ ;;
+ esac
+ done
+
+ # Check that the required file url parameter was provided
+ if [ "$#" -ne 1 ]; then
+ echo "Error: incorrect number of parameters" >&2
+ echo "Usage: cap_data_download [options] URL" >&2
+ echo "See CAPTURE help for cap_data_download" >&2
+ exit 1
+ fi
+ cap_data_download_url=$1
}
diff lib/functions/commands/cap_check_environment.sh.orig lib/functions/commands/cap_check_environment.sh
--- lib/functions/commands/cap_check_environment.sh.orig
+++ lib/functions/commands/cap_check_environment.sh
@@ -1,8 +1,8 @@
#!/bin/bash
cap_check_environment() {
- if [[ ! -f "config/environments/$1.sh" ]]; then
- echo "The $1.sh environment file does not exist in config/environments."
- exit 2
- fi
+ if [[ ! -f "config/environments/$1.sh" ]]; then
+ echo "The $1.sh environment file does not exist in config/environments."
+ exit 2
+ fi
}
diff lib/functions/commands/cap_root_required.sh.orig lib/functions/commands/cap_root_required.sh
--- lib/functions/commands/cap_root_required.sh.orig
+++ lib/functions/commands/cap_root_required.sh
@@ -1,8 +1,8 @@
#!/bin/bash
cap_root_required() {
- if [[ ! -f "config/pipeline.sh" ]]; then
- echo "The $1 command must be executed from the project root directory." >&2
- exit 2
- fi
+ if [[ ! -f "config/pipeline.sh" ]]; then
+ echo "The $1 command must be executed from the project root directory." >&2
+ exit 2
+ fi
}
diff lib/functions/verify/cap_verify_append.sh.orig lib/functions/verify/cap_verify_append.sh
--- lib/functions/verify/cap_verify_append.sh.orig
+++ lib/functions/verify/cap_verify_append.sh
@@ -1,9 +1,9 @@
#!/bin/bash
cap_verify_append() {
- if [[ "$CAP_VERIFICATION_DRY_RUN" == "true" ]]; then
- echo "$1"
- else
- echo "$1" >> "${CAP_VERIFICATION_OUTPUT_FILE:-/dev/stdout}"
- fi
+ if [[ "$CAP_VERIFICATION_DRY_RUN" == "true" ]]; then
+ echo "$1"
+ else
+ echo "$1" >>"${CAP_VERIFICATION_OUTPUT_FILE:-/dev/stdout}"
+ fi
}
diff lib/functions/verify/cap_verify_md5.sh.orig lib/functions/verify/cap_verify_md5.sh
--- lib/functions/verify/cap_verify_md5.sh.orig
+++ lib/functions/verify/cap_verify_md5.sh
@@ -1,49 +1,51 @@
#!/bin/bash
cap_verify_md5() {
- cap_verify_md5_parse_commandline_parameters "$@"
-
- cap_md5_args+=(--append --output-files-only)
- if [[ "$CAP_VERIFICATION_DRY_RUN" == "true" ]]; then
- cap_md5_args+=(--dry-run)
- else
- cap_md5_args+=(--output "$CAP_VERIFICATION_OUTPUT_FILE")
- fi
-
- cap md5 \
- "${cap_md5_args[@]}" \
- "$verify_path"
+ cap_verify_md5_parse_commandline_parameters "$@"
+
+ cap_md5_args+=(--append --output-files-only)
+ if [[ "$CAP_VERIFICATION_DRY_RUN" == "true" ]]; then
+ cap_md5_args+=(--dry-run)
+ else
+ cap_md5_args+=(--output "$CAP_VERIFICATION_OUTPUT_FILE")
+ fi
+
+ cap md5 \
+ "${cap_md5_args[@]}" \
+ "$verify_path"
}
cap_verify_md5_parse_commandline_parameters() {
- # Define the named commandline options
- if ! OPTIONS=$(getopt -o "" --long ignore:,select: -- "$@"); then
- echo "See CAPTURE help for cap_verify_md5." >&2
- exit 1
- fi
- eval set -- "$OPTIONS"
-
- # Set default values for the named parameters
- cap_md5_args=()
-
- # Parse the optional named command line options
- while true; do
- case "$1" in
- --select|--ignore)
- cap_md5_args+=("$1" "$2")
- shift 2 ;;
- --)
- shift
- break;;
- esac
- done
-
- # Check that the required file url parameter was provided
- if [ "$#" -ne 1 ]; then
- echo "Error: incorrect number of parameters" >&2
- echo "Usage: cap_verify_md5 [options] URL" >&2
- echo "See CAPTURE help for cap_verify_md5" >&2
- exit 1
- fi
- verify_path="$1"
+ # Define the named commandline options
+ if ! OPTIONS=$(getopt -o "" --long ignore:,select: -- "$@"); then
+ echo "See CAPTURE help for cap_verify_md5." >&2
+ exit 1
+ fi
+ eval set -- "$OPTIONS"
+
+ # Set default values for the named parameters
+ cap_md5_args=()
+
+ # Parse the optional named command line options
+ while true; do
+ case "$1" in
+ --select | --ignore)
+ cap_md5_args+=("$1" "$2")
+ shift 2
+ ;;
+ --)
+ shift
+ break
+ ;;
+ esac
+ done
+
+ # Check that the required file url parameter was provided
+ if [ "$#" -ne 1 ]; then
+ echo "Error: incorrect number of parameters" >&2
+ echo "Usage: cap_verify_md5 [options] URL" >&2
+ echo "See CAPTURE help for cap_verify_md5" >&2
+ exit 1
+ fi
+ verify_path="$1"
}
diff tests/setup_suite.bash.orig tests/setup_suite.bash
--- tests/setup_suite.bash.orig
+++ tests/setup_suite.bash
@@ -1,32 +1,32 @@
setup_suite() {
- # Make sure the `cap` command in this CAPTURE code base is used in tests
- # instead of the one installed in the system.
- PATH="$(pwd):$PATH"
- export PATH
-
- # Make sure the capture install path is pointing to the development
- # environment.
- CAP_INSTALL_PATH="$(pwd)"
- export CAP_INSTALL_PATH
-
- # Location of the CAPTURE framework development environment.
- CAP_DEVELOPMENT_PATH="$(pwd)"
- export CAP_DEVELOPMENT_PATH
-
- # Setup a unique temporary directory for BATS tests to fix temporary file
- # errors on Cheaha where developers share temp directories.
- BATS_TMPDIR="$(mktemp -d)"
- export BATS_TMPDIR
-
- # Setup test locations for caprc files. Otherwise, the developer's actual
- # caprc files will be used and make tests fail.
- CAP_ETC_RC_PATH="$(mktemp -p "$BATS_TMPDIR")"
- export CAP_ETC_RC_PATH
- CAP_HOME_RC_PATH="$(mktemp -p "$BATS_TMPDIR")"
- export CAP_HOME_RC_PATH
+ # Make sure the `cap` command in this CAPTURE code base is used in tests
+ # instead of the one installed in the system.
+ PATH="$(pwd):$PATH"
+ export PATH
+
+ # Make sure the capture install path is pointing to the development
+ # environment.
+ CAP_INSTALL_PATH="$(pwd)"
+ export CAP_INSTALL_PATH
+
+ # Location of the CAPTURE framework development environment.
+ CAP_DEVELOPMENT_PATH="$(pwd)"
+ export CAP_DEVELOPMENT_PATH
+
+ # Setup a unique temporary directory for BATS tests to fix temporary file
+ # errors on Cheaha where developers share temp directories.
+ BATS_TMPDIR="$(mktemp -d)"
+ export BATS_TMPDIR
+
+ # Setup test locations for caprc files. Otherwise, the developer's actual
+ # caprc files will be used and make tests fail.
+ CAP_ETC_RC_PATH="$(mktemp -p "$BATS_TMPDIR")"
+ export CAP_ETC_RC_PATH
+ CAP_HOME_RC_PATH="$(mktemp -p "$BATS_TMPDIR")"
+ export CAP_HOME_RC_PATH
}
teardown_suite() {
- # Remove the unique temporary directory created in setup_suite().
- rm -rf "$BATS_TMPDIR"
+ # Remove the unique temporary directory created in setup_suite().
+ rm -rf "$BATS_TMPDIR"
}
(Truncated to last 13333 characters out of 79728)
See detailed reports in MegaLinter artifacts
You could have the same capabilities but better runtime performances if you use a MegaLinter flavor:
- oxsecurity/megalinter/flavors/documentation@v9.4.0 (51 linters)
- oxsecurity/megalinter/flavors/ruby@v9.4.0 (52 linters)
- oxsecurity/megalinter/flavors/rust@v9.4.0 (52 linters)
Your project could benefit from a custom flavor, which would allow you to run only the linters you need, and thus improve runtime performances. (Skip this info by defining FLAVOR_SUGGESTIONS: false)
- Documentation: Custom Flavors
- Command:
npx mega-linter-runner@9.4.0 --custom-flavor-setup --custom-flavor-linters BASH_EXEC,BASH_SHELLCHECK,BASH_SHFMT,MARKDOWN_MARKDOWNLINT,MARKDOWN_MARKDOWN_TABLE_FORMATTER

Show us your support by starring ⭐ the repository
toniecrumley
requested review from
blasseigne,
eokunbor,
kjamescasper,
lizzyjoan,
mckay33,
sashataluri,
tchowton and
tsoelter
April 29, 2026 16:42
toniecrumley
marked this pull request as ready for review
April 29, 2026 17:34
tsoelter
approved these changes
Apr 29, 2026
lizzyjoan
approved these changes
May 6, 2026
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
Added a checklist item to test pull request instructions in a clean environment to ensure they work properly for code reviewers.
Author Checklist
See instructions here.
or unrelated files are part of this pull request. Use
.gitignoreto preventirrelevant files from accidentally being included.
message should show in the GitHub pull request status box above the
"Merge pull request" button.
branch has conflicts that must be resolved" message in the GitHub pull
request status box above the "Merge pull request" button.
commandsdirectoryhas been updated if necessary.
Self/Peer Review Checklist (Coding Guidelines)
why, not what the code is doing. Avoid excessive or redundant commenting.
Setup
No setup is required.
Test
Read the text added to the pull request template on the "Files changed" tab and comment if changes are needed.
Cleanup
No cleanup required.