Gov Price Sync (Bulk) #104
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| name: Gov Price Sync (Bulk) | |
| # engines.gather — 공공데이터포털(data.go.kr) 일별 전종목 주가 → HF dataset publish. | |
| # 출력: gov/prices/date/{YYYY}.parquet (전종목 횡단) + gov/prices/company/{code}.parquet (종목별). | |
| # 엔진(quant/scan/analysis)은 이 결과를 hfBulk.loadFiltered(category=govPrices)로 소비. | |
| on: | |
| schedule: | |
| # gov 는 각 거래일치를 '다음 영업일' 오후(~13:33 KST) 발행 — 신규 데이터가 나오는 날은 평일뿐: | |
| # 월=금요일치, 화=월요일치, 수=화, 목=수, 금=목요일치. 토·일은 발행 없음(2026-06-13~14 실측: | |
| # 금 6/12·토 6/13 모두 gov totalCount=0, 독립 소스엔 6/12 거래 존재 = 휴장 아닌 미발행). | |
| # 따라서 fetch 슬롯 = gov 발행일과 동일한 월~금(1-5) + --lookback 4. 각 평일 run 이 그날 gov 가 | |
| # 갓 발행한 직전 거래일치를 수집(금요일치=월요일 run 최초). 토요일 fetch 는 신규 발행분이 없어 | |
| # 무의미 → 토요일은 derive 슬롯만 유지. 일요일도 제외. | |
| # ⚠ 옛 '1-5=금요일 영구누락' 경고는 lookback=1 시절 artifact — lookback 4 에선 월요일 run 이 | |
| # 금요일치를 lookback 으로 수집하므로 1-5 가 완전. 화~토(2-6)은 월요일 사각지대 + 무의미한 | |
| # 토요일 fetch 라 금요일치를 화요일까지 1일 지연시켰다(2026-06-14 정정). | |
| # 정각(:00) cron 은 GH 혼잡 미발화 잦아 :40/:10 회피. idempotent — 기수집분 재요청 skip ~44s. | |
| - cron: '40 4 * * 1-5' # KST 13:40 월~금 — gov 갓 발행분(직전 거래일치) 1차 수집 | |
| - cron: '40 5 * * 1-5' # KST 14:40 월~금 — 발행 지연·1차 미발화 catch-up | |
| - cron: '10 11 * * 1-5' # KST 20:10 월~금 — backstop (잔여 + lookback catch-up) | |
| - cron: '10 13 * * 6' # KST 22:10 토 — 회사별 전종목 파생 리프레시 (date 기수집분 재배치, API 호출 0) | |
| workflow_dispatch: | |
| inputs: | |
| basDt: | |
| description: '기준일자 YYYYMMDD (기본 어제)' | |
| required: false | |
| mode: | |
| description: 'daily=일별 upsert / derive=회사별 전종목 파생' | |
| default: 'daily' | |
| type: choice | |
| options: ['daily', 'derive'] | |
| permissions: | |
| contents: read | |
| # engines.data — 모든 HF push 워크플로우는 단일 그룹으로 직렬화 (sliding-window 429 회피). | |
| concurrency: | |
| group: hf-dataset-push | |
| cancel-in-progress: false | |
| jobs: | |
| build: | |
| runs-on: ubuntu-latest | |
| timeout-minutes: 120 | |
| steps: | |
| - uses: actions/checkout@v6 | |
| - name: Install uv | |
| uses: astral-sh/setup-uv@v7 | |
| - name: Set up Python | |
| run: uv python install 3.12 | |
| - name: Install dependencies | |
| run: uv sync | |
| - name: Restore gov price parquet cache | |
| uses: actions/cache/restore@v5 | |
| with: | |
| path: data/gov/prices | |
| key: dartlab-gov-prices-${{ github.run_id }} | |
| restore-keys: dartlab-gov-prices- | |
| - name: Build gov price parquet + push to HF | |
| env: | |
| DATA_GO_KR_KEY: ${{ secrets.DATA_GO_KR_KEY }} | |
| HF_TOKEN: ${{ secrets.HF_TOKEN }} | |
| run: | | |
| if [ "${{ github.event.schedule }}" = "10 13 * * 6" ] || [ "${{ github.event.inputs.mode }}" = "derive" ]; then | |
| uv run python -X utf8 .github/scripts/sync/buildGovData.py --derive-companies | |
| else | |
| uv run python -X utf8 .github/scripts/sync/buildGovData.py --daily --lookback 4 ${{ github.event.inputs.basDt && format('--basDt {0}', github.event.inputs.basDt) || '' }} | |
| fi | |
| - name: Build prices-snapshot.json + push to HF (daily only) | |
| # date 샤드 upsert 직후 같은 러너 로컬 캐시 재사용 — landing 시세 스냅샷 신선도 동기화. | |
| # derive 분기는 가격 신규 수집이 없으므로 제외. | |
| if: ${{ github.event.schedule != '10 13 * * 6' && github.event.inputs.mode != 'derive' }} | |
| env: | |
| HF_TOKEN: ${{ secrets.HF_TOKEN }} | |
| run: uv run python -X utf8 .github/scripts/prebuild/buildPricesSnapshot.py | |
| - name: Save gov price parquet cache | |
| uses: actions/cache/save@v5 | |
| if: always() | |
| with: | |
| path: data/gov/prices | |
| key: dartlab-gov-prices-${{ github.run_id }} | |
| - name: Summary | |
| if: always() | |
| run: | | |
| echo "## Gov Price Sync (Bulk)" >> $GITHUB_STEP_SUMMARY | |
| echo "" >> $GITHUB_STEP_SUMMARY | |
| echo "| 항목 | 값 |" >> $GITHUB_STEP_SUMMARY | |
| echo "|------|------|" >> $GITHUB_STEP_SUMMARY | |
| echo "| Trigger | ${{ github.event_name }} ${{ github.event.schedule }} |" >> $GITHUB_STEP_SUMMARY | |
| echo "| HF dataset | \`eddmpython/dartlab-data/gov/prices\` |" >> $GITHUB_STEP_SUMMARY | |
| echo "| 출력 | \`gov/prices/date/{YYYY}.parquet\` + \`gov/prices/company/{code}.parquet\` |" >> $GITHUB_STEP_SUMMARY |