Skip to content

Build native php

Build native php #1735

name: build-php-cli-windows-cygwin
on:
push:
pull_request:
env:
BUILD_PHP_VERSION: 8.2.13
jobs:
windows-cygwin:
if: 1
runs-on: windows-latest
strategy:
matrix:
php-version:
- "8.2.13"
- "8.1.27"
- "8.3.3"
steps:
- name: Prepare git
run: |
git config --global core.autocrlf false
git config --global core.eol lf
env
ipconfig
uname -a
pwd
ipconfig /all
- uses: actions/checkout@v4
- name: set php version
# 参考文档: https://docs.github.com/zh/actions/using-workflows/workflow-syntax-for-github-actions#jobsjob_idstepsshell
shell: bash
run: |
echo "BUILD_PHP_VERSION=${{ matrix.php-version }}" >> $GITHUB_ENV
- name: Prepare submodule
run: |
ipconfig /all
# git submodule update --init
- name: Cache cygwin packages
id: cache-cygwin
uses: actions/cache@v4
env:
cache-name: cache-cygwin-packages
with:
path: C:\cygwin-packages
key: "${{ runner.os }}-build-${{ env.cache-name }}"
- name: Cache pool
id: cache-cygwin-pool
uses: actions/cache@v4
with:
path: "${{ github.workspace }}\\pool\\"
key: "${{ runner.os }}-build-pool-cache"
- name: Install Cygwin
uses: cygwin/cygwin-install-action@v2
# with:
# platform: x64
# packages: make wget tar libtool re2c bison gcc-g++ autoconf automake openssl libpcre2-devel libssl-devel libcurl-devel libxml2-devel libxslt-devel libgmp-devel ImageMagick libpng-devel libjpeg-devel libfreetype-devel libwebp-devel libsqlite3-devel zlib-devel libbz2-devel liblz4-devel liblzma-devel libzip-devel libicu-devel libonig-devel libcares-devel libsodium-devel libyaml-devel libMagick-devel libzstd-devel libbrotli-devel libreadline-devel libintl-devel libpq-devel libssh2-devel libidn2-devel gettext-devel coreutils openssl-devel zip unzip
- name: Install Cygwin Packages
shell: C:\cygwin\bin\bash.EXE --noprofile --norc -e -o pipefail -o igncr {0}
run: |
ls -lah /cygdrive/c/
ls -lah /cygdrive/d/
cp -f /cygdrive/c/setup.exe /cygdrive/c/cygwin/bin/setup-x86_64.exe
bash ./sapi/scripts/cygwin/install-cygwin.sh
- name: Install re2c
run: |
bash ./sapi/scripts/cygwin/install-re2c.sh
- name: Prepare
run: |
# git config --global --add safe.directory /cygdrive/d/a/swoole-cli/swoole-cli
# git submodule update --init
bash ./sapi/scripts/cygwin/cygwin-config-ext.sh --php-version ${{ env.BUILD_PHP_VERSION }}
- name: Configure
run: |
bash ./sapi/scripts/cygwin/cygwin-config.sh
- name: Build
run: |
bash ./sapi/scripts/cygwin/cygwin-build.sh
- name: Show Build Result
run: |
./bin/php.exe -v
./bin/php.exe -m
./bin/php.exe --ri pdo_pgsql
./bin/php.exe --ri swoole
./bin/php.exe -r "echo PHP_VERSION;"
- name: get app version with bash
# 参考 https://github.com/marketplace/actions/install-cygwin
shell: C:\cygwin\bin\bash.EXE --noprofile --norc -e -o pipefail -o igncr {0}
# shell: C:\cygwin\bin\bash.EXE --login --noprofile --norc -e -o pipefail -o igncr {0}
run: |
./bin/php.exe -v | awk '{print $2}'
APP_VERSION=$(./bin/php.exe -v | head -n 1 | awk '{print $2}')
echo $APP_VERSION
echo "APP_VERSION=${APP_VERSION}" >> $GITHUB_ENV
- name: get app version with PowerShell
run: |
./bin/php.exe -v
$cmdOutput=./bin/php.exe -v
$cmdOutput=$cmdOutput | select -first 1
$cmdOutput -match "(\d{1,2}\.\d{1,2}\.\d{1,2})"
$CYGWIN_APP_VERSION=$Matches[1]
echo $CYGWIN_APP_VERSION
echo "CYGWIN_APP_VERSION=$CYGWIN_APP_VERSION" >> $Env:GITHUB_ENV
# 参考 https://github.com/orgs/community/discussions/26641
# echo "APP_VERSION=${APP_VERSION}" >> $Env:GITHUB_ENV
# echo "APP_VERSION=$APP_VERSION" | Out-File -FilePath $env:GITHUB_ENV -Append
# Add-Content -Path $env:GITHUB_ENV -Value "name=$value"
# Add-Content -Path $env:GITHUB_ENV -Value "APP_VERSION=$APP_VERSION"
- name: Archive
run: |
bash ./sapi/scripts/cygwin/cygwin-archive.sh
- name: production artifacts
uses: actions/upload-artifact@v4
with:
name: php-cli-v${{ env.APP_VERSION }}-cygwin-x64
retention-days: 90
path: php-cli-v${{ env.APP_VERSION }}-cygwin-x64.zip
- name: gh release
uses: softprops/action-gh-release@v2
if: startsWith(github.ref, 'refs/tags/')
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
with:
files: php-cli-v${{ env.APP_VERSION }}-cygwin-x64.zip