Skip to content

Triggering extended tests through PR comment: Run extended tests #15101

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
merged 17 commits into from
Mar 27, 2025
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
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 --features backtrace --profile release-nonlto --test sqllogictests -- --include-sqlite
cargo clean

# If the workflow was triggered by the PR comment (through pr_comment_commands.yml action) 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:
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I think take.yml also has a command triggered by a comment. Maybe we can combine them eventually

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Yes indeed, I think they can be combined into one action quite easily in the future

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I think take.yml also has a command triggered by a comment. Maybe we can combine them eventually

issue_comment:
types: [created]

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

jobs:
# Starts the extended_tests on a PR branch when someone leaves a `Run extended tests` comment
run_extended_tests:
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Can we please add a human summary here of what this does -- something like

Suggested change
run_extended_tests:
# Starts the extended_tests when someone leaves a `Run extended tests` comment
run_extended_tests:

It might also be nice to make the comparison case insensitive (so run extended tests would also work)

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Added the comment 👍

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

As for the case sensitivity, maybe let's add it in a follow-up PR since changing the triggers will require a whole new round of testing to make sure the condition work as expected again

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'
});