Update Pantry #2
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: Update Pantry | |
on: | |
schedule: | |
# Run daily at 2 AM UTC to update the pantry | |
- cron: '0 2 * * *' | |
workflow_dispatch: | |
jobs: | |
update-pantry: | |
name: Update pantry data | |
runs-on: ubuntu-latest | |
permissions: | |
contents: write # Needed to push changes | |
steps: | |
- name: Debug workflow trigger | |
run: | | |
echo "=== Pantry Update Workflow Debug Information ===" | |
echo "Event name: ${{ github.event_name }}" | |
echo "Repository: ${{ github.repository }}" | |
echo "Ref: ${{ github.ref }}" | |
echo "SHA: ${{ github.sha }}" | |
echo "Actor: ${{ github.actor }}" | |
echo "Workflow: ${{ github.workflow }}" | |
echo "Job: ${{ github.job }}" | |
echo "Run ID: ${{ github.run_id }}" | |
echo "Run number: ${{ github.run_number }}" | |
echo "Current time: $(date)" | |
echo "==================================================" | |
- name: Checkout repository | |
uses: actions/checkout@v4 | |
with: | |
token: ${{ secrets.GITHUB_TOKEN || github.token }} | |
fetch-depth: 0 | |
- name: Setup Bun | |
uses: oven-sh/setup-bun@v2 | |
with: | |
bun-version: latest | |
- name: Install dependencies | |
run: bun install | |
- name: Show initial git status | |
run: | | |
echo "=== Initial Git Status ===" | |
git status --porcelain | |
echo "=== End Initial Git Status ===" | |
- name: Update pantry | |
id: update-pantry | |
run: | | |
echo "Starting pantry update..." | |
# Run the pantry update command | |
if bun bin/cli.ts update-pantry; then | |
echo "Pantry update completed successfully" | |
UPDATE_SUCCESS=true | |
else | |
PANTRY_EXIT_CODE=$? | |
echo "Pantry update failed with exit code: $PANTRY_EXIT_CODE" | |
UPDATE_SUCCESS=false | |
fi | |
# Check what changed | |
CHANGED_FILES=$(git status --porcelain src/pantry/ | wc -l) | |
CHANGED_CONSTS=$(git status --porcelain src/consts.ts | wc -l) | |
TOTAL_CHANGES=$((CHANGED_FILES + CHANGED_CONSTS)) | |
echo "Pantry files changed: $CHANGED_FILES" | |
echo "Consts file changed: $CHANGED_CONSTS" | |
echo "Total changes: $TOTAL_CHANGES" | |
# Set outputs | |
echo "success=$UPDATE_SUCCESS" >> $GITHUB_OUTPUT | |
echo "total_changes=$TOTAL_CHANGES" >> $GITHUB_OUTPUT | |
echo "pantry_files_changed=$CHANGED_FILES" >> $GITHUB_OUTPUT | |
echo "consts_changed=$CHANGED_CONSTS" >> $GITHUB_OUTPUT | |
timeout-minutes: 10 | |
- name: Update consts file | |
if: steps.update-pantry.outputs.success == 'true' | |
run: | | |
echo "Updating consts.ts with new pantry data..." | |
bun bin/cli.ts generate-consts --source pantry | |
timeout-minutes: 5 | |
- name: Show git status after pantry update | |
run: | | |
echo "=== Git Status After Pantry Update ===" | |
git status --porcelain | |
echo "=== End Git Status After Pantry Update ===" | |
- name: Generate commit message | |
id: commit-message | |
run: | | |
UPDATE_SUCCESS="${{ steps.update-pantry.outputs.success }}" | |
TOTAL_CHANGES="${{ steps.update-pantry.outputs.total_changes }}" | |
PANTRY_FILES_CHANGED="${{ steps.update-pantry.outputs.pantry_files_changed }}" | |
CONSTS_CHANGED="${{ steps.update-pantry.outputs.consts_changed }}" | |
echo "Update success: $UPDATE_SUCCESS" | |
echo "Total changes: $TOTAL_CHANGES" | |
echo "Pantry files changed: $PANTRY_FILES_CHANGED" | |
echo "Consts changed: $CONSTS_CHANGED" | |
if [ "$UPDATE_SUCCESS" != "true" ]; then | |
echo "Pantry update was not successful, skipping commit" | |
echo "commit_message=chore: pantry update failed" >> $GITHUB_OUTPUT | |
echo "should_commit=false" >> $GITHUB_OUTPUT | |
exit 0 | |
fi | |
if [ "$TOTAL_CHANGES" -eq 0 ]; then | |
echo "No changes detected in pantry or consts" | |
echo "commit_message=chore: pantry update (no changes)" >> $GITHUB_OUTPUT | |
echo "should_commit=false" >> $GITHUB_OUTPUT | |
else | |
# Generate appropriate commit message based on what changed | |
if [ "$PANTRY_FILES_CHANGED" -gt 0 ] && [ "$CONSTS_CHANGED" -gt 0 ]; then | |
echo "commit_message=chore: update pantry data and package constants" >> $GITHUB_OUTPUT | |
elif [ "$PANTRY_FILES_CHANGED" -gt 0 ]; then | |
echo "commit_message=chore: update pantry data ($PANTRY_FILES_CHANGED files)" >> $GITHUB_OUTPUT | |
elif [ "$CONSTS_CHANGED" -gt 0 ]; then | |
echo "commit_message=chore: update package constants" >> $GITHUB_OUTPUT | |
else | |
echo "commit_message=chore: update pantry data" >> $GITHUB_OUTPUT | |
fi | |
echo "should_commit=true" >> $GITHUB_OUTPUT | |
fi | |
- name: Check for changes | |
id: git-check | |
run: | | |
# Show git status for debugging | |
echo "Git status:" | |
git status --porcelain | |
# Check for changes in pantry or consts | |
CHANGES=$(git status --porcelain src/pantry/ src/consts.ts 2>/dev/null || echo "") | |
if [[ -z "$CHANGES" ]]; then | |
echo "No changes detected in src/pantry/ or src/consts.ts" | |
echo "changes=false" >> $GITHUB_OUTPUT | |
else | |
echo "Changes detected:" | |
echo "$CHANGES" | |
echo "changes=true" >> $GITHUB_OUTPUT | |
fi | |
- name: Commit and push changes | |
if: steps.git-check.outputs.changes == 'true' && steps.commit-message.outputs.should_commit == 'true' | |
run: | | |
SHOULD_COMMIT="${{ steps.commit-message.outputs.should_commit }}" | |
echo "Should commit based on pantry updates: $SHOULD_COMMIT" | |
echo "Git changes detected: ${{ steps.git-check.outputs.changes }}" | |
# Configure git for the action | |
if [ -n "${{ secrets.PAT_TOKEN }}" ]; then | |
echo "Using PAT token to trigger subsequent workflows" | |
git config --global user.name "chrisbbreuer" | |
git config --global user.email "chrisbreuer93@gmail.com" | |
git remote set-url origin https://x-access-token:${{ secrets.PAT_TOKEN }}@github.com/${{ github.repository }}.git | |
else | |
echo "Using default GitHub token (subsequent workflows may not trigger)" | |
git config --global user.name "github-actions[bot]" | |
git config --global user.email "41898282+github-actions[bot]@users.noreply.github.com" | |
fi | |
# Add and commit changes | |
git add src/pantry/ src/consts.ts | |
git commit -m "${{ steps.commit-message.outputs.commit_message }}" -m "Automated pantry update via GitHub Actions workflow" | |
# Push changes | |
git push origin main | |
echo "Successfully committed and pushed pantry changes" |