目录
前文
在记一次在搜索引擎举报垃圾内容文中,我搜索的内容是"在线编译php扩展",当时是为了构建php-ui扩展,想着偷懒不在本地搭建构建环境,能否在线上直接构建呢!会不会有人直接搭好环境我们提交代码运行就可以了呢?像js、php等在线运行可太常见了。不知道你看到这里想到了什么,或者是不是已经想到了好的办法。后面我将直接告诉你答案。
在线编译php扩展
事实上这个事情是存在的,而且很常见。在github上面有许多项目是有发布release的,也就是发行版本,其中的版本大部分都是自动化打包。以前接触的项目大部分都是前端js和php的项目,而发布的release基本就是混淆压缩过的压缩包。直到我打开swoole-src release Assets ——新世界的大门就此打开。
构建配置
cygwin.yml
nes (70 sloc) 2.93 KB
name: cygwin
on:
push:
tags:
- 'v*'
jobs:
build:
if: github.repository_owner == 'swoole'
runs-on: windows-latest
outputs:
version: ${{ steps.swoole_info.outputs.version }}
body: ${{ steps.swoole_info.outputs.upload_url }}
steps:
- name: Set up Cygwin
uses: egor-tensin/setup-cygwin@v3
with:
platform: x64
packages: cmake php php-devel gcc-g++ openssl libssl-devel libcurl-devel libpcre2-devel wget tar php-curl php-json php-sockets php-mysqli php-bcmath php-bz2 php-calendar php-ctype php-phar php-posix php-pspell php-exif php-recode php-fileinfo php-simplexml php-gd php-soap php-gettext php-sockets php-gmp php-gv php-iconv php-intl php-json php-tokenizer php-mbstring php-ming php-xmlreader php-xmlwriter php-opcache php-xsl php-zip php-pdo_mysql php-zlib php-redis
- name: Get Swoole Info
id: swoole_info
run: |
wget https://api.github.com/repos/swoole/swoole-src/releases/latest -O latest
$g=cat .\latest | ConvertFrom-Json
$version=$g.tag_name
$upload_url=$g.upload_url
echo $version
echo $upload_url
echo "::set-output name=version::$version"
echo "::set-output name=upload_url::$upload_url"
- name: Build Swoole
run: |
wget https://github.com/swoole/swoole-src/archive/${{ steps.swoole_info.outputs.version }}.tar.gz -O swoole.tar.gz
mkdir -p swoole
tar -xf swoole.tar.gz -C swoole --strip-components=1
rm swoole.tar.gz
cd swoole
/bin/phpize
./configure --enable-openssl --with-openssl_dir=/usr --enable-http2 --enable-mysqlnd
make -j6
cp modules/swoole.dll /usr/lib/php/20180731
echo 'extension=swoole.dll' > /etc/php.d/swoole.ini
php -v
php -m
php --ri swoole
php --ini
cd ..
shell: C:\tools\cygwin\bin\bash.exe --login --norc -eo pipefail -o igncr '{0}'
- name: Run build
env:
VERSION: ${{ steps.swoole_info.outputs.version }}
run: |
C:\tools\php\php.exe -v
C:\tools\php\php.exe -m
wget https://github.com/lufei/cygwin/archive/refs/heads/master.tar.gz -O cygwin.tar.gz
mkdir -p swoole-cygwin
tar -xf cygwin.tar.gz -C swoole-cygwin --strip-components=1
rm cygwin.tar.gz
cd swoole-cygwin
C:\tools\php\php.exe build.php
cd ..
- name: Upload Release Asset
id: upload-release-asset
uses: actions/upload-release-asset@v1
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
with:
upload_url: ${{ steps.swoole_info.outputs.upload_url }}
asset_path: .\swoole-cygwin\swoole-cygwin-${{ steps.swoole_info.outputs.version }}.zip
asset_name: swoole-cygwin-${{ steps.swoole_info.outputs.version }}.zip
asset_content_type: application/zip
注释已经写得很明白了:
- 初始化Cygwin环境
- 获取Swoole版本信息
- 拉取源码
- 构建
- 上传到github的release
我的php-ui呢
哈哈哈 我试过了,构建失败,折腾几次后也不没研究出是源码问题还是套用swoole这套方法不行。主要原因还是当初以为的bug并不存在,也就没有再编译测试的必要了。
收获
最大的收获是,局限的认知导致认知的局限,如果没有接触新的东西,去打破故有认知的禁锢,那我将在认知的围墙内迷茫与绝望。