Skip to content

Build PHP

Build PHP #65

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", "8.4"]
os: [ "macos-13", "macos-latest", "windows-latest", "ubuntu-latest", "ubuntu-24.04-arm" ]
continue-on-error: true
steps:
- uses: actions/checkout@v4
- name: Set SPC binary name
shell: bash
run: echo "SPC_BINARY=spc" >> $GITHUB_ENV
- name: Set SPC URL for macos-13
shell: bash
if: matrix.os == 'macos-13'
run: echo "SPC_URL=https://dl.static-php.dev/static-php-cli/spc-bin/nightly/spc-macos-x86_64" >> $GITHUB_ENV
- name: Set SPC URL for macos-latest
shell: bash
if: matrix.os == 'macos-latest'
run: echo "SPC_URL=https://dl.static-php.dev/static-php-cli/spc-bin/nightly/spc-macos-aarch64" >> $GITHUB_ENV
- name: Set SPC URL for ubuntu-latest and ubuntu-24.04
shell: bash
if: matrix.os == 'ubuntu-latest'
run: echo "SPC_URL=https://dl.static-php.dev/static-php-cli/spc-bin/nightly/spc-linux-x86_64" >> $GITHUB_ENV
- name: Set SPC URL for ubuntu-24.04-arm
shell: bash
if: matrix.os == 'ubuntu-24.04-arm'
run: echo "SPC_URL=https://dl.static-php.dev/static-php-cli/spc-bin/nightly/spc-linux-aarch64" >> $GITHUB_ENV
- name: Set SPC URL for windows-latest
shell: bash
if: matrix.os == 'windows-latest'
run: |
echo "SPC_URL=https://dl.static-php.dev/static-php-cli/spc-bin/nightly/spc-windows-x64.exe" >> $GITHUB_ENV
echo "SPC_BINARY=spc.exe" >> $GITHUB_ENV
- name: Download SPC
shell: bash
run: |
cd ..
curl -fsSL -o ${{ env.SPC_BINARY }} ${{ env.SPC_URL }}
chmod +x ${{ env.SPC_BINARY }}
[ ! -d static-php-cli/bin ] && mkdir -p static-php-cli/bin
mv ${{ env.SPC_BINARY }} static-php-cli/bin/
- name: Create php-bin directory
shell: bash
run: |
cd ..
[ ! -d php-bin ] && mkdir -p php-bin
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' || matrix.os == 'ubuntu-24.04-arm'
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' || matrix.os == 'ubuntu-24.04-arm'
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
- name: SPC doctor
run: |
cd ../static-php-cli
./bin/${{ env.SPC_BINARY }} 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/${{ env.SPC_BINARY }} 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/${{ env.SPC_BINARY }} 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: Create bin directories
shell: bash
run: |
mkdir -p bin/${{ env.SPC_BUILD_OS }}/${{ env.SPC_BUILD_ARCH }}
mkdir -p license-files
mkdir -p build-meta
- 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 -f 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