-
Notifications
You must be signed in to change notification settings - Fork 324
chore(ci): add code-block testing workflow #6810
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Merged
+1,784
−1
Merged
Changes from 4 commits
Commits
Show all changes
18 commits
Select commit
Hold shift + click to select a range
b569d09
chore(ci): add code-block testing workflow
claude 8925058
feat(test): add performance optimization for code block tests
claude d739d58
Merge branch 'master' into claude/add-codeblock-ci-tests-jRvG9
jstirnaman ae646cb
Update .github/workflows/test.yml
jstirnaman 83db31c
Replace default CI test products with Core and Telegraf (#6812)
Copilot 0c192e8
fix(ci): detect harness changes and map to default test group
jstirnaman 8bf3119
feat(ci): start InfluxDB 3 Core with preconfigured token for live tests
jstirnaman 92dae38
fix(ci): chmod data dirs so influxdb3:3-core container can write
jstirnaman 1a77404
fix(ci): make admin token file world-readable for compose secret mount
jstirnaman cd28bb0
fix(ci): authenticate readiness probe; /ping requires token in Core 3.9+
jstirnaman a1d84a5
chore(ci): make code-block test job truly non-blocking
jstirnaman dff9e63
feat(ci): add influxdb3-enterprise-pytest compose service
jstirnaman 398cff7
feat(ci): run InfluxDB 3 Enterprise live tests with preconfigured token
jstirnaman c009b92
chore(ci): run default code-block test group in parallel
jstirnaman 113417c
feat(ci): gate Enterprise pytest on pre-verified license blob; filter…
jstirnaman c03cc89
docs(testing): document CI code-block workflow and Enterprise activation
jstirnaman bf5e8f8
Merge remote-tracking branch 'origin/master' into claude/add-codebloc…
jstirnaman db569f1
feat(ci): include influxdb3_enterprise in default product group
jstirnaman File filter
Filter by extension
Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
There are no files selected for viewing
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
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,219 @@ | ||
| name: Test Code Blocks | ||
|
|
||
| on: | ||
| pull_request: | ||
| paths: | ||
| - 'content/**/*.md' | ||
| - 'test/**' | ||
| - 'Dockerfile.pytest' | ||
| - 'compose.yaml' | ||
| types: [opened, synchronize, reopened] | ||
| workflow_dispatch: | ||
| inputs: | ||
| test_suite: | ||
| description: 'Test suite to run (all, cloud, v2, telegraf, or specific products)' | ||
| required: false | ||
| default: 'all' | ||
|
jstirnaman marked this conversation as resolved.
Outdated
jstirnaman marked this conversation as resolved.
Outdated
|
||
|
|
||
| jobs: | ||
| detect-changes: | ||
| name: Detect test requirements | ||
| runs-on: ubuntu-latest | ||
| outputs: | ||
| should-run: ${{ steps.check.outputs.should-run }} | ||
| test-products: ${{ steps.check.outputs.test-products }} | ||
|
|
||
| steps: | ||
| - name: Checkout repository | ||
| uses: actions/checkout@v4 | ||
| with: | ||
| fetch-depth: 0 | ||
|
|
||
| - name: Check if tests should run | ||
| id: check | ||
| run: | | ||
| # For workflow_dispatch, always run tests | ||
| if [[ "${{ github.event_name }}" == "workflow_dispatch" ]]; then | ||
| echo "should-run=true" >> $GITHUB_OUTPUT | ||
| echo "test-products=[\"cloud\", \"v2\", \"telegraf\"]" >> $GITHUB_OUTPUT | ||
|
jstirnaman marked this conversation as resolved.
Outdated
|
||
| exit 0 | ||
| fi | ||
|
|
||
| # For PRs, check if content files changed | ||
| CHANGED_FILES=$(git diff --name-only ${{ github.event.pull_request.base.sha }}...${{ github.sha }} | grep '^content/.*\.md$' || true) | ||
|
|
||
| if [[ -z "$CHANGED_FILES" ]]; then | ||
| echo "should-run=false" >> $GITHUB_OUTPUT | ||
| echo "📝 No content changes detected - skipping code block tests" | ||
| exit 0 | ||
| fi | ||
|
|
||
| echo "should-run=true" >> $GITHUB_OUTPUT | ||
|
|
||
| # Determine which product tests to run based on changed files | ||
| PRODUCTS=() | ||
|
|
||
| if echo "$CHANGED_FILES" | grep -q '^content/influxdb/cloud/'; then | ||
| PRODUCTS+=("cloud") | ||
| fi | ||
|
|
||
| if echo "$CHANGED_FILES" | grep -q '^content/influxdb/v2/'; then | ||
| PRODUCTS+=("v2") | ||
| fi | ||
|
|
||
| if echo "$CHANGED_FILES" | grep -q '^content/telegraf/'; then | ||
| PRODUCTS+=("telegraf") | ||
| fi | ||
|
|
||
| # If no specific products matched or shared content changed, run all | ||
| if [[ ${#PRODUCTS[@]} -eq 0 ]] || echo "$CHANGED_FILES" | grep -q '^content/shared/'; then | ||
| PRODUCTS=("cloud" "v2" "telegraf") | ||
| fi | ||
|
|
||
| # Convert to JSON array | ||
| PRODUCTS_JSON=$(printf '%s\n' "${PRODUCTS[@]}" | jq -R . | jq -s -c .) | ||
| echo "test-products=$PRODUCTS_JSON" >> $GITHUB_OUTPUT | ||
|
|
||
| echo "✅ Will run tests for: ${PRODUCTS[*]}" | ||
|
|
||
| test-codeblocks: | ||
| name: Test ${{ matrix.product }} code blocks | ||
| needs: detect-changes | ||
| if: needs.detect-changes.outputs.should-run == 'true' | ||
| runs-on: ubuntu-latest | ||
| timeout-minutes: 30 | ||
|
|
||
| strategy: | ||
| fail-fast: false | ||
| matrix: | ||
| product: ${{ fromJson(needs.detect-changes.outputs.test-products) }} | ||
|
|
||
| steps: | ||
| - name: Checkout repository | ||
| uses: actions/checkout@v4 | ||
|
|
||
| - name: Setup Node.js | ||
| uses: actions/setup-node@v4 | ||
| with: | ||
| node-version: '20' | ||
| cache: 'yarn' | ||
|
|
||
| - name: Install dependencies | ||
| run: | | ||
| # Skip Cypress installation to speed up CI | ||
| CYPRESS_INSTALL_BINARY=0 yarn install --frozen-lockfile | ||
|
|
||
| - name: Build pytest Docker image | ||
| run: | | ||
| echo "Building influxdata/docs-pytest image..." | ||
| docker build -t influxdata/docs-pytest:latest -f Dockerfile.pytest . | ||
|
|
||
| - name: Setup test credentials (mock) | ||
| run: | | ||
| # Create mock .env.test files for CI | ||
| # In production, these would be configured with actual credentials | ||
| mkdir -p content/influxdb/cloud | ||
| mkdir -p content/influxdb/v2 | ||
| mkdir -p content/telegraf/v1 | ||
|
|
||
| cat > content/influxdb/cloud/.env.test << 'EOF' | ||
| # Mock credentials for CI testing | ||
| INFLUX_HOST=https://cloud2.influxdata.com | ||
| INFLUX_TOKEN=mock_token_for_ci | ||
| INFLUX_ORG=mock_org | ||
| INFLUX_BUCKET=mock_bucket | ||
| EOF | ||
|
|
||
| cat > content/influxdb/v2/.env.test << 'EOF' | ||
| # Mock credentials for CI testing | ||
| INFLUX_HOST=http://localhost:8086 | ||
| INFLUX_TOKEN=mock_token_for_ci | ||
| INFLUX_ORG=mock_org | ||
| INFLUX_BUCKET=mock_bucket | ||
| EOF | ||
|
|
||
| cat > content/telegraf/v1/.env.test << 'EOF' | ||
| # Mock credentials for CI testing | ||
| INFLUX_HOST=https://cloud2.influxdata.com | ||
| INFLUX_TOKEN=mock_token_for_ci | ||
| EOF | ||
|
jstirnaman marked this conversation as resolved.
|
||
|
|
||
| echo "✅ Mock test credentials created" | ||
|
|
||
| - name: Run ${{ matrix.product }} code block tests | ||
| id: test | ||
| continue-on-error: true | ||
| run: | | ||
| echo "Running tests for ${{ matrix.product }}..." | ||
|
|
||
| # Run the specific product test suite | ||
| yarn test:codeblocks:${{ matrix.product }} || EXIT_CODE=$? | ||
|
|
||
| # Capture exit code for reporting | ||
| if [[ -n "$EXIT_CODE" ]]; then | ||
| echo "test-status=failed" >> $GITHUB_OUTPUT | ||
| echo "exit-code=$EXIT_CODE" >> $GITHUB_OUTPUT | ||
| else | ||
| echo "test-status=passed" >> $GITHUB_OUTPUT | ||
| echo "exit-code=0" >> $GITHUB_OUTPUT | ||
| fi | ||
|
|
||
| - name: Generate test summary | ||
| if: always() | ||
| run: | | ||
| cat >> $GITHUB_STEP_SUMMARY << 'EOF' | ||
| ## Code Block Test Results - ${{ matrix.product }} | ||
|
|
||
| **Status:** ${{ steps.test.outputs.test-status == 'passed' && '✅ Passed' || '❌ Failed' }} | ||
| **Product:** ${{ matrix.product }} | ||
| **Exit Code:** ${{ steps.test.outputs.exit-code }} | ||
|
|
||
| EOF | ||
|
|
||
| if [[ "${{ steps.test.outputs.test-status }}" == "failed" ]]; then | ||
| cat >> $GITHUB_STEP_SUMMARY << 'EOF' | ||
| ⚠️ **Note:** Code block tests require valid credentials configured in `.env.test` files. | ||
| In CI, mock credentials are used which may cause some tests to fail. | ||
| Review the test output above for specific failures. | ||
|
|
||
| To test locally with real credentials: | ||
| 1. Create `.env.test` files in product directories | ||
| 2. Run `yarn test:codeblocks:${{ matrix.product }}` | ||
| EOF | ||
| fi | ||
|
|
||
| - name: Upload test artifacts | ||
| if: always() | ||
| uses: actions/upload-artifact@v4 | ||
| with: | ||
| name: test-results-${{ matrix.product }} | ||
| path: | | ||
| test/shared/** | ||
| pytest-*.log | ||
| retention-days: 7 | ||
| if-no-files-found: ignore | ||
|
|
||
| - name: Fail job if tests failed | ||
| if: steps.test.outputs.test-status == 'failed' | ||
| run: | | ||
| echo "::error::Code block tests failed for ${{ matrix.product }}" | ||
| exit 1 | ||
|
|
||
| test-summary: | ||
| name: Code Block Test Summary | ||
| needs: [detect-changes, test-codeblocks] | ||
| if: always() && needs.detect-changes.outputs.should-run == 'true' | ||
| runs-on: ubuntu-latest | ||
|
|
||
| steps: | ||
| - name: Check test results | ||
| run: | | ||
| # This job will fail if any of the test jobs failed | ||
| if [[ "${{ needs.test-codeblocks.result }}" == "failure" ]]; then | ||
| echo "::error::One or more code block test suites failed" | ||
| exit 1 | ||
| elif [[ "${{ needs.test-codeblocks.result }}" == "success" ]]; then | ||
| echo "✅ All code block tests passed" | ||
| else | ||
| echo "⚠️ Tests were skipped or cancelled" | ||
| fi | ||
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
| Original file line number | Diff line number | Diff line change |
|---|---|---|
|
|
@@ -29,6 +29,7 @@ test-results.xml | |
| /influxdb3cli-build-scripts/content | ||
| tmp | ||
| .tmp | ||
| .test-cache | ||
|
|
||
| # IDE files | ||
| .vscode/* | ||
|
|
||
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
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
Oops, something went wrong.
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.
Uh oh!
There was an error while loading. Please reload this page.