Skip to content
Merged
Show file tree
Hide file tree
Changes from 27 commits
Commits
Show all changes
32 commits
Select commit Hold shift + click to select a range
0df599a
playwright e2e tests
AustinKelsay Feb 21, 2026
ac26496
fix test placeholder strings
AustinKelsay Feb 21, 2026
c579a3e
test: add Playwright E2E smoke suite and patch dev dep vulnerabilities
AustinKelsay Feb 21, 2026
d3c38a2
fix: move env admin gate before validation, fix Bearer token
AustinKelsay Feb 21, 2026
3a6cb0b
fix: reject empty RELAYS in /api/env updates
AustinKelsay Feb 24, 2026
156ce53
fix: expand 127.0.0.0/8 loopback filter, harden E2E cosigner, and cle…
AustinKelsay Feb 24, 2026
33e14cd
fix: lazy ENV_FILE_PATH eval, peer-list hook deps/a11y, CI audit out…
AustinKelsay Feb 24, 2026
813aed6
chore: harden e2e smoke flows and CI/env safeguards
AustinKelsay Feb 24, 2026
609544b
fix: tighten smoke test docs and cleanup guards
AustinKelsay Feb 24, 2026
657c79c
fix: harden relay req validation and test safety
AustinKelsay Feb 24, 2026
959edf4
fix: harden e2e cleanup, docs, and context handling
AustinKelsay Feb 24, 2026
6d73a98
fix: harden e2e smoke setup and route test safety
AustinKelsay Feb 25, 2026
944ec63
fix: harden smoke test harness and teardown behavior
AustinKelsay Feb 25, 2026
557e4a5
fix: tighten e2e cleanup and env test safeguards
AustinKelsay Feb 25, 2026
816eb0f
fix: pin Bun version in docker and CI workflows
AustinKelsay Feb 25, 2026
5f8713b
fix: harden e2e smoke tests and peer-list collapse behavior
AustinKelsay Feb 25, 2026
3f6481f
fix: harden relay limits and teardown safety
AustinKelsay Feb 25, 2026
b068104
fix: tighten e2e ui and loopback validation
AustinKelsay Feb 25, 2026
61bd400
test: clarify configure navigation e2e flow
AustinKelsay Feb 26, 2026
3b8c825
fix: address review findings across routes, docs, and e2e
AustinKelsay Feb 26, 2026
eb65308
fix: harden credential save and auth validation flows
AustinKelsay Feb 26, 2026
a4ebdcb
chore: remove Playwright e2e suite from repo
AustinKelsay Feb 26, 2026
f78ab77
fix: bump minimatch override past audit vulnerability
AustinKelsay Feb 26, 2026
27a8e24
fix: apply pending auth env hardening updates
AustinKelsay Feb 26, 2026
f8a9519
fix: bump fast-xml-parser override for security audit
AustinKelsay Feb 26, 2026
f23128a
fix: avoid ui-event-log test crash after db cleanup
AustinKelsay Feb 26, 2026
98a0d63
fix: address review findings across routes, ui, and workflows
AustinKelsay Feb 27, 2026
269376f
fix: apply requested API and UI hardening updates
AustinKelsay Feb 28, 2026
f3a834d
fix: resolve auth and nip44 type regressions
AustinKelsay Mar 5, 2026
3018393
fix: restore protected route compatibility
AustinKelsay Mar 5, 2026
4592326
fix: override vulnerable dompurify
AustinKelsay Mar 5, 2026
2daa6d2
fix: address auth hardening review findings
AustinKelsay Mar 5, 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
52 changes: 45 additions & 7 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -2,9 +2,9 @@ name: CI

on:
push:
branches: [ master, dev ]
branches: [ main, dev ]
pull_request:
branches: [ master, dev ]
branches: [ main, dev ]

jobs:
test:
Expand All @@ -17,14 +17,17 @@ jobs:
- name: Setup Bun
uses: oven-sh/setup-bun@v2
with:
bun-version: latest
bun-version: 1.3.10

