Skip to content

ci: add shared report-scheduled-failure reusable workflow - #5

Merged
gkorland merged 1 commit into
mainfrom
ci/shared-report-scheduled-failure
Aug 13, 2026
Merged

ci: add shared report-scheduled-failure reusable workflow#5
gkorland merged 1 commit into
mainfrom
ci/shared-report-scheduled-failure

Conversation

@gkorland

@gkorland gkorland commented Aug 13, 2026

Copy link
Copy Markdown
Contributor

Summary

Every official FalkorDB client carries its own copy of the report-scheduled-failure job that alerts the drivers team when the nightly run against falkordb/falkordb:edge breaks. There are 8 copies across 7 repos:

Repo Workflow
falkordb-ts .github/workflows/node.js.yml
falkordb-py .github/workflows/test.yml
falkordb-go .github/workflows/go.yml
falkordb-rs .github/workflows/coverage.yml, .github/workflows/integration-tests.yml
falkordb-php .github/workflows/php.yml
JFalkorDB .github/workflows/version-canary.yml
NFalkorDB .github/workflows/dotnet.yml

7 of the 8 are byte-identical; JFalkorDB's differs only in the tracking issue title. Changing the alert message, the issue fallback or the webhook secret today means editing eight files, and they have already started to drift.

This adds the job once as a workflow_call reusable workflow. Reusable workflows in a public repo can be called by any repo in the org, and the github context inside a called workflow belongs to the caller, so the repository name, workflow name and run URL in the alert stay correct without being passed in.

Changes

  • Add .github/workflows/report-scheduled-failure.yml, a reusable (workflow_call) workflow.
  • Job body copied verbatim from the client repos: Google Chat notification, with an open-or-comment tracking issue as the fallback when DRIVERS_GOOGLE_CHAT_WEBHOOK_URL is unset.
  • Only parametrised difference: the issue-title input (default CI is failing against falkordb/falkordb:edge), so JFalkorDB's canary keeps its own title.
  • DRIVERS_GOOGLE_CHAT_WEBHOOK_URL is declared as an optional secret; callers pass secrets: inherit.

Callers keep the needs:/if: gating locally, since only they know which jobs must have failed:

report-scheduled-failure:
  name: Report scheduled failure
  needs: [build]
  if: ${{ always() && github.event_name == 'schedule' && contains(needs.*.result, 'failure') }}
  permissions:
    issues: write
  uses: FalkorDB/.github/.github/workflows/report-scheduled-failure.yml@main
  secrets: inherit

permissions: issues: write has to stay in the caller: a called workflow can only downgrade the caller's token, never upgrade it.

Callers reference @main rather than a pinned SHA so a fix here reaches every client without eight follow-up PRs — the whole point of the change. This is a first-party repo in the same org, so the supply-chain tradeoff of an unpinned ref does not apply the way it does for third-party actions.

Testing

  • actionlint passes on the new file.
  • Diffed the new job body against all 8 existing copies: identical apart from the issue-title input and the needs:/if: keys that stay in the callers.
  • The workflow only ever runs from a scheduled client run, so end-to-end verification happens on the first client that adopts it (falkordb-ts, PR to follow).

Memory / Performance Impact

N/A — CI configuration only.

Related Issues

N/A

Summary by CodeRabbit

  • New Features
    • Added automated reporting for scheduled client-run failures.
    • Failure details can be sent to Google Chat when configured.
    • When chat notifications are unavailable, failures are recorded in a tracking issue by creating or updating it.
    • Added support for customizing the tracking issue title.

Every official FalkorDB client repo carries a byte-identical copy of the
`report-scheduled-failure` job that alerts the drivers team when the nightly
run against `falkordb/falkordb:edge` breaks. Eight copies across seven repos
means any change to the message, the fallback behaviour or the webhook secret
has to be made eight times.

Host it once here as a `workflow_call` reusable workflow so the clients can
call it in ~8 lines. The job body is unchanged; only the tracking issue title
is parametrised, since JFalkorDB's canary uses its own title.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Copilot AI lite review requested due to automatic review settings August 13, 2026 10:45
@gkorland
gkorland merged commit ed79634 into main Aug 13, 2026
1 of 2 checks passed
@gkorland
gkorland deleted the ci/shared-report-scheduled-failure branch August 13, 2026 10:45
@coderabbitai

coderabbitai Bot commented Aug 13, 2026

Copy link
Copy Markdown

Review Change Stack

Caution

Review failed

The pull request is closed.

ℹ️ Recent review info
⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Pro Plus

Run ID: 67638afd-8832-459b-bcd6-b3907bed7172

📥 Commits

Reviewing files that changed from the base of the PR and between eceaf23 and 3363ea3.

📒 Files selected for processing (1)
  • .github/workflows/report-scheduled-failure.yml

📝 Walkthrough

Walkthrough

This change adds a reusable GitHub Actions workflow for scheduled edge client-run failures. The workflow sends details to Google Chat when configured. Otherwise, it creates or comments on a repository tracking issue.

Changes

Scheduled failure reporting

Layer / File(s) Summary
Failure notification and issue fallback
.github/workflows/report-scheduled-failure.yml
The reusable workflow accepts an optional issue title and Google Chat webhook secret. It posts failure details to Google Chat when the secret is configured. Otherwise, it creates or comments on a matching open tracking issue.

Estimated code review effort: 3 (Moderate) | ~15–30 minutes

Sequence Diagram(s)

sequenceDiagram
  participant Workflow as report-scheduled-failure.yml
  participant GoogleChat
  participant GitHubIssues
  alt Google Chat webhook is configured
    Workflow->>GoogleChat: Post scheduled failure details
  else Webhook is not configured
    Workflow->>GitHubIssues: Find matching open tracking issue
    Workflow->>GitHubIssues: Create or comment on tracking issue
  end
Loading
✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch ci/shared-report-scheduled-failure

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

Copilot AI left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

Pull request overview

Adds a reusable workflow_call workflow to centralize the “report scheduled failure” job that notifies (or falls back to a tracking issue) when nightly client runs against falkordb/falkordb:edge fail, reducing duplicated CI logic across FalkorDB client repositories.

Changes:

  • Introduces a new reusable workflow for reporting scheduled failures via Google Chat webhook, with a tracking-issue fallback.
  • Adds an input (issue-title) to allow per-repo customization of the fallback tracking issue title.
  • Declares DRIVERS_GOOGLE_CHAT_WEBHOOK_URL as an optional secret for callers to pass via secrets: inherit.

💡 Add a code-review agent skill or configure MCP servers for context-aware, tailored reviews. Learn more in the docs.

Comment on lines +81 to +82
number=$(gh issue list --state open --search "$TITLE in:title" --json number,title \
--jq "map(select(.title == \"$TITLE\")) | .[0].number // empty")
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants