Skip to content

Commit b692139

Browse files
committed
fix(ci): resolve examples project advanced test directive
1 parent 29f6678 commit b692139

1 file changed

Lines changed: 5 additions & 101 deletions

File tree

tests/Flowthru.Tests.Examples/scripts/run-tests.sh

Lines changed: 5 additions & 101 deletions
Original file line numberDiff line numberDiff line change
@@ -31,8 +31,11 @@ if [[ -n "${NX_AFFECTED_PROJECTS:-}" ]]; then
3131
read -ra AFFECTED <<< "$NX_AFFECTED_PROJECTS"
3232
else
3333
echo "Source: computing from last git tag (local)"
34-
NX_BASE=$(cd "$WORKSPACE_ROOT" && \
35-
git describe --tags --abbrev=0 2>/dev/null || git rev-list --max-parents=0 HEAD)
34+
if NX_BASE=$(cd "$WORKSPACE_ROOT" && git describe --tags --abbrev=0 2>/dev/null); then
35+
true
36+
else
37+
NX_BASE=$(cd "$WORKSPACE_ROOT" && git rev-list --max-parents=0 HEAD)
38+
fi
3639
echo "Base: $NX_BASE"
3740
AFFECTED_JSON=$(cd "$WORKSPACE_ROOT" && \
3841
pnpm nx show projects --affected --base="$NX_BASE" --json 2>/dev/null)
@@ -85,102 +88,3 @@ FILTER=$(IFS='|'; echo "${FILTER_PARTS[*]}")
8588
echo "NUnit filter: $FILTER"
8689

8790
dotnet test "$PROJECT_DIR" --no-build --no-restore --filter "$FILTER" "${EXTRA_ARGS[@]}"
88-
89-
90-
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
91-
PROJECT_DIR="$(cd "$SCRIPT_DIR/.." && pwd)"
92-
WORKSPACE_ROOT="$(cd "$PROJECT_DIR/../.." && pwd)"
93-
EXAMPLES_DIR="$WORKSPACE_ROOT/examples"
94-
95-
EXTRA_ARGS=("$@")
96-
97-
echo "=== Example Test Runner ==="
98-
echo "Project: $PROJECT_DIR"
99-
echo "Workspace root: $WORKSPACE_ROOT"
100-
101-
# ── 1. Get affected project list ──────────────────────────────────────────────
102-
103-
if [[ -n "${NX_AFFECTED_PROJECTS:-}" ]]; then
104-
echo "Source: NX_AFFECTED_PROJECTS env var (CI)"
105-
read -ra AFFECTED <<< "$NX_AFFECTED_PROJECTS"
106-
else
107-
echo "Source: computing from last git tag (local)"
108-
NX_BASE=$(cd "$WORKSPACE_ROOT" && \
109-
git describe --tags --abbrev=0 2>/dev/null || git rev-list --max-parents=0 HEAD)
110-
echo "Base: $NX_BASE"
111-
AFFECTED_JSON=$(cd "$WORKSPACE_ROOT" && \
112-
pnpm nx show projects --affected --base="$NX_BASE" --json 2>/dev/null)
113-
read -ra AFFECTED <<< "$(node -e \
114-
"process.stdout.write(JSON.parse(require('fs').readFileSync('/dev/stdin','utf8')).join(' '))" \
115-
<<< "$AFFECTED_JSON")"
116-
fi
117-
118-
echo "Affected (${#AFFECTED[@]}): ${AFFECTED[*]:-none}"
119-
120-
# ── 2. Discover example project names from disk ────────────────────────────────
121-
122-
declare -A EXAMPLE_SET
123-
while IFS= read -r csproj; do
124-
name="$(basename "$(dirname "$csproj")")"
125-
EXAMPLE_SET["$name"]=1
126-
done < <(find "$EXAMPLES_DIR" -name "*.csproj" \
127-
-not -path "*/archived/*" \
128-
-not -path "*/obj/*" \
129-
-not -path "*/bin/*")
130-
131-
echo "Discovered ${#EXAMPLE_SET[@]} example projects"
132-
133-
# ── 3. Determine if any framework (src/) library is affected ──────────────────
134-
# A project is a "framework library" if its root directory is under src/.
135-
# This check is structural — no manual exclusion list to maintain.
136-
137-
FRAMEWORK_AFFECTED=false
138-
for proj in "${AFFECTED[@]}"; do
139-
# Skip known example and test projects
140-
[[ -n "${EXAMPLE_SET[$proj]:-}" ]] && continue
141-
# Ask NX for the project root
142-
PROJ_ROOT=$(cd "$WORKSPACE_ROOT" && \
143-
pnpm nx show project "$proj" --json 2>/dev/null | \
144-
node -e "try{const d=JSON.parse(require('fs').readFileSync('/dev/stdin','utf8'));process.stdout.write(d.root||'')}catch{}" 2>/dev/null || true)
145-
if [[ "$PROJ_ROOT" == src/* ]]; then
146-
FRAMEWORK_AFFECTED=true
147-
echo "Framework project affected: $proj ($PROJ_ROOT) → running all examples"
148-
break
149-
fi
150-
done
151-
152-
# ── 4. Run tests ───────────────────────────────────────────────────────────────
153-
154-
if [[ "$FRAMEWORK_AFFECTED" == "true" ]]; then
155-
echo "Running all example integration tests."
156-
dotnet test "$PROJECT_DIR" --no-build --no-restore "${EXTRA_ARGS[@]}"
157-
exit $?
158-
fi
159-
160-
# Intersect affected with known example names
161-
AFFECTED_EXAMPLES=()
162-
for proj in "${AFFECTED[@]}"; do
163-
if [[ -n "${EXAMPLE_SET[$proj]:-}" ]]; then
164-
AFFECTED_EXAMPLES+=("$proj")
165-
fi
166-
done
167-
168-
echo "Affected examples (${#AFFECTED_EXAMPLES[@]}): ${AFFECTED_EXAMPLES[*]:-none}"
169-
170-
if [[ ${#AFFECTED_EXAMPLES[@]} -eq 0 ]]; then
171-
echo "No example projects affected — skipping example integration tests."
172-
exit 0
173-
fi
174-
175-
# FUnit discovery tests are always included (fast, assertion-only).
176-
# Integration tests scoped to affected examples via FullyQualifiedName.
177-
FILTER_PARTS=("Category=FUnit")
178-
for example in "${AFFECTED_EXAMPLES[@]}"; do
179-
FILTER_PARTS+=("FullyQualifiedName~${example}")
180-
done
181-
182-
# NUnit OR operator is |
183-
FILTER=$(IFS='|'; echo "${FILTER_PARTS[*]}")
184-
echo "NUnit filter: $FILTER"
185-
186-
dotnet test "$PROJECT_DIR" --no-build --no-restore --filter "$FILTER" "${EXTRA_ARGS[@]}"

0 commit comments

Comments
 (0)