Skip to content

Commit 313764f

Browse files
authored
Brand new 3 (#569)
* add ci workflow * fix * fix 2 * fix 3 * fix 4 * fix 5 * repair
1 parent 54b7e8c commit 313764f

6 files changed

Lines changed: 247 additions & 5 deletions

File tree

.github/.gitleaks.toml

Lines changed: 59 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,59 @@
1+
# Gitleaks configuration for Red Lycoris.
2+
#
3+
# Расширяет дефолтный набор правил gitleaks. Добавляет allowlists для
4+
# синтетических креденшелов в тестовых фикстурах и seed-скриптах.
5+
6+
[extend]
7+
useDefault = true
8+
9+
# ─────────────────────────────────────────────────────────────────────
10+
# Allowlists — что разрешаем gitleaks игнорировать.
11+
# Всё, что попадает сюда, должно быть ОЧЕВИДНО синтетикой.
12+
# Реальные секреты НИКОГДА не должны попадать в allowlist.
13+
# ─────────────────────────────────────────────────────────────────────
14+
15+
[[allowlists]]
16+
description = "Синтетические данные в seed-скриптах для разработки"
17+
paths = [
18+
'''(^|/)scripts/.*seeder.*\.(py|go|sql)$''',
19+
'''(^|/)scripts/seed/.*''',
20+
]
21+
22+
[[allowlists]]
23+
description = "Тестовые фикстуры парсеров (отчёты сканеров с фейковыми токенами)"
24+
paths = [
25+
'''(^|/)backend/internal/parser/testdata/.*''',
26+
'''(^|/)backend/.*/testdata/.*''',
27+
]
28+
29+
[[allowlists]]
30+
description = "Файлы с примерами конфигурации"
31+
paths = [
32+
'''^env\.example$''',
33+
'''(^|/)\.env\.example$''',
34+
'''(^|/)docs/.*\.md$''',
35+
'''^README\.md$''',
36+
'''^CHANGELOG\.md$''',
37+
'''^CLAUDE\.md$''',
38+
]
39+
40+
[[allowlists]]
41+
description = "Хорошо известные синтетические образцы из документации AWS/GitHub"
42+
regexes = [
43+
# AWS-канон для документации
44+
'''AKIAIOSFODNN7EXAMPLE''',
45+
'''wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY''',
46+
# GitHub PAT-подобные паттерны явно с пометкой example
47+
'''ghp_[A-Za-z0-9]{36}EXAMPLE''',
48+
# JWT с alg=none и пустым payload — встречается в документации
49+
'''eyJhbGciOiJub25lIiwidHlwIjoiSldUIn0\.\.''',
50+
]
51+
52+
# ─────────────────────────────────────────────────────────────────────
53+
# Inline-разметка через комментарии тоже работает:
54+
#
55+
# const fakeToken = "ghp_..." // gitleaks:allow
56+
#
57+
# Используй её как fallback для разовых случаев, чтобы не плодить пути
58+
# в этом конфиге.
59+
# ─────────────────────────────────────────────────────────────────────

.github/.golangci.yml

Lines changed: 137 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,137 @@
1+
# golangci-lint configuration for Red Lycoris.
2+
#
3+
# Список линтеров согласован со стилем проекта:
4+
# - raw SQL через pgx — gosec поможет ловить string concatenation в SQL.
5+
# - функциональный код, мало абстракций — gocritic ловит избыточные интерфейсы.
6+
# - все ошибки оборачиваются — errcheck критичен.
7+
8+
run:
9+
timeout: 5m
10+
go: '1.22'
11+
# Анализируем только наш код, не зависимости.
12+
tests: true
13+
14+
output:
15+
formats:
16+
- format: colored-line-number
17+
18+
linters:
19+
# Отключаем всё, включаем только то, что хотим — предсказуемость важнее охвата.
20+
disable-all: true
21+
enable:
22+
# Запрошенные явно
23+
- errcheck # все ли ошибки обработаны
24+
- gocritic # широкий набор практик кода
25+
- gosec # security: SQL inj, weak crypto, hardcoded creds
26+
- govet # стандартные проверки go vet
27+
- revive # замена golint, более гибкая
28+
- staticcheck # глубокий статический анализ
29+
30+
# Дополнительные, без которых результат неполный
31+
- ineffassign # неиспользуемые присваивания
32+
- unused # неиспользуемые функции/переменные
33+
- misspell # опечатки в комментариях и строках
34+
- unconvert # лишние type conversions
35+
- bodyclose # http response body должен быть закрыт
36+
- rowserrcheck # sql.Rows.Err() должен быть проверен — критично для pgx
37+
- sqlclosecheck # sql.Rows и sql.Stmt должны быть закрыты
38+
- contextcheck # context.Context передаётся правильно
39+
- errorlint # обёртка ошибок через %w, корректная проверка через errors.Is/As
40+
- nilerr # `if err != nil { return nil }` — забыли вернуть ошибку
41+
- nilnil # `return nil, nil` — обычно ошибка
42+
- copyloopvar # классическая ловушка с loop variable
43+
44+
linters-settings:
45+
gosec:
46+
# Сложные false positives оставляем на ручную разметку через `// #nosec G304 -- reason`.
47+
# Здесь только то, что объективно бесполезно для нас.
48+
excludes:
49+
- G104 # дублирует errcheck
50+
severity: medium
51+
confidence: medium
52+
53+
gocritic:
54+
enabled-tags:
55+
- diagnostic
56+
- performance
57+
- style
58+
disabled-checks:
59+
# Это вкусовщина, и часто конфликтует с обычной читаемостью.
60+
- hugeParam
61+
- rangeValCopy
62+
- paramTypeCombine
63+
64+
govet:
65+
enable-all: true
66+
disable:
67+
- fieldalignment # часто не стоит того, ломает читаемость структур
68+
69+
revive:
70+
rules:
71+
- name: blank-imports
72+
- name: context-as-argument
73+
- name: context-keys-type
74+
- name: dot-imports
75+
- name: error-return
76+
- name: error-strings
77+
- name: error-naming
78+
- name: exported
79+
severity: warning
80+
disabled: false
81+
- name: if-return
82+
- name: increment-decrement
83+
- name: var-naming
84+
- name: var-declaration
85+
- name: package-comments
86+
disabled: true # на пакеты можно не писать комментарии — нам слишком душно
87+
- name: range
88+
- name: receiver-naming
89+
- name: time-naming
90+
- name: unexported-return
91+
- name: indent-error-flow
92+
- name: errorf
93+
- name: empty-block
94+
- name: superfluous-else
95+
- name: unused-parameter
96+
disabled: true # часто бывают legitimate параметры (handlers, interface impl)
97+
- name: unreachable-code
98+
- name: redefines-builtin-id
99+
100+
errcheck:
101+
check-type-assertions: true
102+
check-blank: false
103+
exclude-functions:
104+
- (io.Closer).Close
105+
- (*database/sql.DB).Close
106+
- (*github.com/jackc/pgx/v5/pgxpool.Pool).Close
107+
- fmt.Fprintf(os.Stderr)
108+
- fmt.Fprintln(os.Stderr)
109+
110+
misspell:
111+
locale: US
112+
113+
issues:
114+
max-issues-per-linter: 0
115+
max-same-issues: 0
116+
117+
exclude-rules:
118+
# В тестах меньше требований, особенно к security.
119+
- path: _test\.go
120+
linters:
121+
- gosec
122+
- errcheck
123+
- gocritic
124+
- revive
125+
126+
# Сгенерированный код мы не контролируем.
127+
- path: \.gen\.go$
128+
linters:
129+
- gocritic
130+
- gosec
131+
- revive
132+
- staticcheck
133+
134+
# Миграции — отдельный мир.
135+
- path: migrations/
136+
linters:
137+
- gosec

.github/.hadolint.yaml

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
# Hadolint configuration for Red Lycoris Dockerfiles.
2+
3+
# Минимальный порог, на котором падать. info-уровень показывается, но не валит билд.
4+
failure-threshold: warning
5+
6+
# Доверенные registry — отсюда можно тянуть образы без явного pin к digest.
7+
trustedRegistries:
8+
- ghcr.io
9+
- docker.io
10+
11+
# Отключаем правила, которые либо неприменимы, либо слишком душные.
12+
ignored:
13+
# DL3008 — pinning apt-get versions. Хорошее правило, но в multi-stage builds,
14+
# где базовый образ обновляется регулярно, pin'ы быстро устаревают и блокируют
15+
# security updates. Если хочется строго — убери эту строку и закрывай каждый
16+
# пин руками.
17+
- DL3008
18+
19+
# Если в Dockerfile используется shell-логика — hadolint парсит её через shellcheck.
20+
# Конфиг shellcheck-а тоже здесь.
21+
override:
22+
error: []
23+
warning: []
24+
info: []
25+
style: []

.github/workflows/ci.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ permissions:
1414

1515
env:
1616
REGISTRY: ghcr.io
17-
IMAGE_NAME: ${{ github.repository }}
17+
IMAGE_NAME: nefrit0n/red-lycoris
1818
COSIGN_VERSION: 'v2.4.0'
1919

2020
jobs:

.github/workflows/pr.yml

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,7 @@ concurrency:
2929
permissions:
3030
contents: read
3131
pull-requests: read
32+
actions: read
3233
security-events: write # для загрузки SARIF в Security tab
3334

3435
jobs:
@@ -108,7 +109,7 @@ jobs:
108109

109110
- uses: actions/setup-go@v5
110111
with:
111-
go-version: '1.22'
112+
go-version: '1.25.x'
112113
cache: true
113114
cache-dependency-path: backend/go.sum
114115

@@ -130,7 +131,7 @@ jobs:
130131

131132
- uses: actions/setup-go@v5
132133
with:
133-
go-version: '1.22'
134+
go-version: '1.25.x'
134135
cache: true
135136
cache-dependency-path: backend/go.sum
136137

@@ -266,7 +267,7 @@ jobs:
266267

267268
- name: Upload hadolint SARIF
268269
if: always()
269-
uses: github/codeql-action/upload-sarif@v3
270+
uses: github/codeql-action/upload-sarif@v4
270271
with:
271272
sarif_file: hadolint-${{ strategy.job-index }}.sarif
272273
category: hadolint-${{ matrix.dockerfile }}
@@ -335,7 +336,7 @@ jobs:
335336

336337
- name: Upload Trivy SARIF to GitHub Security
337338
if: always()
338-
uses: github/codeql-action/upload-sarif@v3
339+
uses: github/codeql-action/upload-sarif@v4
339340
with:
340341
sarif_file: trivy-${{ matrix.component }}.sarif
341342
category: trivy-${{ matrix.component }}

frontend/eslint.config.js

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,5 +19,25 @@ export default defineConfig([
1919
ecmaVersion: 2020,
2020
globals: globals.browser,
2121
},
22+
rules: {
23+
'react-hooks/rules-of-hooks': 'error',
24+
'react-hooks/exhaustive-deps': 'warn',
25+
'react-hooks/config': 'off',
26+
'react-hooks/gating': 'off',
27+
'react-hooks/globals': 'off',
28+
'react-hooks/immutability': 'off',
29+
'react-hooks/purity': 'off',
30+
'react-hooks/refs': 'off',
31+
'react-hooks/set-state-in-effect': 'off',
32+
'react-hooks/set-state-in-render': 'off',
33+
'react-hooks/static-components': 'off',
34+
'react-hooks/use-memo': 'off',
35+
'react-hooks/error-boundaries': 'off',
36+
'react-hooks/unsupported-syntax': 'off',
37+
'react-hooks/component-hook-factories': 'off',
38+
'react-hooks/incompatible-library': 'off',
39+
'react-hooks/preserve-manual-memoization': 'off',
40+
'react-refresh/only-export-components': 'off',
41+
},
2242
},
2343
])

0 commit comments

Comments
 (0)