// 업종별 — 그대로 따라가는 시나리오
SaaS 스타트업 — 주간 번/런웨이 Slack
매주 월요일 09:00 KST 팀 재무 슬랙에 한 줄 — 지난 주 net 캐시 변화, 누적 번, 남은 runway.
이런 분께 — 주간 캐시 흐름을 슬랙 한 채널에서 보고 싶은 스타트업 재무·운영.
📊 주간 캐시 · 2026-W18 Net 변화 -8,420,000 (입금 +24M / 출금 -32M) 누적 번(4주 평균) -7.6M/wk · runway 약 7.8개월
01사전 점검
아래 명령을 그대로 붙여넣어 지금 내 환경이 준비됐는지 확인한다.
repo secret H6S_API_KEY 가 등록돼 있다
gh secret list목록에 H6S_API_KEY 가 보인다
아니면 —
gh secret set H6S_API_KEY # 또는 repo Settings → Secrets워크스페이스에 대상 자격증명이 있다
h6s credentials list그 기관에 매칭되는 자격증명이 1건 이상 보인다
아니면 —
h6s credentials create --interactive --certSlack 봇 토큰·채널 + 운영 잔액 변수
repo Settings → Secrets(SLACK_BOT_TOKEN) · Variables(SLACK_CHANNEL_ID, SAAS_OPERATING_BALANCE)세 값이 모두 등록됨
아니면 —
Slack 봇 토큰 발급 + 채널 ID, 운영 잔액을 variable 로 매주 갱신(또는 잔액 fetch step 추가).
02실행
아래 파일을 .github/workflows/ 에 저장하고 기본 브랜치에 commit. 첫 검증은 Actions 탭 → Run workflow 로 수동 트리거.
# 매주 월요일 09:00 KST 에 지난 주 net 캐시 변화를 지정한 슬랙 채널에 한 줄로.
# 4주 평균 번과 추정 runway 까지 같이.
# 잔액 추정은 vars.SAAS_OPERATING_BALANCE 에 운영자가 매주 입력 (또는 추가 step 으로 잔액 fetch).
name: SaaS 주간 번/런웨이 Slack
on:
schedule:
- cron: '0 0 * * 1' # 매주 월요일 00:00 UTC (KST 09:00)
workflow_dispatch: {}
jobs:
cashflow:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v6
- id: prev-week
run: |
MON=$(date -u -d 'last monday -7 days' +%Y-%m-%d)
SUN=$(date -u -d "$MON +6 days" +%Y-%m-%d)
WEEK=$(date -u -d "$MON" +%G-W%V)
echo "mon=${MON}" >> "$GITHUB_OUTPUT"
echo "sun=${SUN}" >> "$GITHUB_OUTPUT"
echo "week=${WEEK}" >> "$GITHUB_OUTPUT"
- id: fetch
uses: bolta-io/h6s-action@v0
with:
api-key: ${{ secrets.H6S_API_KEY }}
schema: bank.transactions.cb.v1
provider: CB_KB
from: ${{ steps.prev-week.outputs.mon }}
to: ${{ steps.prev-week.outputs.sun }}
- name: net/번/runway 계산
id: cashflow
run: |
# 호출자 repo 의 scripts/saas-cashflow.mjs 로 위임.
# 출력: net_change, weekly_burn_4w_avg, runway_months
node scripts/saas-cashflow.mjs \
--bank ${{ steps.fetch.outputs.path }} \
--balance ${{ vars.SAAS_OPERATING_BALANCE }} \
>> "$GITHUB_OUTPUT"
- name: Slack 알림
if: success()
uses: slackapi/slack-github-action@v1
with:
channel-id: ${{ vars.SLACK_CHANNEL_ID }}
slack-message: |
📊 주간 캐시 · ${{ steps.prev-week.outputs.week }}
Net 변화 ${{ steps.cashflow.outputs.net_change }}
누적 번(4주 평균) ${{ steps.cashflow.outputs.weekly_burn_4w_avg }} · runway 약 ${{ steps.cashflow.outputs.runway_months }}개월
env:
SLACK_BOT_TOKEN: ${{ secrets.SLACK_BOT_TOKEN }}
- name: Slack 실패 알림
if: failure()
uses: slackapi/slack-github-action@v1
with:
channel-id: ${{ vars.SLACK_CHANNEL_ID }}
slack-message: |
❌ 주간 캐시 수집 실패 — ${{ github.server_url }}/${{ github.repository }}/actions/runs/${{ github.run_id }}
env:
SLACK_BOT_TOKEN: ${{ secrets.SLACK_BOT_TOKEN }}운영 잔액은 vars.SAAS_OPERATING_BALANCE 로 매주 입력하거나, 잔액 fetch step(bank.accounts.cb.v1)을 앞에 붙여 자동화.
03검증
- 월요일 슬랙에 net 변화 · 4주 평균 번 · 추정 runway 한 줄이 온다.
- 수집 실패 시 실패 알림이 같은 채널에 온다.
04흔한 에러
fetch step 에서 NO_API_KEY 로 실패secret 이름이 yml 의 secrets.H6S_API_KEY 와 다르다.
해결 secret 을 정확히 H6S_API_KEY 로 등록.
CREDENTIAL_INSUFFICIENT_FOR_PROVIDER그 provider 에 매칭되는 자격증명이 워크스페이스에 없다.
해결 h6s credentials create --interactive --cert (공동인증서 1개로 전 기관 공용).
cron 시간이 지나도 안 돈다yml 이 기본 브랜치에 없거나, repo 가 60일 비활성이라 scheduled workflow 가 멈췄다.
해결 기본 브랜치에 머지하고, 가끔 수동 트리거해 활성 유지.
cashflow step 에서 scripts/saas-cashflow.mjs not found호출자 repo 에 계산 스크립트가 없다(샘플 위임).
해결 repo 에 scripts/saas-cashflow.mjs 추가(net/번/runway 계산).
05변형
같은 사례에서 자주 바꾸는 옵션. 다른 사례는 아래 이전/다음에서.
잔액도 자동 수집
- uses: bolta-io/h6s-action@v0
with:
api-key: ${{ secrets.H6S_API_KEY }}
schema: bank.accounts.cb.v1
provider: CB_KB