Implements HTML report generation for E2E tests following the Shiori pattern. Reports are self-contained with base64-embedded screenshots for easy review in CI/CD pipelines. Changes: - Add e2e/e2eutil/reporter.go: HTML report generator with singleton pattern, collects test results and assertions - Enhance e2e/e2eutil/helper.go: Integrate reporter to automatically record assertions with screenshots on failures - Update e2e/playwright/login_test.go: Add TestMain to initialize reporter and generate HTML report after tests complete - Update .gitignore: Exclude test artifacts (screenshots, test-results, test binaries) - Update .woodpecker/ci.yml: Add e2e step with artifact generation - Fix webapp/src/services/auth.ts: Remove trailing newline Features: - Single self-contained HTML file with inline CSS - Base64-encoded screenshots embedded as data URIs - Visual styling (green for pass, red for fail) - Timestamps and detailed assertion information - Thread-safe reporter for concurrent test execution - Automatic screenshot capture on assertion failures Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2.4 KiB
Hako
Hako is a self-hosted link archival service that automatically saves and preserves web content. Save URLs and let Hako archive them using multiple archival methods, extract content for full-text search, and organize your saved links with categories.
Features
- Link Archival: Save URLs and automatically archive web content.
- Multiple Archivers: Support for different archival methods depending on the site or content type.
- Content Extraction: Extract text content from PDFs and web pages for full-text search
- Rule Engine: Configurable rules that automatically select appropriate archivers based on URL patterns, hostnames, and content types
- Categories: Organize links in categories.
- Archive History: Track multiple archive versions for each link if archived multiple times.
- Full-Text Search: Search through archived content.
- Self-Hosted: Full control over your archived data
Tech stack
- Go
- Vue 3
- Bun
Screenshots
See docs/screenshots.
Running the Application
This project uses a Makefile for common tasks. Run make help to see all available commands.
Backend
To build and run the backend:
# Build the webapp (required for embedded frontend)
make build-webapp
# Run the server only (without building webapp)
make run-server
Frontend
The frontend is built with Vue.js and Vite, using Bun as the package manager:
# Run the webapp in development mode with hot-reload
make run-webapp
# Build the webapp for production
make build-webapp
Docker
Running with Docker Compose
To run Hako locally using Docker Compose:
# Build the docker binaries
make build-docker
# Start the container
docker compose up
# Or run in detached mode
docker compose up -d
The service will be available at http://localhost:8080.
Building Docker Images
To build Docker images using goreleaser (for production builds):
# Build Docker image locally (creates multi-arch images)
make build-docker
This will build Docker images for multiple architectures (amd64, arm64, armv7) using goreleaser.
Development
Development Commands
Common development tasks:
# Run linting (server and webapp)
make lint
# Run test suite
make test
# Run integration tests
make e2e
# Format code
make format
# Clean build artifacts
make clean
# Clear dev data (keeps config.yaml)
make clean-devdata
Run make help to see all available commands.