Build PHP #37
This file contains 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: 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 |