Skip to content

Commit 54414af

Browse files
marcarlclaude
andcommitted
Add git-export-workflow for weekly SFS data export to se-lex/sfs repo
Implements a simple weekly workflow that exports SFS data to the se-lex/sfs git repository. Features: - Weekly schedule (Sunday 03:00 UTC) or manual trigger - Two export modes: - "changed": Export only files modified in last 7 days (incremental) - "all": Export all files or filtered by year range (full rebuild) - Auto-generates dated branch names (export-YYYY-MM-DD) - Includes both initial commits (utfärdad datum) and temporal commits (ikraft/upphör) - Uses existing GIT_GITHUB_PAT secret for authentication - Reads data from workflow-artifact-data branch Usage: - Automatic: Runs weekly to export new/changed files - Manual: Actions tab → Run workflow → Choose export mode Target: se-lex/sfs repository (configured via GIT_TARGET_REPO env var) 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
1 parent 08903e3 commit 54414af

1 file changed

Lines changed: 233 additions & 0 deletions

File tree

Lines changed: 233 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,233 @@
1+
name: Exportera SFS-data till Git Repository
2+
3+
on:
4+
schedule:
5+
# Kör varje söndag kl 03:00 UTC (veckovis export)
6+
- cron: '0 3 * * 0'
7+
workflow_dispatch: # Tillåter manuell körning
8+
inputs:
9+
export_mode:
10+
description: 'Export-läge: "all" = alla filer, "changed" = bara nya/ändrade sedan senaste veckan'
11+
required: false
12+
default: 'changed'
13+
type: choice
14+
options:
15+
- changed
16+
- all
17+
years:
18+
description: 'År-intervall att exportera (t.ex. "2024-2026" eller "2024"). Används bara i "all"-läge.'
19+
required: false
20+
type: string
21+
branch_name:
22+
description: 'Git branch namn (lämna tom för auto-genererad med datum)'
23+
required: false
24+
type: string
25+
batch_size:
26+
description: 'Antal filer per batch'
27+
required: false
28+
default: '100'
29+
type: string
30+
skip_initial:
31+
description: 'Hoppa över initial commits (bara temporal)'
32+
required: false
33+
default: false
34+
type: boolean
35+
skip_temporal:
36+
description: 'Hoppa över temporal commits (bara initial)'
37+
required: false
38+
default: false
39+
type: boolean
40+
41+
permissions:
42+
contents: read
43+
44+
jobs:
45+
export-to-git:
46+
runs-on: ubuntu-latest
47+
48+
steps:
49+
- name: Checkout workflow-artifact-data branch
50+
uses: actions/checkout@v4
51+
with:
52+
ref: workflow-artifact-data
53+
fetch-depth: 0 # Hämta full historik för git operationer
54+
token: ${{ secrets.GITHUB_TOKEN }}
55+
56+
- name: Set up Python
57+
uses: actions/setup-python@v4
58+
with:
59+
python-version: '3.11'
60+
61+
- name: Install dependencies
62+
run: |
63+
python -m pip install --upgrade pip
64+
pip install -r requirements.txt
65+
66+
- name: Verify data directories exist
67+
run: |
68+
if [ ! -d "data/sfs_json" ]; then
69+
echo "❌ Fel: data/sfs_json katalog finns inte"
70+
exit 1
71+
fi
72+
if [ ! -d "data/md-markers" ]; then
73+
echo "❌ Fel: data/md-markers katalog finns inte"
74+
exit 1
75+
fi
76+
77+
JSON_COUNT=$(find data/sfs_json -name "*.json" | wc -l)
78+
MD_COUNT=$(find data/md-markers -name "*.md" | wc -l)
79+
80+
echo "✅ Hittade $JSON_COUNT JSON-filer"
81+
echo "✅ Hittade $MD_COUNT Markdown-filer"
82+
83+
if [ "$JSON_COUNT" -eq 0 ]; then
84+
echo "❌ Inga JSON-filer att exportera"
85+
exit 1
86+
fi
87+
88+
- name: Determine export filter
89+
id: export_filter
90+
run: |
91+
EXPORT_MODE="${{ inputs.export_mode || 'changed' }}"
92+
echo "📋 Export-läge: $EXPORT_MODE"
93+
94+
if [ "$EXPORT_MODE" = "all" ]; then
95+
# Exportera alla filer (eller filtrera på år om specificerat)
96+
if [ -n "${{ inputs.years }}" ]; then
97+
echo "📅 Exporterar alla filer för år: ${{ inputs.years }}"
98+
echo "filter=${{ inputs.years }}" >> $GITHUB_OUTPUT
99+
echo "filter_type=years" >> $GITHUB_OUTPUT
100+
else
101+
echo "📚 Exporterar ALLA filer (ingen filtrering)"
102+
echo "filter=" >> $GITHUB_OUTPUT
103+
echo "filter_type=none" >> $GITHUB_OUTPUT
104+
fi
105+
else
106+
# Exportera bara nya/ändrade filer sedan senaste veckan
107+
SINCE_DATE=$(date -u -d '7 days ago' +'%Y-%m-%d')
108+
echo "🔍 Letar efter filer ändrade sedan: $SINCE_DATE"
109+
110+
# Hämta lista på ändrade JSON-filer från git log
111+
CHANGED_FILES=$(git log --since="$SINCE_DATE" --name-only --pretty=format: --diff-filter=AM -- data/sfs_json/ | grep -E '\.json$' | sort -u || true)
112+
113+
if [ -z "$CHANGED_FILES" ]; then
114+
echo "⚠️ Inga nya/ändrade filer hittades sedan $SINCE_DATE"
115+
echo "changed_count=0" >> $GITHUB_OUTPUT
116+
echo "filter=" >> $GITHUB_OUTPUT
117+
echo "filter_type=none" >> $GITHUB_OUTPUT
118+
exit 0
119+
else
120+
# Räkna antal ändrade filer
121+
CHANGED_COUNT=$(echo "$CHANGED_FILES" | wc -l | tr -d ' ')
122+
echo "✅ Hittade $CHANGED_COUNT nya/ändrade filer"
123+
124+
# Extrahera beteckningar från filnamn (sfs-YYYY-NNN.json -> YYYY:NNN)
125+
BETECKNINGAR=""
126+
while IFS= read -r file; do
127+
if [[ $file =~ sfs-([0-9]{4})-([0-9]+)\.json ]]; then
128+
BETECKNING="${BASH_REMATCH[1]}:${BASH_REMATCH[2]}"
129+
if [ -z "$BETECKNINGAR" ]; then
130+
BETECKNINGAR="$BETECKNING"
131+
else
132+
BETECKNINGAR="$BETECKNINGAR,$BETECKNING"
133+
fi
134+
fi
135+
done <<< "$CHANGED_FILES"
136+
137+
echo "📋 Filter för ändrade dokument: $BETECKNINGAR"
138+
echo "changed_count=$CHANGED_COUNT" >> $GITHUB_OUTPUT
139+
echo "filter=$BETECKNINGAR" >> $GITHUB_OUTPUT
140+
echo "filter_type=beteckningar" >> $GITHUB_OUTPUT
141+
142+
# Spara lista för debugging
143+
echo ""
144+
echo "Ändrade filer:"
145+
echo "$CHANGED_FILES"
146+
fi
147+
fi
148+
149+
- name: Determine branch name
150+
id: branch
151+
run: |
152+
if [ -n "${{ inputs.branch_name }}" ]; then
153+
BRANCH_NAME="${{ inputs.branch_name }}"
154+
else
155+
# Auto-generera branch namn med datum
156+
BRANCH_NAME="export-$(date +'%Y-%m-%d')"
157+
fi
158+
echo "branch_name=${BRANCH_NAME}" >> $GITHUB_OUTPUT
159+
echo "📋 Använder branch: ${BRANCH_NAME}"
160+
161+
- name: Export to Git repository
162+
# Skippa om inga ändrade filer i "changed" mode
163+
if: steps.export_filter.outputs.filter_type != 'none' || steps.export_filter.outputs.changed_count != '0'
164+
env:
165+
GIT_GITHUB_PAT: ${{ secrets.GIT_GITHUB_PAT }}
166+
PYTHONPATH: ${{ github.workspace }}
167+
run: |
168+
# Bygg kommando med parametrar
169+
CMD="python exporters/git/batch_export_to_git.py"
170+
CMD="$CMD --input data/sfs_json"
171+
CMD="$CMD --markers-dir data/md-markers"
172+
CMD="$CMD --branch ${{ steps.branch.outputs.branch_name }}"
173+
CMD="$CMD --batch-size ${{ inputs.batch_size || '100' }}"
174+
CMD="$CMD --verbose"
175+
176+
# Lägg till filter baserat på export-läge
177+
FILTER="${{ steps.export_filter.outputs.filter }}"
178+
FILTER_TYPE="${{ steps.export_filter.outputs.filter_type }}"
179+
180+
if [ -n "$FILTER" ]; then
181+
if [ "$FILTER_TYPE" = "years" ]; then
182+
CMD="$CMD --years $FILTER"
183+
echo "📅 Filtrerar för år: $FILTER"
184+
elif [ "$FILTER_TYPE" = "beteckningar" ]; then
185+
CMD="$CMD --filter $FILTER"
186+
echo "📋 Filtrerar för beteckningar: $FILTER"
187+
fi
188+
fi
189+
190+
# Lägg till skip flags om specificerade
191+
if [ "${{ inputs.skip_initial }}" = "true" ]; then
192+
CMD="$CMD --skip-initial"
193+
echo "⏭️ Hoppar över initial commits"
194+
fi
195+
196+
if [ "${{ inputs.skip_temporal }}" = "true" ]; then
197+
CMD="$CMD --skip-temporal"
198+
echo "⏭️ Hoppar över temporal commits"
199+
fi
200+
201+
echo "Kör: $CMD"
202+
echo ""
203+
204+
# Kör export
205+
eval $CMD
206+
207+
- name: No files to export
208+
if: steps.export_filter.outputs.changed_count == '0' && inputs.export_mode == 'changed'
209+
run: |
210+
echo "ℹ️ Inga nya/ändrade filer att exportera sedan senaste veckan"
211+
echo "Körningen avslutas utan fel"
212+
213+
- name: Export summary
214+
if: success()
215+
run: |
216+
echo "✅ Git export slutförd!"
217+
echo "Branch: ${{ steps.branch.outputs.branch_name }}"
218+
echo "Target repo: se-lex/sfs (konfigurerat via GIT_TARGET_REPO env var)"
219+
echo ""
220+
echo "Nästa steg:"
221+
echo "1. Gå till se-lex/sfs repository"
222+
echo "2. Skapa Pull Request från branch '${{ steps.branch.outputs.branch_name }}'"
223+
echo "3. Granska och merga till main"
224+
225+
- name: Export failed
226+
if: failure()
227+
run: |
228+
echo "❌ Git export misslyckades!"
229+
echo "Kontrollera:"
230+
echo "1. GIT_GITHUB_PAT secret är korrekt konfigurerad"
231+
echo "2. PAT har skrivrättigheter till target repository"
232+
echo "3. Data finns i workflow-artifact-data branch"
233+
echo "4. Loggar ovan för feldetaljer"

0 commit comments

Comments
 (0)