data.table 1.15.4 initial #6
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: 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) | |
MIN_SIZE=$(du -h ./${{ env.PACKAGE }}_${{ env.VERSION }}_minified.tar.gz | cut -f1) | |
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="✅ 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="✅ 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 |