Skip to content

Commit

Permalink
Fix PECL publish and windows CI (#85)
Browse files Browse the repository at this point in the history
  • Loading branch information
TingDaoK committed Mar 1, 2023
1 parent 56009e8 commit 442f385
Show file tree
Hide file tree
Showing 20 changed files with 399 additions and 247 deletions.
1 change: 0 additions & 1 deletion .clang-format-ignore
@@ -1,4 +1,3 @@
# ignore generated files
ext/api.h
ext/*_arginfo.h
src/api.h
112 changes: 72 additions & 40 deletions .github/workflows/ci.yml
Expand Up @@ -30,12 +30,6 @@ jobs:
with:
submodules: recursive

- name: Install ancient PHPUnit
run: composer require --dev --ignore-platform-reqs phpunit/phpunit "4.8.36"

- name: Install dependencies
run: composer update --no-interaction

- name: Build for PHP 5.5
env:
CC: clang
Expand All @@ -45,6 +39,12 @@ jobs:
./configure
make
- name: Install dependencies
# get path to composer.phar so we can run it with custom php.ini
run: |
COMPOSER_PHAR=$(realpath $(which composer))
php -c php.ini $COMPOSER_PHAR update --no-interaction
php-linux-x64:
runs-on: ubuntu-latest
strategy:
Expand All @@ -71,9 +71,6 @@ jobs:
with:
submodules: recursive

- name: Install dependencies
run: composer update --no-interaction

- name: Run tests
env:
CC: clang
Expand All @@ -82,37 +79,50 @@ jobs:
phpize
./configure
make
make test
# linux-arm:
# name: ARM (${{ matrix.arch }})
# runs-on: ubuntu-latest
# strategy:
# matrix:
# arch: [armv6, armv7, arm64]
# steps:
# - name: Build ${{ env.PACKAGE_NAME }}
# run: |
# python3 -c "from urllib.request import urlretrieve; urlretrieve('${{ env.BUILDER_HOST }}/${{ env.BUILDER_SOURCE }}/${{ env.BUILDER_VERSION }}/builder.pyz?run=${{ env.RUN }}', 'builder')"
# chmod a+x builder
# ./builder build -p ${{ env.PACKAGE_NAME }} --target=linux-${{ matrix.arch }} --spec=downstream

# windows-vc16:
# runs-on: windows-latest
# strategy:
# matrix:
# arch: [x64]
# steps:
# - uses: ilammy/msvc-dev-cmd@v1
# with:
# arch: ${{ matrix.arch }}
# uwp: false
# spectre: true
# - name: Build ${{ env.PACKAGE_NAME }} + consumers
# run: |
# python -c "from urllib.request import urlretrieve; urlretrieve('${{ env.BUILDER_HOST }}/${{ env.BUILDER_SOURCE }}/${{ env.BUILDER_VERSION }}/builder.pyz?run=${{ env.RUN }}', 'builder.pyz')"
# python builder.pyz build -p ${{ env.PACKAGE_NAME }} --spec=downstream
./dev-scripts/run_tests.sh
# linux-arm:
# name: ARM (${{ matrix.arch }})
# runs-on: ubuntu-latest
# strategy:
# matrix:
# arch: [armv6, armv7, arm64]
# steps:
# - name: Build ${{ env.PACKAGE_NAME }}
# run: |
# python3 -c "from urllib.request import urlretrieve; urlretrieve('${{ env.BUILDER_HOST }}/${{ env.BUILDER_SOURCE }}/${{ env.BUILDER_VERSION }}/builder.pyz?run=${{ env.RUN }}', 'builder')"
# chmod a+x builder
# ./builder build -p ${{ env.PACKAGE_NAME }} --target=linux-${{ matrix.arch }} --spec=downstream

windows-vc16:
runs-on: windows-2019
defaults:
run:
shell: cmd # use CMD instead of powershell to catch error from bat script
strategy:
matrix:
arch: [x64]
steps:
- uses: actions/checkout@v3
with:
submodules: recursive
- id: setup-php-sdk
uses: cmb69/setup-php-sdk@v0.6
with:
version: '8.0'
arch: ${{ matrix.arch }}
ts: ts
deps: openssl
- uses: ilammy/msvc-dev-cmd@v1
with:
arch: ${{ matrix.arch }}
toolset: ${{steps.setup-php-sdk.outputs.toolset}}
# not sure why CMD can't do multiline run statements
- run: phpize
- run: .\configure --with-prefix=${{steps.setup-php-sdk.outputs.prefix}} --enable-awscrt=shared --enable-cli --enable-openssl
- run: nmake
- run: nmake generate-php-ini
- run: .\dev-scripts\run_tests.bat ${{steps.setup-php-sdk.outputs.prefix}}\php

# windows-vc14:
# runs-on: windows-latest
Expand Down Expand Up @@ -154,3 +164,25 @@ jobs:
python3 -c "from urllib.request import urlretrieve; urlretrieve('${{ env.BUILDER_HOST }}/${{ env.BUILDER_SOURCE }}/${{ env.BUILDER_VERSION }}/builder.pyz?run=${{ env.RUN }}', 'builder')"
chmod a+x builder
./builder build -p ${{ env.PACKAGE_NAME }} --spec=downstream
pecl-package-test:
runs-on: ubuntu-latest
steps:
- name: Setup PHP
uses: shivammathur/setup-php@v2
with:
php-version: '8.0'

- name: Checkout
uses: actions/checkout@v2
with:
submodules: recursive

- name: Test PECL package build
run: |
python3 dev-scripts/prepare_pecl_release.py --name aws-crt --user aws-crt --version 1.0.0
tar -zxf *.tgz
cd awscrt-1.0.0
phpize
./configure
make
5 changes: 4 additions & 1 deletion .gitignore
@@ -1,4 +1,3 @@

# Created by https://www.toptal.com/developers/gitignore/api/autotools,cmake,phpstorm
# Edit at https://www.toptal.com/developers/gitignore?templates=autotools,cmake,phpstorm

Expand Down Expand Up @@ -182,6 +181,8 @@ fabric.properties
build/
configure.in
configure.ac
configure.bat
configure.js
mkinstalldirs
run-tests.php
Makefile.global
Expand All @@ -191,6 +192,7 @@ modules/
*.lo
config.h
config.nice
config.nice.bat
*.la
Makefile*
!Makefile.am
Expand All @@ -204,6 +206,7 @@ PHP-Parser*/
src/*.so
src/*.dylib
src/*.dll
/x64/

# ignoring output of package.xml as it needs to be generated from ./prepare_release.sh in each publishing
package.xml
Expand Down
16 changes: 7 additions & 9 deletions Makefile.frag
Expand Up @@ -27,8 +27,8 @@ CMAKE_BUILD = CMAKE_BUILD_PARALLEL_LEVEL='' $(CMAKE) --build
CMAKE_BUILD_TYPE ?= RelWithDebInfo
CMAKE_TARGET = --config $(CMAKE_BUILD_TYPE) --target install

all: extension
.PHONY: all extension
all: extension
.PHONY: all extension

# configure for static aws-crt-ffi.a
build/aws-crt-ffi-static/CMakeCache.txt:
Expand All @@ -46,19 +46,17 @@ ext/awscrt.lo: ext/awscrt.c

ext/awscrt.c: build/aws-crt-ffi-static/libaws-crt-ffi.a ext/api.h ext/awscrt_arginfo.h

ext/awscrt_arginfo.h: ext/awscrt.stub.php gen_stub.php
ext/awscrt_arginfo.h: awscrt.stub.php gen_stub.php
ifeq ($(GENERATE_STUBS),1)
# install awscrt.stub.php to ext/
cp -v awscrt.stub.php ext/awscrt.stub.php
# generate awscrt_arginfo.h
php gen_stub.php --minimal-arginfo ext/awscrt.stub.php
endif

# transform/install api.h from FFI lib
src/api.h: crt/aws-crt-ffi/src/api.h
php gen_api.php crt/aws-crt-ffi/src/api.h > src/api.h

# install api.h to ext/ as well
ext/api.h : src/api.h
cp -v src/api.h ext/api.h
ext/api.h : crt/aws-crt-ffi/src/api.h
php gen_api.php crt/aws-crt-ffi/src/api.h > ext/api.h

ext/php_aws_crt.h: ext/awscrt_arginfo.h ext/api.h

Expand Down
20 changes: 8 additions & 12 deletions Makefile.frag.w32
@@ -1,6 +1,5 @@

CMAKE=cmake.exe
COMPOSER_PHAR=C:\ProgramData\ComposerSetup\bin\composer.phar
PHP_BINARY=$(PHP_PREFIX)\php.exe

CMAKE_CONFIGURE = $(CMAKE) -DCMAKE_INSTALL_PREFIX=$(AWSCRT_DIR)\build\install -DCMAKE_PREFIX_PATH=$(AWSCRT_DIR)\build\install -DBUILD_TESTING=OFF -DCMAKE_BUILD_TYPE=$(CMAKE_BUILD_TYPE)
Expand All @@ -22,14 +21,11 @@ $(BUILD_DIR)\php_awscrt.dll: $(AWSCRT_DIR)\ext\awscrt.c
$(AWSCRT_DIR)\ext\awscrt.c: $(AWSCRT_DIR)\build\libaws-crt-ffi.lib $(AWSCRT_DIR)\ext\api.h $(AWSCRT_DIR)\ext\awscrt_arginfo.h

# transform\install api.h from FFI lib
$(AWSCRT_DIR)\src\api.h: $(AWSCRT_DIR)\crt\aws-crt-ffi\src\api.h
php $(AWSCRT_DIR)\gen_api.php $(AWSCRT_DIR)\crt\aws-crt-ffi\src\api.h > $(AWSCRT_DIR)\src\api.h

# install api.h to ext/ as well
$(AWSCRT_DIR)\ext\api.h : $(AWSCRT_DIR)\src\api.h
copy $(AWSCRT_DIR)\src\api.h $(AWSCRT_DIR)\ext\api.h

# Use PHPUnit to run tests
test-awscrt: install $(AWSCRT_DIR)\src\api.h $(BUILD_DIR)\php_awscrt.dll
$(PHP_BINARY) -c $(AWSCRT_DIR)\php-win.ini $(COMPOSER_PHAR) --working-dir=$(AWSCRT_DIR) update
$(PHP_BINARY) -c $(AWSCRT_DIR)\php-win.ini $(COMPOSER_PHAR) --working-dir=$(AWSCRT_DIR) run test-win
$(AWSCRT_DIR)\ext\api.h: $(AWSCRT_DIR)\crt\aws-crt-ffi\src\api.h
php $(AWSCRT_DIR)\gen_api.php $(AWSCRT_DIR)\crt\aws-crt-ffi\src\api.h > $(AWSCRT_DIR)\ext\api.h

# Get the dll directory to load
generate-php-ini:
@echo extension=$(BUILD_DIR)\php_awscrt.dll > php-win.ini
@echo extension=$(PHP_PREFIX)\ext\php_openssl.dll >> php-win.ini
@echo extension=$(PHP_PREFIX)\ext\php_mbstring.dll >> php-win.ini
File renamed without changes.
2 changes: 1 addition & 1 deletion builder.json
Expand Up @@ -32,6 +32,6 @@
"NO_INTERACTION": "1"
},
"test_steps": [
["./run_tests"]
["./dev-scripts/run_tests.sh"]
]
}
6 changes: 3 additions & 3 deletions composer.json
Expand Up @@ -11,7 +11,7 @@
}
],
"config": {
"platform": {"php": "5.6"}
"platform": {"php": "7.4"}
},
"minimum-stability": "alpha",
"require": {
Expand All @@ -26,9 +26,9 @@
]
},
"scripts": {
"test": "./run_tests",
"test": "./dev-scripts/run_tests",
"test-extension": "@test",
"test-win": "run_tests"
"test-win": ".\\dev-scripts\\run_tests.bat"
},
"license": "Apache-2.0"
}
59 changes: 59 additions & 0 deletions dev-scripts/cleanup_build.py
@@ -0,0 +1,59 @@
import os
import glob
import shutil

TOOLS_DIR = os.path.dirname(os.path.abspath(__file__))
WORK_DIR = os.path.join(TOOLS_DIR, '..')

# Remove specified directories
DIRS_TO_REMOVE = [
'.deps',
'.libs',
'build',
'include',
'modules',
'vendor',
'autom4te.cache']

# Remove specified files
FILES_TO_REMOVE = [
'Makefile',
'Makefile.fragments',
'Makefile.global',
'Makefile.objects',
'config.guess',
'config.h',
'config.h.in',
'config.log',
'config.nice',
'config.status',
'config.sub',
'configure',
'configure.in',
'configure.ac',
'install-sh',
'libtool',
'ltmain.sh',
'missing',
'mkinstalldirs',
'run-tests.php',
'awscrt.la',
'composer.lock',
'ext/awscrt.stub.php',
'acinclude.m4',
'aclocal.m4',
'**/*.lo',
'**/*.o',
'**/*.la',
'**/*.a',
'*.tgz']

os.chdir(WORK_DIR)


for directory in DIRS_TO_REMOVE:
shutil.rmtree(directory, ignore_errors=True)

for pattern in FILES_TO_REMOVE:
for filepath in glob.glob(pattern):
os.remove(filepath)
File renamed without changes.
File renamed without changes.

0 comments on commit 442f385

Please sign in to comment.