- name: Install dependencies
run: bun install --frozen-lockfile

- name: Type check
run: bun run tsc --noEmit

- name: Run unit tests
run: bun run test:unit

- name: Build frontend
run: bun run build

Expand Down Expand Up @@ -54,7 +57,7 @@ jobs:
- name: Setup Bun
uses: oven-sh/setup-bun@v2
with:
bun-version: latest
bun-version: 1.3.10

- name: Install dependencies
run: bun install --frozen-lockfile
Expand All @@ -71,16 +74,51 @@ jobs:
- name: Checkout code
uses: actions/checkout@v4

- name: Setup Bun
uses: oven-sh/setup-bun@v2
with:
bun-version: 1.3.10

- name: Install dependencies
run: bun install --frozen-lockfile

- name: Run security audit
run: |
bun audit || true # Don't fail on audit issues for now
audit_log="$(mktemp)"
last_exit=0
for attempt in 1 2 3; do
if bun audit >"$audit_log" 2>&1; then
cat "$audit_log"
rm -f "$audit_log"
exit 0
else
audit_exit=$?
last_exit=$audit_exit
last_attempt=$attempt
if [ "$attempt" -lt 3 ]; then
echo "bun audit failed (attempt $attempt), retrying..."
sleep 5
fi
fi
done

audit_output="$(cat "$audit_log")"
echo "bun audit failed after ${last_attempt:-3} attempts with exit code ${last_exit}"
if grep -Eiq 'network|registry|ENOTFOUND|ECONNREFUSED|EAI_AGAIN|ETIMEDOUT' <<< "$audit_output"; then
echo "bun audit failed after retries due to network/registry error: $audit_output"
else
echo "bun audit failed after retries - vulnerabilities detected: $audit_output"
fi
rm -f "$audit_log"
exit 1

- name: Check for secrets
uses: trufflesecurity/trufflehog@main
# Pinned to immutable commit (v3.93.4) for supply-chain safety.
# Maintenance: periodically verify this SHA still corresponds to the intended upstream release.
uses: trufflesecurity/trufflehog@7c0734f987ad0bb30ee8da210773b800ee2016d3
with:
path: ./
extra_args: --debug --only-verified
continue-on-error: true

docker:
runs-on: ubuntu-latest
Expand Down
50 changes: 18 additions & 32 deletions .github/workflows/release.yml
Original file line number Diff line number Diff line change
@@ -1,8 +1,6 @@
name: Release

on:
push:
branches: [ master ]
workflow_dispatch:
inputs:
version:
Expand All @@ -13,7 +11,7 @@ on:
jobs:
release:
runs-on: ubuntu-latest
if: github.ref == 'refs/heads/master' && github.event_name == 'workflow_dispatch'
if: github.ref == 'refs/heads/main' && github.event_name == 'workflow_dispatch'
permissions:
contents: write
pull-requests: write
Expand All @@ -31,7 +29,7 @@ jobs:
- name: Setup Bun
uses: oven-sh/setup-bun@v2
with:
bun-version: latest
bun-version: 1.3.10

- name: Install dependencies
run: bun install --frozen-lockfile
Expand Down Expand Up @@ -73,6 +71,12 @@ jobs:
echo "new_version=$NEW_VERSION" >> $GITHUB_OUTPUT
echo "version_number=${NEW_VERSION#v}" >> $GITHUB_OUTPUT

- name: Type check
run: bun run tsc --noEmit

- name: Run backend tests
run: bun run test:unit

- name: Build application
run: bun run build

Expand Down Expand Up @@ -122,28 +126,27 @@ jobs:
--exclude=.git \
--exclude=release \
--exclude=frontend \
src static package.json bun.lock tsconfig.json dockerfile compose.yml README.md LICENSE
src static package.json bun.lock tsconfig.json Dockerfile compose.yml README.md LICENSE

