Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
47 commits
Select commit Hold shift + click to select a range
98ccb03
test(e2e): migrate Telegram injection to Vitest
cv Jun 21, 2026
7a1acdf
test(e2e): keep Telegram injection test linear
cv Jun 22, 2026
60b0526
test(e2e): migrate OpenClaw Discord pairing to Vitest
cv Jun 22, 2026
b0ef532
test(e2e): migrate OpenClaw Slack pairing to Vitest
cv Jun 22, 2026
27e79b0
test(e2e): harden Slack policy host check
cv Jun 22, 2026
11e7566
Merge branch 'e2e-phase6-openclaw-discord-pairing-linear' into e2e-ph…
cv Jun 22, 2026
5c1a6ff
test(e2e): address Discord pairing review
jyaunches Jun 22, 2026
82609d0
fix(e2e): preserve pairing script env expansion
jyaunches Jun 22, 2026
30cab27
test(e2e): fix Discord pairing CI
jyaunches Jun 22, 2026
23c0ba9
Merge remote-tracking branch 'origin/e2e-phase6-openclaw-discord-pair…
jyaunches Jun 22, 2026
3eca115
test(e2e): fix Discord WS framing
jyaunches Jun 22, 2026
aff8347
test(e2e): keep legacy capture redacted
jyaunches Jun 22, 2026
66153ec
test(e2e): assert Slack policy rewrite semantics
jyaunches Jun 22, 2026
b1f23d8
test(e2e): avoid conditional guardrail
jyaunches Jun 22, 2026
57a1499
test(e2e): use real Slack preset policy path
jyaunches Jun 22, 2026
10a7e0f
test(e2e): extend workflow matrix timeout
jyaunches Jun 22, 2026
b6c17a3
test(e2e): assert Slack endpoint rewrite blocks
jyaunches Jun 22, 2026
eadf678
test(e2e): encode Discord config probe
jyaunches Jun 22, 2026
5f84adb
test(e2e): avoid multiline sandbox command
jyaunches Jun 22, 2026
126ed1f
test(e2e): tighten Discord runtime probe
jyaunches Jun 22, 2026
59266c7
Merge remote-tracking branch 'origin/e2e-phase6-openclaw-discord-pair…
jyaunches Jun 22, 2026
d0dc4c8
Merge remote-tracking branch 'origin/e2e-phase6-openclaw-discord-pair…
jyaunches Jun 22, 2026
f1c6309
Merge remote-tracking branch 'origin/main' into e2e-phase6-openclaw-d…
jyaunches Jun 22, 2026
90a8570
Merge branch 'e2e-phase6-openclaw-discord-pairing-linear' into e2e-ph…
cv Jun 22, 2026
df65f31
ci(e2e): scrub Discord installer env
jyaunches Jun 22, 2026
47d23f2
test(e2e): narrow Discord helper surface
jyaunches Jun 22, 2026
47a3f5c
test(e2e): avoid source-shape assertion
jyaunches Jun 22, 2026
cccb4f4
test(e2e): block Discord workflow API secret
jyaunches Jun 22, 2026
4730b53
test(e2e): harden Discord workflow boundary
jyaunches Jun 22, 2026
a137124
test(e2e): harden OpenClaw pairing probes
jyaunches Jun 22, 2026
d45e00f
test(e2e): preserve Discord proof CRLF
jyaunches Jun 22, 2026
da11226
test(e2e): fix Slack pairing workflow setup
jyaunches Jun 22, 2026
996ebc9
Merge remote-tracking branch 'origin/e2e-phase6-openclaw-discord-pair…
jyaunches Jun 22, 2026
ca3d938
Merge remote-tracking branch 'origin/main' into e2e-phase6-openclaw-d…
jyaunches Jun 22, 2026
225bafd
Merge remote-tracking branch 'origin/main' into e2e-phase6-openclaw-d…
jyaunches Jun 22, 2026
79c7167
test(e2e): split Discord workflow boundary
jyaunches Jun 22, 2026
f2498d9
test(e2e): align Discord proof transport
jyaunches Jun 22, 2026
d89d86a
Merge remote-tracking branch 'origin/e2e-phase6-openclaw-discord-pair…
jyaunches Jun 22, 2026
4b13322
test(e2e): cover Slack probe validation
jyaunches Jun 22, 2026
e1bbc2b
test(e2e): close Slack advisor gaps
jyaunches Jun 22, 2026
5161623
test(e2e): remove duplicate Slack approve check
jyaunches Jun 22, 2026
b9ce55b
Merge remote-tracking branch 'origin/main' into e2e-phase6-openclaw-d…
jyaunches Jun 22, 2026
7cbf865
test(e2e): harden pairing runtime probes
jyaunches Jun 22, 2026
2823bfd
Merge remote-tracking branch 'origin/e2e-phase6-openclaw-discord-pair…
jyaunches Jun 22, 2026
e19579f
test(e2e): keep workflow support test under budget
jyaunches Jun 22, 2026
f1ebc11
Merge remote-tracking branch 'origin/main' into e2e-phase6-openclaw-s…
jyaunches Jun 22, 2026
941a051
test(e2e): address Slack pairing advisor gaps
jyaunches Jun 22, 2026
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
101 changes: 101 additions & 0 deletions .github/workflows/e2e-vitest-scenarios.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -4439,6 +4439,106 @@ jobs:
docker logout docker.io || true
rm -rf "${DOCKER_CONFIG}"

