Compare commits
2 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| 7bd491edc1 | |||
| c13db7b88f |
@@ -54,6 +54,10 @@ jobs:
|
|||||||
with:
|
with:
|
||||||
python-version: '3.12'
|
python-version: '3.12'
|
||||||
cache: 'pip'
|
cache: 'pip'
|
||||||
|
cache-dependency-path: '**/requirements.txt'
|
||||||
|
|
||||||
|
- name: Clear pip cache (CI stability)
|
||||||
|
run: pip cache purge
|
||||||
|
|
||||||
- name: Configure Runtime Paths
|
- name: Configure Runtime Paths
|
||||||
run: |
|
run: |
|
||||||
@@ -194,6 +198,10 @@ jobs:
|
|||||||
with:
|
with:
|
||||||
python-version: '3.12'
|
python-version: '3.12'
|
||||||
cache: 'pip'
|
cache: 'pip'
|
||||||
|
cache-dependency-path: '**/requirements.txt'
|
||||||
|
|
||||||
|
- name: Clear pip cache (CI stability)
|
||||||
|
run: pip cache purge
|
||||||
|
|
||||||
- name: Setup Python Environment
|
- name: Setup Python Environment
|
||||||
run: |
|
run: |
|
||||||
@@ -227,6 +235,10 @@ jobs:
|
|||||||
with:
|
with:
|
||||||
python-version: '3.12'
|
python-version: '3.12'
|
||||||
cache: 'pip'
|
cache: 'pip'
|
||||||
|
cache-dependency-path: '**/requirements.txt'
|
||||||
|
|
||||||
|
- name: Clear pip cache (CI stability)
|
||||||
|
run: pip cache purge
|
||||||
|
|
||||||
- name: Setup .NET SDK
|
- name: Setup .NET SDK
|
||||||
uses: actions/setup-dotnet@v4
|
uses: actions/setup-dotnet@v4
|
||||||
@@ -273,6 +285,10 @@ jobs:
|
|||||||
with:
|
with:
|
||||||
python-version: '3.12'
|
python-version: '3.12'
|
||||||
cache: 'pip'
|
cache: 'pip'
|
||||||
|
cache-dependency-path: '**/requirements.txt'
|
||||||
|
|
||||||
|
- name: Clear pip cache (CI stability)
|
||||||
|
run: pip cache purge
|
||||||
|
|
||||||
- name: Setup Python Environment
|
- name: Setup Python Environment
|
||||||
run: |
|
run: |
|
||||||
@@ -302,6 +318,10 @@ jobs:
|
|||||||
with:
|
with:
|
||||||
python-version: '3.12'
|
python-version: '3.12'
|
||||||
cache: 'pip'
|
cache: 'pip'
|
||||||
|
cache-dependency-path: '**/requirements.txt'
|
||||||
|
|
||||||
|
- name: Clear pip cache (CI stability)
|
||||||
|
run: pip cache purge
|
||||||
|
|
||||||
- name: Setup Python Environment
|
- name: Setup Python Environment
|
||||||
run: |
|
run: |
|
||||||
@@ -334,6 +354,10 @@ jobs:
|
|||||||
with:
|
with:
|
||||||
python-version: '3.12'
|
python-version: '3.12'
|
||||||
cache: 'pip'
|
cache: 'pip'
|
||||||
|
cache-dependency-path: '**/requirements.txt'
|
||||||
|
|
||||||
|
- name: Clear pip cache (CI stability)
|
||||||
|
run: pip cache purge
|
||||||
|
|
||||||
- name: Setup Python Environment
|
- name: Setup Python Environment
|
||||||
run: |
|
run: |
|
||||||
@@ -373,6 +397,10 @@ jobs:
|
|||||||
with:
|
with:
|
||||||
python-version: '3.12'
|
python-version: '3.12'
|
||||||
cache: 'pip'
|
cache: 'pip'
|
||||||
|
cache-dependency-path: '**/requirements.txt'
|
||||||
|
|
||||||
|
- name: Clear pip cache (CI stability)
|
||||||
|
run: pip cache purge
|
||||||
|
|
||||||
- name: Setup .NET SDK
|
- name: Setup .NET SDK
|
||||||
uses: actions/setup-dotnet@v4
|
uses: actions/setup-dotnet@v4
|
||||||
@@ -442,6 +470,10 @@ jobs:
|
|||||||
with:
|
with:
|
||||||
python-version: '3.12'
|
python-version: '3.12'
|
||||||
cache: 'pip'
|
cache: 'pip'
|
||||||
|
cache-dependency-path: '**/requirements.txt'
|
||||||
|
|
||||||
|
- name: Clear pip cache (CI stability)
|
||||||
|
run: pip cache purge
|
||||||
|
|
||||||
- name: Setup Python Environment
|
- name: Setup Python Environment
|
||||||
run: |
|
run: |
|
||||||
@@ -471,6 +503,10 @@ jobs:
|
|||||||
with:
|
with:
|
||||||
python-version: '3.12'
|
python-version: '3.12'
|
||||||
cache: 'pip'
|
cache: 'pip'
|
||||||
|
cache-dependency-path: '**/requirements.txt'
|
||||||
|
|
||||||
|
- name: Clear pip cache (CI stability)
|
||||||
|
run: pip cache purge
|
||||||
|
|
||||||
- name: Setup Python Environment
|
- name: Setup Python Environment
|
||||||
run: |
|
run: |
|
||||||
|
|||||||
@@ -56,39 +56,17 @@ jobs:
|
|||||||
|
|
||||||
- name: Generate Metadata
|
- name: Generate Metadata
|
||||||
id: metadata
|
id: metadata
|
||||||
env:
|
|
||||||
GITEA_TOKEN: ${{ secrets.GITEA_TOKEN }}
|
|
||||||
run: |
|
run: |
|
||||||
VERSION_INPUT="${{ github.event.inputs.version }}"
|
VERSION_INPUT="${{ github.event.inputs.version }}"
|
||||||
COMMIT=$(git rev-parse --short HEAD)
|
COMMIT=$(git rev-parse --short HEAD)
|
||||||
|
|
||||||
# Auto-generate version if not provided
|
# Auto-generate version if not provided
|
||||||
if [ -z "$VERSION_INPUT" ]; then
|
if [ -z "$VERSION_INPUT" ]; then
|
||||||
# This project operates on Korea Standard Time (production
|
# Simple, reliable version scheme: timestamp + commit hash
|
||||||
# server logs, ops schedule, and the team are all KST) --
|
# Avoids unreliable Gitea API calls (network failures, timeouts)
|
||||||
# using UTC here silently rolled the date back by up to 9
|
# Format: v0.1.YYYYMMDD.HHMMSS.COMMIT
|
||||||
# hours (e.g. 2026-07-12 01:xx KST is still 2026-07-11 16:xx
|
TIMESTAMP=$(TZ=Asia/Seoul date +%Y%m%d.%H%M%S)
|
||||||
# UTC), so a release cut right after midnight KST would tag
|
VERSION="v0.1.${TIMESTAMP}.${COMMIT}"
|
||||||
# itself with yesterday's date.
|
|
||||||
TODAY=$(TZ=Asia/Seoul date +%Y%m%d)
|
|
||||||
|
|
||||||
# NOTE: Do NOT count today's releases via `git tag -l` here.
|
|
||||||
# actions/checkout@v4 defaults to a shallow, single-branch
|
|
||||||
# clone that does not fetch any tags, so every job container
|
|
||||||
# sees zero local tags regardless of how many releases exist
|
|
||||||
# -- this is exactly why every release tonight came out as
|
|
||||||
# "quant_20260711.1.*" (three of them: b7591fb, 6ab270f,
|
|
||||||
# e49922e, all claiming to be deploy #1). Query the actual
|
|
||||||
# Gitea Releases API instead, which reflects real state.
|
|
||||||
# Sequence number resets to 0 on each new date -- the first
|
|
||||||
# release of a day is quant_YYYYMMDD.0.hash, the second .1, etc.
|
|
||||||
RELEASES_TODAY=$(curl -sf --connect-timeout 10 --max-time 30 \
|
|
||||||
-H "Authorization: token ${GITEA_TOKEN}" \
|
|
||||||
"https://gitea.taxbaik.com/api/v1/repos/${{ github.repository }}/tags?limit=50" \
|
|
||||||
| jq -r --arg prefix "quant_${TODAY}." '[.[] | select(.name | startswith($prefix))] | length')
|
|
||||||
DEPLOY_COUNT=$RELEASES_TODAY
|
|
||||||
|
|
||||||
VERSION="quant_${TODAY}.${DEPLOY_COUNT}.${COMMIT}"
|
|
||||||
else
|
else
|
||||||
VERSION="$VERSION_INPUT"
|
VERSION="$VERSION_INPUT"
|
||||||
fi
|
fi
|
||||||
|
|||||||
+12
-11
@@ -1,25 +1,26 @@
|
|||||||
# QuantEngine v0.2 - Python Dependencies
|
# QuantEngine v0.2 - Python Dependencies
|
||||||
# CI/CD validation and data collection tools
|
# CI/CD validation and data collection tools
|
||||||
|
# Pinned versions for CI stability
|
||||||
|
|
||||||
# Core dependencies
|
# Core dependencies
|
||||||
pyyaml>=6.0
|
pyyaml==6.0.1
|
||||||
requests>=2.28.0
|
requests==2.31.0
|
||||||
python-dotenv>=0.21.0
|
python-dotenv==1.0.0
|
||||||
|
|
||||||
# Data processing
|
# Data processing
|
||||||
openpyxl>=3.9.0
|
openpyxl==3.11.0
|
||||||
pandas>=1.5.0
|
pandas==2.0.3
|
||||||
numpy>=1.23.0
|
numpy==1.24.3
|
||||||
|
|
||||||
# Database
|
# Database
|
||||||
psycopg[binary]>=3.1.0
|
psycopg[binary]==3.1.12
|
||||||
|
|
||||||
# Testing & validation
|
# Testing & validation
|
||||||
pytest>=7.2.0
|
pytest==7.4.0
|
||||||
pytest-asyncio>=0.20.0
|
pytest-asyncio==0.21.1
|
||||||
|
|
||||||
# Async
|
# Async
|
||||||
aiohttp>=3.8.0
|
aiohttp==3.8.5
|
||||||
|
|
||||||
# Utilities
|
# Utilities
|
||||||
click>=8.1.0
|
click==8.1.6
|
||||||
|
|||||||
Reference in New Issue
Block a user