Skip to content

Caching in autocomment-atime-results #8

Caching in autocomment-atime-results

Caching in autocomment-atime-results #8

Workflow file for this run

name: R Package Size Optimization Workflow
on:
issues:
types: [opened]
jobs:
package-optimization:
runs-on: ubuntu-latest
steps:
# Step 1: Checkout the repository
- name: Checkout source code
uses: actions/checkout@v3
# Step 2: Parse package metadata from issue
- name: Parse package metadata from issue
id: parse-description
run: |
DESCRIPTION='${{ github.event.issue.body }}'
PACKAGE=$(echo "$DESCRIPTION" | jq -r '.package')
VERSION=$(echo "$DESCRIPTION" | jq -r '.version')
echo "PACKAGE=$PACKAGE" >> $GITHUB_ENV
echo "VERSION=$VERSION" >> $GITHUB_ENV
# Step 3: Setup R runtime environment
- name: Setup R runtime environment
uses: r-lib/actions/setup-r@v2
# Step 4: Check if a cached artifact already exists
- name: Query existing optimized package
id: check-artifact
run: |
ARTIFACT_INFO=$(gh api /repos/${{ github.repository }}/actions/artifacts --jq '.artifacts[] | select(.name=="${{ env.PACKAGE }}-${{ env.VERSION }}") | {id: .id, run_id: .workflow_run.id}')
ARTIFACT_ID=$(echo "$ARTIFACT_INFO" | jq -r '.id')
RUN_ID=$(echo "$ARTIFACT_INFO" | jq -r '.run_id')
echo "ARTIFACT_ID=$ARTIFACT_ID" >> $GITHUB_ENV
echo "RUN_ID=$RUN_ID" >> $GITHUB_ENV
env:
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
# Step 5: Retrieve and install the cached artifact if it exists
- name: Retrieve cached optimized package
if: env.ARTIFACT_ID != ''
uses: actions/download-artifact@v4
with:
name: ${{ env.PACKAGE }}-${{ env.VERSION }}
run-id: ${{ env.RUN_ID }}
github-token: ${{ secrets.GITHUB_TOKEN }}
path: .
- name: Install cached optimized package
if: env.ARTIFACT_ID != ''
run: R CMD INSTALL ${{ env.PACKAGE }}_${{ env.VERSION }}_minified.tar.gz
# Step 6: Generate and install an optimized package if no cache exists
- name: Start timer
run: echo "START_TIME=$(date +%s)" >> $GITHUB_ENV
- name: Generate and install optimized package
if: env.ARTIFACT_ID == ''
run: |
# Fetch package and run minification
.github/scripts/minify.sh
# Log original and minified sizes
ORIG_SIZE=$(du -h ./${{ env.PACKAGE }}_${{ env.VERSION }}.tar.gz | cut -f1 | sed 's/M$/MB/; s/K$/KB/')
MIN_SIZE=$(du -h ./${{ env.PACKAGE }}_${{ env.VERSION }}_minified.tar.gz | cut -f1 | sed 's/M$/MB/; s/K$/KB/')
echo "ORIG_SIZE=$ORIG_SIZE" >> $GITHUB_ENV
echo "MIN_SIZE=$MIN_SIZE" >> $GITHUB_ENV
# Install optimized package
R CMD INSTALL ./${{ env.PACKAGE }}_${{ env.VERSION }}_minified.tar.gz
# Step 7: Archive the newly optimized package
- name: Archive optimized package
if: env.ARTIFACT_ID == ''
uses: actions/upload-artifact@v4
with:
name: ${{ env.PACKAGE }}-${{ env.VERSION }}
path: ./${{ env.PACKAGE }}_${{ env.VERSION }}_minified.tar.gz
retention-days: 90
- name: End timer and log duration
run: |
END_TIME=$(date +%s)
DURATION=$((END_TIME - START_TIME))
echo "DURATION=$DURATION" >> $GITHUB_ENV
DISK_SPACE=$(du -sh ./${{ env.PACKAGE }}_${{ env.VERSION }}_minified.tar.gz | cut -f1)
echo "DISK_SPACE=$DISK_SPACE" >> $GITHUB_ENV
# Step 8: Log optimization results
- name: Report optimization results
run: |
if [[ -n "$ORIG_SIZE" ]]; then
COMMENT="[SUCCESS] Package optimized successfully!<br>Original size: $ORIG_SIZE<br>Optimized size: $MIN_SIZE<br>Time taken: $DURATION seconds<br>Disk space used: $DISK_SPACE"
else
COMMENT="[SUCCESS] Package installed from cache."
fi
gh issue comment ${{ github.event.issue.number }} --body "$COMMENT"
env:
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
- name: Simulate CI runs and observe caching
run: |
echo "Simulating CI run for caching demonstration..."
if [ -n "${{ env.ARTIFACT_ID }}" ]; then
echo "Cache hit for ${{ env.PACKAGE }}_${{ env.VERSION }}."
else
echo "Cache miss for ${{ env.PACKAGE }}_${{ env.VERSION }}."
fi