Skip to content

Commit e3e982f

Browse files
authored
perf(test): run release sandbox tests from a tiny fixture dir (#827)
1 parent 27ed5e4 commit e3e982f

1 file changed

Lines changed: 30 additions & 11 deletions

File tree

tests/unit/release_sandbox_test.sh

Lines changed: 30 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -8,31 +8,53 @@ if [[ "${BASH_VERSINFO[0]}" -eq 3 ]] && [[ "${BASH_VERSINFO[1]}" -lt 1 ]]; then
88
fi
99

1010
RELEASE_SCRIPT_DIR=""
11+
FIXTURE_DIR=""
1112

1213
function set_up_before_script() {
1314
RELEASE_SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")/../.." && pwd)"
1415

1516
# Source release.sh to get access to functions
1617
# shellcheck source=/dev/null
1718
source "$RELEASE_SCRIPT_DIR/release.sh"
19+
20+
# Tiny fake project dir: release::sandbox::create tars $(pwd), so running it
21+
# from the repo root copies ~21MB per call. The fixture keeps it to a few KB
22+
# and makes the exclusion tests self-contained (#825). bashunit::temp_dir is
23+
# cleaned by the framework after all workers finish — a manual rm -rf in
24+
# tear_down_after_script would race the parallel workers, which start before
25+
# the file-level teardown runs.
26+
FIXTURE_DIR=$(bashunit::temp_dir "release-fixture")
27+
echo '#!/usr/bin/env bash' >"$FIXTURE_DIR/bashunit"
28+
echo '#!/usr/bin/env bash' >"$FIXTURE_DIR/build.sh"
29+
echo '# Changelog' >"$FIXTURE_DIR/CHANGELOG.md"
30+
mkdir "$FIXTURE_DIR/.git" "$FIXTURE_DIR/.release-state"
31+
echo 'ref: refs/heads/main' >"$FIXTURE_DIR/.git/HEAD"
32+
echo 'state' >"$FIXTURE_DIR/.release-state/state.txt"
1833
}
1934

2035
##########################
2136
# Sandbox mode tests
2237
##########################
2338

2439
function test_sandbox_create_creates_temp_directory() {
40+
local original_dir
41+
original_dir=$(pwd)
42+
43+
cd "$FIXTURE_DIR" || return
2544
release::sandbox::create 2>/dev/null
45+
2646
assert_not_empty "$SANDBOX_DIR"
2747
assert_directory_exists "$SANDBOX_DIR"
48+
2849
rm -rf "$SANDBOX_DIR"
50+
cd "$original_dir" || return
2951
}
3052

3153
function test_sandbox_create_copies_project_files() {
3254
local original_dir
3355
original_dir=$(pwd)
3456

35-
cd "$RELEASE_SCRIPT_DIR" || return
57+
cd "$FIXTURE_DIR" || return
3658
release::sandbox::create 2>/dev/null
3759

3860
# Check that key files were copied
@@ -48,10 +70,10 @@ function test_sandbox_create_excludes_git_directory() {
4870
local original_dir
4971
original_dir=$(pwd)
5072

51-
cd "$RELEASE_SCRIPT_DIR" || return
73+
cd "$FIXTURE_DIR" || return
5274
release::sandbox::create 2>/dev/null
5375

54-
# .git should NOT be copied
76+
# .git exists in the fixture but should NOT be copied
5577
assert_directory_not_exists "$SANDBOX_DIR/.git"
5678

5779
rm -rf "$SANDBOX_DIR"
@@ -62,16 +84,13 @@ function test_sandbox_create_excludes_release_state() {
6284
local original_dir
6385
original_dir=$(pwd)
6486

65-
cd "$RELEASE_SCRIPT_DIR" || return
66-
67-
# Create a .release-state directory to test exclusion
68-
mkdir -p .release-state/test
87+
cd "$FIXTURE_DIR" || return
6988
release::sandbox::create 2>/dev/null
7089

71-
# .release-state should NOT be copied
90+
# .release-state exists in the fixture but should NOT be copied
7291
assert_directory_not_exists "$SANDBOX_DIR/.release-state"
7392

74-
rm -rf "$SANDBOX_DIR" .release-state
93+
rm -rf "$SANDBOX_DIR"
7594
cd "$original_dir" || return
7695
}
7796

@@ -83,7 +102,7 @@ function test_sandbox_setup_git_initializes_repo() {
83102
local original_dir
84103
original_dir=$(pwd)
85104

86-
cd "$RELEASE_SCRIPT_DIR" || return
105+
cd "$FIXTURE_DIR" || return
87106
release::sandbox::create 2>/dev/null
88107
release::sandbox::setup_git 2>/dev/null
89108

@@ -102,7 +121,7 @@ function test_sandbox_setup_git_creates_initial_commit() {
102121
local original_dir
103122
original_dir=$(pwd)
104123

105-
cd "$RELEASE_SCRIPT_DIR" || return
124+
cd "$FIXTURE_DIR" || return
106125
release::sandbox::create 2>/dev/null
107126
release::sandbox::setup_git 2>/dev/null
108127

0 commit comments

Comments
 (0)