Skip to content

Update Pantry

Update Pantry #2

Workflow file for this run

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"