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>
|
<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/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/Flask-3.1.3-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/Tailwind_CSS-4.1.18-38B2AC?style=for-the-badge&logo=tailwind-css" height="25">
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
@@ -20,15 +20,17 @@
|
|||||||
|
|
||||||
The central hub for managing tournaments.
|
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">
|
<div align="center">
|
||||||
<img src="./docs/dashboard-dark.png" width="48%" alt="Dark Mode">
|
<img src="./docs/dashboard.png" width="70%" alt="Dashboard">
|
||||||
<img src="./docs/dashboard-light.png" width="48%" alt="Light Mode">
|
<img src="./docs/mobile-dashboard.png" width="16%" alt="Mobile Friendly">
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
---
|
---
|
||||||
@@ -38,12 +40,13 @@ Seamless support for both light and dark environments.
|
|||||||
### Setup & Creation
|
### Setup & Creation
|
||||||
|
|
||||||
<div align="center">
|
<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>
|
</div>
|
||||||
|
|
||||||
### Bracket Visualization
|
### 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">
|
<div align="center">
|
||||||
<img src="./docs/bracket-dark.png" width="48%" alt="Bracket Dark">
|
<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**
|
**Single Elimination & Live Scoring**
|
||||||
|
|
||||||
<div align="center">
|
<div align="center">
|
||||||
<img src="./docs/bracket-single.png" width="48%" alt="Single Elim">
|
<img src="./docs/single-elimination.png" width="48%" alt="Single Elimination">
|
||||||
<img src="./docs/bracket-scoring.png" width="48%" alt="Scoring">
|
<img src="./docs/scoring.png" width="48%" alt="Scoring">
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
---
|
---
|
||||||
@@ -64,8 +67,17 @@ Dynamic bracket generation handling various tournament sizes.
|
|||||||
## Scheduling & Results
|
## Scheduling & Results
|
||||||
|
|
||||||
Automated scheduling views with real-time score updates.
|
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>
|
</tr>
|
||||||
</table>
|
</table>
|
||||||
|
|
||||||
|
## Admin login
|
||||||
|
|
||||||
|
Secure settings behind a admin login.
|
||||||
|
<img src="./docs/admin.png" width="100%" alt="Dashboard Admin">
|
||||||
|
|
||||||
## Deploy
|
## 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.
|
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 |