Skip to content

Build PHP

Build PHP #37

Workflow file for this run

name: Build PHP
permissions:
contents: write
pull-requests: write
on:
schedule:
# This will run weekly on Sunday at 00:00 UTC.
- cron: '0 0 * * 0'
workflow_dispatch:
env:
GITHUB_TOKEN: ${{ secrets.PAT }}
jobs:
build:
name: ${{ matrix.version }} ${{ matrix.os }}
runs-on: ${{ matrix.os }}
strategy:
matrix:
version: ["8.1", "8.2", "8.3"]
os: ["macos-13", "macos-latest", "windows-latest", "ubuntu-latest"]
continue-on-error: true
steps:
- uses: actions/checkout@v4
- name: Download SPC
shell: bash
run: |
cd ..
git clone https://github.com/crazywhalecc/static-php-cli.git
cd static-php-cli
git checkout main
cd ../php-bin
- shell: bash
run: |
PHP_VERSION=$(echo "${{ matrix.version }}" | cut -d. -f1,2)
echo "PHP_VERSION=$PHP_VERSION" >> $GITHUB_ENV
- shell: bash
run: echo "SPC_BUILD_ARCH=x64" >> $GITHUB_ENV
- shell: bash
if: matrix.os == 'macos-latest'
run: echo "SPC_BUILD_ARCH=arm64" >> $GITHUB_ENV
- shell: bash
if: matrix.os == 'macos-13'
run: echo "SPC_BUILD_ARCH=x86" >> $GITHUB_ENV
- shell: bash
if: contains(matrix.os, 'macos')
run: |
brew install automake gzip
echo "SPC_BUILD_OS=mac" >> $GITHUB_ENV
- shell: bash
if: matrix.os == 'windows-latest'
run: echo "SPC_BUILD_OS=win" >> $GITHUB_ENV
- shell: bash
if: matrix.os == 'ubuntu-latest'
run: echo "SPC_BUILD_OS=linux" >> $GITHUB_ENV
- name: Setup system PHP
uses: shivammathur/setup-php@v2
with:
php-version: 8.2
tools: pecl, composer
extensions: curl, openssl, mbstring, sodium, tokenizer
ini-values: memory_limit=-1
# Cache composer dependencies
- id: cache-spc-composer-deps
uses: actions/cache@v4
with:
path: ../static-php-cli/vendor
key: composer-dependencies
- name: Install SPC Composer dependencies
if: steps.cache-spc-composer-deps.outputs.cache-hit != 'true'
run: |
cd ../static-php-cli
composer update --no-dev --classmap-authoritative
cd ../php-bin
- name: SPC doctor
run: |
cd ../static-php-cli
./bin/spc doctor
cd ../php-bin
- name: Read PHP extensions from file
id: read-extensions
shell: bash
run: |
EXTENSIONS=$(php -r "echo trim(file_get_contents('php-extensions.txt'));")
EXT_HASH=$(php -r "echo md5(getenv('EXTENSIONS'));")
echo "PHP_EXTENSIONS=$EXTENSIONS" >> $GITHUB_ENV
echo "PHP_EXT_HASH=$EXT_HASH" >> $GITHUB_ENV
# Cache downloaded source
- id: cache-spc-downloads
uses: actions/cache@v4
with:
path: ../static-php-cli/downloads
key: spc-downloads-${{ env.PHP_EXT_HASH }}
- name: Download PHP extension sources
if: steps.cache-spc-downloads.outputs.cache-hit != 'true'
run: |
cd ../static-php-cli
./bin/spc download --with-php=${{ matrix.version }} --for-extensions "${{ env.PHP_EXTENSIONS }}" --prefer-pre-built
cd ../php-bin
- name: Build PHP
run: |
cd ../static-php-cli
./bin/spc build --build-cli "${{ env.PHP_EXTENSIONS }}"
cd ../php-bin
- name: Get built PHP version
shell: bash
run: |
if [[ "${{ matrix.os }}" == "windows-latest" ]]; then
PHP_VERSION_FULL=$(../static-php-cli/buildroot/bin/php.exe -r "echo PHP_VERSION;")
else
PHP_VERSION_FULL=$(../static-php-cli/buildroot/bin/php -r "echo PHP_VERSION;")
fi
echo "PHP_VERSION_FULL=$PHP_VERSION_FULL" >> $GITHUB_ENV
- name: Zip PHP binary, copy metadata
shell: bash
run: |
if [[ "${{ matrix.os }}" == "windows-latest" ]]; then
powershell Compress-Archive -Path "../static-php-cli/buildroot/bin/php.exe" -DestinationPath "bin/${{ env.SPC_BUILD_OS }}/${{ env.SPC_BUILD_ARCH }}/php-${{ env.PHP_VERSION }}.zip" -Force
else
rm bin/${{ env.SPC_BUILD_OS }}/${{ env.SPC_BUILD_ARCH }}/php-${{ env.PHP_VERSION }}.zip
mkdir -p tmp-bin
cp ../static-php-cli/buildroot/bin/php tmp-bin/
cd tmp-bin
zip ../bin/${{ env.SPC_BUILD_OS }}/${{ env.SPC_BUILD_ARCH }}/php-${{ env.PHP_VERSION }}.zip php
cd ..
rm -rf tmp-bin
fi
cp ../static-php-cli/buildroot/license/* license-files/
cp ../static-php-cli/buildroot/build-extensions.json build-meta/build-extensions-${{ env.SPC_BUILD_OS }}.json
cp ../static-php-cli/buildroot/build-libraries.json build-meta/build-libraries-${{ env.SPC_BUILD_OS }}.json
- name: Create Pull Request
uses: peter-evans/create-pull-request@v7
with:
branch: update-php-${{ env.PHP_VERSION }}-${{ env.SPC_BUILD_OS }}-${{ env.SPC_BUILD_ARCH }}
title: "Update PHP ${{ env.PHP_VERSION }} build for ${{ env.SPC_BUILD_OS }} ${{ env.SPC_BUILD_ARCH }}"
commit-message: "build"
body: |
PHP: ${{ env.PHP_VERSION_FULL }}
Exts: ${{ env.PHP_EXTENSIONS }}
OS: ${{ env.SPC_BUILD_OS }}
Arch: ${{ env.SPC_BUILD_ARCH }}
base: main