Compare commits
@@ -0,0 +1,80 @@
|
||||
name: Test and Release
|
||||
|
||||
on:
|
||||
push:
|
||||
branches: ["**"]
|
||||
pull_request:
|
||||
branches: ["main", "master"]
|
||||
release:
|
||||
types: [published]
|
||||
|
||||
jobs:
|
||||
test-backend:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- uses: actions/checkout@v6
|
||||
- name: Set up Python
|
||||
uses: actions/setup-python@v5
|
||||
with:
|
||||
python-version: "3.x"
|
||||
- name: Install dependencies
|
||||
run: |
|
||||
cd backend
|
||||
python -m pip install --upgrade pip
|
||||
pip install -r requirements.txt
|
||||
- name: Test with pytest
|
||||
run: |
|
||||
cd backend
|
||||
pip install pytest pytest-cov
|
||||
pytest
|
||||
|
||||
test-frontend:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- uses: actions/checkout@v6
|
||||
- name: Use Node.js
|
||||
uses: actions/setup-node@v4
|
||||
with:
|
||||
node-version: "20.x"
|
||||
- name: Install dependencies
|
||||
run: |
|
||||
cd frontend
|
||||
npm ci
|
||||
- name: Test with NPM
|
||||
run: |
|
||||
cd frontend
|
||||
npm test -- run --exclude "**/*.live.test.ts"
|
||||
|
||||
build-docker:
|
||||
needs: [test-backend, test-frontend]
|
||||
runs-on: ubuntu-latest
|
||||
if: github.event_name == 'release'
|
||||
permissions:
|
||||
packages: write
|
||||
contents: read
|
||||
strategy:
|
||||
matrix:
|
||||
service: [backend, frontend]
|
||||
steps:
|
||||
- uses: actions/checkout@v4
|
||||
- name: Log in to Registry
|
||||
uses: docker/login-action@v3
|
||||
with:
|
||||
registry: git.stws.cc
|
||||
username: ${{ github.actor }}
|
||||
password: ${{ secrets.REGISTRY_TOKEN }}
|
||||
- name: Extract metadata
|
||||
id: meta
|
||||
uses: docker/metadata-action@v5
|
||||
with:
|
||||
images: git.stws.cc/${{ github.repository }}/${{ matrix.service }}
|
||||
tags: |
|
||||
type=ref,event=tag
|
||||
type=raw,value=latest
|
||||
- name: Build and Push
|
||||
uses: docker/build-push-action@v6
|
||||
with:
|
||||
context: ./${{ matrix.service }}
|
||||
push: true
|
||||
tags: ${{ steps.meta.outputs.tags }}
|
||||
labels: ${{ steps.meta.outputs.labels }}
|
||||
@@ -9,8 +9,8 @@
|
||||
<br>
|
||||
|
||||
<img src="https://img.shields.io/badge/Python-3.14-blue?style=for-the-badge&logo=python" height="25">
|
||||
<img src="https://img.shields.io/badge/Flask-3.1.2-lightgrey?style=for-the-badge&logo=flask" height="25">
|
||||
<img src="https://img.shields.io/badge/Tailwind_CSS-4.1.17-38B2AC?style=for-the-badge&logo=tailwind-css" height="25">
|
||||
<img src="https://img.shields.io/badge/Flask-3.1.3-lightgrey?style=for-the-badge&logo=flask" height="25">
|
||||
<img src="https://img.shields.io/badge/Tailwind_CSS-4.1.18-38B2AC?style=for-the-badge&logo=tailwind-css" height="25">
|
||||
|
||||
</div>
|
||||
|
||||
@@ -20,15 +20,17 @@
|
||||
|
||||
The central hub for managing tournaments.
|
||||
|
||||
<img src="./docs/dashboard-admin.png" width="100%" alt="Dashboard Admin">
|
||||
<img src="./docs/bracket-light.png" width="100%" alt="Brackets">
|
||||
|
||||
### Appearance Modes
|
||||
---
|
||||
|
||||
Seamless support for both light and dark environments.
|
||||
### Mobile Friendly
|
||||
|
||||
Seamless support for both PC and mobile users.
|
||||
|
||||
<div align="center">
|
||||
<img src="./docs/dashboard-dark.png" width="48%" alt="Dark Mode">
|
||||
<img src="./docs/dashboard-light.png" width="48%" alt="Light Mode">
|
||||
<img src="./docs/dashboard.png" width="70%" alt="Dashboard">
|
||||
<img src="./docs/mobile-dashboard.png" width="16%" alt="Mobile Friendly">
|
||||
</div>
|
||||
|
||||
---
|
||||
@@ -38,12 +40,13 @@ Seamless support for both light and dark environments.
|
||||
### Setup & Creation
|
||||
|
||||
<div align="center">
|
||||
<img src="./docs/settings.png" height="400px" alt="Settings">
|
||||
<img src="./docs/tournament-new.png" width="48%" alt="New Tournament">
|
||||
<img src="./docs/tournament-edit.png" width="48%" alt="Edit Tournament">
|
||||
</div>
|
||||
|
||||
### Bracket Visualization
|
||||
|
||||
Dynamic bracket generation handling various tournament sizes.
|
||||
Dynamic bracket generation handling various tournament sizes and with seamless support for both light and dark environments.
|
||||
|
||||
<div align="center">
|
||||
<img src="./docs/bracket-dark.png" width="48%" alt="Bracket Dark">
|
||||
@@ -55,8 +58,8 @@ Dynamic bracket generation handling various tournament sizes.
|
||||
**Single Elimination & Live Scoring**
|
||||
|
||||
<div align="center">
|
||||
<img src="./docs/bracket-single.png" width="48%" alt="Single Elim">
|
||||
<img src="./docs/bracket-scoring.png" width="48%" alt="Scoring">
|
||||
<img src="./docs/single-elimination.png" width="48%" alt="Single Elimination">
|
||||
<img src="./docs/scoring.png" width="48%" alt="Scoring">
|
||||
</div>
|
||||
|
||||
---
|
||||
@@ -64,8 +67,17 @@ Dynamic bracket generation handling various tournament sizes.
|
||||
## Scheduling & Results
|
||||
|
||||
Automated scheduling views with real-time score updates.
|
||||
<div align="center">
|
||||
<img src="./docs/schedule.png" width="70%" alt="Schedule">
|
||||
<img src="./docs/mobile-schedule.png" width="16%" alt="Schedule - Mobile Friendly">
|
||||
</div>
|
||||
|
||||
<img src="./docs/schedule.png" width="100%" alt="Schedule">
|
||||
---
|
||||
|
||||
## Court Overview
|
||||
|
||||
Keep up with all courts all at once in one place.
|
||||
<img src="./docs/courts.png" width="100%" alt="Schedule">
|
||||
|
||||
---
|
||||
|
||||
@@ -102,6 +114,11 @@ Secure scoring interfaces for Referees and Administrators.
|
||||
</tr>
|
||||
</table>
|
||||
|
||||
## Admin login
|
||||
|
||||
Secure settings behind a admin login.
|
||||
<img src="./docs/admin.png" width="100%" alt="Dashboard Admin">
|
||||
|
||||
## Deploy
|
||||
|
||||
Clone the repo and run the docker-compose or create your own. Create a .env file with your custom values there is an example.env available.
|
||||
|
||||
|
After Width: | Height: | Size: 50 KiB |
|
Before Width: | Height: | Size: 142 KiB After Width: | Height: | Size: 174 KiB |
|
Before Width: | Height: | Size: 146 KiB After Width: | Height: | Size: 180 KiB |
|
Before Width: | Height: | Size: 162 KiB |
|
Before Width: | Height: | Size: 116 KiB |
|
After Width: | Height: | Size: 154 KiB |
|
Before Width: | Height: | Size: 120 KiB |
|
Before Width: | Height: | Size: 115 KiB |
|
Before Width: | Height: | Size: 116 KiB |
|
After Width: | Height: | Size: 52 KiB |
|
After Width: | Height: | Size: 123 KiB |
|
After Width: | Height: | Size: 255 KiB |
|
Before Width: | Height: | Size: 6.0 KiB |
|
Before Width: | Height: | Size: 156 KiB After Width: | Height: | Size: 124 KiB |
|
Before Width: | Height: | Size: 16 KiB After Width: | Height: | Size: 17 KiB |
|
Before Width: | Height: | Size: 21 KiB After Width: | Height: | Size: 20 KiB |
|
After Width: | Height: | Size: 120 KiB |
|
Before Width: | Height: | Size: 24 KiB |
|
After Width: | Height: | Size: 132 KiB |
|
After Width: | Height: | Size: 27 KiB |
|
After Width: | Height: | Size: 23 KiB |