trying to move it to another folder #235
This file contains 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
name: Test Spec | |
on: | |
push: | |
paths: | |
- .github/workflows/test-spec.yml | |
- package*.json | |
- spec/** | |
- tests/** | |
- tools/src/tester/** | |
- tsconfig.json | |
pull_request: | |
paths: | |
- .github/workflows/test-spec.yml | |
- package*.json | |
- spec/** | |
- tests/** | |
- tools/src/tester/** | |
- tsconfig.json | |
jobs: | |
test-opensearch-spec: | |
strategy: | |
fail-fast: false | |
matrix: | |
entry: | |
- version: 2.18.0 | |
name: test-opensearch-spec (version=${{ matrix.entry.version }}, hub=${{ matrix.entry.hub || 'opensearchproject' }}, tests=${{ matrix.entry.tests || 'default' }}) | |
runs-on: ubuntu-latest | |
env: | |
OPENSEARCH_DOCKER_HUB_PROJECT: ${{ matrix.entry.hub || 'opensearchproject' }} | |
OPENSEARCH_DOCKER_REF: ${{ matrix.entry.ref }} | |
OPENSEARCH_VERSION: ${{ matrix.entry.version }} | |
OPENSEARCH_PASSWORD: ${{ matrix.entry.admin_password || 'myStrongPassword123!' }} | |
OPENSEARCH_JAVA_OPTS: ${{ matrix.entry.opts }} -Xms8g -Xmx8g | |
steps: | |
- name: Checkout Repo | |
uses: actions/checkout@v4 | |
- name: Setup Node.js | |
uses: actions/setup-node@v3 | |
with: | |
node-version: '20' | |
- name: Install Dependencies | |
run: npm ci | |
- name: Run OpenSearch Cluster | |
working-directory: tests/${{ matrix.entry.tests || 'default' }} | |
run: docker compose up -d | |
- name: Generate Test Files Hash | |
id: tests | |
run: echo "hash=${{ matrix.entry.version }}-${{ hashFiles(format('tests/{0}', matrix.entry.tests || 'default')) }}" >> $GITHUB_OUTPUT | |
- name: Run Tests | |
run: | | |
npm run test:spec -- \ | |
--opensearch-insecure \ | |
--opensearch-version=${{ matrix.entry.version }} \ | |
--coverage coverage/test-spec-coverage-${{ steps.tests.outputs.hash }}.json \ | |
--opensearch-url=${{ matrix.entry.url || 'https://localhost:9200'}} \ | |
--opensearch-cert=${{ matrix.entry.cert }} \ | |
--opensearch-key=${{ matrix.entry.key }} \ | |
--tests=tests/${{ matrix.entry.tests || 'default' }} | |
- name: Get Container Logs | |
if: failure() | |
run: | | |
for container_id in $(docker ps -aqf "ancestor=opensearchproject/opensearch:${{ matrix.entry.version }}"); do \ | |
echo Dumping logs from $container_id ... && \ | |
docker logs $container_id \ | |
; done | |
- name: Upload Test Coverage Results | |
uses: actions/upload-artifact@v4 | |
with: | |
name: coverage-${{ matrix.entry.version }}-${{ steps.tests.outputs.hash }} | |
path: coverage/test-spec-coverage-${{ steps.tests.outputs.hash }}.json | |
merge-coverage: | |
runs-on: ubuntu-latest | |
needs: test-opensearch-spec | |
steps: | |
- uses: actions/checkout@v4 | |
- name: Download Spec Coverage Data | |
uses: actions/download-artifact@v4 | |
with: | |
path: coverage | |
- name: Display Content of JSON Files | |
run: | | |
echo "Displaying content of all test-spec-coverage JSON files..." | |
for file in $(find ./ -name "test-spec-coverage-*.json"); do | |
echo "Contents of $file:" | |
cat $file | jq . | |
done | |
- name: Collect Test File Names | |
run: | | |
files=$(find tests/. -name "*.yaml" | xargs realpath) | |
echo "Found the following test files:" | |
echo "$files" | |
echo "$files" | jq -Rn '{ files: [inputs | "\(.)"] }' > test-files.json | |
- name: Collect and Display Missing Test Paths | |
run: | | |
echo "Collecting missing test paths..." | |
jq -r -sc ' | |
(map(.operations) | add | unique) as $all | | |
(map(.evaluated_operations) | add | unique) as $evaluated | | |
$all - $evaluated | | |
.[] | | |
"\(.method) \(.path)" | |
' $(find ./ -name "test-spec-coverage-*.json") > ./coverage/missing_paths.txt | |
cat ./coverage/missing_paths.txt | |
echo "Finished displaying missing paths" | |
- name: Output Full Operations List | |
run: | | |
echo "Outputting full operations list for debugging..." | |
jq -r -sc ' | |
(map(.operations) | add) as $all_operations | | |
$all_operations | | |
map("\(.method) \(.path)") | | |
.[] | |
' $(find ./ -name "test-spec-coverage-*.json") > ./coverage/all_operations.txt | |
cat ./coverage/all_operations.txt | |
- name: Verify Uniqueness of Paths and Methods | |
run: | | |
echo "Checking uniqueness of paths and methods..." | |
jq -r -sc ' | |
(map(.operations) | add | map({path: .path, method: .method}) | unique) as $all_operations | | |
$all_operations | | |
map("\(.method) \(.path)") | | |
.[] | |
' $(find ./ -name "test-spec-coverage-*.json") > ./coverage/unique_operations.txt | |
cat ./coverage/unique_operations.txt | |
- name: Combine Test Coverage Data | |
shell: bash -eo pipefail {0} | |
run: | | |
echo "Combining test coverage data..." | |
jq -sc ' | |
(map(.operations) | add | map({path: .path, method: .method}) | unique) as $all_operations | | |
(map(.evaluated_operations) | add | map({path: .path, method: .method}) | unique) as $evaluated_operations | | |
{ | |
total_operations_count: ($all_operations | length), | |
evaluated_operations_count: ($evaluated_operations | length), | |
evaluated_paths_pct: ( | |
if ($all_operations | length) == 0 then 0 | |
else ($evaluated_operations | length * 100) / ($all_operations | length) | |
end | |
), | |
operations_list: $all_operations, | |
evaluated_operations_list: $evaluated_operations | |
} | |
' $(find ./coverage -name "test-spec-coverage-*.json") > ./coverage/coverage.json | |
echo "Finished combining data" | |
cat ./coverage/coverage.json | |
- name: Construct Comment Data Payload | |
if: github.event_name == 'pull_request' | |
shell: bash -eo pipefail {0} | |
run: | | |
jq \ | |
--arg pr_number ${PR_NUMBER} \ | |
--slurpfile test_coverage ./coverage/coverage.json \ | |
--null-input ' | |
{ | |
"pr_number": ($pr_number), | |
"comment_identifier": "## Spec Test Coverage Analysis", | |
"template_name": "pr-test-coverage-analysis", | |
"template_data": { | |
"test_coverage": ($test_coverage[0]) | |
} | |
} | |
' | tee pr-comment.json | |
env: | |
PR_NUMBER: ${{ github.event.pull_request.number }} | |
- name: Upload PR Comment Payload | |
uses: actions/upload-artifact@v4 | |
if: github.event_name == 'pull_request' | |
with: | |
name: pr-comment | |
path: pr-comment.json |