123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190 |
- name: "CI on Unix"
- on:
- workflow_dispatch:
- inputs:
- os:
- required: true
- description: Build target OS
- type: choice
- options:
- - 'linux-x86_64'
- - 'linux-aarch64'
- - 'macos-x86_64'
- - 'macos-aarch64'
- php-version:
- required: true
- description: PHP version to compile
- default: '8.3'
- type: choice
- options:
- - '8.4'
- - '8.3'
- - '8.2'
- - '8.1'
- - '8.0'
- extensions:
- description: Extensions to build (comma separated)
- required: true
- type: string
- extra-libs:
- description: Extra libraries to build (optional, comma separated)
- type: string
- build-cli:
- description: Build cli binary
- default: true
- type: boolean
- build-micro:
- description: Build phpmicro binary
- type: boolean
- build-fpm:
- description: Build fpm binary
- type: boolean
- prefer-pre-built:
- description: Prefer pre-built binaries (reduce build time)
- type: boolean
- default: true
- debug:
- description: Show full build logs
- type: boolean
- no-strip:
- description: Keep debug symbols for debugging
- type: boolean
- default: false
- env:
- GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
- jobs:
- define-build:
- name: "Define Build Scripts"
- runs-on: ubuntu-latest
- outputs:
- run: ${{ steps.gendef.outputs.run }}
- download: ${{ steps.gendef.outputs.download }}
- build: ${{ steps.gendef.outputs.build }}
- steps:
- - name: "Checkout"
- uses: actions/checkout@v4
- - name: "Define"
- id: gendef
- run: |
- case "${{ inputs.os }}" in
- linux-x86_64)
- DOWN_CMD="./bin/spc-alpine-docker download"
- BUILD_CMD="./bin/spc-alpine-docker build"
- RUNS_ON="ubuntu-latest"
- ;;
- linux-aarch64)
- DOWN_CMD="SPC_USE_ARCH=aarch64 ./bin/spc-alpine-docker download"
- BUILD_CMD="SPC_USE_ARCH=aarch64 ./bin/spc-alpine-docker build"
- RUNS_ON="ubuntu-latest"
- ;;
- macos-x86_64)
- DOWN_CMD="composer update --no-dev --classmap-authoritative && ./bin/spc doctor --auto-fix && ./bin/spc download"
- BUILD_CMD="./bin/spc build"
- RUNS_ON="macos-13"
- ;;
- macos-aarch64)
- DOWN_CMD="composer update --no-dev --classmap-authoritative && ./bin/spc doctor --auto-fix && ./bin/spc download"
- BUILD_CMD="./bin/spc build"
- RUNS_ON="macos-14"
- ;;
- esac
- DOWN_CMD="$DOWN_CMD --with-php=${{ inputs.php-version }} --for-extensions=${{ inputs.extensions }} --ignore-cache-sources=php-src"
- BUILD_CMD="$BUILD_CMD ${{ inputs.extensions }}"
- if [ -n "${{ inputs.extra-libs }}" ]; then
- DOWN_CMD="$DOWN_CMD --for-libs=${{ inputs.extra-libs }}"
- BUILD_CMD="$BUILD_CMD --with-libs=${{ inputs.extra-libs }}"
- fi
- if [ ${{ inputs.debug }} == true ]; then
- DOWN_CMD="$DOWN_CMD --debug"
- BUILD_CMD="$BUILD_CMD --debug"
- fi
- if [ ${{ inputs.prefer-pre-built }} == true ]; then
- DOWN_CMD="$DOWN_CMD --prefer-pre-built"
- fi
- if [ ${{ inputs.build-cli }} == true ]; then
- BUILD_CMD="$BUILD_CMD --build-cli"
- fi
- if [ ${{ inputs.build-micro }} == true ]; then
- BUILD_CMD="$BUILD_CMD --build-micro"
- fi
- if [ ${{ inputs.build-fpm }} == true ]; then
- BUILD_CMD="$BUILD_CMD --build-fpm"
- fi
- echo 'download='"$DOWN_CMD" >> "$GITHUB_OUTPUT"
- echo 'build='"$BUILD_CMD" >> "$GITHUB_OUTPUT"
- echo 'run='"$RUNS_ON" >> "$GITHUB_OUTPUT"
- build:
- name: "Build ${{ inputs.version }} on ${{ inputs.os }}"
- runs-on: ${{ needs.define-build.outputs.run }}
- needs: define-build
- timeout-minutes: 240
- steps:
- - name: "Checkout"
- uses: actions/checkout@v4
- - name: "Setup PHP"
- uses: shivammathur/setup-php@v2
- with:
- php-version: ${{ inputs.php-version }}
- tools: pecl, composer
- extensions: curl, openssl, mbstring
- ini-values: memory_limit=-1
- env:
- phpts: nts
- # Cache downloaded source
- - id: cache-download
- uses: actions/cache@v4
- with:
- path: downloads
- key: php-dependencies-${{ inputs.os }}
- - name: "Download sources"
- run: ${{ needs.define-build.outputs.download }}
- - name: "Build PHP"
- run: ${{ needs.define-build.outputs.build }}
- #- name: Setup tmate session
- # if: ${{ failure() }}
- # uses: mxschmitt/action-tmate@v3
- # Upload cli executable
- - if: ${{ inputs.build-cli == true }}
- name: "Upload PHP cli SAPI"
- uses: actions/upload-artifact@v4
- with:
- name: php-cli-${{ inputs.php-version }}-${{ inputs.os }}
- path: buildroot/bin/php
- # Upload micro self-extracted executable
- - if: ${{ inputs.build-micro == true }}
- name: "Upload PHP micro SAPI"
- uses: actions/upload-artifact@v4
- with:
- name: php-micro-${{ inputs.php-version }}-${{ inputs.os }}
- path: buildroot/bin/micro.sfx
- # Upload fpm executable
- - if: ${{ inputs.build-fpm == true }}
- name: "Upload PHP fpm SAPI"
- uses: actions/upload-artifact@v4
- with:
- name: php-fpm-${{ inputs.php-version }}-${{ inputs.os }}
- path: buildroot/bin/php-fpm
- # Upload extensions metadata
- - uses: actions/upload-artifact@v4
- name: "Upload License Files"
- with:
- name: license-files
- path: buildroot/license/
- - uses: actions/upload-artifact@v4
- name: "Upload Build Metadata"
- with:
- name: build-meta
- path: |
- buildroot/build-extensions.json
- buildroot/build-libraries.json
|