- name: Create release tag
run: |
# Create git tag for release (works with branch protection)
# Note: Version changes are not committed back to master due to branch protection
# Note: Version changes are not committed back to main due to branch protection
# The release archives will contain the correct versions
git tag ${{ steps.new_version.outputs.new_version }}
git push origin ${{ steps.new_version.outputs.new_version }}

- name: Create GitHub Release
uses: actions/create-release@v1
id: create_release
- name: Create GitHub release and upload assets
uses: softprops/action-gh-release@v2
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
with:
tag_name: ${{ steps.new_version.outputs.new_version }}
release_name: Release ${{ steps.new_version.outputs.new_version }}
name: Release ${{ steps.new_version.outputs.new_version }}
body: |
## Changes in ${{ steps.new_version.outputs.new_version }}

See [CHANGELOG.md](https://github.com/FROSTR-ORG/igloo-server/blob/master/CHANGELOG.md) for full details.
See [CHANGELOG.md](https://github.com/FROSTR-ORG/igloo-server/blob/main/CHANGELOG.md) for full details.

### Installation

Expand All @@ -162,26 +165,9 @@ jobs:
```
draft: false
prerelease: false

- name: Upload source archive
uses: actions/upload-release-asset@v1
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
with:
upload_url: ${{ steps.create_release.outputs.upload_url }}
asset_path: ./release/igloo-server-${{ steps.new_version.outputs.version_number }}-src.tar.gz
asset_name: igloo-server-${{ steps.new_version.outputs.version_number }}-src.tar.gz
asset_content_type: application/gzip

- name: Upload binary archive
uses: actions/upload-release-asset@v1
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
with:
upload_url: ${{ steps.create_release.outputs.upload_url }}
asset_path: ./release/igloo-server-${{ steps.new_version.outputs.version_number }}.tar.gz
asset_name: igloo-server-${{ steps.new_version.outputs.version_number }}.tar.gz
asset_content_type: application/gzip
files: |
./release/igloo-server-${{ steps.new_version.outputs.version_number }}-src.tar.gz
./release/igloo-server-${{ steps.new_version.outputs.version_number }}.tar.gz

docker:
runs-on: ubuntu-latest
Expand All @@ -191,7 +177,7 @@ jobs:
- name: Checkout code
uses: actions/checkout@v4
with:
ref: master
ref: refs/tags/${{ needs.release.outputs.new_version }}

- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v3
Expand Down
9 changes: 7 additions & 2 deletions .github/workflows/umbrel-dev.yml
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@ name: Umbrel Dev Image
on:
push:
branches:
- master
- main
- dev
workflow_dispatch:

Expand Down Expand Up @@ -39,11 +39,16 @@ jobs:

- name: Smoke test Umbrel image
run: |
set -e
cleanup() {
docker rm -f umbrel-dev-test >/dev/null 2>&1 || true
}
trap cleanup EXIT

docker run -d --name umbrel-dev-test -p 8003:8002 \
-e ADMIN_SECRET=ci-admin-secret \
-e ALLOWED_ORIGINS=http://localhost:8003 \
-e TRUST_PROXY=true \
igloo-server-umbrel:dev-ci
sleep 12
curl -f http://localhost:8003/api/status
docker rm -f umbrel-dev-test
2 changes: 1 addition & 1 deletion .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -64,7 +64,7 @@ data/.session-secret
test-*.sh
debug-*.js
verify-*.md
.DS_Store
test-results/

# LLM files
.claude
4 changes: 2 additions & 2 deletions Dockerfile
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
# Multi-stage build for smaller production image
FROM oven/bun:latest AS build
FROM oven/bun:1.3.10 AS build

WORKDIR /app

Expand All @@ -21,7 +21,7 @@ COPY tsconfig.json ./
RUN bun run build

# --- Production stage ---
FROM oven/bun:latest AS production
FROM oven/bun:1.3.10 AS production

WORKDIR /app

Expand Down
Loading