openclaw-slack-pairing-vitest:
needs: generate-matrix
if: ${{ (inputs.jobs == '' && inputs.scenarios == '') || contains(format(',{0},', inputs.jobs), ',openclaw-slack-pairing-vitest,') || contains(format(',{0},', inputs.scenarios), ',openclaw-slack-pairing,') }}
runs-on: ubuntu-latest
timeout-minutes: 60
env:
FREE_STANDING_VITEST_JOB: "1"
FREE_STANDING_SCENARIO_ID: "openclaw-slack-pairing"
E2E_ARTIFACT_DIR: ${{ github.workspace }}/e2e-artifacts/vitest/openclaw-slack-pairing
NEMOCLAW_CLI_BIN: ${{ github.workspace }}/bin/nemoclaw.js
NEMOCLAW_RUN_E2E_SCENARIOS: "1"
NEMOCLAW_NON_INTERACTIVE: "1"
NEMOCLAW_ACCEPT_THIRD_PARTY_SOFTWARE: "1"
NEMOCLAW_SANDBOX_NAME: "e2e-openclaw-slack-pairing"
OPENSHELL_GATEWAY: "nemoclaw"
steps:
- uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3
with:
persist-credentials: false

- name: Configure isolated Docker auth directory
run: |
set -euo pipefail
echo "DOCKER_CONFIG=${RUNNER_TEMP}/docker-config-openclaw-slack-pairing" >> "$GITHUB_ENV"

- name: Authenticate to Docker Hub
env:
DOCKERHUB_USERNAME: ${{ secrets.DOCKERHUB_USERNAME }}
DOCKERHUB_TOKEN: ${{ secrets.DOCKERHUB_TOKEN }}
shell: bash
run: |
set -euo pipefail
if [[ -z "${DOCKERHUB_USERNAME}" || -z "${DOCKERHUB_TOKEN}" ]]; then
echo "::notice::Docker Hub credentials not configured; continuing with anonymous pulls."
exit 0
fi
mkdir -p "${DOCKER_CONFIG}"
chmod 700 "${DOCKER_CONFIG}"
echo "${DOCKERHUB_TOKEN}" | timeout 30s docker login docker.io --username "${DOCKERHUB_USERNAME}" --password-stdin || echo "::warning::Docker Hub login failed; continuing with anonymous pulls."

- name: Set up Node
uses: actions/setup-node@48b55a011bda9f5d6aeb4c2d9c7362e8dae4041e # v6.0.0
with:
node-version: 22
cache: npm

- name: Install root dependencies
run: npm ci --ignore-scripts

- name: Build CLI
run: npm run build:cli

- name: Install OpenShell CLI
run: |
set -euo pipefail
env -u DOCKER_CONFIG -u DOCKERHUB_USERNAME -u DOCKERHUB_TOKEN -u NVIDIA_API_KEY -u NVIDIA_INFERENCE_API_KEY -u GITHUB_TOKEN bash scripts/install-openshell.sh

- name: Run OpenClaw Slack pairing live test
# Migrated from test/e2e/test-openclaw-slack-pairing.sh. Preserves
# fake Slack Socket Mode/REST token rewrite and connect-shell approval.
env:
NVIDIA_INFERENCE_API_KEY: ${{ secrets.NVIDIA_INFERENCE_API_KEY }}
SLACK_BOT_TOKEN: xoxb-fake-slack-pairing-e2e
SLACK_APP_TOKEN: xapp-fake-slack-pairing-e2e
run: |
set -euo pipefail
export PATH="$HOME/.local/bin:$HOME/.npm-global/bin:$PATH"
if command -v openshell >/dev/null 2>&1; then
OPENSHELL_BIN="$(command -v openshell)"
elif [ -x "$HOME/.local/bin/openshell" ]; then
OPENSHELL_BIN="$HOME/.local/bin/openshell"
else
echo "::error::OpenShell CLI not found after install"
ls -la /usr/local/bin/openshell "$HOME/.local/bin/openshell" 2>&1 || true
exit 1
fi
export OPENSHELL_BIN
echo "Using OPENSHELL_BIN=$OPENSHELL_BIN"
"$OPENSHELL_BIN" --version
npx vitest run --project e2e-scenarios-live \
test/e2e-scenario/live/openclaw-slack-pairing.test.ts \
--silent=false --reporter=default

- name: Upload OpenClaw Slack pairing artifacts
if: always()
uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7.0.1
with:
name: e2e-vitest-scenarios-openclaw-slack-pairing
path: e2e-artifacts/vitest/openclaw-slack-pairing/
include-hidden-files: false
if-no-files-found: ignore
retention-days: 14

- name: Clean up Docker auth
if: always()
run: |
set -euo pipefail
docker logout docker.io || true
rm -rf "${DOCKER_CONFIG}"

issue-2478-crash-loop-recovery-vitest:
needs: generate-matrix
if: ${{ (inputs.jobs == '' && inputs.scenarios == '') || contains(format(',{0},', inputs.jobs), ',issue-2478-crash-loop-recovery-vitest,') || contains(format(',{0},', inputs.scenarios), ',issue-2478-crash-loop-recovery,') }}
Expand Down Expand Up @@ -4840,6 +4940,7 @@ jobs:
tunnel-lifecycle-vitest,
telegram-injection-vitest,
openclaw-discord-pairing-vitest,
openclaw-slack-pairing-vitest,
channels-stop-start-vitest,
]
if: ${{ always() && github.event_name == 'workflow_dispatch' }}
Expand Down
Loading