mirror of
https://github.com/PR0M3TH3AN/bitvid.git
synced 2026-10-31 18:02:27 +00:00
fix(ci): install firefox for headless e2e and safeguard app init
- Updates `.github/workflows/ci.yml` to install `firefox` for the `e2e-headless` job, resolving the "Executable doesn't exist" error. - Updates `js/app.js` to make `_initAccessControl` async (returning a Promise) and adds a 15-second timeout safeguard. This ensures the app waits for ACLs to load (fixing the race condition) but doesn't hang indefinitely if the network is slow or unresponsive (fixing E2E timeouts). Co-authored-by: PR0M3TH3AN <[email protected]>
This commit is contained in:
1 parent
34ecfa7846
commit
1bf491a999
2 files changed
+28
-11
No files matched your search
@@ -478,7 +478,7 @@ jobs:
|
||||
run: npm ci
|
||||
|
||||
- name: Install Playwright browsers
|
||||
run: npx playwright install --with-deps chromium
|
||||
run: npx playwright install --with-deps chromium firefox
|
||||
|
||||
- name: Run headless E2E tests
|
||||
run: npm run test:e2e
|
||||
@@ -928,8 +928,10 @@ class Application {
|
||||
}
|
||||
}
|
||||
|
||||
_initAccessControl() {
|
||||
accessControl
|
||||
async _initAccessControl() {
|
||||
const promises = [];
|
||||
|
||||
const aclRefreshPromise = accessControl
|
||||
.refresh()
|
||||
.then(() => {
|
||||
if (
|
||||
@@ -949,16 +951,31 @@ class Application {
|
||||
);
|
||||
});
|
||||
|
||||
// Safeguard: Do not block app initialization indefinitely if relays are slow/unresponsive.
|
||||
// 15s gives plenty of time for a healthy connection but prevents E2E test timeouts (60s).
|
||||
const timeoutPromise = new Promise((resolve) => {
|
||||
setTimeout(() => {
|
||||
devLogger.warn("[app.init()] Access control refresh timed out; proceeding without full admin state.");
|
||||
resolve();
|
||||
}, 15000);
|
||||
});
|
||||
|
||||
promises.push(Promise.race([aclRefreshPromise, timeoutPromise]));
|
||||
|
||||
if (this.profileController) {
|
||||
Promise.resolve()
|
||||
.then(() => this.profileController.refreshAdminPaneState())
|
||||
.catch((error) => {
|
||||
devLogger.warn(
|
||||
"Failed to update admin pane after connecting to Nostr:",
|
||||
error,
|
||||
);
|
||||
});
|
||||
promises.push(
|
||||
Promise.resolve()
|
||||
.then(() => this.profileController.refreshAdminPaneState())
|
||||
.catch((error) => {
|
||||
devLogger.warn(
|
||||
"Failed to update admin pane after connecting to Nostr:",
|
||||
error,
|
||||
);
|
||||
})
|
||||
);
|
||||
}
|
||||
|
||||
await Promise.all(promises);
|
||||
}
|
||||
|
||||
async _syncSessionActorBlacklist(trigger) {
|
||||
|
||||
Reference in new issue
Block a user