Skip to content

Commit 290415d

Browse files
committed
Initial commit
0 parents  commit 290415d

118 files changed

Lines changed: 34806 additions & 0 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

.github/workflows/ci.yml

Lines changed: 60 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,60 @@
1+
name: CI
2+
3+
on:
4+
push:
5+
branches:
6+
- main
7+
pull_request:
8+
branches:
9+
- main
10+
workflow_dispatch:
11+
12+
jobs:
13+
test:
14+
name: Python ${{ matrix.python-version }}
15+
runs-on: ubuntu-latest
16+
strategy:
17+
fail-fast: false
18+
matrix:
19+
python-version:
20+
- "3.11"
21+
- "3.12"
22+
- "3.13"
23+
24+
steps:
25+
- name: Checkout
26+
uses: actions/checkout@v4
27+
28+
- name: Set up Python
29+
uses: actions/setup-python@v5
30+
with:
31+
python-version: ${{ matrix.python-version }}
32+
33+
- name: Install RelayX
34+
run: |
35+
python -m pip install --upgrade pip
36+
python -m pip install -e .
37+
38+
- name: Version smoke test
39+
run: relayx --no-banner --version
40+
41+
- name: Unit tests
42+
run: python -m unittest discover -s tests
43+
44+
- name: Quality gate
45+
run: relayx --no-banner quality-gate --project-root . --format json --out relayx-quality-gate.json
46+
47+
- name: Wheel build smoke test
48+
run: python -m pip wheel . --no-deps -w dist
49+
50+
- name: Wheel install smoke test
51+
run: |
52+
python -m pip install --force-reinstall dist/relayx-*.whl
53+
relayx --no-banner --version
54+
55+
- name: Upload quality gate report
56+
if: always()
57+
uses: actions/upload-artifact@v4
58+
with:
59+
name: relayx-quality-gate-${{ matrix.python-version }}
60+
path: relayx-quality-gate.json

.github/workflows/release.yml

Lines changed: 63 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,63 @@
1+
name: Release Gate
2+
3+
on:
4+
push:
5+
tags:
6+
- "v*"
7+
workflow_dispatch:
8+
9+
jobs:
10+
release-gate:
11+
runs-on: ubuntu-latest
12+
13+
steps:
14+
- name: Checkout
15+
uses: actions/checkout@v4
16+
17+
- name: Set up Python
18+
uses: actions/setup-python@v5
19+
with:
20+
python-version: "3.11"
21+
22+
- name: Install build tooling
23+
run: |
24+
python -m pip install --upgrade pip
25+
python -m pip install build
26+
python -m pip install -e .
27+
28+
- name: Check tag matches package version
29+
if: startsWith(github.ref, 'refs/tags/')
30+
run: |
31+
python - <<'PY'
32+
import pathlib
33+
import tomllib
34+
import os
35+
36+
tag = os.environ["GITHUB_REF_NAME"]
37+
version = tomllib.loads(pathlib.Path("pyproject.toml").read_text())["project"]["version"]
38+
expected = f"v{version}"
39+
if tag != expected:
40+
raise SystemExit(f"tag {tag!r} does not match package version {expected!r}")
41+
PY
42+
43+
- name: Unit tests
44+
run: python -m unittest discover -s tests
45+
46+
- name: Quality gate
47+
run: relayx --no-banner quality-gate --project-root . --format json --out relayx-quality-gate.json
48+
49+
- name: Build source and wheel distributions
50+
run: python -m build
51+
52+
- name: Install wheel smoke test
53+
run: |
54+
python -m pip install --force-reinstall dist/relayx-*.whl
55+
relayx --no-banner --version
56+
57+
- name: Upload release artifacts
58+
uses: actions/upload-artifact@v4
59+
with:
60+
name: relayx-release-artifacts
61+
path: |
62+
dist/*
63+
relayx-quality-gate.json

.gitignore

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
__pycache__/
2+
*.py[cod]
3+
*.egg-info/
4+
build/
5+
dist/
6+
.pytest_cache/
7+
.mypy_cache/
8+
.ruff_cache/
9+
.venv/
10+
venv/
11+
.DS_Store
12+
work/

LICENSE

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
MIT License
2+
3+
Copyright (c) 2026 RedteamNotes
4+
5+
Permission is hereby granted, free of charge, to any person obtaining a copy
6+
of this software and associated documentation files (the "Software"), to deal
7+
in the Software without restriction, including without limitation the rights
8+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9+
copies of the Software, and to permit persons to whom the Software is
10+
furnished to do so, subject to the following conditions:
11+
12+
The above copyright notice and this permission notice shall be included in all
13+
copies or substantial portions of the Software.
14+
15+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21+
SOFTWARE.
22+

0 commit comments

Comments
 (0)