Juju519
ci: fix tests
080e4bb
Raw
History Blame Contribute Delete
6.2 kB
name: Run chatbot tests
on:
push:
pull_request:
workflow_dispatch:
permissions:
contents: read
jobs:
test:
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v4
- name: Set up Python
uses: actions/setup-python@v5
with:
python-version: "3.11"
- name: Cache pip
uses: actions/cache@v4
with:
path: ~/.cache/pip
key: ${{ runner.os }}-pip-${{ hashFiles('**/requirements.txt') }}
restore-keys: ${{ runner.os }}-pip-
- name: Install dependencies
run: |
python -m pip install --upgrade pip
if [ -f requirements.txt ]; then pip install -r requirements.txt; fi
# pin gradio to keep CI stable/quiet
pip install pytest transformers gradio==4.44.1 huggingface_hub
- name: Run tests (no OAuth; local path stubbed)
env:
SKIP_UI_ON_IMPORT: "1"
LOCAL_MODEL: sshleifer/tiny-gpt2
GRADIO_ANALYTICS_ENABLED: "false"
HF_TOKEN: ${{ secrets.HF_TOKEN }} # 👈 ensure this line exists
run: pytest -q
# Redundant but nice: explicit UI smoke without OAuth for clear logs
- name: UI smoke (no OAuth)
env:
SKIP_UI_ON_IMPORT: "1"
run: |
python - <<'PY'
import os
os.environ["SKIP_UI_ON_IMPORT"] = "1"
import gradio.oauth as oauth
oauth.attach_oauth = lambda app: None
import app
demo = app.create_demo(enable_oauth=False)
print("Built UI successfully:", type(demo).__name__)
PY
notify:
needs: test
runs-on: ubuntu-latest
if: always() # run even if tests fail
steps:
- name: Determine status
id: status
run: |
echo "result=${{ needs.test.result }}" >> $GITHUB_OUTPUT
echo "run_url=${{ github.server_url }}/${{ github.repository }}/actions/runs/${{ github.run_id }}" >> $GITHUB_OUTPUT
echo "commit_url=${{ github.server_url }}/${{ github.repository }}/commit/${{ github.sha }}" >> $GITHUB_OUTPUT
echo "branch=${{ github.ref_name }}" >> $GITHUB_OUTPUT
echo "actor=${{ github.actor }}" >> $GITHUB_OUTPUT
echo "repo=${{ github.repository }}" >> $GITHUB_OUTPUT
- name: Build payloads
id: payloads
uses: actions/github-script@v7
with:
script: |
const result = '${{ steps.status.outputs.result }}'; // success | failure | cancelled
const run_url = '${{ steps.status.outputs.run_url }}';
const commit = process.env.GITHUB_SHA;
const sha7 = commit.substring(0,7);
const branch = '${{ steps.status.outputs.branch }}';
const actor = '${{ steps.status.outputs.actor }}';
const repo = '${{ steps.status.outputs.repo }}';
const commit_url = '${{ steps.status.outputs.commit_url }}';
const title = `CI ${result.toUpperCase()} ${repo}@${branch}`;
const desc = `Commit \`${sha7}\` by **${actor}**\n[View run](${run_url}) · [Commit](${commit_url})`;
// Discord colors: green=0x57F287, red=0xED4245, yellow=0xFEE75C
const colors = { success: 5763719, failure: 15548997, cancelled: 16776960 };
const discordPayload = {
username: "CI Bot",
embeds: [{
title,
description: desc,
color: colors[result] ?? 5793266,
timestamp: new Date().toISOString(),
fields: [
{ name: "Repository", value: repo, inline: true },
{ name: "Branch", value: branch, inline: true },
{ name: "Status", value: result, inline: true }
]
}]
};
// Slack attachments: colors "good" | "danger" | "warning"
const slackColor = result === "success" ? "good" : (result === "failure" ? "danger" : "warning");
const slackPayload = {
text: title,
attachments: [{
color: slackColor,
fields: [
{ title: "Repository", value: repo, short: true },
{ title: "Branch", value: branch, short: true },
{ title: "Status", value: result, short: true },
{ title: "Commit", value: `\`${sha7}\``, short: true }
],
actions: [
{ type: "button", text: "View Run", url: run_url },
{ type: "button", text: "View Commit", url: commit_url }
]
}]
};
core.setOutput("discord", JSON.stringify(discordPayload));
core.setOutput("slack", JSON.stringify(slackPayload));
# ✅ Guard step: compute booleans without referencing `secrets` directly in `if:`
- name: Check webhooks
id: gates
env:
DISCORD_WEBHOOK_URL: ${{ secrets.DISCORD_WEBHOOK_URL }}
SLACK_WEBHOOK_URL: ${{ secrets.SLACK_WEBHOOK_URL }}
run: |
if [ -n "$DISCORD_WEBHOOK_URL" ]; then echo "discord=true" >> $GITHUB_OUTPUT; else echo "discord=false" >> $GITHUB_OUTPUT; fi
if [ -n "$SLACK_WEBHOOK_URL" ]; then echo "slack=true" >> $GITHUB_OUTPUT; else echo "slack=false" >> $GITHUB_OUTPUT; fi
- name: Send Discord
if: steps.gates.outputs.discord == 'true'
env:
DISCORD_WEBHOOK_URL: ${{ secrets.DISCORD_WEBHOOK_URL }}
PAYLOAD: ${{ steps.payloads.outputs.discord }}
run: |
curl -sS -X POST \
-H "Content-Type: application/json" \
--data "$PAYLOAD" \
"$DISCORD_WEBHOOK_URL" || true
- name: Send Slack
if: steps.gates.outputs.slack == 'true'
env:
SLACK_WEBHOOK_URL: ${{ secrets.SLACK_WEBHOOK_URL }}
PAYLOAD: ${{ steps.payloads.outputs.slack }}
run: |
curl -sS -X POST \
-H "Content-Type: application/json" \
--data "$PAYLOAD" \
"$SLACK_WEBHOOK_URL" || true