Replace every remaining reference to the old Gitea infrastructure with the new GitHub-hosted equivalents across all documentation, wiki pages, test files, and historical ticket summaries. - README.md: CI badge, clone URL, releases link, CI/CD section, project structure - docs/wiki/CICD-Pipeline.md: full rewrite for GitHub Actions + ghcr.io - docs/wiki/Home.md: CI badge, releases link, phase status, tech stack - docs/wiki/Troubleshooting.md: rewrite CI troubleshooting for GitHub Actions - docs/architecture/README.md: update CI/CD pipeline diagram - AGENTS.md: CI/CD section, environment references - PLAN.md: directory structure, pipeline table - SECURITY_AUDIT.md: mark C3 and L4 findings as resolved - ticket-git-cliff-changelog.md: workflow path updated - tickets/ci-runner-speed-optimization.md: image registry updated - 2026-hackathon_AgenticFeature.md: workflow path updated - tests: workflow path assertions updated in all three test files
192 lines
4.2 KiB
Markdown
192 lines
4.2 KiB
Markdown
# Troubleshooting
|
|
|
|
## CI/CD — GitHub Actions
|
|
|
|
### Build Not Triggering After Push
|
|
|
|
**Check:**
|
|
1. Verify the workflow file exists in `.github/workflows/` on the pushed branch
|
|
2. Check the Actions tab at `https://github.com/msicie/apollo_nxt-trcaa/actions`
|
|
3. Confirm the workflow trigger matches the branch (e.g., `push: branches: [main, 'bug/**']`)
|
|
|
|
---
|
|
|
|
### Jobs Stuck in Queue
|
|
|
|
**Cause:** GitHub Enterprise organizations may restrict which repositories can use
|
|
GitHub-hosted runners via runner group policies.
|
|
|
|
**Fix:** Contact your org admin to add the repository to the allowed runner group, or
|
|
temporarily make the repo public for a one-time bootstrap run (e.g., to build the
|
|
initial ghcr.io images).
|
|
|
|
---
|
|
|
|
### `manifest unknown` — Image Pull Fails
|
|
|
|
**Cause:** The pre-baked CI image (`ghcr.io/msicie/trcaa-linux-amd64:rust1.88-node22`)
|
|
doesn't exist yet. This happens before the first `build-images.yml` run.
|
|
|
|
**Fix:**
|
|
1. Go to Actions → Build CI Docker Images → Run workflow
|
|
2. Wait for all 3 image builds to complete
|
|
3. Confirm images appear at `https://github.com/orgs/msicie/packages`
|
|
4. Re-run the failing workflow
|
|
|
|
---
|
|
|
|
### Job Skipped on Tag Push
|
|
|
|
**Cause:** Pattern matching issue with `on: push: tags:`. Use unquoted glob in the workflow:
|
|
|
|
```yaml
|
|
# Correct
|
|
on:
|
|
push:
|
|
tags:
|
|
- v*
|
|
```
|
|
|
|
Also add `workflow_dispatch` for manual triggering during testing:
|
|
```yaml
|
|
on:
|
|
push:
|
|
tags:
|
|
- v*
|
|
workflow_dispatch:
|
|
inputs:
|
|
tag:
|
|
description: 'Release tag'
|
|
required: true
|
|
```
|
|
|
|
---
|
|
|
|
### Release Artifacts Not Uploaded
|
|
|
|
**Cause:** `GITHUB_TOKEN` permissions insufficient. The `release.yml` workflow requires
|
|
`contents: write` to create releases and upload assets.
|
|
|
|
Verify the permissions block:
|
|
```yaml
|
|
permissions:
|
|
contents: write
|
|
packages: write
|
|
```
|
|
|
|
---
|
|
|
|
## Rust Compilation
|
|
|
|
### `MutexGuard` Not `Send` Across Await
|
|
|
|
```
|
|
error[E0277]: `MutexGuard<'_, Connection>` cannot be sent between threads safely
|
|
```
|
|
|
|
**Fix:** Release the mutex lock before any `.await` point:
|
|
```rust
|
|
let result = {
|
|
let db = state.db.lock().map_err(|e| e.to_string())?;
|
|
db.query_row(...)?
|
|
}; // lock dropped here
|
|
async_fn().await?;
|
|
```
|
|
|
|
---
|
|
|
|
### Clippy Lints Fail in CI
|
|
|
|
Common lint fixes required by `-D warnings` (Rust 1.88+):
|
|
|
|
```rust
|
|
format!("{}", x) → format!("{x}")
|
|
x >= a && x < b → (a..b).contains(&x)
|
|
s.push_str("a") → s.push('a')
|
|
```
|
|
|
|
Run locally: `cargo clippy --manifest-path src-tauri/Cargo.toml -- -D warnings`
|
|
|
|
Auto-fix: `cargo clippy --manifest-path src-tauri/Cargo.toml --fix --allow-dirty -- -D warnings`
|
|
|
|
---
|
|
|
|
### `cargo tauri dev` Fails — Missing System Libraries
|
|
|
|
**Fix (Fedora/RHEL):**
|
|
```bash
|
|
sudo dnf install -y glib2-devel gtk3-devel webkit2gtk4.1-devel \
|
|
libsoup3-devel openssl-devel librsvg2-dev
|
|
```
|
|
|
|
**Fix (Debian/Ubuntu):**
|
|
```bash
|
|
sudo apt-get install -y libwebkit2gtk-4.1-dev libssl-dev libgtk-3-dev \
|
|
libayatana-appindicator3-dev librsvg2-dev patchelf pkg-config
|
|
```
|
|
|
|
---
|
|
|
|
### Windows Cross-Compile: DLL Export Ordinal Too Large
|
|
`/usr/bin/x86_64-w64-mingw32-ld: error: export ordinal too large: 106290`
|
|
|
|
Fix: `src-tauri/.cargo/config.toml`:
|
|
```toml
|
|
[target.x86_64-pc-windows-gnu]
|
|
rustflags = ["-C", "link-arg=-Wl,--exclude-all-symbols"]
|
|
```
|
|
|
|
---
|
|
|
|
## Database
|
|
|
|
### DB Won't Open in Production
|
|
|
|
**Symptom:** App fails to start with SQLCipher error.
|
|
|
|
1. `TFTSR_DB_KEY` env var is set
|
|
2. Key matches what was used when DB was created
|
|
3. File isn't corrupted: `file tftsr.db` should say `SQLite 3.x database`
|
|
|
|
---
|
|
|
|
### Migration Fails to Run
|
|
|
|
Check which migrations have been applied:
|
|
```sql
|
|
SELECT name, applied_at FROM _migrations ORDER BY id;
|
|
```
|
|
|
|
---
|
|
|
|
## Frontend
|
|
|
|
### TypeScript Errors After Pulling
|
|
|
|
```bash
|
|
npx tsc --noEmit
|
|
```
|
|
|
|
Ensure `tauriCommands.ts` matches Rust command signatures exactly (especially `IssueDetail` nesting).
|
|
|
|
---
|
|
|
|
### `IssueDetail` Field Access Errors
|
|
|
|
`get_issue()` returns a **nested** struct:
|
|
```typescript
|
|
// Correct
|
|
const title = detail.issue.title;
|
|
|
|
// Wrong — field doesn't exist at top level
|
|
const title = detail.title;
|
|
```
|
|
|
|
---
|
|
|
|
### Vitest Tests Fail
|
|
|
|
Common causes:
|
|
- Mocked `invoke()` return type doesn't match updated command signature
|
|
- `sessionStore` state not reset between tests (call `store.reset()` in `beforeEach`)
|