ci: update CI workflow to run TypeScript tests with new script (#480)
This commit is contained in:
parent
2168360195
commit
90873e8009
24
.github/workflows/ci.yaml
vendored
24
.github/workflows/ci.yaml
vendored
@ -13,6 +13,24 @@ jobs:
|
||||
steps:
|
||||
- name: Check out code
|
||||
uses: actions/checkout@v5
|
||||
- name: Detect changed files
|
||||
uses: dorny/paths-filter@v3
|
||||
id: filter
|
||||
with:
|
||||
list-files: shell
|
||||
filters: |
|
||||
shared:
|
||||
- 'test/**'
|
||||
- 'package.json'
|
||||
- 'bun.lock'
|
||||
- 'bunfig.toml'
|
||||
- 'tsconfig.json'
|
||||
- '.github/workflows/ci.yaml'
|
||||
- 'scripts/ts_test_auto.sh'
|
||||
modules:
|
||||
- 'registry/**/modules/**'
|
||||
all:
|
||||
- '**'
|
||||
- name: Set up Terraform
|
||||
uses: coder/coder/.github/actions/setup-tf@main
|
||||
- name: Set up Bun
|
||||
@ -27,7 +45,11 @@ jobs:
|
||||
- name: Install dependencies
|
||||
run: bun install
|
||||
- name: Run TypeScript tests
|
||||
run: bun test
|
||||
env:
|
||||
ALL_CHANGED_FILES: ${{ steps.filter.outputs.all_files }}
|
||||
SHARED_CHANGED: ${{ steps.filter.outputs.shared }}
|
||||
MODULE_CHANGED_FILES: ${{ steps.filter.outputs.modules_files }}
|
||||
run: ./scripts/ts_test_auto.sh
|
||||
- name: Run Terraform tests
|
||||
run: ./scripts/terraform_test_all.sh
|
||||
- name: Run Terraform Validate
|
||||
|
||||
63
scripts/ts_test_auto.sh
Executable file
63
scripts/ts_test_auto.sh
Executable file
@ -0,0 +1,63 @@
|
||||
#!/usr/bin/env bash
|
||||
set -euo pipefail
|
||||
|
||||
# Auto-detect which TypeScript tests to run based on changed files from paths-filter
|
||||
# Uses paths-filter outputs from GitHub Actions:
|
||||
# ALL_CHANGED_FILES - all files changed in the PR (for logging)
|
||||
# SHARED_CHANGED - boolean indicating if shared infrastructure changed
|
||||
# MODULE_CHANGED_FILES - only files in registry/**/modules/** (for processing)
|
||||
# Runs all tests if shared infrastructure changes
|
||||
#
|
||||
# This script only runs tests for changed modules. Documentation and template changes are ignored.
|
||||
|
||||
echo "==> Detecting changed files..."
|
||||
|
||||
if [[ -n "${ALL_CHANGED_FILES:-}" ]]; then
|
||||
echo "Changed files in PR:"
|
||||
echo "$ALL_CHANGED_FILES" | tr ' ' '\n' | sed 's/^/ - /'
|
||||
echo ""
|
||||
fi
|
||||
|
||||
if [[ "${SHARED_CHANGED:-false}" == "true" ]]; then
|
||||
echo "==> Shared infrastructure changed"
|
||||
echo "==> Running all tests for safety"
|
||||
exec bun test
|
||||
fi
|
||||
|
||||
if [[ -z "${MODULE_CHANGED_FILES:-}" ]]; then
|
||||
echo "✓ No module files changed, skipping tests"
|
||||
exit 0
|
||||
fi
|
||||
|
||||
CHANGED_FILES=$(echo "$MODULE_CHANGED_FILES" | tr ' ' '\n')
|
||||
|
||||
MODULE_DIRS=()
|
||||
while IFS= read -r file; do
|
||||
if [[ "$file" =~ \.(md|png|jpg|jpeg|svg)$ ]]; then
|
||||
continue
|
||||
fi
|
||||
|
||||
if [[ "$file" =~ ^registry/([^/]+)/modules/([^/]+)/ ]]; then
|
||||
namespace="${BASH_REMATCH[1]}"
|
||||
module="${BASH_REMATCH[2]}"
|
||||
module_dir="registry/${namespace}/modules/${module}"
|
||||
|
||||
if [[ -f "$module_dir/main.test.ts" ]] && [[ ! " ${MODULE_DIRS[*]} " =~ " ${module_dir} " ]]; then
|
||||
MODULE_DIRS+=("$module_dir")
|
||||
fi
|
||||
fi
|
||||
done <<< "$CHANGED_FILES"
|
||||
|
||||
if [[ ${#MODULE_DIRS[@]} -eq 0 ]]; then
|
||||
echo "✓ No TypeScript tests to run"
|
||||
echo " (documentation, templates, namespace files, or modules without tests)"
|
||||
exit 0
|
||||
fi
|
||||
|
||||
echo "==> Running TypeScript tests for ${#MODULE_DIRS[@]} changed module(s):"
|
||||
for dir in "${MODULE_DIRS[@]}"; do
|
||||
echo " - $dir"
|
||||
done
|
||||
echo ""
|
||||
|
||||
exec bun test "${MODULE_DIRS[@]}"
|
||||
Loading…
x
Reference in New Issue
Block a user