feat: migrate from brew to zerobrew mise backend #73
Workflow file for this run
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
| # 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" |