Skip to content
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

Triggering extended tests through PR comment #15101

Draft
wants to merge 15 commits into
base: main
Choose a base branch
from
60 changes: 59 additions & 1 deletion .github/workflows/extended.yml
Original file line number Diff line number Diff line change
Expand Up @@ -30,8 +30,26 @@ concurrency:
# in the (very rare) event of a hash failure or sqlite library query failure.
on:
push:
branches:
- main
workflow_dispatch:
inputs:
pr_number:
description: 'Pull request number'
type: string
check_run_id:
description: 'Check run ID for status updates'
type: string
pr_head_sha:
description: 'PR head SHA'
type: string

permissions:
contents: read
checks: write

jobs:

# Check crate compiles and base cargo check passes
linux-build-lib:
name: linux build test
Expand All @@ -57,7 +75,7 @@ jobs:
# Run extended tests (with feature 'extended_tests')
linux-test-extended:
name: cargo test 'extended_tests' (amd64)
needs: linux-build-lib
needs: [linux-build-lib]
runs-on: ubuntu-latest
# note: do not use amd/rust container to preserve disk space
steps:
Expand Down Expand Up @@ -127,4 +145,44 @@ jobs:
cargo test --profile release-nonlto --test sqllogictests -- --include-sqlite
cargo clean

# If the workflow was triggered by the PR comment we need to manually update check status to display in UI
update-check-status:
needs: [linux-build-lib, linux-test-extended, hash-collisions, sqllogictest-sqlite]
runs-on: ubuntu-latest
if: ${{ always() && github.event_name == 'workflow_dispatch' }}
steps:
- name: Determine workflow status
id: status
run: |
if [[ "${{ contains(needs.*.result, 'failure') || contains(needs.*.result, 'cancelled') }}" == "true" ]]; then
echo "workflow_status=failure" >> $GITHUB_OUTPUT
echo "conclusion=failure" >> $GITHUB_OUTPUT
else
echo "workflow_status=completed" >> $GITHUB_OUTPUT
echo "conclusion=success" >> $GITHUB_OUTPUT
fi

- name: Update check run
uses: actions/github-script@v7
with:
github-token: ${{ secrets.GITHUB_TOKEN }}
script: |
const workflowRunUrl = `https://github.com/${context.repo.owner}/${context.repo.repo}/actions/runs/${context.runId}`;

await github.rest.checks.update({
owner: context.repo.owner,
repo: context.repo.repo,
check_run_id: ${{ github.event.inputs.check_run_id }},
status: 'completed',
conclusion: '${{ steps.status.outputs.conclusion }}',
output: {
title: '${{ steps.status.outputs.conclusion == 'success' && 'Extended Tests Passed' || 'Extended Tests Failed' }}',
summary: `Extended tests have completed with status: ${{ steps.status.outputs.conclusion }}.\n\n[View workflow run](${workflowRunUrl})`
},
details_url: workflowRunUrl
});





89 changes: 89 additions & 0 deletions .github/workflows/pr_comment_commands.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,89 @@
# Licensed to the Apache Software Foundation (ASF) under one
# or more contributor license agreements. See the NOTICE file
# distributed with this work for additional information
# regarding copyright ownership. The ASF licenses this file
# to you under the Apache License, Version 2.0 (the
# "License"); you may not use this file except in compliance
# with the License. You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing,
# software distributed under the License is distributed on an
# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
# KIND, either express or implied. See the License for the
# specific language governing permissions and limitations
# under the License.

name: PR commands

on:
issue_comment:
types: [created]

permissions:
contents: read
pull-requests: write
actions: write
checks: write

jobs:

run_extended_tests:
runs-on: ubuntu-latest
if: ${{ github.event_name == 'issue_comment' && github.event.issue.pull_request && contains(github.event.comment.body, 'Run extended tests') }}
steps:
- name: Dispatch extended tests for a PR branch with comment
uses: actions/github-script@v7
with:
github-token: ${{ secrets.GITHUB_TOKEN }}
script: |
// Get PR details to fetch the branch name
const { data: pullRequest } = await github.rest.pulls.get({
owner: context.repo.owner,
repo: context.repo.repo,
pull_number: context.payload.issue.number
});

// Extract the branch name
const branchName = pullRequest.head.ref;
const headSha = pullRequest.head.sha;
const workflowRunsUrl = `https://github.com/${context.repo.owner}/${context.repo.repo}/actions?query=workflow%3A%22Datafusion+extended+tests%22+branch%3A${branchName}`;

// Create a check run that links to the Actions tab so the run will be visible in GitHub UI
const check = await github.rest.checks.create({
owner: context.repo.owner,
repo: context.repo.repo,
name: 'Extended Tests',
head_sha: headSha,
status: 'in_progress',
output: {
title: 'Extended Tests Running',
summary: `Extended tests have been triggered for this PR.\n\n[View workflow runs](${workflowRunsUrl})`
},
details_url: workflowRunsUrl
});

// Dispatch the workflow with the PR branch name
await github.rest.actions.createWorkflowDispatch({
owner: context.repo.owner,
repo: context.repo.repo,
workflow_id: 'extended.yml',
ref: branchName,
inputs: {
pr_number: context.payload.issue.number.toString(),
check_run_id: check.data.id.toString(),
pr_head_sha: headSha
}
});

- name: Add reaction to comment
uses: actions/github-script@v7
with:
script: |
await github.rest.reactions.createForIssueComment({
owner: context.repo.owner,
repo: context.repo.repo,
comment_id: context.payload.comment.id,
content: 'rocket'
});