Repository navigation
132 lines (109 loc) · 3.35 KB
/
Copy pathcheck.yml
File metadata and controls
132 lines (109 loc) · 3.35 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
name: Code Checks
permissions:
contents: read
checks: write
pull-requests: write
on:
pull_request:
push:
workflow_dispatch:
jobs:
test:
name: Unit Tests & Validation
runs-on: ubuntu-latest
steps:
- name: Checkout code
uses: actions/checkout@v7
- name: Cache Primes
id: cache-primes
uses: actions/cache@v6
with:
path: |
~/.cache/uv
~/.cache/pip
key: uv-cache-${{ hashFiles('**/pyproject.toml') }}
restore-keys: |
uv-cache-
- name: Set up Python environment
run: |
wget -qO- https://astral.sh/uv/install.sh | sh
uv sync
- name: Run Ruff (PEP 8 Formatting)
run: |
uv run make format
- name: Run Ruff (Linting + Docstrings)
run: |
uv run make check
- name: Run vulture (Duplicate Code)
run: |
uv run make vulture
- name: Run xenon (Cyclomatic Complexity)
run: |
uv run make xenon
- name: Run bandit (Security)
run: |
uv run make bandit
- name: Run pyright (Type Checking)
run: |
uv run make pyright
- name: Run pytest (Unit Tests)
run: |
cp config.json.sample config.json
uv run pytest tests/unit -v --cov --cov-report=xml --cov-report=term-missing
- name: Upload coverage report
uses: actions/upload-artifact@v7
with:
name: coverage-report
path: ./coverage.xml
- name: Set up Node.js
uses: actions/setup-node@v7
with:
node-version: "22"
cache: "npm"
- name: Run JavaScript tests
run: |
npm ci
npm test
integration:
name: Integration Tests
runs-on: ubuntu-latest
needs: test
timeout-minutes: 15
steps:
- name: Checkout code
uses: actions/checkout@v7
- name: Start InspIRCd, XDCC bot and toxiproxy
run: |
docker compose up -d ircd xdccbot toxiproxy
# Wait for IRC server to be ready
echo "Waiting for IRC server to start..."
timeout 60 bash -c 'until nc -z localhost 6667; do sleep 1; done'
echo "IRC server is ready!"
# Wait for XDCC bot to connect
echo "Waiting for XDCC bot to be ready..."
timeout 180 bash -c 'until [ "$(docker inspect -f "{{.State.Health.Status}}" dccbot-test-xdcc 2>/dev/null)" = "healthy" ]; do sleep 2; done'
echo "XDCC bot is ready!"
# Wait for toxiproxy admin API
echo "Waiting for toxiproxy to be ready..."
timeout 60 bash -c 'until nc -z localhost 8474; do sleep 1; done'
echo "toxiproxy is ready!"
- name: Cache dependencies
uses: actions/cache@v6
with:
path: |
~/.cache/uv
~/.cache/pip
key: uv-cache-${{ hashFiles('**/pyproject.toml') }}
restore-keys: |
uv-cache-
- name: Set up Python environment
run: |
wget -qO- https://astral.sh/uv/install.sh | sh
uv sync
- name: Run Integration Tests
run: |
cp config.json.sample config.json
uv run pytest tests/integration -v -m integration --timeout=120
- name: Stop services
if: always()
run: docker compose down