Release v3.7: Codebase cleanup and security improvements
Some checks failed
Release APKs / Build TV APK (push) Has been cancelled
Release APKs / Build Mobile APK (push) Has been cancelled
Release APKs / Create Release (push) Has been cancelled

This commit is contained in:
vndangkhoa 2026-02-18 19:07:13 +07:00
parent 056824cfa8
commit 7d696a93af
6 changed files with 102 additions and 104 deletions

View file

@ -1,5 +1,5 @@
# Stage 1: Build Image (Frontend)
FROM node:18-alpine AS frontend-builder
FROM node:20-alpine AS frontend-builder
WORKDIR /app/frontend
COPY frontend-react/package*.json ./
RUN npm install
@ -7,7 +7,7 @@ COPY frontend-react/ .
RUN npm run build
# Stage 2: Build Image (Backend)
FROM golang:1.23-alpine AS backend-builder
FROM golang:1.24-alpine AS backend-builder
WORKDIR /app/backend
# Install build dependencies
RUN apk add --no-cache gcc musl-dev

View file

@ -1,4 +1,4 @@
# StreamFlow V3.6
# StreamFlow V3.7
StreamFlow is a high-performance video streaming web application featuring a pure Go backend and a modern React + Tailwind frontend.
@ -8,15 +8,16 @@ StreamFlow is a high-performance video streaming web application featuring a pur
- **High Performance**: Backend written in Go (Golang) for speed and concurrency.
- **Smart Scraping**: Integrated scraping engine (Rophim) with automated episode extraction.
- **HLS Streaming**: Native HLS playback support.
- **Android TV Support (New)**: Optimized TV client with D-pad controls and 10s skip.
- **Android TV Support**: Optimized TV client with D-pad controls and 10s skip.
- **Performance Optimized**: Parallel API fetching and global image caching for instant loading.
- **Android TV App**: Native TV app support with dedicated APK available for download.
- **Docker Ready**: Multi-stage Docker build optimized for NAS Synology (linux/amd64).
- **PWA Support**: Install as a progressive web app on mobile devices.
## 🛠️ Tech Stack
- **Backend**: Go (Chi Router, GORM, GoQuery)
- **Frontend**: React, TypeScript, Vite, Tailwind CSS
- **Backend**: Go 1.23 (Chi Router, GORM, GoQuery)
- **Frontend**: React 19, TypeScript, Vite 7, Tailwind CSS 4
- **Database**: SQLite
- **Deployment**: Docker
@ -24,7 +25,7 @@ StreamFlow is a high-performance video streaming web application featuring a pur
### Prerequisites
- Go 1.22+
- Go 1.23+
- Node.js 20+
- Docker (optional)
@ -48,28 +49,23 @@ StreamFlow is a high-performance video streaming web application featuring a pur
### Docker Deployment (Recommended for NAS Synology)
1. **Environmental Variables**: Create a `.env` file or set them in your NAS:
```env
TMDB_API_KEY=your_api_key_here
```
2. **Run with Docker Compose**:
1. **Run with Docker Compose**:
```yaml
version: '3.8'
services:
streamflow:
image: git.khoavo.myds.me/vndangkhoa/kv-streamflow:v3.6
image: git.khoavo.myds.me/vndangkhoa/kv-streamflow:v3.7
container_name: streamflow
platform: linux/amd64
ports:
- "3478:8000"
environment:
- DATABASE_URL=/app/data/streamflow.db
- TMDB_API_KEY=${TMDB_API_KEY}
- TZ=Asia/Ho_Chi_Minh
volumes:
- ./data:/app/data
restart: always
restart: unless-stopped
```
```bash

View file

@ -57,7 +57,7 @@ func main() {
r.Route("/api", func(r chi.Router) {
r.Get("/health", func(w http.ResponseWriter, r *http.Request) {
w.Write([]byte(`{"status":"healthy", "version":"v3.6-go"}`))
w.Write([]byte(`{"status":"healthy", "version":"v3.7"}`))
})
api.RegisterRoutes(r, handler)

View file

@ -2,19 +2,21 @@ version: '3.8'
services:
streamflow:
# build: .
image: git.khoavo.myds.me/vndangkhoa/kv-streamflow:v3.6
image: git.khoavo.myds.me/vndangkhoa/kv-streamflow:v3.7
container_name: streamflow
platform: linux/amd64
ports:
- "3478:8000"
environment:
- DATABASE_URL=/app/data/streamflow.db
# - TMDB_API_KEY=${TMDB_API_KEY}
- PORT=8000
- TZ=Asia/Ho_Chi_Minh
volumes:
- ./data:/app/data
restart: always
volumes:
streamflow_data:
streamflow_cache:
restart: unless-stopped
healthcheck:
test: ["CMD", "wget", "-q", "--spider", "http://localhost:8000/api/health"]
interval: 30s
timeout: 10s
retries: 3
start_period: 10s

View file

@ -1,4 +1,4 @@
import { Component, ErrorInfo, ReactNode } from 'react';
import { Component, type ErrorInfo, type ReactNode } from 'react';
interface Props {
children: ReactNode;

View file

@ -1,4 +1,4 @@
import { defineConfig } from 'vite'
import { defineConfig } from 'vitest/config'
import react from '@vitejs/plugin-react'
import { VitePWA } from 'vite-plugin-pwa'