-
Notifications
You must be signed in to change notification settings - Fork 0
214 lines (175 loc) · 6.6 KB
/
daily.yml
File metadata and controls
214 lines (175 loc) · 6.6 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
name: The D-AI-LY - Automated Pipeline
on:
# Run daily at 8am Eastern (13:00 UTC)
schedule:
- cron: '0 13 * * *'
# Allow manual trigger
workflow_dispatch:
inputs:
table:
description: 'Specific table number (optional)'
required: false
type: string
dry_run:
description: 'Dry run (discovery only)'
required: false
type: boolean
default: false
env:
NODE_VERSION: '20'
R_VERSION: '4.3'
jobs:
discover-and-fetch:
runs-on: ubuntu-latest
outputs:
selected_table: ${{ steps.discover.outputs.table }}
has_update: ${{ steps.discover.outputs.has_update }}
steps:
- name: Checkout repository
uses: actions/checkout@v4
- name: Setup R
uses: r-lib/actions/setup-r@v2
with:
r-version: ${{ env.R_VERSION }}
- name: Install R dependencies
run: |
install.packages(c("cansim", "dplyr", "tidyr", "jsonlite"), repos = "https://cloud.r-project.org")
shell: Rscript {0}
- name: Run discovery
id: discover
run: |
mkdir -p output
if [ -n "${{ github.event.inputs.table }}" ]; then
echo "Using specified table: ${{ github.event.inputs.table }}"
echo "table=${{ github.event.inputs.table }}" >> $GITHUB_OUTPUT
echo "has_update=true" >> $GITHUB_OUTPUT
else
echo "Running topic discovery..."
Rscript r-tools/discover_topics.R --configured --json --output=output
if [ -f output/discovery_results.json ]; then
TABLE=$(python3 -c "
import json
with open('output/discovery_results.json') as f:
data = json.load(f)
if data.get('recommendation'):
print(data['recommendation']['table_number'])
")
if [ -n "$TABLE" ]; then
echo "table=$TABLE" >> $GITHUB_OUTPUT
echo "has_update=true" >> $GITHUB_OUTPUT
echo "Recommended table: $TABLE"
else
echo "has_update=false" >> $GITHUB_OUTPUT
echo "No newsworthy updates found"
fi
else
echo "has_update=false" >> $GITHUB_OUTPUT
fi
fi
- name: Fetch table data
if: steps.discover.outputs.has_update == 'true' && github.event.inputs.dry_run != 'true'
run: |
TABLE="${{ steps.discover.outputs.table }}"
echo "Fetching data for table: $TABLE"
Rscript r-tools/fetch_table.R "$TABLE" output
- name: Upload data artifact
if: steps.discover.outputs.has_update == 'true' && github.event.inputs.dry_run != 'true'
uses: actions/upload-artifact@v4
with:
name: cansim-data
path: output/
retention-days: 7
create-issue:
needs: discover-and-fetch
if: needs.discover-and-fetch.outputs.has_update == 'true' && github.event.inputs.dry_run != 'true'
runs-on: ubuntu-latest
steps:
- name: Checkout repository
uses: actions/checkout@v4
- name: Download data artifact
uses: actions/download-artifact@v4
with:
name: cansim-data
path: output/
- name: Get table info
id: table_info
run: |
TABLE="${{ needs.discover-and-fetch.outputs.selected_table }}"
# Extract title from discovery results
if [ -f output/discovery_results.json ]; then
TITLE=$(python3 -c "
import json
with open('output/discovery_results.json') as f:
data = json.load(f)
if data.get('recommendation'):
print(data['recommendation'].get('title', 'Unknown'))
")
else
TITLE="Unknown"
fi
echo "table=$TABLE" >> $GITHUB_OUTPUT
echo "title=$TITLE" >> $GITHUB_OUTPUT
- name: Create GitHub Issue for manual generation
uses: actions/github-script@v7
with:
script: |
const table = '${{ steps.table_info.outputs.table }}';
const title = '${{ steps.table_info.outputs.title }}';
const date = new Date().toISOString().split('T')[0];
const issueTitle = `[D-AI-LY] Generate article for ${table} - ${date}`;
const issueBody = `## The D-AI-LY - Article Generation Required
**Date:** ${date}
**Table:** ${table}
**Title:** ${title}
### Data Ready
The discovery and data fetch steps completed successfully. The data artifact is attached to the workflow run.
### To Generate the Article
Run Claude Code locally with:
\`\`\`bash
# Navigate to the project
cd ~/Projects/the-daily
# Pull latest changes (includes data files)
git pull
# Run the generator
claude "/the-daily-generator ${table}"
# Or run the full pipeline
./automation/run_pipeline.sh --table=${table}
\`\`\`
### Why Manual?
This workflow creates an issue instead of generating automatically because:
- Article generation uses Claude Code via Max subscription (no API costs)
- Generation runs locally on your machine
### Workflow Run
[View workflow run](https://github.com/${{ github.repository }}/actions/runs/${{ github.run_id }})
---
*This issue was automatically created by the D-AI-LY pipeline.*
`;
await github.rest.issues.create({
owner: context.repo.owner,
repo: context.repo.repo,
title: issueTitle,
body: issueBody,
labels: ['d-ai-ly', 'automation']
});
notify:
needs: [discover-and-fetch, create-issue]
if: always()
runs-on: ubuntu-latest
steps:
- name: Summary
run: |
echo "## D-AI-LY Pipeline Summary" >> $GITHUB_STEP_SUMMARY
echo "" >> $GITHUB_STEP_SUMMARY
echo "- **Date**: $(date '+%Y-%m-%d %H:%M:%S UTC')" >> $GITHUB_STEP_SUMMARY
echo "- **Selected Table**: ${{ needs.discover-and-fetch.outputs.selected_table || 'None' }}" >> $GITHUB_STEP_SUMMARY
echo "- **Has Update**: ${{ needs.discover-and-fetch.outputs.has_update }}" >> $GITHUB_STEP_SUMMARY
echo "" >> $GITHUB_STEP_SUMMARY
if [ "${{ needs.create-issue.result }}" == "success" ]; then
echo "✅ Data fetched and issue created for manual generation." >> $GITHUB_STEP_SUMMARY
echo "" >> $GITHUB_STEP_SUMMARY
echo "Check GitHub Issues for generation instructions." >> $GITHUB_STEP_SUMMARY
elif [ "${{ needs.discover-and-fetch.outputs.has_update }}" == "false" ]; then
echo "ℹ️ No newsworthy updates found today." >> $GITHUB_STEP_SUMMARY
else
echo "⚠️ Pipeline completed with status: ${{ needs.create-issue.result }}" >> $GITHUB_STEP_SUMMARY
fi