Skip to content

feat: migrate from brew to zerobrew mise backend #73

feat: migrate from brew to zerobrew mise backend

feat: migrate from brew to zerobrew mise backend #73

Workflow file for this run

# Build the Docker image on pull requests and report its size,
# compared against the base branch (main) when relevant files change.
name: PR build
on:
workflow_dispatch:
pull_request:
permissions:
contents: read
pull-requests: write
jobs:
build:
name: Build and report size
runs-on: ubuntu-latest
steps:
- name: Checkout PR head
uses: actions/checkout@v4
with:
path: head
ref: ${{ github.head_ref || '' }}
- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v3
- name: Read version
id: version
run: |
VERSION=$(cat head/version.txt | tr -d '[:space:]')
echo "version=${VERSION}" >> "$GITHUB_OUTPUT"
- name: Build PR image
uses: docker/build-push-action@v6
with:
context: head
load: true
build-args: OPENCODE_VERSION=${{ steps.version.outputs.version }}
tags: sprisa/opencode:pr-${{ github.event.number || 'manual' }}
- name: Record PR size
id: pr-size
run: |
echo "human=$(docker images sprisa/opencode:pr-${{ github.event.number || 'manual' }} --format '{{.Size}}')" >> "$GITHUB_OUTPUT"
echo "bytes=$(docker image inspect sprisa/opencode:pr-${{ github.event.number || 'manual' }} --format '{{.Size}}')" >> "$GITHUB_OUTPUT"
- name: Check if image-relevant files changed
id: check-diff
if: github.event_name == 'pull_request'
run: |
git -C head fetch origin "${{ github.base_ref }}" --depth=1
CHANGED=$(git -C head diff "origin/${{ github.base_ref }}" HEAD --name-only -- Dockerfile version.txt entrypoint.sh)
if [ -n "$CHANGED" ]; then
echo "changed=true" >> "$GITHUB_OUTPUT"
echo "files=$CHANGED" >> "$GITHUB_OUTPUT"
else
echo "changed=false" >> "$GITHUB_OUTPUT"
fi
- name: Checkout base branch (baseline)
if: steps.check-diff.outputs.changed == 'true'
uses: actions/checkout@v4
with:
ref: ${{ github.base_ref }}
path: baseline
- name: Build baseline image
if: steps.check-diff.outputs.changed == 'true'
uses: docker/build-push-action@v6
with:
context: baseline
load: true
build-args: OPENCODE_VERSION=${{ steps.version.outputs.version }}
tags: sprisa/opencode:baseline
- name: Record baseline size
if: steps.check-diff.outputs.changed == 'true'
id: baseline-size
run: |
echo "human=$(docker images sprisa/opencode:baseline --format '{{.Size}}')" >> "$GITHUB_OUTPUT"
echo "bytes=$(docker image inspect sprisa/opencode:baseline --format '{{.Size}}')" >> "$GITHUB_OUTPUT"
- name: Report image size
id: compare
run: |
PR_NUM="${{ github.event.number }}"
TAG="pr-${PR_NUM:-manual}"
PR_HUMAN="${{ steps.pr-size.outputs.human }}"
PR_BYTES=${{ steps.pr-size.outputs.bytes }}
if [ "${{ steps.check-diff.outputs.changed }}" = "true" ]; then
BASELINE_HUMAN="${{ steps.baseline-size.outputs.human }}"
BASELINE_BYTES=${{ steps.baseline-size.outputs.bytes }}
DIFF_BYTES=$(( PR_BYTES - BASELINE_BYTES ))
if [ "$DIFF_BYTES" -gt 0 ]; then
SIGN="+"
ABS_DIFF=$DIFF_BYTES
else
SIGN=""
ABS_DIFF=$(( -DIFF_BYTES ))
fi
DIFF_HUMAN=$(numfmt --to=iec --suffix=B "$ABS_DIFF" 2>/dev/null || echo "${ABS_DIFF} B")
fi
{
echo "## Docker image size"
echo ""
echo "| Image | Size |"
echo "|---|---|"
echo "| This PR | $PR_HUMAN |"
if [ "${{ steps.check-diff.outputs.changed }}" = "true" ]; then
echo "| Baseline (main) | $BASELINE_HUMAN |"
echo "| **Difference** | **${SIGN}${DIFF_HUMAN}** |"
fi
echo ""
echo "### PR layers"
echo ""
echo "| Layer | Size |"
echo "|---|---|"
docker history "sprisa/opencode:${TAG}" \
--format "| {{.CreatedSince}} | {{.Size}} |" \
--no-trunc | tail -n +2
} >> "$GITHUB_STEP_SUMMARY"
echo "pr: $PR_HUMAN ($PR_BYTES bytes)"
echo "pr-human=${PR_HUMAN}" >> "$GITHUB_OUTPUT"
echo "diff-human=${SIGN}${DIFF_HUMAN}" >> "$GITHUB_OUTPUT"
- name: Comment on PR
if: github.event_name == 'pull_request'
env:
GH_TOKEN: ${{ github.token }}
run: |
PR_HUMAN="${{ steps.pr-size.outputs.human }}"
BODY=$(cat <<EOF
## Docker image size
| Image | Size |
|---|---|
| This PR | $PR_HUMAN |
EOF
)
if [ "${{ steps.check-diff.outputs.changed }}" = "true" ]; then
BASELINE_HUMAN="${{ steps.baseline-size.outputs.human }}"
DIFF="${{ steps.compare.outputs.diff-human }}"
BODY=$(cat <<EOF
## Docker image size comparison
| Image | Size |
|---|---|
| Baseline (main) | $BASELINE_HUMAN |
| This PR | $PR_HUMAN |
| **Difference** | **${DIFF}** |
EOF
)
fi
cd head
gh pr comment "${{ github.event.number }}" \
--repo "${{ github.repository }}" \
--body "$BODY" --edit-last 2>/dev/null \
|| gh pr comment "${{ github.event.number }}" \
--repo "${{ github.repository }}" \
--body "$BODY"